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
}
|