File size: 6,504 Bytes
efdd1f5
1da3f58
 
efdd1f5
1da3f58
 
 
 
 
 
 
 
 
d628526
187ebd3
1da3f58
 
 
 
 
 
c8e0946
1da3f58
c7d73f9
10d99a7
1da3f58
7c0815f
 
10d99a7
1da3f58
 
 
 
 
 
c7d73f9
1da3f58
7c0815f
1da3f58
 
 
 
7c0815f
1da3f58
 
7c0815f
 
 
 
 
1da3f58
 
efdd1f5
1da3f58
1cd532e
7c0815f
 
 
1da3f58
7c0815f
 
 
 
 
 
 
1cd532e
 
 
7c0815f
1cd532e
7c0815f
 
 
1da3f58
 
 
 
d628526
1da3f58
 
d628526
 
1da3f58
 
 
c8e0946
 
1cd532e
 
c8e0946
 
 
 
 
c7d73f9
1da3f58
d628526
1da3f58
 
 
c7d73f9
7c0815f
d628526
7c0815f
 
 
1da3f58
 
7c0815f
 
 
 
 
6b3f7f3
1cd532e
d628526
1cd532e
 
1da3f58
 
 
1cd532e
 
 
 
 
efdd1f5
7c0815f
 
 
 
 
1cd532e
 
7c0815f
 
 
1da3f58
cba4d16
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
import gradio as gr
from datasets import load_dataset
import requests

# Diccionario de tareas por modalidad
MODALIDAD_TAREAS = {
    "NLP": ["Clasificaci贸n de texto", "Generaci贸n de texto", "Traducci贸n", "Resumen"],
    "Audio": ["Reconocimiento de voz", "Clasificaci贸n de audio", "Separaci贸n de fuentes"],
    "Vision": ["Clasificaci贸n de im谩genes", "Detecci贸n de objetos", "Segmentaci贸n"],
    "RAG": ["Respuesta a preguntas", "Recuperaci贸n de informaci贸n"],
    "Code": ["Generaci贸n de c贸digo", "Completado de c贸digo"],
    "Tabular": ["Clasificaci贸n tabular", "Regresi贸n tabular"],
    "Time Series": ["Predicci贸n de series temporales"]
}

# Funci贸n para actualizar las tareas seg煤n las modalidades seleccionadas
def actualizar_tareas(modalidades_seleccionadas):
    tareas_disponibles = []
    for modalidad in modalidades_seleccionadas:
        if modalidad in MODALIDAD_TAREAS:
            tareas_disponibles.extend(MODALIDAD_TAREAS[modalidad])
    # Eliminar duplicados y devolver un diccionario con valores predeterminados (no seleccionados)
    return {tarea: False for tarea in set(tareas_disponibles)}

# Funci贸n para generar el encabezado del CSV (ahora incluye 'id')
def generar_encabezado(modalidades_seleccionadas, tareas_seleccionadas):
    if not modalidades_seleccionadas or not tareas_seleccionadas:
        raise ValueError("Debes seleccionar al menos una modalidad y una tarea.")
    columnas = ["id"]  # A帽adimos 'id' como primer elemento
    for modalidad in modalidades_seleccionadas:
        columnas.append(f"{modalidad.lower()}_input")
        columnas.append(f"{modalidad.lower()}_output")
    for tarea in tareas_seleccionadas:
        columnas.append(f"{tarea.lower().replace(' ', '_')}_label")
    return ",".join(columnas)

# Funci贸n para buscar datasets compatibles en HuggingFace
def buscar_datasets(modalidades_seleccionadas, tareas_seleccionadas, filtro_tama帽o=None, filtro_licencia=None):
    query = "+".join(modalidades_seleccionadas + tareas_seleccionadas)
    url = f"https://huggingface.co/api/datasets?search={query}"
    response = requests.get(url)
    datasets = response.json()
    
    resultados = []
    for dataset in datasets:
        # Aplicar filtros adicionales
        if filtro_tama帽o and dataset.get("size_categories") != filtro_tama帽o:
            continue
        if filtro_licencia and dataset.get("license") != filtro_licencia:
            continue
        resultados.append(f"- {dataset['id']}: {dataset['description']}")
    return "\n".join(resultados)

# Funci贸n para generar el dataset
def generar_dataset(encabezado, datasets_seleccionados, pagina_actual=1, filas_por_pagina=5):
    if not datasets_seleccionados:
        raise ValueError("Debes seleccionar al menos un dataset.")
    
    columnas = encabezado.split(",")
    filas = []
    
    # Cargar datos reales desde los datasets seleccionados
    for dataset_id in datasets_seleccionados.split("\n"):
        dataset_id = dataset_id.strip("- ").split(":")[0]  # Extraer ID del dataset
        try:
            dataset = load_dataset(dataset_id, split="train")
            inicio = (pagina_actual - 1) * filas_por_pagina
            fin = pagina_actual * filas_por_pagina
            for i, fila in enumerate(dataset[inicio:fin]):
                valores = [str(fila.get(col, "valor_default")) for col in columnas[1:]]  # Ignorar 'id'
                filas.append(f"id_{inicio + i}," + ",".join(valores))
        except Exception as e:
            filas.append(f"Error cargando dataset {dataset_id}: {str(e)}")
    
    contenido_csv = "\n".join([encabezado] + filas)
    return contenido_csv

# Interfaz Gradio
with gr.Blocks() as demo:
    gr.Markdown("# Dise帽ador de Modelos de Redes Neuronales y Generador de Datasets Multimodales")

    # Panel 1: Selecci贸n de Modalidades
    with gr.Row():
        modalidades = list(MODALIDAD_TAREAS.keys())
        modalidades_seleccionadas = gr.CheckboxGroup(choices=modalidades, label="Selecciona Modalidades")
    
    # Panel 2: Configuraci贸n de Tareas (Refactorizado)
    with gr.Row():
        gr.Markdown("### Selecciona Tareas")
        tareas_disponibles = gr.CheckboxGroup(choices=[], label="Tareas Disponibles", interactive=True, elem_classes=["expanded-checkbox"])
        modalidades_seleccionadas.change(
            actualizar_tareas,
            inputs=modalidades_seleccionadas,
            outputs=tareas_disponibles
        )

    # Panel 3: Generar Encabezado del CSV
    with gr.Row():
        btn_generar_encabezado = gr.Button("Generar Encabezado del CSV")
        encabezado_generado = gr.Textbox(label="Encabezado Generado", interactive=False)
        btn_generar_encabezado.click(generar_encabezado, inputs=[modalidades_seleccionadas, tareas_disponibles], outputs=encabezado_generado)

    # Panel 4: Buscar Datasets Compatibles con Filtros Adicionales
    with gr.Row():
        with gr.Column():
            filtro_tama帽o = gr.Dropdown(choices=["small", "medium", "large"], label="Filtrar por Tama帽o")
            filtro_licencia = gr.Dropdown(choices=["mit", "apache-2.0", "cc-by-4.0"], label="Filtrar por Licencia")
        btn_buscar_datasets = gr.Button("Buscar Datasets Compatibles")
        datasets_encontrados = gr.Textbox(label="Datasets Encontrados", interactive=False)
        btn_buscar_datasets.click(
            buscar_datasets,
            inputs=[modalidades_seleccionadas, tareas_disponibles, filtro_tama帽o, filtro_licencia],
            outputs=datasets_encontrados
        )

    # Panel 5: Generar Dataset con Paginaci贸n
    with gr.Row():
        pagina_actual = gr.Number(value=1, label="P谩gina Actual")
        filas_por_pagina = gr.Number(value=5, label="Filas por P谩gina")
        btn_generar_dataset = gr.Button("Generar Dataset")
        vista_previa_csv = gr.Textbox(label="Vista Previa del CSV", interactive=False)
        btn_descargar_csv = gr.File(label="Descargar CSV")
        btn_generar_dataset.click(
            generar_dataset,
            inputs=[encabezado_generado, datasets_encontrados, pagina_actual, filas_por_pagina],
            outputs=vista_previa_csv
        )

# Estilo CSS para expandir el 谩rea de selecci贸n de tareas
demo.css = """
.expanded-checkbox {
    max-height: 200px; /* Altura m谩xima */
    overflow-y: auto;  /* Scroll vertical si es necesario */
    border: 1px solid #ccc; /* Borde para mejorar la visibilidad */
    padding: 10px; /* Espaciado interno */
}
"""

# Ejecutar la aplicaci贸n
demo.launch()