JairoDanielMT commited on
Commit
b3fff1d
verified
1 Parent(s): de5d921

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +16 -31
app.py CHANGED
@@ -11,11 +11,13 @@ def cargar_json(ruta: str) -> Any:
11
  except (FileNotFoundError, json.JSONDecodeError) as e:
12
  raise RuntimeError(f"Error al cargar el archivo {ruta}: {e}")
13
 
 
14
  def aplicar_peso(termino: str) -> str:
15
  """Aplica un peso aleatorio al t茅rmino si no contiene ':'."""
16
  peso = round(random.uniform(0.8, 1.5), 1) if ":" not in termino else ""
17
  return f"({termino}:{peso})" if peso else f"({termino})"
18
 
 
19
  def generar_prompt(personaje: Dict[str, Any], categorias: Dict[str, List[str]]) -> str:
20
  """Genera un prompt basado en un personaje y categor铆as aleatorias."""
21
  atributos = {
@@ -55,14 +57,16 @@ def generar_prompt(personaje: Dict[str, Any], categorias: Dict[str, List[str]])
55
  )
56
  return prompt
57
 
 
58
  def obtener_prompt(
59
  nombre: str, personajes: List[Dict[str, Any]], categorias: Dict[str, List[str]]
60
- ) -> Dict[str, str]:
61
- """Obtiene un prompt y devuelve el texto y el estado por separado."""
62
  personaje = next((p for p in personajes if p["name"] == nombre), None)
63
  if not personaje:
64
- return {"texto": "No se encontr贸 el personaje seleccionado.", "estado": ""}
65
 
 
66
  colores = {
67
  "recognized": "green",
68
  "partial": "yellow",
@@ -71,7 +75,8 @@ def obtener_prompt(
71
  estado = personaje["status"]
72
  color = colores.get(estado, "black")
73
  prompt = generar_prompt(personaje, categorias)
74
- return {"texto": prompt, "estado": f"<p style='color:{color};'>Estado: {estado.capitalize()}</p>"}
 
75
 
76
  # Carga los datos JSON
77
  try:
@@ -82,8 +87,10 @@ except RuntimeError as e:
82
  personajes = []
83
  categorias = {}
84
 
 
85
  nombres_personajes = [p["name"] for p in personajes]
86
 
 
87
  with gr.Blocks() as interfaz:
88
  gr.Markdown("# Generador de Prompts para Personajes")
89
 
@@ -93,36 +100,14 @@ with gr.Blocks() as interfaz:
93
  interactive=True,
94
  )
95
 
96
- resultado = gr.HTML(label="Prompt generado", elem_id="resultado-prompt")
97
- mensaje_copia = gr.HTML(value="", elem_id="mensaje-copia")
98
  boton = gr.Button("Generar Prompt")
99
 
100
- def generar_y_mostrar_prompt(nombre, personajes, categorias):
101
- datos = obtener_prompt(nombre, personajes, categorias)
102
- return datos["texto"], datos["estado"]
103
-
104
  boton.click(
105
- generar_y_mostrar_prompt,
106
  inputs=[dropdown, gr.State(personajes), gr.State(categorias)],
107
- outputs=[resultado, mensaje_copia],
108
  )
109
 
110
- # Bot贸n para copiar con JavaScript
111
- gr.HTML("""
112
- <button onclick="copyToClipboard()">Copiar al portapapeles</button>
113
- <script>
114
- function copyToClipboard() {
115
- const resultado = document.getElementById('resultado-prompt');
116
- const mensajeCopia = document.getElementById('mensaje-copia');
117
- if (resultado) {
118
- const text = resultado.innerText.split('Estado:')[1]?.trim() || resultado.innerText.trim();
119
- navigator.clipboard.writeText(text);
120
- mensajeCopia.innerHTML = "<p style='color: green;'>Texto copiado al portapapeles</p>";
121
- } else {
122
- mensajeCopia.innerHTML = "<p style='color: red;'>No hay texto para copiar</p>";
123
- }
124
- }
125
- </script>
126
- """)
127
-
128
- interfaz.launch()
 
11
  except (FileNotFoundError, json.JSONDecodeError) as e:
12
  raise RuntimeError(f"Error al cargar el archivo {ruta}: {e}")
13
 
14
+
15
  def aplicar_peso(termino: str) -> str:
16
  """Aplica un peso aleatorio al t茅rmino si no contiene ':'."""
17
  peso = round(random.uniform(0.8, 1.5), 1) if ":" not in termino else ""
18
  return f"({termino}:{peso})" if peso else f"({termino})"
19
 
20
+
21
  def generar_prompt(personaje: Dict[str, Any], categorias: Dict[str, List[str]]) -> str:
22
  """Genera un prompt basado en un personaje y categor铆as aleatorias."""
23
  atributos = {
 
57
  )
58
  return prompt
59
 
60
+
61
  def obtener_prompt(
62
  nombre: str, personajes: List[Dict[str, Any]], categorias: Dict[str, List[str]]
63
+ ) -> str:
64
+ """Obtiene un prompt y muestra el estado del personaje seleccionado."""
65
  personaje = next((p for p in personajes if p["name"] == nombre), None)
66
  if not personaje:
67
+ return "No se encontr贸 el personaje seleccionado."
68
 
69
+ # Asignar colores seg煤n el estado
70
  colores = {
71
  "recognized": "green",
72
  "partial": "yellow",
 
75
  estado = personaje["status"]
76
  color = colores.get(estado, "black")
77
  prompt = generar_prompt(personaje, categorias)
78
+ return f"<p style='color:{color};'>Estado: {estado.capitalize()}</p>{prompt}"
79
+
80
 
81
  # Carga los datos JSON
82
  try:
 
87
  personajes = []
88
  categorias = {}
89
 
90
+ # Lista de nombres para el Dropdown
91
  nombres_personajes = [p["name"] for p in personajes]
92
 
93
+ # Interfaz de Gradio
94
  with gr.Blocks() as interfaz:
95
  gr.Markdown("# Generador de Prompts para Personajes")
96
 
 
100
  interactive=True,
101
  )
102
 
103
+ resultado = gr.HTML(label="Prompt generado")
 
104
  boton = gr.Button("Generar Prompt")
105
 
 
 
 
 
106
  boton.click(
107
+ obtener_prompt,
108
  inputs=[dropdown, gr.State(personajes), gr.State(categorias)],
109
+ outputs=resultado,
110
  )
111
 
112
+ # Ejecutar la aplicaci贸n
113
+ interfaz.launch()