daqc commited on
Commit
158bcdf
·
verified ·
1 Parent(s): 6769926

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +83 -17
app.py CHANGED
@@ -199,34 +199,90 @@ def generate_response(
199
  except Exception as e:
200
  return [ChatMessage(role="assistant", content=f"Error: {str(e)}")]
201
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
202
  def actualizar_personajes(pais_seleccionado):
203
  """Actualiza la galería de personajes según el país seleccionado"""
204
  global current_personajes
 
 
 
 
205
  personajes = PERSONAJES_POR_PAIS.get(pais_seleccionado, [])
206
  current_personajes = personajes
207
 
208
  if not personajes:
209
- return [], "Selecciona un país para ver sus personajes"
210
 
211
- # Crear lista de imágenes para la galería
212
- imagenes = []
213
- for p in personajes:
214
- if os.path.exists(p["imagen"]):
215
- imagenes.append(p["imagen"])
 
 
 
 
 
 
 
 
 
 
 
 
 
216
  else:
217
- # Imagen placeholder si no existe
218
- imagenes.append("https://via.placeholder.com/100x100.png?text=No+Image")
 
219
 
220
- return imagenes, f"Personajes de {pais_seleccionado}"
 
 
 
 
 
 
 
 
 
 
 
 
 
221
 
222
  def crear_prompt_desde_personaje(evt: gr.SelectData):
223
  """Crea un prompt basado en el personaje seleccionado"""
224
  global current_personajes
225
 
226
  try:
227
- if evt.index is not None and evt.index < len(current_personajes):
228
  personaje = current_personajes[evt.index]
229
- return f"Crea una historia sobre {personaje['nombre']}, {personaje['descripcion']}"
 
230
  else:
231
  return "Crea una historia sobre un personaje mítico"
232
  except Exception as e:
@@ -278,14 +334,24 @@ with gr.Blocks(title="Iberotales", css=custom_css) as demo:
278
  container=False
279
  )
280
 
 
281
  galeria_personajes = gr.Gallery(
282
- value=[],
283
- label="Personajes",
284
- show_label=False,
285
  elem_id="galeria",
286
  columns=1,
287
  rows=4,
288
- height=350
 
 
 
 
 
 
 
 
 
289
  )
290
 
291
  # Panel derecho - Chat
@@ -320,14 +386,14 @@ with gr.Blocks(title="Iberotales", css=custom_css) as demo:
320
  pais_dropdown.change(
321
  fn=actualizar_personajes,
322
  inputs=[pais_dropdown],
323
- outputs=[galeria_personajes]
324
  )
325
 
326
  # Cargar personajes iniciales
327
  demo.load(
328
  fn=actualizar_personajes,
329
  inputs=[pais_dropdown],
330
- outputs=[galeria_personajes]
331
  )
332
 
333
  # Crear prompt desde galería
 
199
  except Exception as e:
200
  return [ChatMessage(role="assistant", content=f"Error: {str(e)}")]
201
 
202
+ def crear_imagen_placeholder():
203
+ """Crea una imagen placeholder simple usando PIL"""
204
+ try:
205
+ from PIL import Image, ImageDraw, ImageFont
206
+ import io
207
+ import base64
208
+
209
+ # Crear imagen simple
210
+ img = Image.new('RGB', (100, 100), color='lightgray')
211
+ draw = ImageDraw.Draw(img)
212
+
213
+ # Dibujar texto simple
214
+ draw.text((10, 40), "No Image", fill='black')
215
+
216
+ # Convertir a bytes
217
+ buffer = io.BytesIO()
218
+ img.save(buffer, format='PNG')
219
+ img_str = base64.b64encode(buffer.getvalue()).decode()
220
+
221
+ return f"data:image/png;base64,{img_str}"
222
+ except:
223
+ # Fallback: retornar None si no se puede crear la imagen
224
+ return None
225
+
226
  def actualizar_personajes(pais_seleccionado):
227
  """Actualiza la galería de personajes según el país seleccionado"""
228
  global current_personajes
229
+
230
+ if not pais_seleccionado:
231
+ return gr.Gallery(value=None, visible=False), "Selecciona un país para ver sus personajes"
232
+
233
  personajes = PERSONAJES_POR_PAIS.get(pais_seleccionado, [])
234
  current_personajes = personajes
235
 
236
  if not personajes:
237
+ return gr.Gallery(value=None, visible=False), "No hay personajes disponibles para este país"
238
 
239
+ # Crear lista de imágenes válidas para la galería
240
+ imagenes_validas = []
241
+
242
+ for i, personaje in enumerate(personajes):
243
+ imagen_path = personaje["imagen"]
244
+
245
+ # Verificar si la imagen existe
246
+ if os.path.exists(imagen_path) and os.path.isfile(imagen_path):
247
+ try:
248
+ # Verificar que es una imagen válida
249
+ from PIL import Image
250
+ with Image.open(imagen_path) as img:
251
+ img.verify() # Verificar que la imagen es válida
252
+ imagenes_validas.append(imagen_path)
253
+ except Exception as e:
254
+ print(f"Error al verificar imagen {imagen_path}: {e}")
255
+ # Skip esta imagen si hay error
256
+ continue
257
  else:
258
+ print(f"Imagen no encontrada: {imagen_path}")
259
+ # Skip imágenes que no existen
260
+ continue
261
 
262
+ # Si no hay imágenes válidas, mostrar mensaje
263
+ if not imagenes_validas:
264
+ return gr.Gallery(
265
+ value=None,
266
+ visible=True,
267
+ label=f"⚠️ Imágenes no encontradas para {pais_seleccionado}"
268
+ ), f"Las imágenes para {pais_seleccionado} no están disponibles"
269
+
270
+ # Actualizar la galería con las imágenes válidas
271
+ return gr.Gallery(
272
+ value=imagenes_validas,
273
+ visible=True,
274
+ label=f"Personajes de {pais_seleccionado}"
275
+ ), f"Mostrando {len(imagenes_validas)} personajes de {pais_seleccionado}"
276
 
277
  def crear_prompt_desde_personaje(evt: gr.SelectData):
278
  """Crea un prompt basado en el personaje seleccionado"""
279
  global current_personajes
280
 
281
  try:
282
+ if evt.index is not None and 0 <= evt.index < len(current_personajes):
283
  personaje = current_personajes[evt.index]
284
+ prompt = f"Crea una historia sobre {personaje['nombre']}: {personaje['descripcion']}"
285
+ return prompt
286
  else:
287
  return "Crea una historia sobre un personaje mítico"
288
  except Exception as e:
 
334
  container=False
335
  )
336
 
337
+ # Inicializar la galería vacía
338
  galeria_personajes = gr.Gallery(
339
+ value=None,
340
+ label="Selecciona un país",
341
+ show_label=True,
342
  elem_id="galeria",
343
  columns=1,
344
  rows=4,
345
+ height=350,
346
+ type="filepath" # Especificar el tipo explícitamente
347
+ )
348
+
349
+ # Mensaje de estado
350
+ status_msg = gr.Textbox(
351
+ value="Selecciona un país para ver sus personajes",
352
+ show_label=False,
353
+ interactive=False,
354
+ container=False
355
  )
356
 
357
  # Panel derecho - Chat
 
386
  pais_dropdown.change(
387
  fn=actualizar_personajes,
388
  inputs=[pais_dropdown],
389
+ outputs=[galeria_personajes, status_msg]
390
  )
391
 
392
  # Cargar personajes iniciales
393
  demo.load(
394
  fn=actualizar_personajes,
395
  inputs=[pais_dropdown],
396
+ outputs=[galeria_personajes, status_msg]
397
  )
398
 
399
  # Crear prompt desde galería