Spaces:
Running
Running
| # 🐛 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) | |