SergioSCA commited on
Commit
1c6da15
verified
1 Parent(s): 155b0ae

Update functions.py

Browse files
Files changed (1) hide show
  1. functions.py +116 -87
functions.py CHANGED
@@ -2,107 +2,136 @@
2
  import json
3
  import requests
4
  from datasets import load_dataset
5
- import matplotlib.pyplot as plt # Importar matplotlib para gr谩ficos
6
 
7
- # Cargar modalidades y tareas desde un archivo JSON
8
  def cargar_modalidades_tareas():
9
- with open("modalidades_tareas.json", "r") as file:
10
- MODALIDAD_TAREAS = json.load(file)
11
- return MODALIDAD_TAREAS
 
 
 
 
 
12
 
13
  # Validar el diccionario de modalidades y tareas
14
  def validar_modalidades_tareas(modalidades_tareas):
15
- for modalidad, tareas in modalidades_tareas.items():
16
- if not isinstance(modalidad, str) or not isinstance(tareas, list):
17
- raise ValueError(f"Formato incorrecto para la modalidad: {modalidad}")
18
- for tarea in tareas:
19
- if not isinstance(tarea, str):
20
- raise ValueError(f"Formato incorrecto para la tarea: {tarea} en la modalidad {modalidad}")
 
 
 
21
 
22
  # Funci贸n para generar la gr谩fica de barras
23
  def generar_grafica_barras(tareas_seleccionadas, MODALIDAD_TAREAS):
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 buscar datasets compatibles en HuggingFace
43
  def buscar_datasets(tareas_seleccionadas, filtro_tama帽o=None, filtro_licencia=None):
44
- query = "+".join(tareas_seleccionadas)
45
- url = f"https://huggingface.co/api/datasets?search={query}"
46
- response = requests.get(url)
47
- datasets = response.json()
48
-
49
- resultados = []
50
- for dataset in datasets:
51
- # Aplicar filtros adicionales
52
- if filtro_tama帽o and dataset.get("size_categories") != filtro_tama帽o:
53
- continue
54
- if filtro_licencia and dataset.get("license") != filtro_licencia:
55
- continue
56
- resultados.append(f"- {dataset['id']}: {dataset['description']}")
57
- return "\n".join(resultados)
 
 
 
 
 
 
58
 
59
  # Funci贸n para generar el dataset
60
  def generar_dataset(encabezado, datasets_seleccionados, pagina_actual=1, filas_por_pagina=5):
61
- if not datasets_seleccionados:
62
- raise ValueError("Debes seleccionar al menos un dataset.")
63
-
64
- columnas = encabezado.split(",")
65
- filas = []
66
-
67
- # Cargar datos reales desde los datasets seleccionados
68
- for dataset_id in datasets_seleccionados.split("\n"):
69
- dataset_id = dataset_id.strip("- ").split(":")[0] # Extraer ID del dataset
70
- try:
71
- dataset = load_dataset(dataset_id, split="train")
72
- inicio = (pagina_actual - 1) * filas_por_pagina
73
- fin = pagina_actual * filas_por_pagina
74
- for i, fila in enumerate(dataset[inicio:fin]):
75
- valores = [str(fila.get(col, "valor_default")) for col in columnas[1:]] # Ignorar 'id'
76
- filas.append(f"id_{inicio + i}," + ",".join(valores))
77
- except Exception as e:
78
- filas.append(f"Error cargando dataset {dataset_id}: {str(e)}")
79
-
80
- contenido_csv = "\n".join([encabezado] + filas)
81
- return contenido_csv
 
 
 
82
 
83
  # Funci贸n inteligente para generar el encabezado usando IA de HuggingFace
84
  def generar_encabezado_inteligente(tareas_seleccionadas, api_key):
85
- if not tareas_seleccionadas:
86
- raise ValueError("Debes seleccionar al menos una tarea.")
87
-
88
- # Validar que se haya proporcionado una API Key
89
- if not api_key:
90
- raise ValueError("Debes proporcionar una API Key v谩lida.")
91
-
92
- # Usar un modelo de HuggingFace para generar el encabezado
93
- API_URL = "https://api-inference.huggingface.co/models/google/flan-t5-large" # Modelo alternativo
94
- headers = {"Authorization": f"Bearer {api_key}"} # Usar la API Key proporcionada por el usuario
95
-
96
- # Construir el prompt para el modelo
97
- prompt = (
98
- f"Genera un encabezado de CSV para las siguientes tareas: {', '.join(tareas_seleccionadas)}. "
99
- "El encabezado debe incluir 'id' como primer elemento y etiquetas relevantes para cada tarea."
100
- )
101
-
102
- # Enviar la solicitud al modelo
103
- response = requests.post(API_URL, headers=headers, json={"inputs": prompt})
104
- if response.status_code == 200:
105
- encabezado = response.json()[0]["generated_text"]
106
- return encabezado
107
- else:
108
- raise ValueError(f"Error al generar el encabezado: {response.text}")
 
 
 
 
 
 
 
 
 
 
2
  import json
3
  import requests
4
  from datasets import load_dataset
5
+ import matplotlib.pyplot as plt
6
 
7
+ # Funci贸n para cargar modalidades y tareas desde un archivo JSON
8
  def cargar_modalidades_tareas():
9
+ try:
10
+ with open("modalidades_tareas.json", "r") as file:
11
+ MODALIDAD_TAREAS = json.load(file)
12
+ return MODALIDAD_TAREAS
13
+ except FileNotFoundError:
14
+ raise ValueError("El archivo 'modalidades_tareas.json' no se encontr贸. Aseg煤rate de que existe en el directorio correcto.") <button class="citation-flag" data-index="9">
15
+ except json.JSONDecodeError:
16
+ raise ValueError("El archivo 'modalidades_tareas.json' tiene un formato incorrecto. Verifica que sea un JSON v谩lido.")
17
 
18
  # Validar el diccionario de modalidades y tareas
19
  def validar_modalidades_tareas(modalidades_tareas):
20
+ try:
21
+ for modalidad, tareas in modalidades_tareas.items():
22
+ if not isinstance(modalidad, str) or not isinstance(tareas, list):
23
+ raise ValueError(f"Formato incorrecto para la modalidad: {modalidad}")
24
+ for tarea in tareas:
25
+ if not isinstance(tarea, str):
26
+ raise ValueError(f"Formato incorrecto para la tarea: {tarea} en la modalidad {modalidad}")
27
+ except AttributeError:
28
+ raise ValueError("El objeto proporcionado no es un diccionario v谩lido.") <button class="citation-flag" data-index="9">
29
 
30
  # Funci贸n para generar la gr谩fica de barras
31
  def generar_grafica_barras(tareas_seleccionadas, MODALIDAD_TAREAS):
32
+ try:
33
+ # Contar la cantidad de tareas seleccionadas por modalidad
34
+ conteo_modalidades = {}
35
+ for modalidad, tareas in MODALIDAD_TAREAS.items():
36
+ conteo_modalidades[modalidad] = len([tarea for tarea in tareas if tarea in tareas_seleccionadas])
37
+
38
+ modalidades = list(conteo_modalidades.keys())
39
+ cantidades = [conteo_modalidades[modalidad] for modalidad in modalidades]
40
+
41
+ # Crear la gr谩fica de barras horizontal
42
+ fig, ax = plt.subplots(figsize=(10, 6))
43
+ ax.barh(modalidades, cantidades, color='skyblue', edgecolor='black')
44
+ ax.set_xlabel('Cantidad de Tareas Seleccionadas')
45
+ ax.set_ylabel('Modalidades')
46
+ ax.set_title('Distribuci贸n de Tareas Seleccionadas por Modalidad')
47
+ ax.invert_yaxis() # Invertir el eje Y para que las modalidades aparezcan de arriba hacia abajo
48
+
49
+ return fig
50
+ except Exception as e:
51
+ raise ValueError(f"Error al generar la gr谩fica de barras: {str(e)}") <button class="citation-flag" data-index="9">
52
 
53
  # Funci贸n para buscar datasets compatibles en HuggingFace
54
  def buscar_datasets(tareas_seleccionadas, filtro_tama帽o=None, filtro_licencia=None):
55
+ try:
56
+ query = "+".join(tareas_seleccionadas)
57
+ url = f"https://huggingface.co/api/datasets?search={query}"
58
+ response = requests.get(url)
59
+ response.raise_for_status() # Lanzar una excepci贸n si hay un error HTTP
60
+ datasets = response.json()
61
+
62
+ resultados = []
63
+ for dataset in datasets:
64
+ # Aplicar filtros adicionales
65
+ if filtro_tama帽o and dataset.get("size_categories") != filtro_tama帽o:
66
+ continue
67
+ if filtro_licencia and dataset.get("license") != filtro_licencia:
68
+ continue
69
+ resultados.append(f"- {dataset['id']}: {dataset['description']}")
70
+ return "\n".join(resultados)
71
+ except requests.exceptions.RequestException as e:
72
+ raise ValueError(f"Error al buscar datasets: {str(e)}") <button class="citation-flag" data-index="8">
73
+ except Exception as e:
74
+ raise ValueError(f"Error inesperado al buscar datasets: {str(e)}")
75
 
76
  # Funci贸n para generar el dataset
77
  def generar_dataset(encabezado, datasets_seleccionados, pagina_actual=1, filas_por_pagina=5):
78
+ try:
79
+ if not datasets_seleccionados:
80
+ raise ValueError("Debes seleccionar al menos un dataset.")
81
+
82
+ columnas = encabezado.split(",")
83
+ filas = []
84
+
85
+ # Cargar datos reales desde los datasets seleccionados
86
+ for dataset_id in datasets_seleccionados.split("\n"):
87
+ dataset_id = dataset_id.strip("- ").split(":")[0] # Extraer ID del dataset
88
+ try:
89
+ dataset = load_dataset(dataset_id, split="train")
90
+ inicio = (pagina_actual - 1) * filas_por_pagina
91
+ fin = pagina_actual * filas_por_pagina
92
+ for i, fila in enumerate(dataset[inicio:fin]):
93
+ valores = [str(fila.get(col, "valor_default")) for col in columnas[1:]] # Ignorar 'id'
94
+ filas.append(f"id_{inicio + i}," + ",".join(valores))
95
+ except Exception as e:
96
+ filas.append(f"Error cargando dataset {dataset_id}: {str(e)}")
97
+
98
+ contenido_csv = "\n".join([encabezado] + filas)
99
+ return contenido_csv
100
+ except Exception as e:
101
+ raise ValueError(f"Error al generar el dataset: {str(e)}") <button class="citation-flag" data-index="9">
102
 
103
  # Funci贸n inteligente para generar el encabezado usando IA de HuggingFace
104
  def generar_encabezado_inteligente(tareas_seleccionadas, api_key):
105
+ try:
106
+ if not tareas_seleccionadas:
107
+ raise ValueError("Debes seleccionar al menos una tarea.")
108
+
109
+ # Validar que se haya proporcionado una API Key
110
+ if not api_key:
111
+ raise ValueError("Debes proporcionar una API Key v谩lida.")
112
+
113
+ # Usar un modelo de HuggingFace para generar el encabezado
114
+ API_URL = "https://api-inference.huggingface.co/models/google/flan-t5-large"
115
+ headers = {"Authorization": f"Bearer {api_key}"}
116
+
117
+ # Construir el prompt para el modelo
118
+ prompt = (
119
+ f"Genera un encabezado de CSV para las siguientes tareas: {', '.join(tareas_seleccionadas)}. "
120
+ "El encabezado debe incluir 'id' como primer elemento y etiquetas relevantes para cada tarea."
121
+ )
122
+
123
+ # Enviar la solicitud al modelo
124
+ response = requests.post(API_URL, headers=headers, json={"inputs": prompt})
125
+ response.raise_for_status() # Lanzar una excepci贸n si hay un error HTTP
126
+
127
+ if response.status_code == 200:
128
+ encabezado = response.json()[0]["generated_text"]
129
+ return encabezado
130
+ else:
131
+ raise ValueError(f"Error al generar el encabezado: {response.text}")
132
+ except requests.exceptions.RequestException as e:
133
+ raise ValueError(f"Error en la solicitud a la API de HuggingFace: {str(e)}") <button class="citation-flag" data-index="8">
134
+ except KeyError:
135
+ raise ValueError("La respuesta de la API no contiene los datos esperados.") <button class="citation-flag" data-index="9">
136
+ except Exception as e:
137
+ raise ValueError(f"Error inesperado al generar el encabezado: {str(e)}")