From 59dbd02d8d232133954839f54783350bd4525490 Mon Sep 17 00:00:00 2001 From: admtracksteel Date: Fri, 1 May 2026 14:34:33 +0000 Subject: [PATCH] Model consistency fix: sticking to fallback model once triggered and removing duplicate code --- ai_agent.py | 38 +++++++++++++++++++------------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/ai_agent.py b/ai_agent.py index 5e08f70..ee1167e 100644 --- a/ai_agent.py +++ b/ai_agent.py @@ -83,40 +83,40 @@ DIRETRIZES: final_model = current_model for i in range(max_iterations): - print(f"[AGENT] Iteração {i+1} - Enviando para {provider} (modelo padrão: {current_model})...") + print(f"[AGENT] Iteração {i+1} - Enviando para {provider} (modelo: {current_model})...") try: res_dict = await call_llm(provider, current_model, system_prompt + current_history) - # Lógica de FALLBACK: Se o Nemotron falhar, tenta o Qwen - if (res_dict.get("content", "").startswith("Erro OpenRouter") or "error" in res_dict.get("content", "").lower()) and provider == "openrouter": + # Lógica de FALLBACK: Se o modelo atual falhar, tenta o Qwen e FIXA nele + if (res_dict.get("content", "").startswith("Erro OpenRouter") or "error" in res_dict.get("content", "").lower()) and provider == "openrouter" and current_model != "qwen/qwen-2.5-72b-instruct": backup_model = "qwen/qwen-2.5-72b-instruct" - print(f"⚠️ [FALLBACK] Falha no Nemotron. Tentando {backup_model}...") + print(f"⚠️ [FALLBACK] Falha no {current_model}. Migrando para {backup_model}...") res_dict = await call_llm("openrouter", backup_model, system_prompt + current_history) + current_model = backup_model # Fixa no backup para as próximas iterações except Exception as e: - # Lógica de EMERGÊNCIA: Se houver exceção no Nemotron, tenta o Qwen - print(f"⚠️ [EMERGENCY FALLBACK] Exceção no Nemotron ({str(e)}). Tentando {backup_model}...") - try: + # Lógica de EMERGÊNCIA: Se houver exceção, tenta o Qwen e fixa nele + if current_model != "qwen/qwen-2.5-72b-instruct": backup_model = "qwen/qwen-2.5-72b-instruct" - res_dict = await call_llm("openrouter", backup_model, system_prompt + current_history) - except: - return f"RESUMO: ❌ Desculpe, os modelos Nemotron e Qwen estão instáveis no OpenRouter no momento. Por favor, tente novamente em instantes." + print(f"⚠️ [EMERGENCY FALLBACK] Exceção no {current_model} ({str(e)}). Migrando para {backup_model}...") + try: + res_dict = await call_llm("openrouter", backup_model, system_prompt + current_history) + current_model = backup_model + except: + return f"RESUMO: ❌ Desculpe, instabilidade crítica no OpenRouter. Por favor, tente novamente." + else: + return f"Erro Crítico no Agente: {str(e)}" response = res_dict.get("content", "Erro: Resposta vazia.") - # Limpeza de segurança: Se a resposta for um erro técnico persistente - if response.startswith("Erro OpenRouter"): - return f"RESUMO: ⚠️ Instabilidade no OpenRouter (Nemotron/Qwen):\n`{response[:200]}...`\n\nPor favor, tente reenviar sua mensagem." - - # Limpeza de segurança: Se a resposta for um erro técnico persistente - if response.startswith("Erro OpenRouter"): - return f"RESUMO: ⚠️ Instabilidade no OpenRouter (Nemotron/Qwen):\n`{response[:200]}...`\n\nPor favor, tente reenviar sua mensagem." + # Se após o fallback ainda houver erro do OpenRouter, aborta com aviso amigável + if response.startswith("Erro OpenRouter") and current_model == "qwen/qwen-2.5-72b-instruct": + return f"RESUMO: ⚠️ O OpenRouter está com instabilidade severa hoje (Erro 400). Por favor, tente novamente em alguns instantes." - usage = res_dict.get("usage", {}) usage = res_dict.get("usage", {}) total_in += usage.get("prompt_tokens", 0) total_out += usage.get("completion_tokens", 0) - final_model = res_dict.get("model", final_model) + final_model = res_dict.get("model", current_model) print(f"[LLM RESPONSE]: {response}") # Regex mais flexível: tenta casar [TOOL:nome] e extrair o conteúdo até [/TOOL] ou final da string