dostoevsky_bart / app.py
Rafaeltak's picture
Update app.py
e526274 verified
import os
import gradio as gr
import torch
from transformers import AutoTokenizer, AutoModelForSeq2SeqLM # Cambiado para coincidir con train.py
import asyncio
import selectors
# Parche para Python 3.13 y Gradio
class SafeSelector(selectors.DefaultSelector):
def get_map(self):
try:
return super().get_map()
except Exception:
return {}
selector = SafeSelector()
loop = asyncio.new_event_loop()
asyncio.set_event_loop(loop)
# --- CONEXI脫N CON EL MODELO ENTRENADO ---
# Usamos la ruta donde train.py guard贸 el modelo final
MODEL_PATH = "final_model"
# Cargamos usando AutoClasses, que es lo que usaste en el entrenamiento
tokenizer = AutoTokenizer.from_pretrained(MODEL_PATH)
model = AutoModelForSeq2SeqLM.from_pretrained(MODEL_PATH)
# ----------------------------------------
def formal_to_dostoevsky(texto_informal):
if not texto_informal.strip():
return "El silencio es, a veces, la confesi贸n m谩s aterradora..."
# Aseguramos que el dispositivo sea correcto (CPU por defecto para inferencia simple)
inputs = tokenizer(
texto_informal,
return_tensors="pt",
truncation=True,
max_length=128 # Ajustado al max_length que usaste en el entrenamiento (128)
)
output_ids = model.generate(
inputs["input_ids"],
attention_mask=inputs["attention_mask"],
max_length=300,
min_length=30,
num_beams=5,
do_sample=True,
temperature=0.75,
top_p=0.80,
no_repeat_ngram_size=3,
repetition_penalty=1.7,
early_stopping=True
)
resultado = tokenizer.decode(output_ids[0], skip_special_tokens=True)
if resultado.strip().lower() == texto_informal.strip().lower():
return f"隆Ah! 驴Acaso no comprendes que... {resultado}? Es la miseria del alma lo que habita en esas palabras."
return resultado
demo = gr.Interface(
fn=formal_to_dostoevsky,
inputs=gr.Textbox(
label="Texto de entrada",
placeholder="Ej: 'Me siento mal porque no tengo dinero y la ciudad es fea.'"
),
outputs=gr.Textbox(label="Versi贸n de Dostoievski"),
title="Dostoevsky-zador",
description="Transforma pensamientos cotidianos en pasajes de angustia existencialista rusa."
)
if __name__ == "__main__":
demo.launch()