dostoevsky_bart / app.py
ivanmorals's picture
fix penalty
947d6c9 verified
import os
import gradio as gr
import torch
from transformers import BartForConditionalGeneration, BartTokenizer
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 {}
# Aplicar el parche antes de importar Transformers
selector = SafeSelector()
loop = asyncio.new_event_loop()
asyncio.set_event_loop(loop)
# ID de tu repositorio con los archivos de image_80ac1b.png
model_id = "ivanmorals/dostoevsky_bart"
# Carga explícita del modelo y tokenizador
tokenizer = BartTokenizer.from_pretrained(model_id)
model = BartForConditionalGeneration.from_pretrained(model_id)
def formal_to_dostoevsky(texto_informal):
# Aseguramos que el input no esté vacío
if not texto_informal.strip():
return "El silencio es, a veces, la confesión más aterradora..."
inputs = tokenizer(
texto_informal,
return_tensors="pt",
truncation=True,
max_length=512
)
# Forzamos parámetros de generación específicos para transformación de estilo
output_ids = model.generate(
inputs["input_ids"],
attention_mask=inputs["attention_mask"],
max_length=300,
min_length=30, # Forzamos a que desarrolle la idea
num_beams=5,
do_sample=True, # Necesario para usar temperature
temperature=0.75,
top_p=0.80,
no_repeat_ngram_size=3,
repetition_penalty=1.7,
early_stopping=True
)
# Decodificar omitiendo los tokens especiales
resultado = tokenizer.decode(output_ids[0], skip_special_tokens=True)
# Validación: Si el modelo sigue devolviendo lo mismo, forzamos un post-procesado básico
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
# Interfaz enfocada en la transformación de estilo
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."
)
demo.launch()