File size: 3,104 Bytes
e43cade
 
e75056a
 
e43cade
 
352982b
d63e7ff
 
f216529
d1b4b73
e75056a
e43cade
9ea5a21
 
e43cade
7fd17ee
 
e75056a
 
 
7fd17ee
 
 
e02d426
d63e7ff
e75056a
d63e7ff
 
 
 
 
8a284d2
d63e7ff
 
 
e75056a
d63e7ff
 
e75056a
d63e7ff
e75056a
 
d63e7ff
d1b4b73
aa1e54a
7fd17ee
aa1e54a
 
e75056a
8a284d2
e75056a
 
7fd17ee
e75056a
352982b
e75056a
 
352982b
aa1e54a
 
 
 
e75056a
 
8a284d2
e75056a
 
7fd17ee
e75056a
352982b
e75056a
352982b
0e1f698
352982b
 
 
 
 
 
 
 
 
0e1f698
 
 
 
352982b
0e1f698
 
 
352982b
0e1f698
 
 
 
 
 
352982b
0e1f698
 
352982b
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
"""
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)