# main.py — AKIRA V21 ULTIMATE CORRIGIDO (Dezembro 2025) """ Entry point Flask API para Akira IA V21 - Multi-API com fallback (6 provedores) - Suporte a .env para secrets - Otimizado para Hugging Face Spaces - CORREÇÃO: AkiraAPI não aceita parâmetros no __init__ """ import os import sys from flask import Flask from loguru import logger import datetime # Carregar variáveis de ambiente (.env) try: from dotenv import load_dotenv load_dotenv() logger.info("Variáveis de ambiente carregadas de .env") except ImportError: logger.warning("python-dotenv não instalado, usando apenas env vars do sistema") # === LOGS ULTRA DETALHADOS === logger.remove() logger.add( sys.stderr, format="{time:HH:mm:ss} | {level} | {name}:{function}{message}", colorize=True, backtrace=True, diagnose=True, level="INFO" ) # === FLASK APP === app = Flask(__name__) # === ROTAS BÁSICAS === @app.route("/") def index(): """Página inicial com status""" apis_configuradas = [] # Verifica quais APIs estão configuradas if os.getenv("MISTRAL_API_KEY"): apis_configuradas.append("Mistral") if os.getenv("GEMINI_API_KEY"): apis_configuradas.append("Gemini") if os.getenv("GROQ_API_KEY"): apis_configuradas.append("Groq") if os.getenv("COHERE_API_KEY"): apis_configuradas.append("Cohere") if os.getenv("TOGETHER_API_KEY"): apis_configuradas.append("Together") if os.getenv("HF_API_KEY"): apis_configuradas.append("HuggingFace") apis_texto = ", ".join(apis_configuradas) if apis_configuradas else "Nenhuma (configure em .env)" return f'''

🔥 AKIRA V21 ULTIMATE ONLINE! 🔥

Multi-API System com 6 Provedores

APIs Configuradas: {apis_texto}

Respostas: <5s (média)

Endpoint: POST /api/akira

Compatibilidade: ✅ Total com index.js V21

Contexto: ✅ Otimizado (sem repetições)


Luanda, Angola — Softedge Corporation

Isaac Quarenta | Personalidade BRUTAL sem filtro

''', 200 @app.route("/health") def health(): """Health check para Docker/HF Spaces""" return "OK", 200 @app.route("/status") def status(): """Status detalhado das APIs""" import modules.config as config status_info = { "timestamp": datetime.datetime.now().isoformat(), "versao": "V21 ULTIMATE (Dezembro 2025)", "apis_disponiveis": [], "fallback_order": config.API_FALLBACK_ORDER, "compatibilidade": { "index_js": True, "reply_info": True, "contexto_otimizado": True, "audio_stt": True, "tts": True } } # Verifica cada API if config.MISTRAL_API_KEY: status_info["apis_disponiveis"].append("mistral") if config.GEMINI_API_KEY: status_info["apis_disponiveis"].append("gemini") if config.GROQ_API_KEY: status_info["apis_disponiveis"].append("groq") if config.COHERE_API_KEY: status_info["apis_disponiveis"].append("cohere") if config.TOGETHER_API_KEY: status_info["apis_disponiveis"].append("together") if config.HF_API_KEY: status_info["apis_disponiveis"].append("huggingface") from flask import jsonify return jsonify(status_info), 200 # === INTEGRAÇÃO DA API === try: from modules.api import AkiraAPI import modules.config as config # Valida config if hasattr(config, 'validate_config'): config.validate_config() else: logger.warning("validate_config não encontrado em config.py") # 🔥 CORREÇÃO CRÍTICA: AkiraAPI não aceita parâmetros # Versão CORRETA: akira_api = AkiraAPI() # ✅ SEM PARÂMETROS! # Versão ERRADA (causa o erro): # akira_api = AkiraAPI(config) # ❌ NÃO FAÇA ISSO! app.register_blueprint(akira_api.get_blueprint(), url_prefix="/api") logger.success("✓ API V21 integrada com sucesso → /api/akira") # Log de APIs configuradas apis_ok = [] if config.MISTRAL_API_KEY: apis_ok.append("Mistral") if config.GEMINI_API_KEY: apis_ok.append("Gemini") if config.GROQ_API_KEY: apis_ok.append("Groq") if config.COHERE_API_KEY: apis_ok.append("Cohere") if config.TOGETHER_API_KEY: apis_ok.append("Together") if config.HF_API_KEY: apis_ok.append("HuggingFace") if apis_ok: logger.info(f"✅ APIs configuradas: {', '.join(apis_ok)}") else: logger.warning("⚠️ NENHUMA API CONFIGURADA! Configure pelo menos Mistral + Gemini") except ImportError as e: logger.critical(f"❌ ERRO DE IMPORTAÇÃO: {e}") logger.critical("Certifique-se de que todos os módulos estão instalados:") logger.critical("pip install flask loguru python-dotenv requests") sys.exit(1) except Exception as e: logger.critical(f"❌ FALHA AO CARREGAR API: {e}") import traceback logger.critical(traceback.format_exc()) sys.exit(1) # === ROTA DE FALLBACK (para debugging) === @app.route("/debug") def debug(): """Página de debugging para verificar configurações""" import modules.config as config debug_info = { "python_version": sys.version, "apis_keys_present": { "MISTRAL_API_KEY": bool(config.MISTRAL_API_KEY), "GEMINI_API_KEY": bool(config.GEMINI_API_KEY), "GROQ_API_KEY": bool(config.GROQ_API_KEY), "COHERE_API_KEY": bool(config.COHERE_API_KEY), "TOGETHER_API_KEY": bool(config.TOGETHER_API_KEY), "HF_API_KEY": bool(config.HF_API_KEY) }, "working_directory": os.getcwd(), "files_in_modules": os.listdir("modules") if os.path.exists("modules") else [] } from flask import jsonify return jsonify(debug_info), 200 # === INÍCIO DO SERVIDOR === if __name__ == "__main__": logger.info("=" * 80) logger.info("🔥 AKIRA V21 ULTIMATE — SISTEMA MULTI-API 🔥") logger.info("=" * 80) logger.info(f"Data/hora local: {datetime.datetime.now().strftime('%d/%m/%Y %H:%M:%S')}") logger.info(f"Servidor: http://{config.API_HOST}:{config.API_PORT}") logger.info("Endpoints:") logger.info(" - GET / → Página inicial") logger.info(" - GET /health → Health check") logger.info(" - GET /status → Status das APIs") logger.info(" - GET /debug → Debugging") logger.info(" - POST /api/akira → Endpoint principal") logger.info("=" * 80) logger.info("✅ Sistema pronto!") logger.info("✅ Contexto otimizado (sem repetições)") logger.info("✅ Compatibilidade total com index.js V21") logger.info("✅ STT Deepgram + TTS Google") logger.info("✅ Comandos restritos: Apenas Isaac Quarenta") logger.info("=" * 80) logger.info("Aguardando conexões... (Ctrl+C para parar)") # Modo de execução if os.getenv("PRODUCTION", "false").lower() == "true": # Produção: usar Gunicorn (via Dockerfile CMD) logger.info("Modo: PRODUÇÃO (Gunicorn)") else: # Desenvolvimento: usar Flask dev server logger.info("Modo: DESENVOLVIMENTO (Flask)") app.run( host=config.API_HOST, port=config.API_PORT, debug=False, use_reloader=False )