|
|
import gradio as gr |
|
|
from datasets import load_dataset |
|
|
import requests |
|
|
|
|
|
|
|
|
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"] |
|
|
} |
|
|
|
|
|
|
|
|
def actualizar_tareas(modalidades_seleccionadas): |
|
|
tareas_disponibles = [] |
|
|
for modalidad in modalidades_seleccionadas: |
|
|
if modalidad in MODALIDAD_TAREAS: |
|
|
tareas_disponibles.extend(MODALIDAD_TAREAS[modalidad]) |
|
|
|
|
|
return {tarea: False for tarea in set(tareas_disponibles)} |
|
|
|
|
|
|
|
|
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"] |
|
|
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) |
|
|
|
|
|
|
|
|
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: |
|
|
|
|
|
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) |
|
|
|
|
|
|
|
|
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 = [] |
|
|
|
|
|
|
|
|
for dataset_id in datasets_seleccionados.split("\n"): |
|
|
dataset_id = dataset_id.strip("- ").split(":")[0] |
|
|
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:]] |
|
|
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 |
|
|
|
|
|
|
|
|
with gr.Blocks() as demo: |
|
|
gr.Markdown("# Dise帽ador de Modelos de Redes Neuronales y Generador de Datasets Multimodales") |
|
|
|
|
|
|
|
|
with gr.Row(): |
|
|
modalidades = list(MODALIDAD_TAREAS.keys()) |
|
|
modalidades_seleccionadas = gr.CheckboxGroup(choices=modalidades, label="Selecciona Modalidades") |
|
|
|
|
|
|
|
|
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 |
|
|
) |
|
|
|
|
|
|
|
|
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) |
|
|
|
|
|
|
|
|
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 |
|
|
) |
|
|
|
|
|
|
|
|
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 |
|
|
) |
|
|
|
|
|
|
|
|
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 */ |
|
|
} |
|
|
""" |
|
|
|
|
|
|
|
|
demo.launch() |