Update app.py
Browse files
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 |
-
) ->
|
61 |
-
"""Obtiene un prompt y
|
62 |
personaje = next((p for p in personajes if p["name"] == nombre), None)
|
63 |
if not personaje:
|
64 |
-
return
|
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
|
|
|
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"
|
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 |
-
|
106 |
inputs=[dropdown, gr.State(personajes), gr.State(categorias)],
|
107 |
-
outputs=
|
108 |
)
|
109 |
|
110 |
-
|
111 |
-
|
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()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|