File size: 2,076 Bytes
d2421b1
9c48d88
 
 
d2421b1
 
 
9c48d88
d2421b1
 
 
 
 
 
 
9c48d88
d2421b1
 
 
 
 
 
 
2685982
d2421b1
 
 
82de68e
d2421b1
82de68e
d2421b1
 
 
82de68e
 
d2421b1
 
82de68e
 
d2421b1
 
 
 
 
 
82de68e
 
 
d2421b1
82de68e
d2421b1
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

import gradio as gr
from transformers import pipeline

MODEL_ID = "Salesforce/codet5-base"  # o describeai/gemini-small si ya lo tienes disponible

explain_pipe = pipeline("text2text-generation", model=MODEL_ID)

def explicar_codigo(code: str):
    # Forzar respuesta en español
    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"]

# Interfaz normal para la página del Space
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)

    # Inyectamos JS que escucha postMessage desde el padre (tu doc) y responde con llamada local al endpoint /run/predict
    # Esto permite que el iframe reciba {type:'explain', code: '...'} y devuelva {type:'explain_result', text:'...'}
    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()