|
import os |
|
import gradio as gr |
|
import requests |
|
import pandas as pd |
|
|
|
DEFAULT_API_URL = "https://agents-course-unit4-scoring.hf.space" |
|
|
|
class BasicAgent: |
|
def __init__(self): |
|
print("Agente básico cargado.") |
|
|
|
def __call__(self, question: str) -> str: |
|
print(f"Pregunta recibida: {question}") |
|
return "This is a default answer." |
|
|
|
def run_and_submit_all(profile: gr.OAuthProfile | None): |
|
if profile: |
|
username = profile.username |
|
else: |
|
return "🔒 Por favor, inicia sesión con Hugging Face.", None |
|
|
|
space_id = os.getenv("SPACE_ID", "") |
|
if not space_id: |
|
return "❌ Falta la variable SPACE_ID", None |
|
|
|
agent = BasicAgent() |
|
questions_url = f"{DEFAULT_API_URL}/questions" |
|
submit_url = f"{DEFAULT_API_URL}/submit" |
|
|
|
try: |
|
response = requests.get(questions_url, timeout=10) |
|
questions = response.json() |
|
except Exception as e: |
|
return f"❌ Error al obtener preguntas: {e}", None |
|
|
|
results = [] |
|
answers = [] |
|
for q in questions: |
|
task_id = q.get("task_id") |
|
question = q.get("question") |
|
if task_id and question: |
|
answer = agent(question) |
|
results.append({"Task ID": task_id, "Question": question, "Submitted Answer": answer}) |
|
answers.append({"task_id": task_id, "submitted_answer": answer}) |
|
|
|
payload = { |
|
"username": username, |
|
"agent_code": f"https://huggingface.co/spaces/{space_id}/tree/main", |
|
"answers": answers |
|
} |
|
|
|
try: |
|
res = requests.post(submit_url, json=payload) |
|
res.raise_for_status() |
|
result_data = res.json() |
|
msg = ( |
|
f"✅ Envío correcto\n" |
|
f"Usuario: {result_data.get('username')}\n" |
|
f"Puntuación: {result_data.get('score')}% " |
|
f"({result_data.get('correct_count')}/{result_data.get('total_attempted')})" |
|
) |
|
return msg, pd.DataFrame(results) |
|
except Exception as e: |
|
return f"❌ Error al enviar resultados: {e}", pd.DataFrame(results) |
|
|
|
with gr.Blocks() as demo: |
|
gr.Markdown("# Evaluación del Agente GAIA") |
|
gr.LoginButton() |
|
btn = gr.Button("Enviar respuestas y evaluar") |
|
output = gr.Textbox(label="Resultado", lines=4) |
|
tabla = gr.DataFrame(label="Respuestas") |
|
|
|
btn.click(fn=run_and_submit_all, outputs=[output, tabla]) |
|
|
|
if __name__ == "__main__": |
|
demo.launch(debug=True) |