Как сохранить объект llm_client в Redis с помощью FastAPI, используя Pickle или Dill?Python

Программы на Python
Ответить
Anonymous
 Как сохранить объект llm_client в Redis с помощью FastAPI, используя Pickle или Dill?

Сообщение Anonymous »

Я работаю над приложением FastAPI, в котором мне нужно сохранить объект Azure OpenAI llm_client в Redis вместе с некоторыми данными сеанса и установить срок действия. Сначала я пытался использовать Pickle для сериализации, но столкнулся с ошибкой. Затем я попытался использовать dill, надеясь, что он лучше справится с сериализацией, но столкнулся с другой проблемой.

Вот код, который я использовал с Pickle:

Код: Выделить всё

import redis
import pickle
from openai import AzureOpenAI

# Initialize Redis client
redis_client = redis.Redis(
host='redis-13661.c212.ap-south-1-1.ec2.redns.redis-cloud.com',
port=13661,
password="*******",
username="default"
)

# Initialize llm_client
client = AzureOpenAI(
azure_endpoint="https://my-openai-endpoint.azure.com/",
api_key="*******",
api_version="2024-02-01"
)

# Store session data in Redis with an expiration time of 1 hour
session_data = {"llm_client": client}
session_id = "1234"
redis_client.hmset(session_id, 3600, pickle.dumps(session_data))
Когда я запускаю это, я получаю следующую ошибку:

Код: Выделить всё

TypeError: cannot pickle '_thread.RLock' object
Затем я попробовал использовать укроп вместо маринованных огурцов:

Код: Выделить всё

import redis
import dill
from openai import AzureOpenAI

# Initialize Redis client
redis_client = redis.Redis(
host='redis-13661.c212.ap-south-1-1.ec2.redns.redis-cloud.com',
port=13661,
password="*******",
username="default"
)

# Initialize llm_client
client = AzureOpenAI(
azure_endpoint="https://my-openai-endpoint.azure.com/",
api_key="*******",
api_version="2024-02-01"
)

# Store session data in Redis with an expiration time of 1 hour
session_data = {"llm_client": client}
session_id = "1234"
redis_client.hmset(session_id, 3600, dill.dumps(session_data))
Однако это также приводит к аналогичной ошибке:

Код: Выделить всё

TypeError: cannot pickle 'SSLContext' object
Что я пробовал
  • Использование Pickle: результаты в _thread.RLock ошибка, вероятно, из-за блокировки объектов в llm_client.
  • Использование dill: приводит к ошибке SSLContext, что предполагает, что dill< /code> также не может обрабатывать определенные объекты в llm_client.

Мой вопрос

  • Есть ли способ сериализовать объект llm_client для хранения в Redis?
  • Существуют ли альтернативные подходы для обработки неконфигурируемых объектов в Redis, например исключить их и реконструировать объект после извлечения?

    Будем очень признательны за любые рекомендации или предложения по передовому опыту.


Подробнее здесь: https://stackoverflow.com/questions/791 ... le-or-dill
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»