File size: 9,344 Bytes
6a0ab84 5483c4f ea18a0a 26c60ac ea18a0a 5483c4f d3afa04 26c60ac ea18a0a 26c60ac ea18a0a 26c60ac ea18a0a 5483c4f 26c60ac d3afa04 26c60ac d3afa04 26c60ac 74afc8b 5483c4f 26c60ac 5483c4f 26c60ac 5483c4f 26c60ac 5483c4f 26c60ac d3afa04 26c60ac d3afa04 26c60ac d3afa04 26c60ac 5483c4f 26c60ac 5483c4f 26c60ac d3afa04 26c60ac d3afa04 26c60ac d3afa04 5483c4f 26c60ac ea18a0a 26c60ac 5483c4f 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 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 |
import gradio as gr
from transformers import GPT2LMHeadModel, GPT2Tokenizer, BartForConditionalGeneration, BartTokenizer
import torch
# Configurar el dispositivo (CPU)
device = torch.device("cpu")
# Cargar el modelo y tokenizer para autocompletar c贸digo
print("Cargando modelo code-autocomplete-gpt2-base...")
model_name = "shibing624/code-autocomplete-gpt2-base"
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
# Cargar BART para simplificaci贸n de texto
print("Cargando modelo BART para simplificaci贸n...")
bart_model_name = "facebook/bart-base"
bart_tokenizer = BartTokenizer.from_pretrained(bart_model_name)
bart_model = BartForConditionalGeneration.from_pretrained(bart_model_name)
# Mover BART a CPU y ponerlo en modo evaluaci贸n
bart_model.to(device)
bart_model.eval()
def autocomplete_text(input_text, max_tokens=20):
"""
Autocompleta el texto/c贸digo de entrada usando code-autocomplete-gpt2-base
Args:
input_text (str): Texto/c贸digo 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 simplify_text(input_text, max_length=150):
"""
Simplifica texto complejo usando BART
Args:
input_text (str): Texto complejo a simplificar
max_length (int): Longitud m谩xima del texto simplificado
Returns:
str: Texto simplificado con palabras m谩s sencillas
"""
if not input_text.strip():
return "Por favor, ingresa alg煤n texto para simplificar."
try:
# Crear un prompt para guiar la simplificaci贸n
prompt = f"Simplify this text using easier words: {input_text}"
# Tokenizar el texto
inputs = bart_tokenizer.encode(prompt, return_tensors="pt", max_length=512, truncation=True)
inputs = inputs.to(device)
# Generar texto simplificado
with torch.no_grad():
outputs = bart_model.generate(
inputs,
max_length=max_length,
min_length=20,
num_return_sequences=1,
temperature=0.7,
do_sample=True,
early_stopping=True,
no_repeat_ngram_size=2,
pad_token_id=bart_tokenizer.pad_token_id,
eos_token_id=bart_tokenizer.eos_token_id
)
# Decodificar el resultado
simplified_text = bart_tokenizer.decode(outputs[0], skip_special_tokens=True)
# Limpiar el texto (remover el prompt si aparece)
if simplified_text.startswith("Simplify this text using easier words:"):
simplified_text = simplified_text.replace("Simplify this text using easier words:", "").strip()
if not simplified_text:
return "No se pudo simplificar el texto."
return simplified_text
except Exception as e:
return f"Error al simplificar texto: {str(e)}"
def create_autocomplete_interface():
"""
Crea la interfaz con autocompletar y simplificaci贸n dentro de gr.Blocks()
"""
with gr.Blocks(title="Asistente de Texto y C贸digo") as demo:
gr.Markdown("# 馃 Asistente de Texto y C贸digo")
gr.Markdown("Herramientas para autocompletar c贸digo y simplificar textos complejos.")
with gr.Tab("Autocompletar"):
with gr.Row():
with gr.Column():
input_textbox = gr.Textbox(
label="C贸digo a completar",
placeholder="def fibonacci(n):",
lines=5,
max_lines=10
)
generate_btn = gr.Button("Completar C贸digo", variant="primary")
with gr.Column():
output_textbox = gr.Textbox(
label="C贸digo generado",
placeholder="Aqu铆 aparecer谩 la continuaci贸n del c贸digo...",
lines=5,
max_lines=10,
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]
)
# Nueva pesta帽a para simplificar texto
with gr.Tab("Simplificar Texto"):
with gr.Row():
with gr.Column():
text_input = gr.Textbox(
label="Texto complejo a simplificar",
placeholder="Ingresa aqu铆 el texto dif铆cil de entender...",
lines=6,
max_lines=12
)
simplify_btn = gr.Button("Simplificar Texto", variant="secondary")
with gr.Column():
simplified_output = gr.Textbox(
label="Texto simplificado",
placeholder="Aqu铆 aparecer谩 el texto m谩s f谩cil de entender...",
lines=6,
max_lines=12,
interactive=False
)
# Conectar el bot贸n de simplificar
simplify_btn.click(
fn=simplify_text,
inputs=[text_input],
outputs=[simplified_output]
)
# Tambi茅n permitir Enter para simplificar
text_input.submit(
fn=simplify_text,
inputs=[text_input],
outputs=[simplified_output]
)
# Pesta帽a adicional con ejemplos
with gr.Tab("Ejemplos"):
gr.Markdown("""
### Ejemplos de Autocompletado de C贸digo:
**Entrada:** "def fibonacci(n):"
**Salida:** "\\n if n <= 1:\\n return n\\n return fibonacci(n-1) + fibonacci(n-2)"
**Entrada:** "for i in range("
**Salida:** "10):\\n print(i)"
**Entrada:** "import pandas as pd\\ndf = pd.read_csv("
**Salida:** "'data.csv')\\nprint(df.head())"
---
### Ejemplos de Simplificaci贸n de Texto:
**Texto complejo:** "La implementaci贸n de algoritmos de machine learning requiere una comprensi贸n profunda de estructuras de datos y t茅cnicas de optimizaci贸n."
**Texto simple:** "Para usar inteligencia artificial necesitas entender bien c贸mo organizar datos y mejorar programas."
**Texto complejo:** "El protocolo de comunicaci贸n as铆ncrona permite la transmisi贸n de datos sin sincronizaci贸n temporal."
**Texto simple:** "Este m茅todo permite enviar informaci贸n sin esperar a que termine el env铆o anterior."
""")
return demo
# Crear y lanzar la aplicaci贸n
if __name__ == "__main__":
print("Iniciando aplicaci贸n de asistente de texto y c贸digo...")
# 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
) |