File size: 1,682 Bytes
64148ba
f6da89a
64148ba
0545b63
dd4ac0c
0545b63
 
 
64148ba
 
 
 
0545b63
64148ba
dd4ac0c
64148ba
 
 
 
 
0545b63
64148ba
 
0545b63
64148ba
 
dd4ac0c
 
64148ba
 
0545b63
64148ba
 
0545b63
64148ba
 
 
 
 
0545b63
64148ba
 
 
 
 
0545b63
64148ba
 
 
 
 
0545b63
64148ba
 
dd4ac0c
 
64148ba
 
 
dd4ac0c
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
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
    }