Тайм-аут работников Assistants API с помощью Django
Я использую assitants api с django, иногда я делаю запросы и получаю эти ошибки. Я использую бесплатный сервер в Render, я не знаю почему, но некоторые запросы занимают много времени, и мое веб-приложение продолжает ждать каждые .5 секунд, и я вывожу сообщение 'queue - "number_of_iteration"':
Код:
async def send_message(thread_id:str, message:str):
# Making prompt
prompt = await PromptManager.read_prompt('prompt_message')
prompt_result = PromptManager.fill_out_prompt(prompt, {'message':message})
# Sending prompt message
await OpenAISingleton.create_message(thread_id, prompt_result)
run = await OpenAISingleton.run_thread(thread_id)
# Getting answer
return await OpenAISingleton.retrieve_message(run, thread_id)
class OpenAISingleton():
__client = None
@classmethod
def __get_connection(self):
"""
This method create our client and give us a new thread
"""
client = AsyncOpenAI(api_key=settings.OPENAI_API_KEY,)
return client
def __new__(cls, *args, **kwargs):
if cls.__client==None:
# making connection
cls.__client = cls.__get_connection()
return cls.__client
@classmethod
async def create_message(cls, thread_id:str, message:str):
"""
This method create a new message in the assistant
"""
message = await cls.__client.beta.threads.messages.create(
thread_id=thread_id,
role="user",
content=message
)
return message
@classmethod
async def run_thread(cls, thread_id:str):
"""
This method run our thread to process a response the answer from the assistant
"""
run = await cls.__client.beta.threads.runs.create(
thread_id=thread_id,
assistant_id=settings.ASSISTANT_ID
)
i = 0
while run.status == "queued" or run.status == "in_progress":
run = await cls.__client.beta.threads.runs.retrieve(
thread_id=thread_id,
run_id=run.id,
)
print(f'{run.status} - {i}')
i+=1
time.sleep(0.1)
#if run.status=='failed':
# print(run.last_error)
# print(run.last_error.code)
return run
@classmethod
async def retrieve_message(cls, run, thread_id:str):
"""
This method return the answer from the assistant
"""
message = {'data':{}, 'status_code':HTTPStatus.OK}
if run.status=='failed' and run.last_error.code=='rate_limit_exceeded':
message['data'] = {'msg':'Error, el límite de cuota ha sido alcanzado, por favor verifique su crédito', 'error':'rate_limit_exceeded'}
message['status_code'] = HTTPStatus.PAYMENT_REQUIRED
return message
messages = (await cls.__client.beta.threads.messages.list(
thread_id=thread_id
)).data[0].content
if len(messages)==1:
message['data'] = {'msg':messages[0].text.value}
else:
image = messages[0]
image_file_id = image.image_file.file_id
image_file = await cls.__client.files.content(image_file_id)
# ImageFileContentBlock - TextContentBlock
message['data'] = {'img':base64.b64encode(image_file.read()).decode('utf-8'), 'msg':messages[1].text.value}
return message
"""
WSGI config for config project.
It exposes the WSGI callable as a module-level variable named ``application``.
For more information on this file, see
https://docs.djangoproject.com/en/5.0/howto/deployment/wsgi/
"""
import os
from django.core.wsgi import get_wsgi_application
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'config.settings.local')
application = get_wsgi_application()
ChatGPT ожидает много времени в некоторых запросах, я делаю некоторые отпечатки за .5 секунд и это сильно задерживает.
Как я могу решить эту проблему?