Тайм-аут работников Assistants API с помощью Django

Я использую assitants api с django, иногда я делаю запросы и получаю эти ошибки. Я использую бесплатный сервер в Render, я не знаю почему, но некоторые запросы занимают много времени, и мое веб-приложение продолжает ждать каждые .5 секунд, и я вывожу сообщение 'queue - "number_of_iteration"':

enter image description here

enter image description here


Код:

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 секунд и это сильно задерживает.

Как я могу решить эту проблему?

Вернуться на верх