Spaces:
Sleeping
Sleeping
Update main.py
Browse files
main.py
CHANGED
|
@@ -1,9 +1,10 @@
|
|
| 1 |
-
# main.py — AKIRA
|
| 2 |
"""
|
| 3 |
-
Entry point Flask API para Akira IA
|
| 4 |
- Multi-API com fallback (6 provedores)
|
| 5 |
- Suporte a .env para secrets
|
| 6 |
- Otimizado para Hugging Face Spaces
|
|
|
|
| 7 |
"""
|
| 8 |
import os
|
| 9 |
import sys
|
|
@@ -57,14 +58,16 @@ def index():
|
|
| 57 |
|
| 58 |
return f'''
|
| 59 |
<div style="font-family: 'Courier New', monospace; text-align: center; margin: 50px; background: #000; color: #0f0; padding: 40px; border: 2px solid #0f0;">
|
| 60 |
-
<h1>🔥 AKIRA
|
| 61 |
<p><strong>Multi-API System com 6 Provedores</strong></p>
|
| 62 |
<p><strong>APIs Configuradas:</strong> {apis_texto}</p>
|
| 63 |
<p><strong>Respostas:</strong> <5s (média)</p>
|
| 64 |
<p><strong>Endpoint:</strong> POST /api/akira</p>
|
|
|
|
|
|
|
| 65 |
<hr style="border-color: #0f0;">
|
| 66 |
<p><em>Luanda, Angola — Softedge Corporation</em></p>
|
| 67 |
-
<p style="font-size: 0.8em; color: #0a0;">Isaac Quarenta |
|
| 68 |
</div>
|
| 69 |
''', 200
|
| 70 |
|
|
@@ -80,8 +83,16 @@ def status():
|
|
| 80 |
|
| 81 |
status_info = {
|
| 82 |
"timestamp": datetime.datetime.now().isoformat(),
|
|
|
|
| 83 |
"apis_disponiveis": [],
|
| 84 |
-
"fallback_order": config.API_FALLBACK_ORDER
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 85 |
}
|
| 86 |
|
| 87 |
# Verifica cada API
|
|
@@ -112,10 +123,15 @@ try:
|
|
| 112 |
else:
|
| 113 |
logger.warning("validate_config não encontrado em config.py")
|
| 114 |
|
| 115 |
-
#
|
| 116 |
-
|
| 117 |
-
|
| 118 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 119 |
|
| 120 |
# Log de APIs configuradas
|
| 121 |
apis_ok = []
|
|
@@ -133,20 +149,49 @@ try:
|
|
| 133 |
apis_ok.append("HuggingFace")
|
| 134 |
|
| 135 |
if apis_ok:
|
| 136 |
-
logger.info(f"APIs configuradas: {', '.join(apis_ok)}")
|
| 137 |
else:
|
| 138 |
logger.warning("⚠️ NENHUMA API CONFIGURADA! Configure pelo menos Mistral + Gemini")
|
| 139 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 140 |
except Exception as e:
|
| 141 |
logger.critical(f"❌ FALHA AO CARREGAR API: {e}")
|
| 142 |
import traceback
|
| 143 |
logger.critical(traceback.format_exc())
|
| 144 |
sys.exit(1)
|
| 145 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 146 |
# === INÍCIO DO SERVIDOR ===
|
| 147 |
if __name__ == "__main__":
|
| 148 |
logger.info("=" * 80)
|
| 149 |
-
logger.info("🔥 AKIRA
|
| 150 |
logger.info("=" * 80)
|
| 151 |
logger.info(f"Data/hora local: {datetime.datetime.now().strftime('%d/%m/%Y %H:%M:%S')}")
|
| 152 |
logger.info(f"Servidor: http://{config.API_HOST}:{config.API_PORT}")
|
|
@@ -154,8 +199,15 @@ if __name__ == "__main__":
|
|
| 154 |
logger.info(" - GET / → Página inicial")
|
| 155 |
logger.info(" - GET /health → Health check")
|
| 156 |
logger.info(" - GET /status → Status das APIs")
|
|
|
|
| 157 |
logger.info(" - POST /api/akira → Endpoint principal")
|
| 158 |
logger.info("=" * 80)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 159 |
logger.info("Aguardando conexões... (Ctrl+C para parar)")
|
| 160 |
|
| 161 |
# Modo de execução
|
|
|
|
| 1 |
+
# main.py — AKIRA V21 ULTIMATE CORRIGIDO (Dezembro 2025)
|
| 2 |
"""
|
| 3 |
+
Entry point Flask API para Akira IA V21
|
| 4 |
- Multi-API com fallback (6 provedores)
|
| 5 |
- Suporte a .env para secrets
|
| 6 |
- Otimizado para Hugging Face Spaces
|
| 7 |
+
- CORREÇÃO: AkiraAPI não aceita parâmetros no __init__
|
| 8 |
"""
|
| 9 |
import os
|
| 10 |
import sys
|
|
|
|
| 58 |
|
| 59 |
return f'''
|
| 60 |
<div style="font-family: 'Courier New', monospace; text-align: center; margin: 50px; background: #000; color: #0f0; padding: 40px; border: 2px solid #0f0;">
|
| 61 |
+
<h1>🔥 AKIRA V21 ULTIMATE ONLINE! 🔥</h1>
|
| 62 |
<p><strong>Multi-API System com 6 Provedores</strong></p>
|
| 63 |
<p><strong>APIs Configuradas:</strong> {apis_texto}</p>
|
| 64 |
<p><strong>Respostas:</strong> <5s (média)</p>
|
| 65 |
<p><strong>Endpoint:</strong> POST /api/akira</p>
|
| 66 |
+
<p><strong>Compatibilidade:</strong> ✅ Total com index.js V21</p>
|
| 67 |
+
<p><strong>Contexto:</strong> ✅ Otimizado (sem repetições)</p>
|
| 68 |
<hr style="border-color: #0f0;">
|
| 69 |
<p><em>Luanda, Angola — Softedge Corporation</em></p>
|
| 70 |
+
<p style="font-size: 0.8em; color: #0a0;">Isaac Quarenta | Personalidade BRUTAL sem filtro</p>
|
| 71 |
</div>
|
| 72 |
''', 200
|
| 73 |
|
|
|
|
| 83 |
|
| 84 |
status_info = {
|
| 85 |
"timestamp": datetime.datetime.now().isoformat(),
|
| 86 |
+
"versao": "V21 ULTIMATE (Dezembro 2025)",
|
| 87 |
"apis_disponiveis": [],
|
| 88 |
+
"fallback_order": config.API_FALLBACK_ORDER,
|
| 89 |
+
"compatibilidade": {
|
| 90 |
+
"index_js": True,
|
| 91 |
+
"reply_info": True,
|
| 92 |
+
"contexto_otimizado": True,
|
| 93 |
+
"audio_stt": True,
|
| 94 |
+
"tts": True
|
| 95 |
+
}
|
| 96 |
}
|
| 97 |
|
| 98 |
# Verifica cada API
|
|
|
|
| 123 |
else:
|
| 124 |
logger.warning("validate_config não encontrado em config.py")
|
| 125 |
|
| 126 |
+
# 🔥 CORREÇÃO CRÍTICA: AkiraAPI não aceita parâmetros
|
| 127 |
+
# Versão CORRETA:
|
| 128 |
+
akira_api = AkiraAPI() # ✅ SEM PARÂMETROS!
|
| 129 |
+
|
| 130 |
+
# Versão ERRADA (causa o erro):
|
| 131 |
+
# akira_api = AkiraAPI(config) # ❌ NÃO FAÇA ISSO!
|
| 132 |
+
|
| 133 |
+
app.register_blueprint(akira_api.get_blueprint(), url_prefix="/api")
|
| 134 |
+
logger.success("✓ API V21 integrada com sucesso → /api/akira")
|
| 135 |
|
| 136 |
# Log de APIs configuradas
|
| 137 |
apis_ok = []
|
|
|
|
| 149 |
apis_ok.append("HuggingFace")
|
| 150 |
|
| 151 |
if apis_ok:
|
| 152 |
+
logger.info(f"✅ APIs configuradas: {', '.join(apis_ok)}")
|
| 153 |
else:
|
| 154 |
logger.warning("⚠️ NENHUMA API CONFIGURADA! Configure pelo menos Mistral + Gemini")
|
| 155 |
|
| 156 |
+
except ImportError as e:
|
| 157 |
+
logger.critical(f"❌ ERRO DE IMPORTAÇÃO: {e}")
|
| 158 |
+
logger.critical("Certifique-se de que todos os módulos estão instalados:")
|
| 159 |
+
logger.critical("pip install flask loguru python-dotenv requests")
|
| 160 |
+
sys.exit(1)
|
| 161 |
+
|
| 162 |
except Exception as e:
|
| 163 |
logger.critical(f"❌ FALHA AO CARREGAR API: {e}")
|
| 164 |
import traceback
|
| 165 |
logger.critical(traceback.format_exc())
|
| 166 |
sys.exit(1)
|
| 167 |
|
| 168 |
+
# === ROTA DE FALLBACK (para debugging) ===
|
| 169 |
+
@app.route("/debug")
|
| 170 |
+
def debug():
|
| 171 |
+
"""Página de debugging para verificar configurações"""
|
| 172 |
+
import modules.config as config
|
| 173 |
+
|
| 174 |
+
debug_info = {
|
| 175 |
+
"python_version": sys.version,
|
| 176 |
+
"apis_keys_present": {
|
| 177 |
+
"MISTRAL_API_KEY": bool(config.MISTRAL_API_KEY),
|
| 178 |
+
"GEMINI_API_KEY": bool(config.GEMINI_API_KEY),
|
| 179 |
+
"GROQ_API_KEY": bool(config.GROQ_API_KEY),
|
| 180 |
+
"COHERE_API_KEY": bool(config.COHERE_API_KEY),
|
| 181 |
+
"TOGETHER_API_KEY": bool(config.TOGETHER_API_KEY),
|
| 182 |
+
"HF_API_KEY": bool(config.HF_API_KEY)
|
| 183 |
+
},
|
| 184 |
+
"working_directory": os.getcwd(),
|
| 185 |
+
"files_in_modules": os.listdir("modules") if os.path.exists("modules") else []
|
| 186 |
+
}
|
| 187 |
+
|
| 188 |
+
from flask import jsonify
|
| 189 |
+
return jsonify(debug_info), 200
|
| 190 |
+
|
| 191 |
# === INÍCIO DO SERVIDOR ===
|
| 192 |
if __name__ == "__main__":
|
| 193 |
logger.info("=" * 80)
|
| 194 |
+
logger.info("🔥 AKIRA V21 ULTIMATE — SISTEMA MULTI-API 🔥")
|
| 195 |
logger.info("=" * 80)
|
| 196 |
logger.info(f"Data/hora local: {datetime.datetime.now().strftime('%d/%m/%Y %H:%M:%S')}")
|
| 197 |
logger.info(f"Servidor: http://{config.API_HOST}:{config.API_PORT}")
|
|
|
|
| 199 |
logger.info(" - GET / → Página inicial")
|
| 200 |
logger.info(" - GET /health → Health check")
|
| 201 |
logger.info(" - GET /status → Status das APIs")
|
| 202 |
+
logger.info(" - GET /debug → Debugging")
|
| 203 |
logger.info(" - POST /api/akira → Endpoint principal")
|
| 204 |
logger.info("=" * 80)
|
| 205 |
+
logger.info("✅ Sistema pronto!")
|
| 206 |
+
logger.info("✅ Contexto otimizado (sem repetições)")
|
| 207 |
+
logger.info("✅ Compatibilidade total com index.js V21")
|
| 208 |
+
logger.info("✅ STT Deepgram + TTS Google")
|
| 209 |
+
logger.info("✅ Comandos restritos: Apenas Isaac Quarenta")
|
| 210 |
+
logger.info("=" * 80)
|
| 211 |
logger.info("Aguardando conexões... (Ctrl+C para parar)")
|
| 212 |
|
| 213 |
# Modo de execução
|