NanoProgramerGamer commited on
Commit
d2421b1
·
verified ·
1 Parent(s): 82de68e

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +35 -40
app.py CHANGED
@@ -1,56 +1,51 @@
 
1
  import gradio as gr
2
  from transformers import pipeline
3
 
4
- explain = pipeline("text2text-generation", model="Salesforce/codet5-base")
 
 
5
 
6
- def explicar_codigo(code):
7
- prompt = f"Explica detalladamente qué hace este fragmento de código Python:\n\n{code}\n\nRESPONDE EN ESPAÑOL."
8
- output = explain(prompt, max_length=256, do_sample=False)
9
- return output[0]["generated_text"]
 
 
 
10
 
11
- # tu interfaz original (ejemplo)
12
- interface = gr.Interface(
13
- fn=explicar_codigo,
14
- inputs=gr.Textbox(lines=15, placeholder="Pega el código Python que quieras entender..."),
15
- outputs="text",
16
- title="Asistente IA para explicar código Python",
17
- description="Pega código Python y este modelo avanzado lo explicará en lenguaje natural.",
18
- theme="default"
19
- )
20
 
21
- # --- INYECTAR HTML/JS para postMessage ---
22
- # Este HTML añade un listener dentro del espacio, que reenvía peticiones internas a /run/predict
23
- message_listener = gr.HTML("""
24
  <script>
25
- window.addEventListener('message', async (e) => {
26
  try {
27
- // validación mínima: esperar mensaje con .type === 'explain' (puedes ajustarlo)
28
- if (!e.data || e.data.type !== 'explain') return;
29
- const code = e.data.code || '';
30
- // mostrar loader si quieres (no obligatorio)
31
- // Llamada interna al endpoint del propio Gradio (misma origen => sin CORS)
32
  const resp = await fetch('/run/predict', {
33
  method: 'POST',
34
- headers: { 'Content-Type': 'application/json' },
35
- body: JSON.stringify({ data: [code] })
36
  });
37
  const json = await resp.json();
38
- const texto = json?.data?.[0] || '❌ El Space respondió sin contenido.';
39
- // devolver al parent
40
- window.parent.postMessage({ type: 'explain_result', text: texto }, '*');
41
- } catch (err) {
42
- window.parent.postMessage({ type: 'explain_result', text: '❌ Error interno en el Space.' }, '*');
 
43
  }
44
  });
45
  </script>
46
- """)
47
-
48
- # Monta la UI: incorpora message_listener en el layout (por ejemplo al final)
49
- # Si usas .launch(layout=...) u otro layout, simplemente incluye 'message_listener' en la lista
50
- app = gr.Blocks()
51
- with app:
52
- interface.render() # si usas Interface
53
- message_listener.render()
54
 
55
- # Lanzar
56
- app.launch()
 
1
+
2
  import gradio as gr
3
  from transformers import pipeline
4
 
5
+ MODEL_ID = "Salesforce/codet5-base" # o describeai/gemini-small si ya lo tienes disponible
6
+
7
+ explain_pipe = pipeline("text2text-generation", model=MODEL_ID)
8
 
9
+ def explicar_codigo(code: str):
10
+ # Forzar respuesta en español
11
+ prompt = f"Por favor, EXPLICA EN ESPAÑOL de forma clara y profesional qué hace este fragmento de código. " \
12
+ f"Si hay términos en inglés dé un equivalente en español. " \
13
+ f"Explica propósito, parámetros y salida si aplica.\n\nCódigo:\n{code}"
14
+ out = explain_pipe(prompt, max_length=256, do_sample=False)
15
+ return out[0]["generated_text"]
16
 
17
+ # Interfaz normal para la página del Space
18
+ with gr.Blocks() as demo:
19
+ gr.Markdown("# Asistente IA — Explicador de código")
20
+ txt = gr.Textbox(lines=12, placeholder="Pega tu código aquí...")
21
+ out = gr.Textbox(label="Explicación (en español)")
22
+ btn = gr.Button("Explicar")
23
+ btn.click(explicar_codigo, txt, out)
 
 
24
 
25
+ # Inyectamos JS que escucha postMessage desde el padre (tu doc) y responde con llamada local al endpoint /run/predict
26
+ # Esto permite que el iframe reciba {type:'explain', code: '...'} y devuelva {type:'explain_result', text:'...'}
27
+ gr.HTML("""
28
  <script>
29
+ window.addEventListener('message', async (event) => {
30
  try {
31
+ if (!event.data || event.data.type !== 'explain') return;
32
+ const code = event.data.code || '';
33
+ // Llamar al propio endpoint del Space
 
 
34
  const resp = await fetch('/run/predict', {
35
  method: 'POST',
36
+ headers: {'Content-Type': 'application/json'},
37
+ body: JSON.stringify({data: [code]})
38
  });
39
  const json = await resp.json();
40
+ const text = json?.data?.[0] || '❌ El asistente no devolvió texto.';
41
+ // Enviar la respuesta al padre
42
+ window.parent.postMessage({type: 'explain_result', text: text}, '*');
43
+ } catch (e) {
44
+ window.parent.postMessage({type: 'explain_result', text: '❌ Error interno en el asistente.'}, '*');
45
+ console.error('Error interno en Space:', e);
46
  }
47
  });
48
  </script>
49
+ """)
 
 
 
 
 
 
 
50
 
51
+ demo.launch()