akira / main.py
akra35567's picture
Update main.py
352982b
raw
history blame
3.1 kB
"""
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)