Spaces:
Sleeping
Sleeping
import os | |
import gradio as gr | |
import requests | |
import pandas as pd | |
from dotenv import load_dotenv | |
load_dotenv() # Cargar variables de entorno | |
DEFAULT_API_URL = "https://agents-course-unit4-scoring.hf.space" | |
# Función para ejecutar y enviar todas las respuestas | |
def run_and_submit_all(profile: gr.OAuthProfile | None): | |
""" | |
Recoge todas las preguntas, ejecuta el agente sobre ellas, envía las respuestas y muestra los resultados. | |
""" | |
space_id = os.getenv("SPACE_ID") # ID del espacio para enlaces al código | |
if profile: | |
username = f"{profile.username}" | |
print(f"Usuario logueado: {username}") | |
else: | |
print("Usuario no logueado.") | |
return "Por favor, inicia sesión en Hugging Face.", None | |
api_url = DEFAULT_API_URL | |
questions_url = f"{api_url}/questions" | |
attachments_url = f"{api_url}/files/" | |
submit_url = f"{api_url}/submit" | |
# Crear agente (modificado) | |
try: | |
print("Iniciando agente...") | |
agent = agent.BasicAgent() # Usar el agente principal | |
except Exception as e: | |
print(f"Error al iniciar el agente: {e}") | |
return f"Error al iniciar el agente: {e}", None | |
# 2. Recoger las preguntas | |
print(f"Recogiendo preguntas desde: {questions_url}") | |
try: | |
response = requests.get(questions_url, timeout=15) | |
response.raise_for_status() | |
questions_data = response.json() | |
if not questions_data: | |
print("La lista de preguntas está vacía.") | |
return "La lista de preguntas está vacía.", None | |
print(f"Se recogieron {len(questions_data)} preguntas.") | |
except Exception as e: | |
print(f"Error recogiendo preguntas: {e}") | |
return f"Error recogiendo preguntas: {e}", None | |
# 3. Ejecutar el agente | |
results_log = [] | |
answers_payload = [] | |
print(f"Ejecutando el agente sobre {len(questions_data)} preguntas...") | |
for item in questions_data: | |
task_id = item.get("task_id") | |
question_text = item.get("question", "") | |
attachment_b64 = item.get("attachment_b64", "") | |
if attachment_b64: | |
question_text = f"{question_text}\n\n[ATTACHMENT:]\n{attachment_b64}" | |
if not task_id or question_text is None: | |
print(f"Saltando tarea con ID o pregunta faltante: {item}") | |
continue | |
try: | |
submitted_answer = agent.forward(question_text) # Respuesta del agente | |
answers_payload.append({"task_id": task_id, "submitted_answer": submitted_answer}) | |
results_log.append({"Task ID": task_id, "Question": question_text, "Submitted Answer": submitted_answer}) | |
except Exception as e: | |
print(f"Error ejecutando agente en tarea {task_id}: {e}") | |
results_log.append({"Task ID": task_id, "Question": question_text, "Submitted Answer": f"ERROR: {e}"}) | |
# 4. Enviar las respuestas | |
submission_data = {"username": username.strip(), "agent_code": "agent_code_placeholder", "answers": answers_payload} | |
try: | |
response = requests.post(submit_url, json=submission_data, timeout=60) | |
response.raise_for_status() | |
result_data = response.json() | |
final_status = f"¡Envío exitoso!\nUsuario: {result_data.get('username')}\nPuntaje final: {result_data.get('score', 'N/A')}%" | |
print("Envío exitoso.") | |
return final_status, pd.DataFrame(results_log) | |
except requests.exceptions.RequestException as e: | |
print(f"Error al enviar respuestas: {e}") | |
return f"Error al enviar respuestas: {e}", pd.DataFrame(results_log) | |
# Interfaz Gradio | |
with gr.Blocks() as demo: | |
gr.Markdown("# Evaluación Básica del Agente") | |
gr.Markdown(""" | |
**Instrucciones:** | |
1. Modifica este espacio con tu lógica de agente y las herramientas necesarias. | |
2. Inicia sesión en Hugging Face con el botón abajo. | |
3. Haz clic en 'Ejecutar Evaluación y Enviar Todas las Respuestas' para obtener resultados. | |
**Aviso:** | |
Puede tomar tiempo procesar las respuestas, así que ten paciencia. | |
""") | |
gr.LoginButton() | |
run_button = gr.Button("Ejecutar Evaluación y Enviar Todas las Respuestas") | |
status_output = gr.Textbox(label="Resultado de Ejecución / Envío", lines=5, interactive=False) | |
results_table = gr.DataFrame(label="Preguntas y Respuestas del Agente", wrap=True) | |
run_button.click(fn=run_and_submit_all, outputs=[status_output, results_table]) | |
if __name__ == "__main__": | |
demo.launch(debug=True, share=False) | |