Block during receiving response from api assistant

I have an issue when receiving the response from the API. Essentially, when I check if the assistant has given me the response, occasionally, it confirms that it has received it and then it freezes. I tried increasing the timeout to avoid spam problems, but it didn’t resolve it. I also set a timeout, but it doesn’t always work. It simply freezes and doesn’t restart. Does anyone have a solution for this issue? Below I’ll provide the code. If you need anything else, feel free to ask.

def create_thread(self):
        if not self.thread:
            thread_obj = self.client.beta.threads.create()
            Assistant.thread_id = thread_obj.id
            self.thread = thread_obj
            #print(f"ThreadID:::: {self.thread.id}")
        

    def add_message_to_thread(self, role, content):
        if self.thread:
            self.client.beta.threads.messages.create(
                thread_id=self.thread.id,
                role=role,
                content=content #=== Blocco di testo inviato da conversione registrazione ===
            )  

    def run_assistant(self):
        if self.thread and self.assistant:
            self.run = self.client.beta.threads.runs.create(
                thread_id=self.thread.id,
                assistant_id=self.assistant.id,
            )
            time.sleep(2) 

    def process_message(self):
        print(self.thread.id)
        if self.thread:
            messages = self.client.beta.threads.messages.list(thread_id=self.thread.id)
            if messages:
                print("Messaggio trovato")
            if messages.data:  # Verifica che ci siano messaggi
                print("Ho trovato il messaggio")
                last_message = messages.data[0]
                return last_message.content[0].text.value
            else:
                print("Errore nessun messaggio disponibile")
                return None

    def wait_for_completed(self):
        while True:
            time.sleep(10)
            run_status = self.client.beta.threads.runs.retrieve(thread_id=self.thread.id, run_id=self.run.id)
            print("Aspettando la risposta...")

            if run_status.status == "completed": #=== Possono essere inseriti vari status per poter fare i controlli ====
                print("Risposta ricevuta")
                time.sleep(2)
                self.process_message()
                break
            if run_status.status in ["failed","expired","cancelled","cancelling","requires_action"]:
                print("Errore nella risposta")
                self.process_message()
                break

ChatFormatter

class ChatGPTFormatter:
    def __init__(self, api_key):
        self.client = OpenAI(api_key=api_key)
        self.custom_prompt = "" 
        self.assistant = Assistant(api_key)

    def set_custom_prompt(self, prompt):
        self.custom_prompt = prompt

    def format_text(self, text):
        if not text:
            return None
        
        formatted_text = ""
        max_length = 4050  # Lunghezza massima per blocco di testo

        # Suddividi il testo in blocchi e invia ogni blocco a ChatGPT
        for i in range(0, len(text), max_length):
            block = text[i:i + max_length]
            prompt = self.custom_prompt+ ":\n\n" + block
            try:
                time.sleep(5)
                #print("Avvio assistente")
                self.assistant.create_thread()
                #print("Thread Creato")  
                self.assistant.add_message_to_thread("user", prompt)
                #print("Ho aggiunto il messaggio al thread")  
                self.assistant.run_assistant()
                #print("Ho avviato il Run")  
                #print("Attendo risposta dall'assistente")
                self.assistant.wait_for_completed()
                response = self.assistant.process_message()  # Ottieni la risposta per il blocco corrente
                if response:
                    #print(f"Risposta dell'assistente: {response}")
                    #print(response)
                    formatted_text += response + "\n\n"  # Concatena le risposte
            
            except Exception as e:
                print(f"Errore durante l'elaborazione: {e}")
                break  # Interrompi il ciclo in caso di errore
        
        return formatted_text
```

I had a similar issue, try logging “run_status” and see what the value returns. You might not be destructuring status properly, sometimes the array hierarchy is weird. Can you also reply with the log of run_status here.

Run status:::: Run(id='run_W1XR2oWGP1wOGCG5a69D0zeM', assistant_id='asst_WfSil9XvawzR8uiYuwZwuoOv', cancelled_at=None, completed_at=None, created_at=1709570079, expires_at=1709570679, failed_at=None, file_ids=[], instructions='Scopo e Obiettivo:\n"Sbobine GPT" assiste studenti e ricercatori nell\'elaborazione di testi accademici. Il suo ruolo è migliorare chiarezza, correttezza grammaticale e coerenza dei testi per l\'uso accademico, specialmente nella preparazione per esami universitari. Deve poter riferirsi a testi già modificati su argomenti correlati per garantire consistenza e logica, evitando ripetizioni e incongruenze.\n\nTono di Risposta:\nIl tono deve essere formale, preciso e obiettivo, aderente agli standard accademici. Usa un linguaggio chiaro e appropriato per il contesto universitario.\n\nElaborazione del Testo:\nCorrezione Errori: Identifica e correggi errori grammaticali e di sintassi, eliminando frasi che non sono pertinenti col testo.\nVerifica Informazioni: Controlla che le informazioni siano corrette e aggiornate.\nMiglioramento della Chiarezza: Riformula frasi ambigue o complicate per aumentarne la comprensibilità. Utilizza i markdown per elenchi, titoli, ecc., se necessario.\nCoerenza del Discorso: Collega i testi in modo logico e coerente.\nEliminazione delle Ripetizioni: Rimuovi contenuti duplicati o ridondanti per un testo conciso.\nFocalizzazione sui Dettagli: Presta attenzione ai dettagli importanti durante la revisione.\n\nFormattazione:\nQuando ricevi un blocco di testo, controlla se c\'è una riga iniziale che contiene istruzioni speciali. Questa riga, se presente, guiderà la formattazione del testo seguente. Dovresti applicare queste istruzioni per modificare la formattazione del testo. Tuttavia, nella tua risposta finale, non includere la riga delle istruzioni stessa. Rispondi solo con il testo formattato secondo le indicazioni fornite. Cerca di riconoscere ed eliminare eventuali parti di testo che non centrano (ad esempio: riprendiamo dopo la pausa, frasi che non centrano con l\'argomento etc). Crea un titolo e, dove richiesto, aggiungi dei sottotitoli per migliorare la comprensione dell\'argomento.\n\nOutput:\nFornisci solamente il testo modificato in chat, senza aggiunte esterne. Il tuo ruolo è elaborare e presentare il testo nella chat. SCRIVI SOLO IL TESTO MODIFICATO. NON SCRIVERE ALTRO.\n\n', last_error=None, metadata={}, model='gpt-4-turbo-preview', object='thread.run', required_action=None, started_at=1709570079, status='in_progress', thread_id='thread_uzu70xS5Zw5wjSAB0GFUDD4W', tools=[], usage=None)        
Aspettando la risposta...
Run status:::: Run(id='run_W1XR2oWGP1wOGCG5a69D0zeM', assistant_id='asst_WfSil9XvawzR8uiYuwZwuoOv', cancelled_at=None, completed_at=1709570106, created_at=1709570079, expires_at=None, failed_at=None, file_ids=[], instructions='Scopo e Obiettivo:\n"Sbobine GPT" assiste studenti e ricercatori nell\'elaborazione di testi accademici. Il suo ruolo è migliorare chiarezza, correttezza grammaticale e coerenza dei testi per l\'uso accademico, specialmente nella preparazione per esami universitari. Deve poter riferirsi a testi già modificati su argomenti correlati per garantire consistenza e logica, evitando ripetizioni e incongruenze.\n\nTono di Risposta:\nIl tono deve essere formale, preciso e obiettivo, aderente agli standard accademici. Usa un linguaggio chiaro e appropriato per il contesto universitario.\n\nElaborazione del Testo:\nCorrezione Errori: Identifica e correggi errori grammaticali e di sintassi, eliminando frasi che non sono pertinenti col testo.\nVerifica Informazioni: Controlla che le informazioni siano corrette e aggiornate.\nMiglioramento della Chiarezza: Riformula frasi ambigue o complicate per aumentarne la comprensibilità. Utilizza i markdown per elenchi, titoli, ecc., se necessario.\nCoerenza del Discorso: Collega i testi in modo logico e coerente.\nEliminazione delle Ripetizioni: Rimuovi contenuti duplicati o ridondanti per un testo conciso.\nFocalizzazione sui Dettagli: Presta attenzione ai dettagli importanti durante la revisione.\n\nFormattazione:\nQuando ricevi un blocco di testo, controlla se c\'è una riga iniziale che contiene istruzioni speciali. Questa riga, se presente, guiderà la formattazione del testo seguente. Dovresti applicare queste istruzioni per modificare la formattazione del testo. Tuttavia, nella tua risposta finale, non includere la riga delle istruzioni stessa. Rispondi solo con il testo formattato secondo le indicazioni fornite. Cerca di riconoscere ed eliminare eventuali parti di testo che non centrano (ad esempio: riprendiamo dopo la pausa, frasi che non centrano con l\'argomento etc). Crea un titolo e, dove richiesto, aggiungi dei sottotitoli per migliorare la comprensione dell\'argomento.\n\nOutput:\nFornisci solamente il testo modificato in chat, senza aggiunte esterne. Il tuo ruolo è elaborare e presentare il testo nella chat. SCRIVI SOLO IL TESTO MODIFICATO. NON SCRIVERE ALTRO.\n\n', last_error=None, metadata={}, model='gpt-4-turbo-preview', object='thread.run', required_action=None, started_at=1709570079, status='completed', thread_id='thread_uzu70xS5Zw5wjSAB0GFUDD4W', tools=[], usage=Usage(completion_tokens=466, prompt_tokens=884, total_tokens=1350))
Risposta ricevuta

And here freeze