jjvelezo commited on
Commit
7db86c7
·
verified ·
1 Parent(s): 809141b

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +62 -105
app.py CHANGED
@@ -4,137 +4,94 @@ import requests
4
  import pandas as pd
5
  from huggingface_hub import login
6
  from dotenv import load_dotenv
7
- import my_tokens
8
 
9
- # Cargar variables de entorno
10
- load_dotenv()
 
 
 
 
11
 
12
  # Constantes
13
  API_BASE_URL = "https://my-custom-api.hf.space"
14
 
15
- def execute_agent_operations(profile: gr.OAuthProfile | None):
16
- """
17
- Obtiene preguntas, ejecuta el agente y envía respuestas.
18
- """
19
- # Obtener el ID de espacio
20
  space_id = os.getenv("MY_SPACE_ID")
21
 
22
  if profile:
23
- username = f"{profile.username}"
24
- print(f"Usuario conectado: {username}")
25
  else:
26
- print("No has iniciado sesión.")
27
- return "Inicia sesión en Hugging Face.", None
28
 
29
- questions_url = f"{API_BASE_URL}/questions"
30
- attachments_url = f"{API_BASE_URL}/files/"
31
- submit_url = f"{API_BASE_URL}/submit"
32
-
33
- try:
34
- print("Iniciando Agente...")
35
- # Aquí puedes instanciar tu agente como se define en agent.py
36
- # agente = MiAgente()
37
- except Exception as e:
38
- print(f"Error al inicializar agente: {e}")
39
- return f"Error al inicializar el agente: {e}", None
40
-
41
- # Obtener las preguntas
42
- print(f"Obteniendo preguntas de: {questions_url}")
43
  try:
44
- response = requests.get(questions_url, timeout=15)
45
  response.raise_for_status()
46
- questions = response.json()
47
- if not questions:
48
- print("La lista de preguntas está vacía.")
49
- return "No se encontraron preguntas.", None
50
- print(f"Se obtuvieron {len(questions)} preguntas.")
51
-
52
- for q in questions:
53
- file_name = q.get("file_name", "")
54
- task_id = q.get("task_id")
55
- if file_name and task_id:
56
- try:
57
- att_response = requests.get(f"{attachments_url}{task_id}", timeout=15)
58
- att_response.raise_for_status()
59
- q["attachment_b64"] = att_response.text
60
- except Exception as e:
61
- print(f"Error al obtener archivo adjunto para la tarea {task_id}: {e}")
62
- q["attachment_b64"] = None
63
- except requests.exceptions.RequestException as e:
64
- print(f"Error al obtener preguntas: {e}")
65
  return f"Error al obtener preguntas: {e}", None
66
 
67
- # Ejecutar el agente
68
- print(f"Ejecutando agente en {len(questions)} preguntas...")
69
- results_log = []
70
- answers_payload = []
71
-
72
- for item in questions:
 
 
 
 
 
 
 
 
 
 
 
 
73
  task_id = item.get("task_id")
74
- question_text = item.get("question", "")
75
- attachment_b64 = item.get("attachment_b64", "")
76
- if attachment_b64:
77
- question_text = f"{question_text}\n\n[ATTACHMENT:]\n{attachment_b64}"
78
- if not task_id or not question_text:
79
- print(f"Saltando tarea con información incompleta: {item}")
80
- continue
81
  try:
82
- submitted_answer = "Placeholder" # Aquí llamarías a tu agente para obtener la respuesta
83
- answers_payload.append({"task_id": task_id, "submitted_answer": submitted_answer})
84
- results_log.append({"Task ID": task_id, "Question": question_text, "Submitted Answer": submitted_answer})
85
  except Exception as e:
86
- print(f"Error al procesar la tarea {task_id}: {e}")
87
- results_log.append({"Task ID": task_id, "Question": question_text, "Submitted Answer": f"ERROR: {e}"})
88
 
89
- if not answers_payload:
90
- return "El agente no produjo respuestas.", pd.DataFrame(results_log)
91
 
92
- submission_data = {"username": username.strip(), "agent_code": f"https://huggingface.co/spaces/{space_id}", "answers": answers_payload}
93
- status_update = f"Enviando respuestas para el usuario '{username}'..."
94
- print(status_update)
 
 
 
95
 
96
  try:
97
- response = requests.post(submit_url, json=submission_data, timeout=60)
98
- response.raise_for_status()
99
- result_data = response.json()
100
- final_status = f"¡Envío exitoso!\nPuntuación: {result_data.get('score', 'N/A')}"
101
- print("Envío exitoso.")
102
- results_df = pd.DataFrame(results_log)
103
- return final_status, results_df
104
- except requests.exceptions.RequestException as e:
105
- error_message = f"Error al enviar: {e}"
106
- print(error_message)
107
- results_df = pd.DataFrame(results_log)
108
- return error_message, results_df
109
-
110
 
111
  # Interfaz Gradio
112
- with gr.Blocks() as demo:
113
- gr.Markdown("# Evaluador de Agente Básico")
114
- gr.Markdown("""
115
- **Instrucciones:**
116
-
117
- 1. Modifica el código para ajustar el agente a tus necesidades.
118
- 2. Inicia sesión en Hugging Face.
119
- 3. Haz clic en 'Ejecutar Evaluación y Enviar Respuestas' para procesar las preguntas.
120
-
121
- ---
122
- **Avisos:**
123
- Este espacio está diseñado para ser subóptimo con el fin de incentivar la personalización del código.
124
- """)
125
 
126
  gr.LoginButton()
 
127
 
128
- run_button = gr.Button("Ejecutar Evaluación y Enviar Respuestas")
129
-
130
- status_output = gr.Textbox(label="Estado de Ejecución / Resultado del Envío", lines=5, interactive=False)
131
- results_table = gr.DataFrame(label="Preguntas y Respuestas del Agente", wrap=True)
132
 
133
- run_button.click(
134
- fn=execute_agent_operations,
135
- outputs=[status_output, results_table]
136
- )
137
 
138
  if __name__ == "__main__":
139
- print("Iniciando aplicación de evaluación de agente...")
140
- demo.launch(debug=True, share=False)
 
4
  import pandas as pd
5
  from huggingface_hub import login
6
  from dotenv import load_dotenv
7
+ from agent import ejecutar_agente
8
 
9
+ # Cargar token desde secreto y hacer login
10
+ hf_token = os.getenv("HF_TOKEN")
11
+ if hf_token:
12
+ login(token=hf_token)
13
+ else:
14
+ raise ValueError("No se encontró el token de Hugging Face. Verifica el secreto HF_TOKEN.")
15
 
16
  # Constantes
17
  API_BASE_URL = "https://my-custom-api.hf.space"
18
 
19
+ def ejecutar_y_enviar_respuestas(profile: gr.OAuthProfile | None):
 
 
 
 
20
  space_id = os.getenv("MY_SPACE_ID")
21
 
22
  if profile:
23
+ username = profile.username
24
+ print(f"Usuario: {username}")
25
  else:
26
+ return "Debes iniciar sesión en Hugging Face.", None
 
27
 
28
+ # Obtener preguntas
 
 
 
 
 
 
 
 
 
 
 
 
 
29
  try:
30
+ response = requests.get(f"{API_BASE_URL}/questions", timeout=10)
31
  response.raise_for_status()
32
+ preguntas = response.json()
33
+ except Exception as e:
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
34
  return f"Error al obtener preguntas: {e}", None
35
 
36
+ if not preguntas:
37
+ return "No hay preguntas disponibles.", None
38
+
39
+ for p in preguntas:
40
+ task_id = p.get("task_id")
41
+ if task_id:
42
+ try:
43
+ archivo = requests.get(f"{API_BASE_URL}/files/{task_id}", timeout=10)
44
+ archivo.raise_for_status()
45
+ p["attachment_b64"] = archivo.text
46
+ except:
47
+ p["attachment_b64"] = None
48
+
49
+ # Ejecutar agente sobre preguntas
50
+ resultados = []
51
+ respuestas = []
52
+
53
+ for item in preguntas:
54
  task_id = item.get("task_id")
55
+ pregunta = item.get("question", "")
56
+ adjunto = item.get("attachment_b64", "")
57
+ if adjunto:
58
+ pregunta += f"\n\n[ATTACHMENT:]\n{adjunto}"
59
+
 
 
60
  try:
61
+ respuesta = ejecutar_agente(pregunta)
 
 
62
  except Exception as e:
63
+ respuesta = f"ERROR: {e}"
 
64
 
65
+ respuestas.append({"task_id": task_id, "submitted_answer": respuesta})
66
+ resultados.append({"Task ID": task_id, "Question": pregunta, "Submitted Answer": respuesta})
67
 
68
+ # Enviar respuestas
69
+ payload = {
70
+ "username": username,
71
+ "agent_code": f"https://huggingface.co/spaces/{space_id}",
72
+ "answers": respuestas,
73
+ }
74
 
75
  try:
76
+ envio = requests.post(f"{API_BASE_URL}/submit", json=payload, timeout=60)
77
+ envio.raise_for_status()
78
+ resultado_final = envio.json()
79
+ return f"¡Envío exitoso! Score: {resultado_final.get('score', 'N/A')}", pd.DataFrame(resultados)
80
+ except Exception as e:
81
+ return f"Error al enviar: {e}", pd.DataFrame(resultados)
 
 
 
 
 
 
 
82
 
83
  # Interfaz Gradio
84
+ with gr.Blocks() as interfaz:
85
+ gr.Markdown("# Evaluador de Agente")
86
+ gr.Markdown("Inicia sesión, ejecuta el agente y envía tus respuestas.")
 
 
 
 
 
 
 
 
 
 
87
 
88
  gr.LoginButton()
89
+ btn = gr.Button("Ejecutar Evaluación y Enviar Respuestas")
90
 
91
+ salida_estado = gr.Textbox(label="Estado", lines=4)
92
+ salida_tabla = gr.DataFrame(label="Resultados")
 
 
93
 
94
+ btn.click(fn=ejecutar_y_enviar_respuestas, outputs=[salida_estado, salida_tabla])
 
 
 
95
 
96
  if __name__ == "__main__":
97
+ interfaz.launch()