nomadeats / core /description.py
carreroguille's picture
Upload 15 files
00fddaf verified
Raw
History Blame Contribute Delete
2.03 kB
"""
Paso 3: Generación de descripciones culturales con GPT-2 Spanish.
"""
import torch
from core.models import ModelManager
DETAIL_INSTRUCTIONS = {
1: "en 1 frase breve",
2: "en 2-3 frases",
3: "en 3-4 frases detalladas con contexto histórico",
}
def generate_description(
dish_name: str,
manager: ModelManager,
english_name: str = "",
detail_level: int = 2,
) -> str:
"""
Genera descripción cultural del plato en español.
Args:
dish_name: Nombre del plato en español.
manager: ModelManager con los modelos cargados.
english_name: Traducción al inglés (opcional).
detail_level: 1=breve, 2=medio, 3=detallado.
Returns:
Descripción del plato en español.
"""
prompt = (
f'Describe el plato español "{dish_name}" para turistas extranjeros '
f"{DETAIL_INSTRUCTIONS[detail_level]}. "
"Incluye: ingredientes principales, método de preparación, "
"y significado cultural.\n\nDescripción:"
)
try:
inputs = manager.description_tokenizer(
prompt, return_tensors="pt", padding=True
).to(manager.device)
with torch.no_grad():
outputs = manager.description_model.generate(
**inputs,
max_new_tokens=150 if detail_level <= 2 else 200,
temperature=0.7,
top_p=0.9,
do_sample=True,
pad_token_id=manager.description_tokenizer.eos_token_id,
repetition_penalty=1.2,
)
generated_text = manager.description_tokenizer.decode(
outputs[0], skip_special_tokens=True
)
description = generated_text.replace(prompt, "").strip()
description = description.split("\n")[0][:500]
return description if description else "Descripción no disponible."
except Exception as e:
print(f"❌ Error generando descripción: {e}")
return "Error al generar descripción."