File size: 4,754 Bytes
6a0ab84 26c60ac ea18a0a 26c60ac ea18a0a 26c60ac ea18a0a 26c60ac ea18a0a 26c60ac ea18a0a 26c60ac 74afc8b 26c60ac ea18a0a 26c60ac |
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 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 |
import gradio as gr
from transformers import GPT2LMHeadModel, GPT2Tokenizer
import torch
# Configurar el dispositivo (CPU)
device = torch.device("cpu")
# Cargar el modelo y tokenizer
print("Cargando modelo DistilGPT-2...")
model_name = "distilgpt2"
tokenizer = GPT2Tokenizer.from_pretrained(model_name)
model = GPT2LMHeadModel.from_pretrained(model_name)
# Mover modelo a CPU y ponerlo en modo evaluación
model.to(device)
model.eval()
# Configurar pad_token si no existe
if tokenizer.pad_token is None:
tokenizer.pad_token = tokenizer.eos_token
def autocomplete_text(input_text, max_tokens=20):
"""
Autocompleta el texto de entrada usando DistilGPT-2
Args:
input_text (str): Texto inicial a completar
max_tokens (int): Número máximo de tokens a generar
Returns:
str: Solo la parte nueva generada (sin el input original)
"""
if not input_text.strip():
return "Por favor, ingresa algún texto para completar."
try:
# Tokenizar el texto de entrada
inputs = tokenizer.encode(input_text, return_tensors="pt", padding=True)
inputs = inputs.to(device)
# Generar texto
with torch.no_grad():
outputs = model.generate(
inputs,
max_new_tokens=max_tokens,
num_return_sequences=1,
temperature=0.7,
do_sample=True,
pad_token_id=tokenizer.eos_token_id,
eos_token_id=tokenizer.eos_token_id,
attention_mask=torch.ones_like(inputs)
)
# Decodificar el resultado completo
generated_text = tokenizer.decode(outputs[0], skip_special_tokens=True)
# Extraer solo la parte nueva (sin el input original)
new_text = generated_text[len(input_text):].strip()
if not new_text:
return "No se pudo generar texto adicional."
return new_text
except Exception as e:
return f"Error al generar texto: {str(e)}"
def create_autocomplete_interface():
"""
Crea la interfaz de autocompletar dentro de gr.Blocks()
"""
with gr.Blocks(title="Autocompletar Texto") as demo:
gr.Markdown("# 🤖 Autocompletar Texto")
gr.Markdown("Escribe el inicio de una frase y la IA la completará por ti.")
with gr.Tab("Autocompletar"):
with gr.Row():
with gr.Column():
input_textbox = gr.Textbox(
label="Texto a completar",
placeholder="Escribe el inicio de tu frase aquí...",
lines=3,
max_lines=5
)
generate_btn = gr.Button("Completar Texto", variant="primary")
with gr.Column():
output_textbox = gr.Textbox(
label="Texto generado",
placeholder="Aquí aparecerá la continuación...",
lines=3,
max_lines=5,
interactive=False
)
# Conectar el botón con la función
generate_btn.click(
fn=autocomplete_text,
inputs=[input_textbox],
outputs=[output_textbox]
)
# También permitir Enter para generar
input_textbox.submit(
fn=autocomplete_text,
inputs=[input_textbox],
outputs=[output_textbox]
)
# Pestaña adicional con ejemplos
with gr.Tab("Ejemplos"):
gr.Markdown("""
### Ejemplos de uso:
**Entrada:** "El clima de hoy está"
**Salida:** "muy agradable y soleado"
**Entrada:** "Me gusta mucho"
**Salida:** "pasar tiempo con mi familia"
**Entrada:** "Para hacer una buena comida necesitas"
**Salida:** "ingredientes frescos y mucha paciencia"
""")
return demo
# Crear y lanzar la aplicación
if __name__ == "__main__":
print("Iniciando aplicación de autocompletar...")
# Crear la interfaz
app = create_autocomplete_interface()
# Lanzar la aplicación
app.launch(
share=False, # Cambiar a True si quieres compartir públicamente
server_name="0.0.0.0", # Permite acceso desde otras máquinas en la red local
server_port=7860, # Puerto por defecto de Gradio
show_error=True,
debug=False
) |