# type: ignore """ AKIRA V21 ULTIMATE - Módulos Core =============================== Arquitetura modular para IA conversacional com análise emocional BART. Inclui aprendizado contínuo, escuta global e visão computacional. """ __version__ = "21.01.2025" __author__ = "Isaac Quarenta" # Exportações principais from .config import ( APP_NAME, APP_VERSION, DEBUG_MODE, NLP_CONFIG, get_system_prompt, PRIVILEGED_USERS, EmotionAnalyzer, MemoriaEmocional, get_emotion_analyzer, validate_config, # NLP Avançado exports - CORRIGIDO NLPAdvancedConfig, AdvancedNLP, get_advanced_nlp, ) from .database import Database from .contexto import Contexto, criar_contexto # Import API com tratamento de erro try: from .api import AkiraAPI, get_blueprint API_AVAILABLE = True except ImportError as e: print(f"Aviso: API não disponível - {e}") API_AVAILABLE = False # Aprendizado contínuo - é um módulo opcional APRENDIZADO_CONTINUO_AVAILABLE = False try: from .aprendizado_continuo import ( AprendizadoContinuo, get_aprendizado_continuo, processar_conversa_global, ConversaGlobal, APIContextScore, ) APRENDIZADO_CONTINUO_AVAILABLE = True except ImportError as e: print(f"Aviso: Aprendizado Continuo nao disponivel - {e}") # Visão Computacional - módulo opcional (requer OpenCV e Tesseract) COMPUTER_VISION_AVAILABLE = False try: from .computervision import ( ComputerVision, get_computer_vision, VisionConfig, ImageFeature, analyze_image_from_base64, analyze_image_file, ) COMPUTER_VISION_AVAILABLE = True except ImportError as e: print(f"Aviso: Visão Computacional não disponível - {e}") # ThinkingEngine - Chain-of-Thought pré-processamento (requer sentence-transformers) THINKING_ENGINE_AVAILABLE = False try: from .thinking_engine import ThinkingEngine, get_thinking_engine THINKING_ENGINE_AVAILABLE = True except ImportError as e: print(f"Aviso: ThinkingEngine não disponível - {e}") __all__ = [ # Config "APP_NAME", "APP_VERSION", "DEBUG_MODE", "NLP_CONFIG", "get_system_prompt", "PRIVILEGED_USERS", "EmotionAnalyzer", "MemoriaEmocional", "get_emotion_analyzer", "validate_config", # NLP Avançado "NLPAdvancedConfig", "AdvancedNLP", "get_advanced_nlp", # Database "Database", # Contexto "Contexto", "criar_contexto", # API "AkiraAPI", "get_blueprint", "API_AVAILABLE", # Aprendizado Continuo "APRENDIZADO_CONTINUO_AVAILABLE", # Visão Computacional "COMPUTER_VISION_AVAILABLE", ] # 🔧 AUTO-PATCHER: Sender Attribution Fix try: import os as _os _api_file = _os.path.join(_os.path.dirname(__file__), 'api.py') with open(_api_file, 'r', encoding='utf-8', errors='replace') as _f: _api_content = _f.read() if 'validate_sender_name' not in _api_content: # Ler linhas with open(_api_file, 'r', encoding='utf-8', errors='replace') as _f: _linhas = _f.readlines() # Encontrar IDEMPOTENCY CHECK _idx1 = None for _i in range(len(_linhas)): if 'IDEMPOTENCY CHECK' in _linhas[_i] and _i > 1150 and _i < 1160: _idx1 = _i break if _idx1: _codigo1 = """ # 🔧 SENDER ATTRIBUTION FIX: Validate and reconstruct empty sender names def validate_sender_name(name, number, ctx=''): if name and isinstance(name, str) and name.strip() and not name.strip().isdigit(): return name.strip() if number: last_8 = number[-8:] if len(number) >= 8 else number rec = f"Usuario#{last_8}" self.logger.warning(f"[SENDER FIX] {ctx}: nome vazio, reconstruído: {rec}") return rec return "Usuario#unknown" usuario = validate_sender_name(usuario, numero, "usuario_principal") """ _linhas = _linhas[:_idx1] + [_codigo1] + _linhas[_idx1:] # Encontrar SELF-REPLY RECOGNITION _idx2 = None for _i in range(len(_linhas)): if 'SELF-REPLY RECOGNITION' in _linhas[_i] and _i > 1200 and _i < 1250: _idx2 = _i break if _idx2: _codigo2 = """ # 🔧 SENDER FIX: Apply validation to quoted_author_name if is_reply and quoted_author_numero: quoted_author_name = validate_sender_name(quoted_author_name, quoted_author_numero, "quoted_author") """ _linhas = _linhas[:_idx2] + [_codigo2] + _linhas[_idx2:] with open(_api_file, 'w', encoding='utf-8') as _f: _f.writelines(_linhas) except Exception: pass # Adiciona Aprendizado Continuo se disponível if APRENDIZADO_CONTINUO_AVAILABLE: __all__.extend([ "AprendizadoContinuo", "get_aprendizado_continuo", "processar_conversa_global", "ConversaGlobal", "APIContextScore", ]) # Adiciona Visão Computacional se disponível if COMPUTER_VISION_AVAILABLE: __all__.extend([ "ComputerVision", "get_computer_vision", "VisionConfig", "ImageFeature", "analyze_image_from_base64", "analyze_image_file", ])