File size: 5,009 Bytes
6a0ab84 26c60ac ea18a0a 26c60ac ea18a0a 26c60ac d3afa04 26c60ac ea18a0a 26c60ac ea18a0a 26c60ac ea18a0a 26c60ac d3afa04 26c60ac d3afa04 26c60ac 74afc8b 26c60ac d3afa04 26c60ac d3afa04 26c60ac d3afa04 26c60ac d3afa04 26c60ac d3afa04 26c60ac d3afa04 26c60ac d3afa04 26c60ac d3afa04 26c60ac ea18a0a 26c60ac d3afa04 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 |
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 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
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 create_autocomplete_interface():
"""
Crea la interfaz de autocompletar dentro de gr.Blocks()
"""
with gr.Blocks(title="Autocompletar C贸digo") as demo:
gr.Markdown("# 馃 Autocompletar C贸digo")
gr.Markdown("Escribe el inicio de tu c贸digo y la IA lo completar谩 por ti.")
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]
)
# Pesta帽a adicional con ejemplos
with gr.Tab("Ejemplos"):
gr.Markdown("""
### Ejemplos de uso:
**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())"
**Entrada:** "class Calculator:"
**Salida:** "\\n def __init__(self):\\n pass"
""")
return demo
# Crear y lanzar la aplicaci贸n
if __name__ == "__main__":
print("Iniciando aplicaci贸n de autocompletar 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
) |