JairoCesar commited on
Commit
f5b5d36
·
verified ·
1 Parent(s): 162a368

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +32 -46
app.py CHANGED
@@ -21,63 +21,49 @@ def extract_and_clean_json(text):
21
  return json_str
22
  return None
23
 
24
- def generate_presentation_content(topic, client):
25
- prompt = f"""Crea una presentación de PowerPoint sobre el tema: {topic}.
26
- Genera exactamente 5 diapositivas. Cada diapositiva debe tener un título y contenido.
27
- Formatea la salida como un JSON con la siguiente estructura:
 
28
  {{
29
  "slides": [
30
  {{"title": "Título de la diapositiva 1", "content": "Contenido de la diapositiva 1"}},
31
  {{"title": "Título de la diapositiva 2", "content": "Contenido de la diapositiva 2"}},
32
- ...
 
 
33
  ]
34
  }}
35
- Asegúrate de que la salida sea un JSON válido sin ningún texto adicional antes o después.
36
- No incluyas saltos de línea o caracteres especiales dentro del JSON.
37
- """
38
-
39
- response = client.text_generation(prompt, max_new_tokens=1500, temperature=0.7)
40
-
41
- try:
42
- json_str = extract_and_clean_json(response)
43
- if json_str:
44
- slides_data = json.loads(json_str)
45
- if 'slides' in slides_data and len(slides_data['slides']) == 5:
46
- return slides_data['slides']
47
- else:
48
- raise ValueError("El JSON no contiene exactamente 5 diapositivas")
49
- else:
50
- raise ValueError("No se encontró un JSON válido en la respuesta")
51
- except json.JSONDecodeError as e:
52
- st.error(f"Error al decodificar JSON: {str(e)}")
53
- st.text("JSON procesado (después de limpieza):")
54
- st.code(json_str)
55
- st.text("Respuesta original del modelo:")
56
- st.code(response)
57
- return None
58
- except ValueError as e:
59
- st.error(str(e))
60
- st.text("Respuesta del modelo:")
61
- st.code(response)
62
- return None
63
 
64
- def create_powerpoint(slides, template_path):
65
- prs = Presentation(template_path)
66
 
67
- for slide_data in slides:
68
- slide = prs.slides.add_slide(prs.slide_layouts[1])
69
 
70
- title_shape = slide.shapes.title
71
- content_shape = slide.placeholders[1]
 
 
 
 
 
 
 
72
 
73
- title_shape.text = slide_data['title']
74
- content_shape.text = slide_data['content']
75
-
76
- pptx_buffer = io.BytesIO()
77
- prs.save(pptx_buffer)
78
- pptx_buffer.seek(0)
 
 
79
 
80
- return pptx_buffer
 
 
81
 
82
  def main():
83
  st.title("Generador de presentaciones PowerPoint con IA")
 
21
  return json_str
22
  return None
23
 
24
+ def generate_presentation_content(topic, client, max_retries=3):
25
+ prompt = f"""Genera una presentación de PowerPoint sobre el tema: "{topic}".
26
+ Debes crear exactamente 5 diapositivas. Cada diapositiva debe tener un título y contenido.
27
+ Es CRUCIAL que tu respuesta sea ÚNICAMENTE un JSON válido con la siguiente estructura exacta, sin texto adicional antes o después:
28
+
29
  {{
30
  "slides": [
31
  {{"title": "Título de la diapositiva 1", "content": "Contenido de la diapositiva 1"}},
32
  {{"title": "Título de la diapositiva 2", "content": "Contenido de la diapositiva 2"}},
33
+ {{"title": "Título de la diapositiva 3", "content": "Contenido de la diapositiva 3"}},
34
+ {{"title": "Título de la diapositiva 4", "content": "Contenido de la diapositiva 4"}},
35
+ {{"title": "Título de la diapositiva 5", "content": "Contenido de la diapositiva 5"}}
36
  ]
37
  }}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
38
 
39
+ No incluyas ningún otro texto, explicación o saludo. Solo el JSON.
40
+ """
41
 
42
+ for attempt in range(max_retries):
43
+ response = client.text_generation(prompt, max_new_tokens=1500, temperature=0.7)
44
 
45
+ try:
46
+ json_str = extract_and_clean_json(response)
47
+ if json_str:
48
+ slides_data = json.loads(json_str)
49
+ if 'slides' in slides_data and len(slides_data['slides']) == 5:
50
+ return slides_data['slides']
51
+
52
+ # Si llegamos aquí, el JSON no era válido o no tenía la estructura correcta
53
+ raise ValueError("JSON inválido o estructura incorrecta")
54
 
55
+ except (json.JSONDecodeError, ValueError) as e:
56
+ if attempt == max_retries - 1: # Último intento
57
+ st.error(f"Error al generar el contenido después de {max_retries} intentos: {str(e)}")
58
+ st.text("Última respuesta del modelo:")
59
+ st.code(response)
60
+ return None
61
+ else:
62
+ st.warning(f"Intento {attempt + 1} fallido. Reintentando...")
63
 
64
+ return None
65
+
66
+ # El resto del código (create_powerpoint y main) permanece igual
67
 
68
  def main():
69
  st.title("Generador de presentaciones PowerPoint con IA")