File size: 3,820 Bytes
10e9b7d
6a38a35
eccf8e4
6a38a35
bee5328
e0cc1b7
 
bee5328
e0cc1b7
6a38a35
bee5328
e0cc1b7
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
6a38a35
e0cc1b7
c396a92
fd5a08b
c396a92
 
 
 
e0cc1b7
6a38a35
e0cc1b7
 
 
6a38a35
 
bee5328
e0cc1b7
 
bd7cd5b
c396a92
e0cc1b7
6a38a35
e0cc1b7
6a38a35
fd5a08b
bd7cd5b
 
 
 
c396a92
41085c3
e0cc1b7
bd7cd5b
c396a92
e0cc1b7
bd7cd5b
c396a92
6a38a35
e0cc1b7
 
 
6a38a35
 
bd7cd5b
e0cc1b7
 
bd7cd5b
0e6388c
6a38a35
 
 
 
 
 
c396a92
fd5a08b
e0cc1b7
 
 
 
 
 
6a38a35
e0cc1b7
6a38a35
e0cc1b7
 
 
 
 
 
 
6a38a35
 
bd7cd5b
 
fd5a08b
bd7cd5b
 
 
 
6a38a35
e0cc1b7
 
6a38a35
 
 
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
import os
import gradio as gr
import requests
import pandas as pd

from smolagents import CodeAgent, OpenAIServerModel
from tools import FinalAnswerTool

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

class BasicAgent:
    def __init__(self):
    
        model = OpenAIServerModel(model_id="gpt-4o")
        final_tool = FinalAnswerTool()
        self.agent = CodeAgent(
            model=model,
            tools=[final_tool],
            # opzioni aggiuntive, se vuoi:
            max_steps=3,
            verbosity_level=1
        )

    def __call__(self, question: str) -> str:
  
        return self.agent.run(question)

def run_and_submit_all(profile):
    space_id = os.getenv("SPACE_ID")
    if not profile:
        return "Please login to Hugging Face with the login button.", None
    username = getattr(profile, "username", None) or getattr(profile, "name", None)
    if not username:
        return "Login error: username not found.", None

    # 1) Fetch questions
    try:
        resp = requests.get(f"{DEFAULT_API_URL}/questions", timeout=15)
        resp.raise_for_status()
        questions = resp.json()
    except Exception as e:
        return f"Error fetching questions: {e}", None

    # 2) Run agent
    agent = BasicAgent()
    results, payload = [], []
    for q in questions:
        tid, text = q["task_id"], q["question"]
        try:
            ans = agent(text)
        except Exception as e:
            ans = f"ERROR: {e}"
        results.append({"Task ID": tid, "Question": text, "Answer": ans})
        payload.append({"task_id": tid, "submitted_answer": ans})

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

    # 3) Submit
    submission = {
        "username": username,
        "agent_code": f"https://huggingface.co/spaces/{space_id}/tree/main",
        "answers": payload
    }
    try:
        sub_resp = requests.post(f"{DEFAULT_API_URL}/submit", json=submission, timeout=60)
        sub_resp.raise_for_status()
        data = sub_resp.json()
        status = (
            f"Submission Successful!\n"
            f"User: {data['username']}\n"
            f"Score: {data['score']}% "
            f"({data['correct_count']}/{data['total_attempted']})\n"
            f"Message: {data['message']}"
        )
    except Exception as e:
        status = f"Submission Failed: {e}"

    return status, pd.DataFrame(results)

def test_random_question(profile):
    if not profile:
        return "Please login to Hugging Face with the login button.", ""
    try:
        q = requests.get(f"{DEFAULT_API_URL}/random-question", timeout=15).json()
        ans = BasicAgent()(q["question"])
        return q["question"], ans
    except Exception as e:
        return f"Error during test: {e}", ""

# --- Gradio UI ---
with gr.Blocks() as demo:
    gr.Markdown("# Basic Agent Evaluation Runner")
    gr.Markdown("""
**Instructions:**
1. Clone this space and define your agent in `tools.py`.
2. Log in with your HF account.
3. Use **Run Evaluation & Submit All Answers** or **Test Random Question**.
""")

    login = gr.LoginButton()
    run_btn = gr.Button("Run Evaluation & Submit All Answers")
    test_btn = gr.Button("Test Random Question")

    status_out = gr.Textbox(label="Status / Result", lines=5, interactive=False)
    table_out = gr.DataFrame(label="Full Results Table", wrap=True)
    question_out = gr.Textbox(label="Random Question", lines=3, interactive=False)
    answer_out = gr.Textbox(label="Agent Answer", lines=3, interactive=False)

    run_btn.click(run_and_submit_all, inputs=[login], outputs=[status_out, table_out])
    test_btn.click(test_random_question, inputs=[login], outputs=[question_out, answer_out])

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