jseb4s commited on
Commit
185414c
·
verified ·
1 Parent(s): a45fcc8

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +38 -47
app.py CHANGED
@@ -1,28 +1,20 @@
1
  from smolagents import CodeAgent, DuckDuckGoSearchTool, HfApiModel, load_tool, tool
2
- import datetime
3
  import requests
4
- import pytz
5
  import yaml
6
  from tools.final_answer import FinalAnswerTool
7
- from Gradio_UI import GradioUI
8
  import gradio as gr
9
- from PIL import Image
10
- import tempfile
11
- import os
12
- import base64
13
- from io import BytesIO
14
 
15
  # Import tool from Hub
16
  image_generation_tool = load_tool("agents-course/text-to-image", trust_remote_code=True)
17
 
18
  ##############
19
  @tool
20
- def get_game_of_thrones_character_info(character_name: str) -> dict:
21
- """A tool that fetches information about a character from Game of Thrones, including their house and a generated image.
22
  Args:
23
- character_name: The name of the character (e.g., 'Jon Snow').
24
  Returns:
25
- A dictionary containing the character info and the base64-encoded image.
26
  """
27
  base_url = "https://anapioficeandfire.com/api/characters"
28
 
@@ -34,14 +26,14 @@ def get_game_of_thrones_character_info(character_name: str) -> dict:
34
  characters = response.json()
35
 
36
  if not characters:
37
- return {"error": f"No se encontró información para el personaje: {character_name}"}
38
 
39
  # Tomar el primer resultado (puede haber varios con el mismo nombre)
40
  character = characters[0]
41
 
42
  # Extraer información relevante del personaje
43
  name = character.get("name", "Desconocido")
44
- gender = character.get("gender", "Desconocido")
45
  culture = character.get("culture", "Desconocido")
46
  born = character.get("born", "Desconocido")
47
  died = character.get("died", "Aún vivo")
@@ -58,39 +50,37 @@ def get_game_of_thrones_character_info(character_name: str) -> dict:
58
  house_name = house_data.get("name", "Desconocido")
59
  houses.append(house_name)
60
 
61
- # Generar una descripción para la imagen
62
- image_prompt = (
63
- f"Personaje de Juego de Tronos: {name}, "
64
- f"Género: {gender}, Cultura: {culture}, "
65
- f"Títulos: {titles}, Alias: {aliases}, "
66
- f"Casa: {', '.join(houses) if houses else 'Ninguna'}"
67
- )
 
 
68
 
69
- # Generar la imagen usando la herramienta de generación de imágenes
70
- image = image_generation_tool(image_prompt)
71
-
72
- # Convertir la imagen a base64
73
- buffered = BytesIO()
74
- image.save(buffered, format="JPEG")
75
- img_base64 = base64.b64encode(buffered.getvalue()).decode("utf-8")
76
-
77
- # Formatear la respuesta
78
- result = f"Información sobre {name}:\n"
79
- result += f"- Gender: {gender}\n"
80
- result += f"- Culture: {culture}\n"
81
- result += f"- Born: {born}\n"
82
- result += f"- Died: {died}\n"
83
- result += f"- Titles: {titles}\n"
84
- result += f"- Aliases: {aliases}\n"
85
  if houses:
86
- result += f"- House(s): {', '.join(houses)}\n"
 
 
 
 
87
  else:
88
- result += "- Casa(s): Ninguna o desconocida\n"
89
 
90
- return {"info": result, "image": f"data:image/jpeg;base64,{img_base64}"}
91
 
92
  except Exception as e:
93
- return {"error": f"Error al obtener información del personaje: {str(e)}"}
94
 
95
  ###############
96
 
@@ -124,16 +114,17 @@ agent = CodeAgent(
124
  ##############
125
  def display_character_info(character_name):
126
  result = get_game_of_thrones_character_info(character_name)
127
- if "error" in result:
128
- return result["error"], None
129
- return result["info"], result["image"]
130
 
 
131
  interface = gr.Interface(
132
  fn=display_character_info,
133
- inputs="text",
134
- outputs=["text", "image"],
135
  title="Información de Personajes de Juego de Tronos",
136
- description="Ingresa el nombre de un personaje de Juego de Tronos para obtener información y una imagen generada."
 
 
137
  )
138
 
139
  interface.launch()
 
1
  from smolagents import CodeAgent, DuckDuckGoSearchTool, HfApiModel, load_tool, tool
 
2
  import requests
 
3
  import yaml
4
  from tools.final_answer import FinalAnswerTool
 
5
  import gradio as gr
 
 
 
 
 
6
 
7
  # Import tool from Hub
8
  image_generation_tool = load_tool("agents-course/text-to-image", trust_remote_code=True)
9
 
10
  ##############
11
  @tool
12
+ def get_game_of_thrones_character_info(character_name: str) -> str:
13
+ """Una herramienta que obtiene información detallada sobre un personaje de Juego de Tronos.
14
  Args:
15
+ character_name: El nombre del personaje (por ejemplo, 'Jon Snow').
16
  Returns:
17
+ Un string con la información detallada del personaje.
18
  """
19
  base_url = "https://anapioficeandfire.com/api/characters"
20
 
 
26
  characters = response.json()
27
 
28
  if not characters:
29
+ return f"No se encontró información para el personaje: {character_name}"
30
 
31
  # Tomar el primer resultado (puede haber varios con el mismo nombre)
32
  character = characters[0]
33
 
34
  # Extraer información relevante del personaje
35
  name = character.get("name", "Desconocido")
36
+ gender = "Masculino" if character.get("gender", "").lower() == "male" else "Femenino"
37
  culture = character.get("culture", "Desconocido")
38
  born = character.get("born", "Desconocido")
39
  died = character.get("died", "Aún vivo")
 
50
  house_name = house_data.get("name", "Desconocido")
51
  houses.append(house_name)
52
 
53
+ # Obtener información de los libros en los que aparece
54
+ books = []
55
+ if "books" in character:
56
+ for book_url in character["books"]:
57
+ book_response = requests.get(book_url)
58
+ book_response.raise_for_status()
59
+ book_data = book_response.json()
60
+ book_name = book_data.get("name", "Desconocido")
61
+ books.append(book_name)
62
 
63
+ # Formatear la respuesta en español
64
+ result = f"**Información sobre {name}**:\n\n"
65
+ result += f"- **Género**: {gender}\n"
66
+ result += f"- **Cultura**: {culture}\n"
67
+ result += f"- **Nacimiento**: {born}\n"
68
+ result += f"- **Muerte**: {died}\n"
69
+ result += f"- **Títulos**: {titles}\n"
70
+ result += f"- **Alias**: {aliases}\n"
 
 
 
 
 
 
 
 
71
  if houses:
72
+ result += f"- **Casa(s)**: {', '.join(houses)}\n"
73
+ else:
74
+ result += "- **Casa(s)**: Ninguna o desconocida\n"
75
+ if books:
76
+ result += f"- **Libros en los que aparece**: {', '.join(books)}\n"
77
  else:
78
+ result += "- **Libros en los que aparece**: Ninguno o desconocido\n"
79
 
80
+ return result
81
 
82
  except Exception as e:
83
+ return f"Error al obtener información del personaje: {str(e)}"
84
 
85
  ###############
86
 
 
114
  ##############
115
  def display_character_info(character_name):
116
  result = get_game_of_thrones_character_info(character_name)
117
+ return result
 
 
118
 
119
+ # Crear una interfaz de Gradio
120
  interface = gr.Interface(
121
  fn=display_character_info,
122
+ inputs=gr.Textbox(label="Nombre del personaje", placeholder="Ejemplo: Jon Snow"),
123
+ outputs=gr.Textbox(label="Información del personaje"),
124
  title="Información de Personajes de Juego de Tronos",
125
+ description="Ingresa el nombre de un personaje de Juego de Tronos para obtener información detallada.",
126
+ examples=["Jon Snow", "Daenerys Targaryen", "Tyrion Lannister"],
127
+ theme="soft"
128
  )
129
 
130
  interface.launch()