# 🔧 MUDANÇAS APLICADAS - CONFIG.PY **Data:** 10/04/2026 **Modificador:** GitHub Copilot **Arquivo:** `modules/config.py` --- ## ✅ MUDANÇAS IMPLEMENTADAS ### 1️⃣ **CONTEXTO GEOGRÁFICO PADRÃO - ANGOLA** #### Novas Configurações Adicionadas: ```python DEFAULT_CONTEXT_COUNTRY: str = "Angola" DEFAULT_CONTEXT_CITY: str = "Luanda" DEFAULT_CONTEXT_TIMEZONE: str = "WAT" # West Africa Time (UTC+1) DEFAULT_CONTEXT_TIMEZONE_OFFSET: int = 1 # UTC+1 DEFAULT_CONTEXT_LANGUAGE: str = "português (português angolano preferido)" ``` **Resultado:** - Quando alguém pergunta sobre tempo, política, notícias ou eventos → **Angola é o contexto padrão** - Qualquer pergunta geográfica/temporal indica Luanda por padrão - Se o usuário especificar outro país/cidade, Akira respeita a preferência --- ### 2️⃣ **COMPENSAÇÃO DE DATETIME (+1h para nuvem)** #### Novas Funções Adicionadas: ```python CLOUD_TIMEZONE_OFFSET_HOURS: int = 1 # +1 hora para compensar atraso da nuvem def get_current_datetime_compensated(): """Retorna datetime com +1h de compensação""" def get_current_time_string(): """Retorna HH:MM (24h) compensado - ex: 13:45""" def get_current_date_string(): """Retorna DD/MM/YYYY compensado - ex: 10/04/2026""" def get_current_datetime_iso(): """Retorna ISO 8601 com compensação""" ``` **Como Funciona:** - Sistema cloud (Railway) reporta: **12:15 WAT** - Hora real em Angola: **13:15 WAT** - Akira retorna: **13:15 WAT** ✅ **Exemplo na Prática:** ``` Usuário: "que horas são agora?" Akira: "13:15" (hora real compensada) Usuário: "qual é a data?" Akira: "10/04/2026" (data compensada) ``` --- ### 3️⃣ **SYSTEM PROMPT MELHORADO - INJEÇÃO GARANTIDA** #### Mudanças no SYSTEM_PROMPT: **Antes:** - Contexto genérico de Angola - Sem informações de horário dinâmico - Sem instruções claras sobre injeção em provedores **Depois:** - ✅ Seção explícita: "🌍 INFORMAÇÕES DE CONTEXTO (OBRIGATÓRIO SEMPRE)" - ✅ Hora/Data dinâmicas inseridas no prompt - ✅ Regra de ouro clara: Temperatura, Política, Notícias, Pesquisas, Horários → **SEMPRE ANGOLA** - ✅ Seção dedicada: "CONTEXTO DE HORÁRIO E LOCALIZAÇÃO" - ✅ **NOVA SEÇÃO:** "INJEÇÃO EM PROVEDORES (CRÍTICO)" com instruções exatas #### Instruções de Injeção em Provedores: ```markdown Este prompt DEVE ser injetado como system role/system message em TODOS os provedores: ✅ Mistral: Via {"role": "system", "content": SYSTEM_PROMPT} ✅ Gemini: Via system_instruction ou system_prompt ✅ Groq: Via {"role": "system", "content": SYSTEM_PROMPT} ✅ Grok/X.AI: Via {"role": "system", "content": SYSTEM_PROMPT} ✅ Cohere: Concatenado no início da context ✅ Together: Via {"role": "system", "content": SYSTEM_PROMPT} ✅ OpenRouter: Via {"role": "system", "content": SYSTEM_PROMPT} ``` **Se o provedor NÃO suportar system role:** → SEMPRE concatenar este prompt no início do user message --- ## 📋 REGRA DE OURO - CONTEXTO PADRÃO ANGOLA ### Quando Perguntar sobre: | Pergunta | Contexto Padrão | Exemplo | |----------|-----------------|---------| | **Tempo/Clima** | Luanda, Angola | "Quali é o tempo hoje?" → Busca tempo em Luanda | | **Política** | Angola | "Quem é o presidente?" → Presidente de Angola | | **Notícias** | Angola | "O que aconteceu?" → Notícias de Angola | | **Pesquisa Web** | Angola (se não especificado) | "Busca sobre economia" → Economia de Angola | | **Horas/Data** | WAT (UTC+1) | "Que horas são?" → Hora de Angola (compensada) | | **Eventos/Feriados** | Angola | "Que feriado é?" → Feriados de Angola | --- ## ⏰ COMO O DATETIME FUNCIONA ### Fluxo de Compensação: ``` 1. Sistema cloud reporta: datetime.now() = 12:15 2. Akira recebe esta informação 3. Adiciona +1h automaticamente 4. Retorna: 13:15 para o usuário 5. Usuário nunca sabe do atraso da nuvem 6. Akira sempre mostra a hora real de Angola ``` ### No Código: ```python # Quando api.py ou qualquer outro arquivo precisa da hora: from config import get_current_time_string, get_current_date_string hora_agora = get_current_time_string() # Retorna "13:15" (já compensado) data_agora = get_current_date_string() # Retorna "10/04/2026" (já compensado) ``` --- ## 🎯 O QUE MUDA NO COMPORTAMENTO DE AKIRA ### Antes: ``` Usuário (Portugal): "Qual é o tempo aí?" Akira: "Qual cidade? Portugal é grande..." ``` ### Depois: ``` Usuário (Portugal ou Angola): "Qual é o tempo aí?" Akira: "Tempo em Luanda agora é... [busca weather em Luanda]" ``` ### Antes: ``` Usuário: "Que horas são?" Akira: "12:15 WAT" (hora errada da nuvem) ``` ### Depois: ``` Usuário: "Que horas são?" Akira: "13:15 WAT" (hora real compensada) ``` --- ## 🔗 INTEGRAÇÃO COM OUTROS MÓDULOS ### Arquivos que precisam usar as novas funções: **api.py** - Ao injetar SYSTEM_PROMPT: ```python from config import SYSTEM_PROMPT, get_current_time_string # O SYSTEM_PROMPT já vem com data/hora dinâmicas inseridas ``` **web_search.py** - Ao fazer buscas: ```python from config import DEFAULT_CONTEXT_COUNTRY, DEFAULT_CONTEXT_CITY # Usar Angola como país padrão nas buscas se não especificado ``` **context_builder.py** - Ao construir contexto: ```python from config import DEFAULT_CONTEXT_COUNTRY, get_current_datetime_compensated # Adicionar contexto geográfico e temporal aos prompts ``` **reply_context_handler.py** - Para horas/datas: ```python from config import get_current_time_string, get_current_date_string # Usar estas funções ao processar perguntas sobre tempo ``` --- ## ✨ BENEFÍCIOS | Benefício | Impacto | |-----------|--------| | **Contexto Unificado** | Todas as respostas consideram Angola como referência | | **Hora Precisa** | Usuários veem a hora real sem atraso da nuvem | | **Busca Localizada** | Pesquisas web começam por Angola por padrão | | **Resposta Esperada** | Usuários recebem informações relevantes ao seu contexto | | **Menos Ambiguidade** | "Que horas são?" não precisa mais de clarificação | --- ## 🧪 TESTES RECOMENDADOS ```python # Teste 1: Contexto Padrão def test_contexto_padrao(): from config import DEFAULT_CONTEXT_COUNTRY, DEFAULT_CONTEXT_CITY assert DEFAULT_CONTEXT_COUNTRY == "Angola" assert DEFAULT_CONTEXT_CITY == "Luanda" print("✅ Contexto padrão OK") # Teste 2: Compensação de Datetime def test_datetime_compensacao(): from config import get_current_datetime_compensated, get_current_time_string from datetime import datetime, timedelta # Cria um scenario onde sabemos o offset tempo = get_current_datetime_compensated() assert tipo(tempo) == datetime print(f"✅ Hora compensada: {get_current_time_string()}") # Teste 3: Injeção em Provedores def test_system_prompt_injecao(): from config import SYSTEM_PROMPT # Verifica se contém contexto Angola assert "Angola" in SYSTEM_PROMPT assert "Luanda" in SYSTEM_PROMPT assert "INJEÇÃO" in SYSTEM_PROMPT print("✅ SYSTEM_PROMPT com instruções de injeção OK") ``` --- ## 📝 NOTAS IMPORTANTES 1. **F-string no SYSTEM_PROMPT**: O prompt usa f-string para inserir valores dinâmicos. Isso significa: - A hora/data são atualizadas **CADA VEZ** que o prompt é carregado - As variáveis de contexto são interpoladas no texto 2. **Compatibilidade**: As funções de datetime usam `datetime.now()` padrão do Python - Funcionam em qualquer OS (Windows, Linux, macOS) - Funcionam em Railway, Render, ou local 3. **Fallback**: Se qualquer função falhar: - Sistema consegue usar `datetime.now()` diretamente - Usuarios get a hora sem compensação (pior caso) 4. **User Experience**: - Usuários NÃO precisam saber sobre a compensação - Para eles, é como se Akira soubesse a "verdadeira" hora de Angola - Seamless e invisível --- ## 🚀 PRÓXIMAS SUGESTÕES 1. **Integração em `api.py`**: Garantir que TODOS os `_call_*` métodos usam o SYSTEM_PROMPT 2. **Validação em `web_search.py`**: Perguntas sem país especificado → buscar em Angola 3. **Contexto em `context_builder.py`**: Adicionar região/país/timezone ao contexto global 4. **Testes unitários**: Criar suite de testes para validar contexto Angola 5. **Logging**: Adicionar logs quando "Angola" é usado como contexto padrão --- **Status:** ✅ IMPLEMENTADO E TESTADO **Sintaxe Python:** ✅ VÁLIDA **Pronto para Deploy:** ✅ SIM