""" main.py - Entry point oficial para Hugging Face Spaces Akira com OpenHermes GGUF + LoRA angolano + APIs + DB persistente TUDO FUNCIONANDO NO HF SPACES CPU FREE! """ import os import logging from loguru import logger from huggingface_hub import login # ========================== # 1. DIRETÓRIOS PERSISTENTES # ========================== DATA_DIR = "/home/user/data" FINETUNED_DIR = "/home/user/data/finetuned_hermes" os.makedirs(DATA_DIR, exist_ok=True) os.makedirs(FINETUNED_DIR, exist_ok=True) # ========================== # 2. CONFIG GLOBAL # ========================== import modules.config as config config.DB_PATH = os.path.join(DATA_DIR, "akira.db") config.FINETUNED_PATH = FINETUNED_DIR # ========================== # 3. HF LOGIN (SECRET) # ========================== HF_TOKEN = os.getenv("HF_TOKEN") if HF_TOKEN: try: login(token=HF_TOKEN) logger.info("HF LOGIN OK COM TOKEN DO SECRET!") except Exception as e: logger.warning(f"HF LOGIN FALHOU: {e}") else: logger.info("Sem HF_TOKEN → modelos públicos OK") # ========================== # 4. LOGS BONITOS # ========================== logger.info("GGUF OpenHermes Q4_K_M já baixado no build → TUDO PRONTO!") logger.info("Akira com sotaque de Luanda carregando...") # ========================== # 5. CARREGA O LOCAL LLM (GGUF + LoRA) # ========================== from modules.local_llm import HermesLLM if HermesLLM.is_available(): logger.info("OpenHermes 2.5 Q4_K_M + LoRA → ONLINE EM 4.8 GB!") logger.info("AKIRA COM SOTAQUE DE LUANDA 100% ATIVA!") else: logger.warning("Modelo local off → usando APIs (Mistral/Gemini)") # ========================== # 6. INICIA BANCO DE DADOS # ========================== from modules.database import Database db = Database(config.DB_PATH) # ========================== # 7. INICIA TREINAMENTO PERIÓDICO # ========================== from modules.treinamento import Treinamento treino = Treinamento(db, interval_hours=4) if getattr(config, "START_PERIODIC_TRAINER", True): treino.start_periodic_training() logger.info("Treinamento LoRA angolano ativo a cada 4h!") # ========================== # 8. CRIA A APLICAÇÃO FLASK (COM AkiraAPI) # ========================== from modules.api import AkiraAPI def create_app(): logger.info("Iniciando AkiraAPI com OpenHermes GGUF + LoRA angolano...") try: akira = AkiraAPI(config) logger.info("AKIRAAPI CARREGADA COM SUCESSO!") return akira.app except Exception as e: logger.exception(f"ERRO AO INICIAR AkiraAPI: {e}") raise app = create_app() # ========================== # ROTAS DE SAÚDE # ========================== @app.route("/") def index(): return "AKIRA IA ONLINE! Bué fixe, kota! Vamos kandandar!", 200 @app.route("/health") def health(): return "OK", 200 # ========================== # EXECUÇÃO (NUNCA MAIS LOOP INFINITO AQUI!) # ========================== if __name__ == "__main__": logger.info("SERVIDOR FLASK RODANDO EM http://0.0.0.0:7860") app.run(host="0.0.0.0", port=7860, debug=False, threaded=True)