Update app.py
Browse files
app.py
CHANGED
@@ -1,94 +1,11 @@
|
|
1 |
import gradio as gr
|
2 |
-
from
|
3 |
-
|
4 |
-
|
5 |
-
|
6 |
-
|
7 |
-
|
8 |
-
|
9 |
-
MODALIDAD_TAREAS = json.load(file)
|
10 |
-
|
11 |
-
def validar_modalidades_tareas(modalidades_tareas):
|
12 |
-
for modalidad, tareas in modalidades_tareas.items():
|
13 |
-
if not isinstance(modalidad, str) or not isinstance(tareas, list):
|
14 |
-
raise ValueError(f"Formato incorrecto para la modalidad: {modalidad}")
|
15 |
-
for tarea in tareas:
|
16 |
-
if not isinstance(tarea, str):
|
17 |
-
raise ValueError(f"Formato incorrecto para la tarea: {tarea} en la modalidad {modalidad}")
|
18 |
-
|
19 |
-
# Validar el diccionario
|
20 |
-
validar_modalidades_tareas(MODALIDAD_TAREAS)
|
21 |
-
|
22 |
-
# Funci贸n para generar la gr谩fica de barras
|
23 |
-
def generar_grafica_barras(tareas_seleccionadas):
|
24 |
-
# Contar la cantidad de tareas seleccionadas por modalidad
|
25 |
-
conteo_modalidades = {}
|
26 |
-
for modalidad, tareas in MODALIDAD_TAREAS.items():
|
27 |
-
conteo_modalidades[modalidad] = len([tarea for tarea in tareas if tarea in tareas_seleccionadas])
|
28 |
-
|
29 |
-
modalidades = list(conteo_modalidades.keys())
|
30 |
-
cantidades = [conteo_modalidades[modalidad] for modalidad in modalidades]
|
31 |
-
|
32 |
-
# Crear la gr谩fica de barras horizontal
|
33 |
-
fig, ax = plt.subplots(figsize=(10, 6))
|
34 |
-
ax.barh(modalidades, cantidades, color='skyblue', edgecolor='black')
|
35 |
-
ax.set_xlabel('Cantidad de Tareas Seleccionadas')
|
36 |
-
ax.set_ylabel('Modalidades')
|
37 |
-
ax.set_title('Distribuci贸n de Tareas Seleccionadas por Modalidad')
|
38 |
-
ax.invert_yaxis() # Invertir el eje Y para que las modalidades aparezcan de arriba hacia abajo
|
39 |
-
|
40 |
-
return fig
|
41 |
-
|
42 |
-
# Funci贸n para generar el encabezado del CSV
|
43 |
-
def generar_encabezado(tareas_seleccionadas):
|
44 |
-
if not tareas_seleccionadas:
|
45 |
-
raise ValueError("Debes seleccionar al menos una tarea.")
|
46 |
-
|
47 |
-
columnas = ["id"] # A帽adimos 'id' como primer elemento
|
48 |
-
for tarea in tareas_seleccionadas:
|
49 |
-
columnas.append(f"{tarea.lower().replace(' ', '_')}_label")
|
50 |
-
return ",".join(columnas)
|
51 |
-
|
52 |
-
# Funci贸n para buscar datasets compatibles en HuggingFace
|
53 |
-
def buscar_datasets(tareas_seleccionadas, filtro_tama帽o=None, filtro_licencia=None):
|
54 |
-
query = "+".join(tareas_seleccionadas)
|
55 |
-
url = f"https://huggingface.co/api/datasets?search={query}"
|
56 |
-
response = requests.get(url)
|
57 |
-
datasets = response.json()
|
58 |
-
|
59 |
-
resultados = []
|
60 |
-
for dataset in datasets:
|
61 |
-
# Aplicar filtros adicionales
|
62 |
-
if filtro_tama帽o and dataset.get("size_categories") != filtro_tama帽o:
|
63 |
-
continue
|
64 |
-
if filtro_licencia and dataset.get("license") != filtro_licencia:
|
65 |
-
continue
|
66 |
-
resultados.append(f"- {dataset['id']}: {dataset['description']}")
|
67 |
-
return "\n".join(resultados)
|
68 |
-
|
69 |
-
# Funci贸n para generar el dataset
|
70 |
-
def generar_dataset(encabezado, datasets_seleccionados, pagina_actual=1, filas_por_pagina=5):
|
71 |
-
if not datasets_seleccionados:
|
72 |
-
raise ValueError("Debes seleccionar al menos un dataset.")
|
73 |
-
|
74 |
-
columnas = encabezado.split(",")
|
75 |
-
filas = []
|
76 |
-
|
77 |
-
# Cargar datos reales desde los datasets seleccionados
|
78 |
-
for dataset_id in datasets_seleccionados.split("\n"):
|
79 |
-
dataset_id = dataset_id.strip("- ").split(":")[0] # Extraer ID del dataset
|
80 |
-
try:
|
81 |
-
dataset = load_dataset(dataset_id, split="train")
|
82 |
-
inicio = (pagina_actual - 1) * filas_por_pagina
|
83 |
-
fin = pagina_actual * filas_por_pagina
|
84 |
-
for i, fila in enumerate(dataset[inicio:fin]):
|
85 |
-
valores = [str(fila.get(col, "valor_default")) for col in columnas[1:]] # Ignorar 'id'
|
86 |
-
filas.append(f"id_{inicio + i}," + ",".join(valores))
|
87 |
-
except Exception as e:
|
88 |
-
filas.append(f"Error cargando dataset {dataset_id}: {str(e)}")
|
89 |
-
|
90 |
-
contenido_csv = "\n".join([encabezado] + filas)
|
91 |
-
return contenido_csv
|
92 |
|
93 |
# Interfaz Gradio
|
94 |
with gr.Blocks() as demo:
|
@@ -96,14 +13,14 @@ with gr.Blocks() as demo:
|
|
96 |
|
97 |
# Panel 1: Lista de Tareas Disponibles con Checkboxes
|
98 |
with gr.Row():
|
99 |
-
|
100 |
todas_las_tareas = [tarea for tareas in MODALIDAD_TAREAS.values() for tarea in tareas]
|
101 |
tareas_seleccionadas = gr.CheckboxGroup(choices=todas_las_tareas, label="Tareas Disponibles", interactive=True)
|
102 |
|
103 |
# Panel 2: Gr谩fica de Barras
|
104 |
with gr.Row():
|
105 |
-
|
106 |
-
grafica_barras = gr.Plot(label="
|
107 |
btn_actualizar_grafica = gr.Button("Actualizar Gr谩fica")
|
108 |
btn_actualizar_grafica.click(
|
109 |
fn=lambda tareas: generar_grafica_barras(tareas),
|
|
|
1 |
import gradio as gr
|
2 |
+
from functions import (
|
3 |
+
MODALIDAD_TAREAS,
|
4 |
+
generar_grafica_barras,
|
5 |
+
generar_encabezado,
|
6 |
+
buscar_datasets,
|
7 |
+
generar_dataset
|
8 |
+
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
9 |
|
10 |
# Interfaz Gradio
|
11 |
with gr.Blocks() as demo:
|
|
|
13 |
|
14 |
# Panel 1: Lista de Tareas Disponibles con Checkboxes
|
15 |
with gr.Row():
|
16 |
+
gr.Markdown("### Selecciona Tareas")
|
17 |
todas_las_tareas = [tarea for tareas in MODALIDAD_TAREAS.values() for tarea in tareas]
|
18 |
tareas_seleccionadas = gr.CheckboxGroup(choices=todas_las_tareas, label="Tareas Disponibles", interactive=True)
|
19 |
|
20 |
# Panel 2: Gr谩fica de Barras
|
21 |
with gr.Row():
|
22 |
+
gr.Markdown("### Distribuci贸n de Tareas Seleccionadas por Modalidad")
|
23 |
+
grafica_barras = gr.Plot(label="Gr谩fica de Barras")
|
24 |
btn_actualizar_grafica = gr.Button("Actualizar Gr谩fica")
|
25 |
btn_actualizar_grafica.click(
|
26 |
fn=lambda tareas: generar_grafica_barras(tareas),
|