File size: 2,504 Bytes
c216f4b
 
70b0f89
c216f4b
 
 
 
 
 
 
 
 
70b0f89
c216f4b
70b0f89
 
 
89e6d63
 
 
 
 
70b0f89
89e6d63
 
 
70b0f89
 
c216f4b
70b0f89
 
 
89e6d63
 
 
 
 
70b0f89
89e6d63
 
 
70b0f89
 
 
 
 
 
 
 
89e6d63
70b0f89
89e6d63
 
 
 
 
 
 
70b0f89
c216f4b
 
 
 
 
89e6d63
 
 
70b0f89
89e6d63
 
 
70b0f89
c216f4b
efa0ab7
89e6d63
 
 
 
 
 
 
c216f4b
434f948
70b0f89
89e6d63
434f948
c216f4b
70b0f89
 
efa0ab7
c216f4b
 
 
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
import os
import requests
from smolagents import CodeAgent, tool, OpenAIServerModel

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

# ------------------------
# Tool definitions
# ------------------------
@tool
def fetch_questions() -> list:
    """
    Fetch the full list of GAIA evaluation questions.

    Args:
        None

    Returns:
        list: A list of question dicts, each with 'task_id' and 'question'.
    """
    response = requests.get(f"{API_URL}/questions", timeout=15)
    response.raise_for_status()
    return response.json()

@tool
def fetch_random_question() -> dict:
    """
    Fetch a single random GAIA question.

    Args:
        None

    Returns:
        dict: A dict containing 'task_id' and 'question'.
    """
    response = requests.get(f"{API_URL}/random-question", timeout=15)
    response.raise_for_status()
    return response.json()

@tool
def submit_answers(
    username: str,
    agent_code: str,
    answers: list
) -> dict:
    """
    Submit the agent's answers to GAIA and retrieve scoring.

    Args:
        username (str): The Hugging Face username identifying the submission.
        agent_code (str): URL to your Space code repository for verification purposes.
        answers (list): List of dicts, each with 'task_id' and 'submitted_answer'.

    Returns:
        dict: Contains 'score', 'correct_count', 'total_attempted', 'message', and other metadata.
    """
    payload = {
        "username": username,
        "agent_code": agent_code,
        "answers": answers
    }
    response = requests.post(f"{API_URL}/submit", json=payload, timeout=60)
    response.raise_for_status()
    return response.json()

# ------------------------
# Agent factory
# ------------------------
def create_agent() -> CodeAgent:
    """
    Build and return a configured CodeAgent using OpenAI GPT-3.5 Turbo.
    Requires the environment variable OPENAI_API_KEY to be set.

    Args:
        None

    Returns:
        CodeAgent: A SmolAgents CodeAgent instance with configured tools and prompt.
    """
    model = OpenAIServerModel(model_name="gpt-3.5-turbo")
    agent = CodeAgent(
        tools=[fetch_questions, fetch_random_question, submit_answers],
        model=model,
        prompt_template=(
            "Here is a GAIA question:\n"
            "{question}\n"
            "Provide ONLY the exact answer (exact-match), with no extra text."
        )
    )
    return agent