# 🐛 BUG FIX: Download Media Automático ## Problema Identificado **Símbolo:** `[RESP-EMPTY]` ao chamar skill `download_media` sem solicitação **Reprodução:** ``` Mensagem: "a belmira... olha só beu ela já nem lembra de vc" ↓ Sistema acionou AUTOMATICAMENTE: download_media com URL do YouTube ↓ Resultado: [RESP-EMPTY] (resposta vazia) ``` ## Causa Raiz No arquivo `modules/api.py`, função `_execute_agent_loop` (linha 2915-2944): - O sistema executava **TODAS** as tool_calls geradas pelo LLM sem validação - Se o LLM visse uma URL no histórico observado (passivo), acionava `download_media` automaticamente - Não havia filtro para distinguir entre: 1. **Skills explicitamente solicitadas** (usuário pediu "baixa este vídeo") 2. **Skills executadas por contexto** (URL apareceu no histórico, LLM decidiu baixar "por iniciativa própria") ## Solução Implementada ### Filtro de Segurança: "Explicit Request Validation" ```python # ✅ NOVO: FILTRO CRÍTICO - Evita skills não solicitadas explicitamente auto_exec_blocked_skills = ["download_media", "generate_image"] filtered_tool_calls = [] for tc in tool_calls: should_execute = True if tc.name in auto_exec_blocked_skills: original_msg_lower = (original_message or "").lower() if tc.name == "download_media": # Procura por PEDIDOS EXPLÍCITOS do usuário: explicit_triggers = [ "baixa", "download", "baixar", "pega", "get", "url", "link", "media", "vídeo", "áudio", "audio", "imagem", "image", "foto", "picture" ] # Verifica se o histórico tem observações PASSIVAS (não solicitações) has_explicit_request = any(t in original_msg_lower for t in explicit_triggers) has_passive_observation = "[GRUPO |" in str(current_context) # Bloqueia se: Não há pedido explícito E histórico é passivo if not has_explicit_request and has_passive_observation: should_execute = False # ✅ BLOQUEADO! ``` ## Comportamento Antes vs Depois ### ANTES (❌ BUG) ``` [User]: "a belmira... olha só beu ela já nem lembra de vc" ↑ Mensagem simples, sem pedir download [AKIRA Histórico]: [GRUPO | Isaac]: $ytmp4 https://youtube.com/shorts/... [LLM gera]: tool_calls: [{name: "download_media", args: {url: "..."}}] [Sistema executa]: 🚀 Executando Skill: download_media... [RESP-EMPTY] ← RESPOSTA VAZIA, usuário confuso ``` ### DEPOIS (✅ CORRIGIDO) ``` [User]: "a belmira... olha só beu ela já nem lembra de vc" ↑ Mensagem simples, sem pedir download [AKIRA Histórico]: [GRUPO | Isaac]: $ytmp4 https://youtube.com/shorts/... [LLM gera]: tool_calls: [{name: "download_media", args: {url: "..."}}] [FILTRO VALIDA]: ✅ Verificando: skill "download_media" ✓ original_message contém trigger explícito? NÃO ✓ histórico é passivo ([GRUPO |])? SIM [DECISÃO]: 🚫 BLOQUEADO - Não há solicitação explícita! [Sistema responde]: ✅ Akira: "tua criação, tua responsabilidade, teu problema kkkk" (Resposta normal, sem execução de skill não solicitada) ``` ## Skills Protegidas Atualmente bloqueadas quando não solicitadas explicitamente: 1. **`download_media`** - Evita download automático de URLs em histórico 2. **`generate_image`** - Evita geração de imagens sem pedido ## Triggers Explícitos Aceitos Para `download_media`: - "baixa", "download", "baixar", "pega", "get", "url", "link" - "media", "vídeo", "áudio", "audio", "imagem", "image", "foto", "picture" Para `generate_image`: - "gera", "create", "draw", "faz", "desenha", "imagem", "image" - "foto", "picture", "ilustra" ## Impacto ✅ **Problemas Resolvidos:** - Sem mais execução de skills não solicitadas - Sem mais respostas vazias `[RESP-EMPTY]` - Akira não "halucina" ações baseado em histórico passivo - Melhor segurança: usuário deve ser explícito ⚠️ **Comportamento Mudado:** - Se usuário disser só "e aí" e há URL no histórico, skill NÃO executa - Necessário pedir explicitamente: "baixa aquele vídeo" ## Teste Manual ``` ✅ PASSOU: "baixa esse vídeo pra mim" → Executa download_media ✅ PASSOU: "e aí" → Não executa, retorna resposta normal ✅ PASSOU: "qual o seu propósito?" → Não executa, retorna resposta normal (mesmo com URL em [GRUPO | histórico]) ``` ## Ficheiro Modificado - `modules/api.py` (linhas 2915-3007) ## Deploy Commitado como: `fix: block auto-execution of download_media without explicit request` --- **Status:** ✅ CORRIGIDO **Data:** 2026-05-24 **Gravidade:** 🔴 CRÍTICA (afetava UX)