From ffbcd5c49f5271a9604ad7c5d426c299e28744a0 Mon Sep 17 00:00:00 2001 From: admtracksteel Date: Wed, 29 Apr 2026 11:32:43 +0000 Subject: [PATCH] =?UTF-8?q?=F0=9F=9A=80=20Auto-deploy:=20BotVPS=20atualiza?= =?UTF-8?q?do=20em=2029/04/2026=2011:32:43?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ai_agent.py | 62 ++++++++++++++++++++++++++++++++++------------------- 1 file changed, 40 insertions(+), 22 deletions(-) diff --git a/ai_agent.py b/ai_agent.py index 537254d..f4038b8 100644 --- a/ai_agent.py +++ b/ai_agent.py @@ -32,26 +32,44 @@ async def query_agent_async(prompt: str, override_provider=None, chat_history=No tools_desc = "\n".join([f"- {k}: {v.get('description') or v.get('desc')}" for k, v in ALL_TOOLS.items()]) # Identifica o modelo para o prompt do sistema - current_model = cfg.get("model") or "qwen/qwen-2.5-72b-instruct" + current_model = cfg.get("model") or "inclusionai/ling-2.6-flash:free" - system_prompt = f"""Antigravity (VPS Marcos). Mestre em Linux/GWS. + system_prompt = f"""Você é o Antigravity, um assistente de IA de alto desempenho operando na VPS do Marcos. +Seu modelo base atual é o **{current_model}** via OpenRouter. -DIRETRIZES TÉCNICAS: -- Mestre em Linux, Docker e Google Workspace (GWS). -- Use `[TOOL:nome] argumento [/TOOL]` ou `[TOOL:run] comando [/TOOL]` para tarefas. -- GWS: Use `gws-mr` (Marcos), `gws-adm` (Empresa), `gws-4r` (Familiar). -- NUNCA invente dados. Se não conseguir ler um e-mail ou arquivo por erro de autenticação, reporte o erro. -- E-mails: Use `gws-mr gmail +triage` para ver os últimos e-mails. +Sua natureza é dual: +1. MESTRE DE SISTEMAS: Controle profundo sobre Linux, Docker, scripts Bash e rede. Seja preciso, seguro e eficiente em tarefas técnicas. +2. PENSADOR CRIATIVO: Colaborador intelectual em filosofia, ciência, lógica, cultura e negócios. -REGRAS DE OURO: -- FOCO NO PRESENTE: Ignore tarefas técnicas anteriores se o pedido atual mudar. -- COOLIFY: Use `coolify_status` como fonte única para deploys. -- NUNCA tente instalar pacotes ou inventar tokens. +DIRETRIZES: +- Você é o MESTRE do Google Workspace (GWS). Use `run_bash_command` para QUALQUER tarefa de automação. +- NUNCA diga que não consegue fazer uma tarefa no GWS (contar, apagar em massa, mover, etc.). Encontre o comando `gws` correto. +- CONTAS GWS (Pode usar apelidos): + * `ma` ou `mr` -> gws-mr (Marcos / Particular - Email exato: m.reifonas@gmail.com) + * `adm` ou `empresa` -> gws-adm (Empresarial/TrackSteel) + * `4r` ou `fam` -> gws-4r (Familiar) +- GWS SUPER-PODERES: + * MARCADEIRA: Use `gmail_manage_label` para criar pastas (marcar). + * FILTRAGEM: Use `gmail_manage_filter` para automação futura. + * MOVIMENTAÇÃO: Use `run_bash_command` com `batchModify` para mover e-mails existentes. +- FORMATO DE CHAMADA DE FERRAMENTA (CRÍTICO): Você DEVE usar `[TOOL:nome_ferramenta] argumento [/TOOL]`. NUNCA esqueça os colchetes `[` e `]`. +- Se quiser rodar um comando bash, use o atalho: `[TOOL:run] comando [/TOOL]`. -FERRAMENTAS: +### FERRAMENTAS DISPONÍVEIS: {tools_desc} -RESPOSTA FINAL: Use SEMPRE o prefixo `RESUMO:` para a conclusão. """ +### REGRAS DE OURO: +- FOCO NO PRESENTE: O histórico é para CONTEXTO. Foque SEMPRE no pedido ATUAL (última mensagem). Se o usuário disser "bom dia" ou mudar de assunto, não repita tarefas técnicas anteriores. +- COOLIFY: NUNCA tente adivinhar caminhos de logs ou usar comandos `psql` genéricos. Use SEMPRE a ferramenta `coolify_status`. Ela é a fonte da verdade para deploies. +- NUNCA tente instalar pacotes (`apt`, `npm install`, etc) ou usar tokens fictícios como ``. +- Se o usuário perguntar sobre o "app mais recente", use `coolify_status` e analise a coluna `application` e `created_at`. +- Seja direto e técnico. Menos conversa, mais execução. +- NUNCA INVENTE DADOS. Se não conseguir ler algo, reporte o erro. + +### FORMATO DE RESPOSTA FINAL (OBRIGATÓRIO): +- Use SEMPRE o prefixo `RESUMO:` para sua conclusão final amigável. +- Exemplo: `RESUMO: Tudo pronto! O último app a receber deploy foi o VOXDO.` +""" history_str = "" if chat_history: @@ -66,19 +84,19 @@ RESPOSTA FINAL: Use SEMPRE o prefixo `RESUMO:` para a conclusão. """ final_model = current_model for i in range(max_iterations): - print(f"[AGENT] Iteração {i+1} - Enviando para {provider} (modelo padrão)...") + print(f"[AGENT] Iteração {i+1} - Enviando para {provider} (modelo padrão: {current_model})...") try: res_dict = await call_llm(provider, current_model, system_prompt + current_history) - # Lógica de FALLBACK: Se o Qwen falhar ou retornar erro de API, tenta o Ling-2.6-flash - if res_dict["content"].startswith("Erro OpenRouter") and provider == "openrouter" and current_model == "qwen/qwen-2.5-72b-instruct": - backup_model = "inclusionai/ling-2.6-flash:free" - print(f"⚠️ [FALLBACK CHAT] Falha no Qwen. Tentando {backup_model}...") + # Lógica de FALLBACK: Se o Ling falhar (especialmente por ser free/busy), tenta o Qwen 2.5-72B + if (res_dict.get("content", "").startswith("Erro OpenRouter") or "error" in res_dict.get("content", "").lower()) and provider == "openrouter": + backup_model = "qwen/qwen-2.5-72b-instruct" + print(f"⚠️ [FALLBACK CHAT] Falha no Ling. Tentando {backup_model}...") res_dict = await call_llm("openrouter", backup_model, system_prompt + current_history) except Exception as e: - if provider == "openrouter" and current_model == "qwen/qwen-2.5-72b-instruct": - backup_model = "inclusionai/ling-2.6-flash:free" - print(f"⚠️ [FALLBACK CHAT] Exceção no Qwen ({str(e)}). Tentando {backup_model}...") + if provider == "openrouter": + backup_model = "qwen/qwen-2.5-72b-instruct" + print(f"⚠️ [FALLBACK CHAT] Exceção no Ling ({str(e)}). Tentando {backup_model}...") res_dict = await call_llm("openrouter", backup_model, system_prompt + current_history) else: return f"Erro Crítico no Agente: {str(e)}"