File size: 4,135 Bytes
10e9b7d
bee5328
eccf8e4
bee5328
e80aab9
bee5328
df283f3
bee5328
 
df283f3
bee5328
 
60f0482
bee5328
 
60f0482
bee5328
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
60f0482
bee5328
60f0482
bee5328
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
60f0482
bee5328
 
 
 
 
 
 
 
 
 
e80aab9
bee5328
 
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 agent import create_agent, fetch_random_question

# --- Constants ---
DEFAULT_API_URL = "https://agents-course-unit4-scoring.hf.space"


def run_and_submit_all(profile: gr.OAuthProfile | None):
    """
    Fetch all questions, run the SmolAgent on them, submit all answers,
    and display the results.
    """
    space_id = os.getenv("SPACE_ID")

    if profile:
        username = profile.username
        print(f"User logged in: {username}")
    else:
        print("User not logged in.")
        return "Please login to Hugging Face with the button.", None

    questions_url = f"{DEFAULT_API_URL}/questions"
    submit_url = f"{DEFAULT_API_URL}/submit"

    try:
        agent = create_agent()
        print("SmolAgent initialized.")
    except Exception as e:
        print(f"Error instantiating agent: {e}")
        return f"Error initializing agent: {e}", None

    agent_code = f"https://huggingface.co/spaces/{space_id}/tree/main"
    print(f"Agent code URL: {agent_code}")

    try:
        response = requests.get(questions_url, timeout=15)
        response.raise_for_status()
        questions = response.json()
        if not questions:
            return "No questions fetched.", None
        print(f"Fetched {len(questions)} questions.")
    except Exception as e:
        print(f"Error fetching questions: {e}")
        return f"Error fetching questions: {e}", None

    results = []
    payload = []
    for q in questions:
        tid = q.get("task_id")
        text = q.get("question")
        if not tid or not text:
            continue
        try:
            ans = agent.run(question=text)
        except Exception as e:
            ans = f"ERROR: {e}"
        payload.append({"task_id": tid, "submitted_answer": ans})
        results.append({"Task ID": tid, "Question": text, "Answer": ans})

    if not payload:
        return "Agent returned no answers.", pd.DataFrame(results)

    submission = {"username": username, "agent_code": agent_code, "answers": payload}
    try:
        resp = requests.post(submit_url, json=submission, timeout=60)
        resp.raise_for_status()
        data = resp.json()
        status = (
            f"Submission Successful!\n"
            f"User: {data.get('username')}\n"
            f"Score: {data.get('score')}% ({data.get('correct_count')}/{data.get('total_attempted')})\n"
            f"Message: {data.get('message')}"
        )
    except Exception as e:
        print(f"Submission error: {e}")
        status = f"Submission Failed: {e}"

    return status, pd.DataFrame(results)


def test_random_question(profile: gr.OAuthProfile | None):
    """
    Fetch a random GAIA question and return the agent's answer.
    """
    if not profile:
        return "Please login to test.", ""
    try:
        q = fetch_random_question()
        agent = create_agent()
        ans = agent.run(question=q.get("question", ""))
        return q.get("question", ""), ans
    except Exception as e:
        print(f"Test error: {e}")
        return f"Error: {e}", ""

# --- Gradio Interface ---
with gr.Blocks() as demo:
    gr.Markdown("# SmolAgent Evaluation Runner")
    gr.Markdown(
        """
        **Istruzioni:**
        1. Clone questo space e definisci la logica in agent.py.
        2. Effettua il login con il tuo account Hugging Face.
        3. Usa 'Run Evaluation & Submit All Answers' o 'Test Random Question'.
        """
    )
    login = gr.LoginButton()
    run_all = gr.Button("Run Evaluation & Submit All Answers")
    test = gr.Button("Test Random Question")
    status = gr.Textbox(label="Status / Risultato", lines=5, interactive=False)
    table = gr.DataFrame(label="Risultati Completi", wrap=True)
    qbox = gr.Textbox(label="Domanda Casuale", lines=3, interactive=False)
    abox = gr.Textbox(label="Risposta Agente", lines=3, interactive=False)

    run_all.click(fn=run_and_submit_all, inputs=[login], outputs=[status, table])
    test.click(fn=test_random_question, inputs=[login], outputs=[qbox, abox])

if __name__ == "__main__":
    demo.launch(debug=True, share=False)