Spaces:
Starting
Starting
| """ | |
| βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| CHECKLIST DE IMPLEMENTAΓΓO β PASSO A PASSO | |
| βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| Guia prΓ‘tico para aplicar a soluΓ§Γ£o no seu ambiente | |
| """ | |
| # βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| # FASE 1: PREPARAΓΓO (30 minutos) | |
| # βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| FASE1 = """ | |
| β PASSO 1.1: BACKUP DO CΓDIGO EXISTENTE | |
| βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| Local: i:\\Isaac Quarenta\\ProgramaΓ§Γ£o\\AKIRA-SOFTEDGE\\ | |
| β‘ Fazer backup de api.py | |
| cp modules/api.py modules/api.py.backup.$(date +%Y%m%d_%H%M%S) | |
| β‘ Fazer backup de database.py | |
| cp modules/database.py modules/database.py.backup.$(date +%Y%m%d_%H%M%S) | |
| β‘ Fazer backup de todo o diretΓ³rio modules/ | |
| ls -la modules/ > modules_backup_list.txt | |
| β PASSO 1.2: VERIFICAR NOVOS ARQUIVOS | |
| βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| β‘ context_manager_v2.py β EXISTS (jΓ‘ criado) | |
| β‘ listen_stream_processor.py β EXISTS (jΓ‘ criado) | |
| β‘ INTEGRATION_GUIDE.md β EXISTS (jΓ‘ criado) | |
| β‘ API_PATCH_DETAILED.md β EXISTS (jΓ‘ criado) | |
| β‘ test_context_isolation.py β EXISTS (jΓ‘ criado) | |
| β‘ SOLUCAO_ESCALAVEL_CONTEXT_ISOLATION.md β EXISTS (jΓ‘ criado) | |
| β‘ ARQUITETURA_VISUAL.txt β EXISTS (jΓ‘ criado) | |
| β PASSO 1.3: VERIFICAR DEPENDΓNCIAS PYTHON | |
| βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| NecessΓ‘rios (jΓ‘ devem existir): | |
| β‘ hashlib (built-in) | |
| β‘ threading (built-in) | |
| β‘ dataclasses (built-in) | |
| β‘ typing (built-in) | |
| β‘ datetime (built-in) | |
| β‘ enum (built-in) | |
| β‘ json (built-in) | |
| β‘ logging (built-in) | |
| β‘ re (built-in) | |
| β‘ time (built-in) | |
| Comandos para verificar: | |
| $ python -c "import hashlib, threading, dataclasses, enum; print('β Tudo OK')" | |
| β PASSO 1.4: REVISAR DOCUMENTAΓΓO | |
| βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| β‘ Ler ARQUITETURA_VISUAL.txt (compreender fluxo) | |
| β‘ Ler SOLUCAO_ESCALAVEL_CONTEXT_ISOLATION.md (entender problema/soluΓ§Γ£o) | |
| β‘ Ler INTEGRATION_GUIDE.md (entender integraΓ§Γ£o) | |
| β‘ Ler API_PATCH_DETAILED.md (ver modificaΓ§Γ΅es especΓficas) | |
| """ | |
| # βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| # FASE 2: TESTES (20 minutos) | |
| # βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| FASE2 = """ | |
| β PASSO 2.1: EXECUTAR TESTES ISOLADOS | |
| βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| LocaΓ§Γ£o: i:\\Isaac Quarenta\\ProgramaΓ§Γ£o\\AKIRA-SOFTEDGE\\ | |
| β‘ Execute os testes: | |
| cd AKIRA-SOFTEDGE | |
| python test_context_isolation.py | |
| Esperado: | |
| β TEST 1 PASSED | |
| β TEST 2 PASSED | |
| β TEST 3 PASSED | |
| β TEST 4 PASSED | |
| β TEST 5 PASSED | |
| π TODOS OS TESTES PASSARAM! | |
| Se falhar: | |
| - Verificar que context_manager_v2.py existe | |
| - Verificar que listen_stream_processor.py existe | |
| - Verificar que ambos estΓ£o em modules/ | |
| - Verificar mensagens de erro especΓficas | |
| β PASSO 2.2: TESTAR ISOLADAMENTE CADA MΓDULO | |
| βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| β‘ Testar context_manager_v2: | |
| python -c " | |
| from modules.context_manager_v2 import get_context_manager | |
| cm = get_context_manager() | |
| print('β ContextManagerV2 carregado') | |
| print(f'Stats: {cm.obter_stats()}') | |
| " | |
| β‘ Testar listen_stream_processor: | |
| python -c " | |
| from modules.listen_stream_processor import get_listen_processor | |
| lp = get_listen_processor() | |
| print('β ListenStreamProcessor carregado') | |
| resultado = lp.processar_mensagem_chegando({ | |
| 'usuario': 'teste', | |
| 'numero': '1234567890', | |
| 'texto': '@AKIRA teste', | |
| 'tipo_conversa': 'pv' | |
| }) | |
| print(f'Resultado: {resultado}') | |
| " | |
| Se tudo OK β continuar para Fase 3 | |
| β PASSO 2.3: VALIDAR ISOLAΓΓO | |
| βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| β‘ Executar test_context_isolation.py novamente | |
| β‘ Verificar que TEST 4 passa (isolaΓ§Γ£o Isaac vs StefΓ’nio) | |
| β‘ Se TEST 4 falhar, revisar logic em listen_stream_processor.py | |
| """ | |
| # βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| # FASE 3: INTEGRAΓΓO (45 minutos) | |
| # βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| FASE3 = """ | |
| β PASSO 3.1: ADICIONAR IMPORTS NO api.py | |
| βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| LocalizaΓ§Γ£o: modules/api.py (linha ~10-30) | |
| ANTES: | |
| ```python | |
| import json | |
| import hashlib | |
| import logging | |
| from skills_registry import SkillsRegistry | |
| ... | |
| ``` | |
| DEPOIS (ADICIONAR): | |
| ```python | |
| import json | |
| import hashlib | |
| import logging | |
| from skills_registry import SkillsRegistry | |
| # β NOVOS IMPORTS PARA CONTEXT V2 | |
| from modules.context_manager_v2 import ( | |
| ContextManagerV2, | |
| get_context_manager, | |
| MessageType, | |
| ContextType | |
| ) | |
| from modules.listen_stream_processor import ( | |
| ListenStreamProcessor, | |
| get_listen_processor | |
| ) | |
| # Inicializa singletons | |
| ctx_manager = get_context_manager() | |
| listen_processor = get_listen_processor() | |
| ... | |
| ``` | |
| AΓ§Γ£o: | |
| β‘ Abrir modules/api.py | |
| β‘ Localizar seΓ§Γ£o de imports | |
| β‘ Adicionar imports acima | |
| β‘ SALVAR arquivo | |
| β PASSO 3.2: MODIFICAR _get_user_context | |
| βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| LocalizaΓ§Γ£o: modules/api.py::_get_user_context (line ~2311) | |
| AΓΓO: Seguir API_PATCH_DETAILED.md seΓ§Γ£o "MODIFICATION 2" | |
| β‘ Abrir api.py | |
| β‘ Procurar funΓ§Γ£o "_get_user_context" | |
| β‘ Modificar assinatura (adicionar numero, tipo_conversa, grupo_id) | |
| β‘ Adicionar lΓ³gica de ContextManagerV2 | |
| β‘ SALVAR e TESTAR | |
| β PASSO 3.3: INTEGRAR LISTEN STREAM EM akira_endpoint | |
| βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| LocalizaΓ§Γ£o: modules/api.py::akira_endpoint (line ~1224) | |
| AΓΓO: Seguir API_PATCH_DETAILED.md seΓ§Γ£o "MODIFICATION 3" | |
| Este Γ© o PRINCIPAL passo: | |
| β‘ Localizar onde se extrai dados (usuario, numero, texto, tipo_conversa) | |
| β‘ Adicionar extraΓ§Γ£o de novos campos (referenced_message_author, etc) | |
| β‘ ANTES de processar LLM: | |
| ββ Chamar listen_processor.processar_mensagem_chegando(evento) | |
| ββ Verificar resultado_processamento['deve_processar'] | |
| ββ Se False: retornar jsonify com status 'contextual' | |
| ββ Se True: continuar normalmente | |
| β‘ Usar listen_processor.obter_contexto_para_resposta() para histΓ³rico | |
| β‘ SALVAR e TESTAR | |
| β PASSO 3.4: ACEITAR NOVOS CAMPOS NO PAYLOAD | |
| βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| LocalizaΓ§Γ£o: modules/api.py::akira_endpoint (data extraction) | |
| AΓΓO: Adicionar suporte aos novos campos | |
| ```python | |
| # β NOVOS CAMPOS PARA LISTEN STREAM | |
| referenced_message_author = data.get('referenced_message_author', | |
| data.get('quoted_author_name', '')) | |
| referenced_message_texto = data.get('referenced_message_texto', | |
| data.get('mensagem_citada', '')) | |
| referenced_message_id = data.get('referenced_message_id', | |
| data.get('message_id_citada', '')) | |
| ``` | |
| β‘ Adicionar apΓ³s extraΓ§Γ£o de tipo_conversa/grupo_id | |
| β‘ SALVAR | |
| β PASSO 3.5: ATUALIZAR RESPOSTA JSON | |
| βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| LocalizaΓ§Γ£o: modules/api.py::akira_endpoint (return jsonify) | |
| AΓΓO: Adicionar campos de debug | |
| ```python | |
| return jsonify({ | |
| 'resposta': resposta, | |
| 'modelo_usado': modelo, | |
| 'confidence': confidence, | |
| 'conversation_id': conversation_id, # β NOVO | |
| 'tipo_message': resultado_processamento['tipo_message'], # β NOVO | |
| 'participants': participants if tipo_conversa == 'grupo' else [], # β NOVO | |
| ... | |
| }) | |
| ``` | |
| β‘ Localizar primeiro return jsonify em akira_endpoint | |
| β‘ Adicionar campos acima | |
| β‘ SALVAR | |
| """ | |
| # βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| # FASE 4: ATUALIZAR discord-ts (15 minutos) | |
| # βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| FASE4 = """ | |
| β PASSO 4.1: ATUALIZAR APIClient.ts | |
| βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| LocalizaΓ§Γ£o: discord-ts/index/modules/APIClient.ts | |
| Adicionar ao payload enviado: | |
| β‘ tipo_conversa: "pv" | "grupo" | |
| ββ Se Γ© conversa privada ou grupo | |
| β‘ grupo_id: string | null | |
| ββ ID do grupo (se aplicΓ‘vel) | |
| β‘ referenced_message_author: string | null | |
| ββ Nome de quem foi mencionado/citado | |
| β‘ referenced_message_texto: string | null | |
| ββ Texto da mensagem citada | |
| Exemplo de novo payload: | |
| ```typescript | |
| const payload = { | |
| usuario: msg.author.username, | |
| numero: msg.author.id, | |
| texto: msg.content, | |
| tipo_conversa: msg.channel.isDMBased() ? 'pv' : 'grupo', | |
| grupo_id: !msg.channel.isDMBased() ? msg.channelId : null, | |
| referenced_message_author: msg.reference?.author?.username || null, | |
| referenced_message_texto: msg.reference?.content || null, | |
| // ... resto dos campos | |
| }; | |
| ``` | |
| β‘ Modificar APIClient.ts | |
| β‘ TESTAR com Discord | |
| β PASSO 4.2: VERIFICAR BAILEYS (WhatsApp) | |
| βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| LocalizaΓ§Γ£o: discord-ts/index/modules/BotCore.ts ou similar | |
| Verificar se: | |
| β‘ tipo_conversa Γ© capturado corretamente | |
| β‘ grupo_id Γ© enviado quando em grupo | |
| β‘ quoted messages sΓ£o extraΓdas | |
| Se nΓ£o estΓ£o: | |
| β‘ Adicionar lΓ³gica similar ao Discord | |
| β‘ TESTAR com WhatsApp | |
| """ | |
| # βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| # FASE 5: TESTES DE INTEGRAΓΓO (30 minutos) | |
| # βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| FASE5 = """ | |
| β PASSO 5.1: TESTE BΓSICO - CONVERSA PRIVADA | |
| βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| β‘ Enviar via POST /akira em conversa privada | |
| Payload: | |
| { | |
| "usuario": "IsaacTest", | |
| "numero": "test_123", | |
| "texto": "Oi AKIRA", | |
| "tipo_conversa": "pv" | |
| } | |
| Esperado: | |
| β deve_processar: true | |
| β tipo_message: "direct" | |
| β resposta: [alguma resposta] | |
| β conversation_id: [hash ΓΊnico] | |
| β PASSO 5.2: TESTE COM MENΓΓO EM GRUPO | |
| βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| β‘ Enviar em grupo COM @AKIRA | |
| Payload: | |
| { | |
| "usuario": "IsaacTest", | |
| "numero": "test_123", | |
| "texto": "@AKIRA qual Γ© a capital?", | |
| "tipo_conversa": "grupo", | |
| "grupo_id": "test_group_123" | |
| } | |
| Esperado: | |
| β deve_processar: true | |
| β tipo_message: "direct" | |
| β resposta: [resposta da pergunta] | |
| β PASSO 5.3: TESTE SEM MENΓΓO EM GRUPO | |
| βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| β‘ Enviar em grupo SEM @AKIRA | |
| Payload: | |
| { | |
| "usuario": "StefanioTest", | |
| "numero": "test_456", | |
| "texto": "Bacano", | |
| "tipo_conversa": "grupo", | |
| "grupo_id": "test_group_123" | |
| } | |
| Esperado: | |
| β deve_processar: false | |
| β tipo_message: "contextual" | |
| β resposta: "" (vazia) | |
| β status: "context_registered" | |
| β PASSO 5.4: TESTE DE ISOLAΓΓO | |
| βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| β‘ Executar sequΓͺncia em grupo: | |
| 1. Isaac: "@AKIRA qual Γ© capital de PT?" (responde) | |
| 2. StefΓ’nio: "Bacano" (contextual, nΓ£o responde) | |
| 3. Isaac: "@AKIRA e da FR?" (responde) | |
| ValidaΓ§Γ£o: | |
| β‘ AKIRA respondeu em 1 e 3 (ambas Isaac) | |
| β‘ AKIRA nΓ£o respondeu em 2 | |
| β‘ Logs mostram "π ClassificaΓ§Γ£o Listen: direct/contextual" | |
| β‘ conversation_id de Isaac mantΓ©m isolado | |
| β PASSO 5.5: MONITORAR LOGS | |
| βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| Observar no logs: | |
| β‘ "π¨ Mensagem chegando: ..." | |
| β‘ "π ClassificaΓ§Γ£o Listen: ..." | |
| β‘ "β Mensagem contextual (escuta). NΓ£o respondendo." (quando aplicΓ‘vel) | |
| β‘ "π Contexto obtido: X mensagens diretas" | |
| Se tudo OK β Fase 6 | |
| """ | |
| # βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| # FASE 6: VALIDAΓΓO FINAL (15 minutos) | |
| # βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| FASE6 = """ | |
| β PASSO 6.1: VERIFICAR STATS | |
| βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| β‘ Chamar ctx_manager.obter_stats() | |
| Esperado: | |
| { | |
| 'total_contexts': N, | |
| 'total_messages': M, | |
| 'average_msgs_per_context': M/N, | |
| 'cache_size': X, | |
| 'memory_estimate_mb': Y | |
| } | |
| Validar: | |
| β‘ memory_estimate_mb < 100MB (escalΓ‘vel) | |
| β‘ total_contexts growing mas nΓ£o explosivo | |
| β PASSO 6.2: VERIFICAR ISOLAΓΓO REAL | |
| βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| β‘ Fazer teste completo com 2+ usuΓ‘rios em grupo real | |
| β‘ Verificar que mensagens de um nΓ£o contamina outro | |
| β‘ Verificar que AKIRA responde apenas quando mencionada | |
| Exemplo: | |
| - Isaac: "@AKIRA Python Γ© melhor que Java?" | |
| - VocΓͺ em outro grupo: "@AKIRA Qual Γ© o melhor framework?" | |
| - Isaac: "@AKIRA Ok valeu" | |
| β Confirm: Cada um tem seu prΓ³prio contexto isolado | |
| β PASSO 6.3: PERFORMANCE | |
| βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| β‘ Medir tempo de resposta com novo sistema | |
| β‘ Comparar com antes (deve ser ~5-10% mais rΓ‘pido) | |
| β‘ Verificar que nΓ£o hΓ‘ memory leaks apΓ³s 1 hora de uso | |
| β PASSO 6.4: ROLLBACK PLAN | |
| βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| Se algo der errado: | |
| β‘ Restaurar api.py do backup: | |
| cp modules/api.py.backup.* modules/api.py | |
| β‘ Remover imports dos novos mΓ³dulos | |
| β‘ Reiniciar servidor | |
| β‘ Verificar que volta ao estado anterior | |
| β‘ Documentar problema encontrado para debug | |
| """ | |
| # βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| # FASE 7: DEPLOY (5 minutos) | |
| # βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| FASE7 = """ | |
| β PASSO 7.1: DEPLOY EM STAGING | |
| βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| β‘ Deploy do novo cΓ³digo em staging | |
| β‘ Rodar Fase 5 (testes de integraΓ§Γ£o) em staging | |
| β‘ Monitorar por 2-4 horas | |
| β‘ Verificar que nΓ£o hΓ‘ errors no log | |
| β PASSO 7.2: DEPLOY EM PRODUΓΓO | |
| βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| β‘ Fazer ΓΊltimo backup do api.py em produΓ§Γ£o | |
| β‘ Deploy da soluΓ§Γ£o | |
| β‘ Monitorar logs continuamente | |
| β‘ Se problema: executar rollback plan | |
| β PASSO 7.3: MONITORAMENTO PΓS-DEPLOY | |
| βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| β‘ Primeira hora: Verificar a cada 5 minutos | |
| β‘ Primeiras 24h: Verificar a cada 30 minutos | |
| β‘ ApΓ³s 24h: Verificar diariamente | |
| MΓ©tricas a monitorar: | |
| ββ Taxa de erro (deve ser < 0.1%) | |
| ββ Tempo mΓ©dio de resposta (deve ser < 2s) | |
| ββ Memory usage (deve ser estΓ‘vel) | |
| ββ Context isolation (validar com teste manual diΓ‘rio) | |
| ββ User complaints (deve ser zero sobre context mix) | |
| """ | |
| # βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| # RESUMO DE TEMPO ESTIMADO | |
| # βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| RESUMO_TEMPO = """ | |
| FASE 1 (PreparaΓ§Γ£o): 30 minutos | |
| ββ Backup | |
| ββ Verificar novos arquivos | |
| ββ Verificar dependΓͺncias | |
| ββ Revisar documentaΓ§Γ£o | |
| FASE 2 (Testes Isolados): 20 minutos | |
| ββ Executar test_context_isolation.py | |
| ββ Testar cada mΓ³dulo | |
| ββ Validar isolaΓ§Γ£o | |
| FASE 3 (IntegraΓ§Γ£o): 45 minutos | |
| ββ Adicionar imports | |
| ββ Modificar _get_user_context | |
| ββ Integrar listen stream | |
| ββ Aceitar novos campos | |
| ββ Atualizar resposta JSON | |
| FASE 4 (Atualizar discord-ts): 15 minutos | |
| ββ Atualizar APIClient.ts | |
| ββ Verificar Baileys | |
| FASE 5 (Testes de IntegraΓ§Γ£o): 30 minutos | |
| ββ Teste PV | |
| ββ Teste menΓ§Γ£o em grupo | |
| ββ Teste sem menΓ§Γ£o | |
| ββ Teste isolaΓ§Γ£o | |
| ββ Monitorar logs | |
| FASE 6 (ValidaΓ§Γ£o): 15 minutos | |
| ββ Verificar stats | |
| ββ Verificar isolaΓ§Γ£o real | |
| ββ Performance check | |
| ββ Rollback plan | |
| FASE 7 (Deploy): 5 minutos | |
| ββ Deploy staging | |
| ββ Deploy produΓ§Γ£o | |
| ββ Monitoramento inicial | |
| ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| TOTAL: ~2 horas 50 minutos (primeira vez) | |
| PRΓXIMAS IMPLEMENTAΓΓES: ~30 minutos (depois de entender) | |
| ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| """ | |
| # βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| # TROUBLESHOOTING RΓPIDO | |
| # βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| TROUBLESHOOTING = """ | |
| PROBLEMA: "ModuleNotFoundError: No module named 'context_manager_v2'" | |
| SOLUΓΓO: | |
| β‘ Verificar que context_manager_v2.py estΓ‘ em modules/ | |
| β‘ Verificar que __init__.py existe em modules/ | |
| β‘ Adicionar modules/ ao PYTHONPATH se necessΓ‘rio | |
| PROBLEMA: "NameError: name 'ctx_manager' is not defined" | |
| SOLUΓΓO: | |
| β‘ Verificar que imports estΓ£o no top do api.py | |
| β‘ Verificar que get_context_manager() foi chamado | |
| β‘ Verificar que listen_processor tambΓ©m foi inicializado | |
| PROBLEMA: "AKIRA ainda estΓ‘ respondendo mensagens contextuais" | |
| SOLUΓΓO: | |
| β‘ Verificar que listen_processor.processar_mensagem_chegando() Γ© chamado | |
| β‘ Verificar que if not resultado_processamento['deve_processar']: Γ© respeitado | |
| β‘ Verificar logs: ver se π ClassificaΓ§Γ£o estΓ‘ correto | |
| β‘ Se classifica como CONTEXTUAL mas processa, debugar lΓ³gica | |
| PROBLEMA: "Contextos ainda estΓ£o misturando" | |
| SOLUΓΓO: | |
| β‘ Verificar que conversation_id Γ© ΓΊnico por usuΓ‘rio/grupo | |
| β‘ Rodar test_context_isolation.py especialmente TEST 4 | |
| β‘ Debugar _gerar_conversation_id() em ContextManagerV2 | |
| β‘ Verificar que ctx_manager.obter_historico_direto() estΓ‘ sendo usado | |
| PROBLEMA: "Performance degradada apΓ³s integraΓ§Γ£o" | |
| SOLUΓΓO: | |
| β‘ Verificar ctx_manager.obter_stats() para memory estimate | |
| β‘ Se > 100MB: implementar cleanup mais agressivo | |
| β‘ Verificar nΓΊmero de contextos: se > 10k, hΓ‘ problema | |
| β‘ Revisar TTL do cache (atualmente 300s, pode reduzir) | |
| PROBLEMA: "Mensagens antigas nΓ£o aparecem" | |
| SOLUΓΓO: | |
| β‘ Verificar TTL: contextos com last_access > 7 dias sΓ£o deletados | |
| β‘ Se precisa histΓ³rico mais longo: modificar max_age_days em cleanup | |
| β‘ Ou implementar persistΓͺncia em DB (fora do escopo atual) | |
| """ | |
| print(FASE1) | |
| print("\n" + "="*70 + "\n") | |
| print(FASE2) | |
| print("\n" + "="*70 + "\n") | |
| print(FASE3) | |
| print("\n" + "="*70 + "\n") | |
| print(FASE4) | |
| print("\n" + "="*70 + "\n") | |
| print(FASE5) | |
| print("\n" + "="*70 + "\n") | |
| print(FASE6) | |
| print("\n" + "="*70 + "\n") | |
| print(FASE7) | |
| print("\n" + "="*70 + "\n") | |
| print(RESUMO_TEMPO) | |
| print("\n" + "="*70 + "\n") | |
| print(TROUBLESHOOTING) | |
| __all__ = ['FASE1', 'FASE2', 'FASE3', 'FASE4', 'FASE5', 'FASE6', 'FASE7', 'RESUMO_TEMPO', 'TROUBLESHOOTING'] | |