Model consistency fix: sticking to fallback model once triggered and removing duplicate code

This commit is contained in:
2026-05-01 14:34:33 +00:00
parent c32d4c47e8
commit 59dbd02d8d

View File

@@ -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