File size: 5,315 Bytes
6165204
 
 
 
10af3d7
50e5a10
f4accca
5054645
f4accca
 
6165204
f4accca
 
1f05742
f4accca
6165204
f4accca
6165204
f4accca
 
6165204
 
9903381
f4accca
6165204
f4accca
 
6165204
f4accca
 
 
6165204
 
f4accca
 
 
6165204
f4accca
10af3d7
503c790
f4accca
10af3d7
6165204
b86a6cd
6165204
f4accca
 
50e5a10
f4accca
 
 
 
10af3d7
 
 
 
 
 
 
 
f4accca
10af3d7
 
 
 
6165204
f4accca
 
6165204
503c790
f4accca
 
6165204
50e5a10
 
 
 
f4accca
 
6165204
 
f4accca
503c790
6165204
 
f4accca
 
10af3d7
 
f4accca
10af3d7
f4accca
 
 
6165204
7939a0c
 
 
 
f4accca
50e5a10
10af3d7
 
7939a0c
f4accca
 
10af3d7
f4accca
6165204
f4accca
 
6165204
10af3d7
f4accca
 
 
 
 
 
 
 
 
 
 
 
50e5a10
f4accca
 
 
 
50e5a10
f4accca
 
 
 
 
6165204
 
f4accca
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
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
import os
import gradio as gr
import requests
import pandas as pd
from huggingface_hub import login
from dotenv import load_dotenv
import my_tokens

# Cargar variables de entorno
load_dotenv()

# Constantes
API_BASE_URL = "https://my-custom-api.hf.space"

def execute_agent_operations(profile: gr.OAuthProfile | None):
    """
    Obtiene preguntas, ejecuta el agente y envía respuestas.
    """
    # Obtener el ID de espacio
    space_id = os.getenv("MY_SPACE_ID")

    if profile:
        username = f"{profile.username}"
        print(f"Usuario conectado: {username}")
    else:
        print("No has iniciado sesión.")
        return "Inicia sesión en Hugging Face.", None

    questions_url = f"{API_BASE_URL}/questions"
    attachments_url = f"{API_BASE_URL}/files/"
    submit_url = f"{API_BASE_URL}/submit"

    try:
        print("Iniciando Agente...")
        # Aquí puedes instanciar tu agente como se define en agent.py
        # agente = MiAgente() 
    except Exception as e:
        print(f"Error al inicializar agente: {e}")
        return f"Error al inicializar el agente: {e}", None

    # Obtener las preguntas
    print(f"Obteniendo preguntas de: {questions_url}")
    try:
        response = requests.get(questions_url, timeout=15)
        response.raise_for_status()
        questions = response.json()
        if not questions:
            print("La lista de preguntas está vacía.")
            return "No se encontraron preguntas.", None
        print(f"Se obtuvieron {len(questions)} preguntas.")
        
        for q in questions:
            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 la 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

    # Ejecutar el agente
    print(f"Ejecutando agente en {len(questions)} preguntas...")
    results_log = []
    answers_payload = []
    
    for item in questions:
        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 not question_text:
            print(f"Saltando tarea con información incompleta: {item}")
            continue
        try:
            submitted_answer = "Placeholder"  # Aquí llamarías a tu 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 al procesar la tarea {task_id}: {e}")
            results_log.append({"Task ID": task_id, "Question": question_text, "Submitted Answer": f"ERROR: {e}"})

    if not answers_payload:
        return "El agente no produjo respuestas.", pd.DataFrame(results_log)

    submission_data = {"username": username.strip(), "agent_code": f"https://huggingface.co/spaces/{space_id}", "answers": answers_payload}
    status_update = f"Enviando respuestas para el usuario '{username}'..."
    print(status_update)

    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!\nPuntuación: {result_data.get('score', 'N/A')}"
        print("Envío exitoso.")
        results_df = pd.DataFrame(results_log)
        return final_status, results_df
    except requests.exceptions.RequestException as e:
        error_message = f"Error al enviar: {e}"
        print(error_message)
        results_df = pd.DataFrame(results_log)
        return error_message, results_df


# Interfaz Gradio
with gr.Blocks() as demo:
    gr.Markdown("# Evaluador de Agente Básico")
    gr.Markdown("""
    **Instrucciones:**

    1. Modifica el código para ajustar el agente a tus necesidades.
    2. Inicia sesión en Hugging Face.
    3. Haz clic en 'Ejecutar Evaluación y Enviar Respuestas' para procesar las preguntas.

    --- 
    **Avisos:**
    Este espacio está diseñado para ser subóptimo con el fin de incentivar la personalización del código.
    """)

    gr.LoginButton()

    run_button = gr.Button("Ejecutar Evaluación y Enviar Respuestas")

    status_output = gr.Textbox(label="Estado de Ejecución / Resultado del Envío", lines=5, interactive=False)
    results_table = gr.DataFrame(label="Preguntas y Respuestas del Agente", wrap=True)

    run_button.click(
        fn=execute_agent_operations,
        outputs=[status_output, results_table]
    )

if __name__ == "__main__":
    print("Iniciando aplicación de evaluación de agente...")
    demo.launch(debug=True, share=False)