diff --git a/ai_agent.py b/ai_agent.py index ecb787c..4a60a70 100644 --- a/ai_agent.py +++ b/ai_agent.py @@ -3,7 +3,8 @@ import re import httpx import asyncio import json -from tools import AVAILABLE_TOOLS +from tools import AVAILABLE_TOOLS as TOOLS_LEGACY +from tools_v2 import TOOLS_V2 as TOOLS_NEW from llm_providers import call_llm, get_available_models, get_planner_llm from config import get_config @@ -26,7 +27,9 @@ def query_agent(prompt: str, override_provider=None, chat_history=None) -> str: async def query_agent_async(prompt: str, override_provider=None, chat_history=None) -> str: cfg = get_config() provider = override_provider or cfg.get("active_provider", "openrouter") - tools_desc = "\n".join([f"- {k}: {v['description']}" for k, v in AVAILABLE_TOOLS.items()]) + # Unifica ferramentas legadas e novas + ALL_TOOLS = {**TOOLS_LEGACY, **TOOLS_NEW} + tools_desc = "\n".join([f"- {k}: {v.get('description') or v.get('desc')}" for k, v in ALL_TOOLS.items()]) system_prompt = f"""Você é o Antigravity, um assistente de IA de alto desempenho operando na VPS do Marcos. Sua natureza é dual: @@ -85,11 +88,23 @@ DIRETRIZES: arg = content_after[:end_tag.start()].strip() if end_tag else content_after.strip() - if t_name in AVAILABLE_TOOLS: - func = AVAILABLE_TOOLS[t_name]["func"] + all_tools = {**TOOLS_LEGACY, **TOOLS_NEW} + if t_name in all_tools: + tool_info = all_tools[t_name] + func = tool_info["func"] print(f"[AGENT] Executando {t_name} com argumento: {arg[:50]}...") - obs = func(arg) if arg else func() - print(f"[TOOL:{t_name}] Observation: {obs[:100]}...") + + # Execução (suporta async se necessário, embora tools.py seja sync) + if asyncio.iscoroutinefunction(func): + obs = await func(arg) if arg else await func() + else: + obs = func(arg) if arg else func() + + # Se o resultado for um dicionário (comum em tools_v2), extrai o output ou converte para string + if isinstance(obs, dict): + obs = obs.get("output") or obs.get("message") or str(obs) + + print(f"[TOOL:{t_name}] Observation: {str(obs)[:100]}...") if len(str(obs)) > 3000: obs = str(obs)[:3000] + "... [TRUNCATED]" diff --git a/tools_v2.py b/tools_v2.py index 4405c00..d90d88d 100644 --- a/tools_v2.py +++ b/tools_v2.py @@ -168,7 +168,7 @@ class WorkspaceTools: @staticmethod def coolify_deploy_status() -> str: """Consulta os últimos 5 deploies registrados no Coolify via banco de dados.""" - cmd = 'docker exec coolify psql -U coolify -d coolify -c "SELECT p.name as project, a.name as application, d.status, d.updated_at FROM deployments d JOIN applications a ON d.application_id = a.id JOIN projects p ON a.project_id = p.id ORDER BY d.updated_at DESC LIMIT 5;"' + cmd = 'docker exec coolify-db psql -U coolify -d coolify -c "SELECT application_name as application, status, created_at FROM application_deployment_queues ORDER BY created_at DESC LIMIT 5;"' return run_bash(cmd)["output"] # ============================================================