IA_App / app.py
milton124's picture
Update app.py
64148ba verified
import os, json
from fastapi import FastAPI
from pydantic import BaseModel
from huggingface_hub import hf_hub_download
from llama_cpp import Llama
app = FastAPI()
# --- CONFIGURA ESTO ---
MODEL_REPO = "TheBloke/TinyLlama-1.1B-Chat-v0.3-GGUF" # ejemplo
MODEL_FILE = "tinyllama-1.1b-chat-v0.3.Q4_K_M.gguf" # ejemplo exacto del repo
# -----------------------
MODEL_PATH = f"/dev/shm/{MODEL_FILE}"
# Descargar a RAM si no existe
if not os.path.exists(MODEL_PATH):
print("Descargando modelo a /dev/shm (RAM)...")
# Si necesita token: use_auth_token=os.getenv("HF_TOKEN")
hf_hub_download(repo_id=MODEL_REPO, filename=MODEL_FILE, local_dir="/dev/shm")
print("Cargando modelo en RAM (llama_cpp)...")
llm = Llama(model_path=MODEL_PATH, n_ctx=2048, n_threads=4)
# Cargar himnos.jsonl en RAM
HIMNOS = {}
with open("himnos.jsonl", "r", encoding="utf-8") as f:
for line in f:
item = json.loads(line)
HIMNOS[int(item["id"])] = item
class ExplainRequest(BaseModel):
id: int
@app.post("/explicar")
def explicar(req: ExplainRequest):
himno = HIMNOS.get(req.id)
if not himno:
return {"error": "Himno no encontrado", "id": req.id}
prompt = f"""Eres un asistente cristiano que explica himnos de forma breve y devocional.
Himno #{himno['id']}
Título: {himno['titulo']}
Letra:
{himno['letra']}
Explica brevemente:
- Mensaje principal
- Aplicación práctica (1–2 frases)
- Versículos relacionados (si procede)
"""
out = llm(prompt, max_tokens=300, temperature=0.7)
texto = out["choices"][0]["text"].strip()
return {
"id": himno["id"],
"titulo": himno["titulo"],
"explicacion": texto
}