File size: 3,060 Bytes
6165204
 
 
 
10af3d7
50e5a10
7db86c7
5054645
7db86c7
 
 
 
 
 
6165204
f4accca
 
1f05742
7db86c7
f4accca
6165204
 
7db86c7
 
6165204
7db86c7
6165204
7db86c7
6165204
7db86c7
6165204
7db86c7
 
10af3d7
6165204
7db86c7
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
6165204
7db86c7
 
 
 
 
6165204
7db86c7
6165204
7db86c7
10af3d7
7db86c7
 
10af3d7
7db86c7
 
 
 
 
 
6165204
7939a0c
7db86c7
 
 
 
 
 
f4accca
 
7db86c7
 
 
f4accca
50e5a10
7db86c7
f4accca
7db86c7
 
f4accca
7db86c7
6165204
 
7db86c7
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
import os
import gradio as gr
import requests
import pandas as pd
from huggingface_hub import login
from dotenv import load_dotenv
from agent import ejecutar_agente

# Cargar token desde secreto y hacer login
hf_token = os.getenv("HF_TOKEN")
if hf_token:
    login(token=hf_token)
else:
    raise ValueError("No se encontró el token de Hugging Face. Verifica el secreto HF_TOKEN.")

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

def ejecutar_y_enviar_respuestas(profile: gr.OAuthProfile | None):
    space_id = os.getenv("MY_SPACE_ID")

    if profile:
        username = profile.username
        print(f"Usuario: {username}")
    else:
        return "Debes iniciar sesión en Hugging Face.", None

    # Obtener preguntas
    try:
        response = requests.get(f"{API_BASE_URL}/questions", timeout=10)
        response.raise_for_status()
        preguntas = response.json()
    except Exception as e:
        return f"Error al obtener preguntas: {e}", None

    if not preguntas:
        return "No hay preguntas disponibles.", None

    for p in preguntas:
        task_id = p.get("task_id")
        if task_id:
            try:
                archivo = requests.get(f"{API_BASE_URL}/files/{task_id}", timeout=10)
                archivo.raise_for_status()
                p["attachment_b64"] = archivo.text
            except:
                p["attachment_b64"] = None

    # Ejecutar agente sobre preguntas
    resultados = []
    respuestas = []

    for item in preguntas:
        task_id = item.get("task_id")
        pregunta = item.get("question", "")
        adjunto = item.get("attachment_b64", "")
        if adjunto:
            pregunta += f"\n\n[ATTACHMENT:]\n{adjunto}"

        try:
            respuesta = ejecutar_agente(pregunta)
        except Exception as e:
            respuesta = f"ERROR: {e}"

        respuestas.append({"task_id": task_id, "submitted_answer": respuesta})
        resultados.append({"Task ID": task_id, "Question": pregunta, "Submitted Answer": respuesta})

    # Enviar respuestas
    payload = {
        "username": username,
        "agent_code": f"https://huggingface.co/spaces/{space_id}",
        "answers": respuestas,
    }

    try:
        envio = requests.post(f"{API_BASE_URL}/submit", json=payload, timeout=60)
        envio.raise_for_status()
        resultado_final = envio.json()
        return f"¡Envío exitoso! Score: {resultado_final.get('score', 'N/A')}", pd.DataFrame(resultados)
    except Exception as e:
        return f"Error al enviar: {e}", pd.DataFrame(resultados)

# Interfaz Gradio
with gr.Blocks() as interfaz:
    gr.Markdown("# Evaluador de Agente")
    gr.Markdown("Inicia sesión, ejecuta el agente y envía tus respuestas.")

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

    salida_estado = gr.Textbox(label="Estado", lines=4)
    salida_tabla = gr.DataFrame(label="Resultados")

    btn.click(fn=ejecutar_y_enviar_respuestas, outputs=[salida_estado, salida_tabla])

if __name__ == "__main__":
    interfaz.launch()