|
|
|
|
|
import gradio as gr |
|
|
from transformers import pipeline |
|
|
|
|
|
MODEL_ID = "Salesforce/codet5-base" |
|
|
|
|
|
explain_pipe = pipeline("text2text-generation", model=MODEL_ID) |
|
|
|
|
|
def explicar_codigo(code: str): |
|
|
|
|
|
prompt = f"Por favor, EXPLICA EN ESPAÑOL de forma clara y profesional qué hace este fragmento de código. " \ |
|
|
f"Si hay términos en inglés dé un equivalente en español. " \ |
|
|
f"Explica propósito, parámetros y salida si aplica.\n\nCódigo:\n{code}" |
|
|
out = explain_pipe(prompt, max_length=256, do_sample=False) |
|
|
return out[0]["generated_text"] |
|
|
|
|
|
|
|
|
with gr.Blocks() as demo: |
|
|
gr.Markdown("# Asistente IA — Explicador de código") |
|
|
txt = gr.Textbox(lines=12, placeholder="Pega tu código aquí...") |
|
|
out = gr.Textbox(label="Explicación (en español)") |
|
|
btn = gr.Button("Explicar") |
|
|
btn.click(explicar_codigo, txt, out) |
|
|
|
|
|
|
|
|
|
|
|
gr.HTML(""" |
|
|
<script> |
|
|
window.addEventListener('message', async (event) => { |
|
|
try { |
|
|
if (!event.data || event.data.type !== 'explain') return; |
|
|
const code = event.data.code || ''; |
|
|
// Llamar al propio endpoint del Space |
|
|
const resp = await fetch('/run/predict', { |
|
|
method: 'POST', |
|
|
headers: {'Content-Type': 'application/json'}, |
|
|
body: JSON.stringify({data: [code]}) |
|
|
}); |
|
|
const json = await resp.json(); |
|
|
const text = json?.data?.[0] || '❌ El asistente no devolvió texto.'; |
|
|
// Enviar la respuesta al padre |
|
|
window.parent.postMessage({type: 'explain_result', text: text}, '*'); |
|
|
} catch (e) { |
|
|
window.parent.postMessage({type: 'explain_result', text: '❌ Error interno en el asistente.'}, '*'); |
|
|
console.error('Error interno en Space:', e); |
|
|
} |
|
|
}); |
|
|
</script> |
|
|
""") |
|
|
|
|
|
demo.launch() |
|
|
|