File size: 4,504 Bytes
6165204
 
 
 
50e5a10
5054645
50e5a10
6165204
50e5a10
1f05742
50e5a10
e4f42cb
6165204
50e5a10
6165204
50e5a10
6165204
 
9903381
50e5a10
6165204
50e5a10
 
6165204
5054645
6165204
50e5a10
503c790
6165204
50e5a10
6165204
50e5a10
 
6165204
50e5a10
 
503c790
50e5a10
 
6165204
b86a6cd
6165204
 
 
50e5a10
 
 
 
 
 
6165204
50e5a10
6165204
503c790
50e5a10
6165204
 
50e5a10
 
 
 
6165204
50e5a10
6165204
 
50e5a10
503c790
6165204
 
50e5a10
 
6165204
50e5a10
 
7939a0c
 
 
 
50e5a10
 
 
7939a0c
50e5a10
 
6165204
50e5a10
6165204
50e5a10
 
 
 
 
 
6165204
50e5a10
 
 
1f05742
50e5a10
 
 
 
6165204
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
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)