Spaces:
Sleeping
Sleeping
File size: 5,310 Bytes
6165204 10af3d7 50e5a10 5054645 50e5a10 6165204 10af3d7 50e5a10 1f05742 e4f42cb 6165204 10af3d7 6165204 10af3d7 6165204 9903381 50e5a10 6165204 50e5a10 10af3d7 6165204 5054645 6165204 50e5a10 503c790 6165204 50e5a10 10af3d7 6165204 10af3d7 503c790 10af3d7 6165204 b86a6cd 6165204 50e5a10 10af3d7 6165204 10af3d7 6165204 503c790 10af3d7 6165204 50e5a10 6165204 10af3d7 6165204 10af3d7 503c790 6165204 10af3d7 6165204 10af3d7 7939a0c 10af3d7 50e5a10 10af3d7 7939a0c 10af3d7 6165204 10af3d7 6165204 10af3d7 50e5a10 6165204 50e5a10 |
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 |
import os
import gradio as gr
import requests
import pandas as pd
from smolagents import AzureOpenAIServerModel
from huggingface_hub import login
from dotenv import load_dotenv
load_dotenv() # Cargar variables de entorno
# Constants
DEFAULT_API_URL = "https://agents-course-unit4-scoring.hf.space"
def run_and_submit_all(profile: gr.OAuthProfile | None):
"""
Obtiene todas las preguntas, ejecuta el BasicAgent sobre ellas, envía las respuestas y muestra los resultados.
"""
space_id = os.getenv("SPACE_ID") # Obtener el ID del espacio para enviar el enlace al código
if profile:
username = f"{profile.username}"
print(f"Usuario logueado: {username}")
else:
print("Usuario no logueado.")
return "Por favor, inicie 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"
try:
print("Iniciando agente...")
agent = agent.BasicAgent() # Aquí inicializamos el agente
except Exception as e:
print(f"Error al inicializar el agente: {e}")
return f"Error al inicializar el agente: {e}", None
# 2. Obtener preguntas
print(f"Obteniendo preguntas de: {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 o en formato incorrecto.", None
print(f"Obtenidas {len(questions_data)} preguntas.")
for q in questions_data:
file_name = q.get("file_name", "")
task_id = q.get("task_id")
if file_name and task_id:
try:
att_response = requests.get(f"{attachments_url}{task_id}", timeout=15)
att_response.raise_for_status()
q["attachment_b64"] = att_response.text
except Exception as e:
print(f"Error al obtener archivo adjunto para tarea {task_id}: {e}")
q["attachment_b64"] = None
except requests.exceptions.RequestException as e:
print(f"Error al obtener preguntas: {e}")
return f"Error al obtener preguntas: {e}", None
# 3. Ejecutar agente sobre preguntas
results_log = []
answers_payload = []
print(f"Ejecutando 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 elemento con task_id o pregunta faltante: {item}")
continue
try:
submitted_answer = agent.forward(question_text) # Aquí ejecutamos el agente para obtener la respuesta
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 sobre tarea {task_id}: {e}")
results_log.append({"Task ID": task_id, "Question": question_text, "Submitted Answer": f"ERROR AGENTE: {e}"})
if not answers_payload:
print("El agente no generó respuestas.")
return "El agente no generó respuestas.", pd.DataFrame(results_log)
# 4. Preparar la sumisión
submission_data = {"username": username.strip(), "agent_code": agent_code, "answers": answers_payload}
print(f"Enviando respuestas para el usuario '{username}'...")
# 5. Enviar respuestas
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!\n"
f"Usuario: {result_data.get('username')}\n"
f"Puntuación total: {result_data.get('score', 'N/A')}% "
f"({result_data.get('correct_count', '?')}/{result_data.get('total_attempted', '?')} correctas)"
)
print("Envío exitoso.")
results_df = pd.DataFrame(results_log)
return final_status, results_df
except requests.exceptions.RequestException as e:
status_message = f"Error al enviar respuestas: {e}"
print(status_message)
results_df = pd.DataFrame(results_log)
return status_message, results_df
# Interfaz de Gradio
with gr.Blocks() as demo:
gr.Markdown("# Evaluador de Agente Básico")
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)
|