File size: 5,150 Bytes
10e9b7d
6ca25ff
 
10e9b7d
6ca25ff
3c4371f
6ca25ff
10e9b7d
6ca25ff
 
 
 
 
 
 
31243f4
3c4371f
6ca25ff
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
7e4a06b
6ca25ff
3c4371f
7e4a06b
3c4371f
7d65c66
3c4371f
6ca25ff
31243f4
6ca25ff
31243f4
3c4371f
31243f4
3c4371f
7d65c66
eccf8e4
6ca25ff
7d65c66
6ca25ff
31243f4
6ca25ff
 
31243f4
3c4371f
31243f4
 
6ca25ff
 
 
 
 
 
 
 
 
 
 
e80aab9
 
 
6ca25ff
31243f4
0ee0419
e514fd7
 
 
6ca25ff
 
 
 
 
 
e514fd7
 
 
6ca25ff
 
 
 
 
 
e514fd7
e80aab9
 
7e4a06b
e80aab9
31243f4
e80aab9
6ca25ff
 
 
7d65c66
 
e80aab9
31243f4
6ca25ff
e80aab9
 
 
6ca25ff
7d65c66
3c4371f
6ca25ff
7d65c66
3c4371f
 
7d65c66
3c4371f
7d65c66
 
6ca25ff
7d65c66
 
6ca25ff
 
 
 
7d65c66
6ca25ff
 
 
 
7d65c66
6ca25ff
3c4371f
31243f4
6ca25ff
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
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
import os

import agent
import gradio as gr
import logic
import pandas as pd
from dotenv import load_dotenv

load_dotenv()


def run_and_submit_all(
    profile: gr.OAuthProfile | None,
) -> tuple[str, pd.DataFrame | None]:
    """Fetches all questions, runs the BasicAgent on them, submits all answers,
    and displays the results.

    Args:
        profile: An optional gr.OAuthProfile object containing user information
            if the user is logged in. If None, the user is not logged in.

    Returns:
        tuple[str, pd.DataFrame | None]: A tuple containing:
            - A string representing the status of the run and submission process.
              This could be a success message, an error message, or a message
              indicating that no answers were produced.
            - A pandas DataFrame containing the results log. This DataFrame will
              be displayed in the Gradio interface. It can be None if an error
              occurred before the agent was run.
    """
    # 0. Get user details
    space_id = os.getenv("SPACE_ID")
    agent_code = f"https://huggingface.co/spaces/{space_id}/tree/main"
    print(agent_code)
    if profile:
        username = f"{profile.username}"
        print(f"User logged in: {username}")
    else:
        print("User not logged in.")
        return "Please Login to Hugging Face with the button.", None

    # 1. Instantiate Agent
    try:
        gaia_agent = agent.GaiaAgent()
    except Exception as e:
        print(f"Error instantiating agent: {e}")
        return f"Error initializing agent: {e}", None

    # 2. Fetch Questions
    try:
        questions_data = logic.fetch_all_questions()
    except Exception as e:
        return str(e), None

    # 3. Run the Agent
    results_log, answers_payload = logic.run_agent(gaia_agent, questions_data)
    if not answers_payload:
        print("Agent did not produce any answers to submit.")
        return "Agent did not produce any answers to submit.", pd.DataFrame(results_log)

    # 4. Prepare & Submit Answers
    submission_data = {
        "username": username.strip(),
        "agent_code": agent_code,
        "answers": answers_payload,
    }
    print(
        f"Agent finished. Submitting {len(answers_payload)} answers for user '"
        f"{username}'..."
    )
    return logic.submit_answers(submission_data, results_log)


# --- Build Gradio Interface using Blocks ---
with gr.Blocks() as gaia_ui:
    gr.Markdown("# Basic Agent Evaluation Runner")
    gr.Markdown(
        """
        **Instructions:**

        1.  Please clone this space, then modify the code to define your agent's 
        logic, the tools, the necessary packages, etc ...
        2.  Log in to your Hugging Face account using the button below. This uses 
        your HF username for submission.
        3.  Click 'Run Evaluation & Submit All Answers' to fetch questions, run your 
        agent, submit answers, and see the score.

        ---
        **Disclaimers:**
        Once clicking on the "submit button, it can take quite some time ( this is 
        the time for the agent to go through all the questions).
        This space provides a basic setup and is intentionally sub-optimal to 
        encourage you to develop your own, more robust solution. For instance for the 
        delay process of the submit button, a solution could be to cache the answers 
        and submit in a separate action or even to answer the questions in async.
        """
    )

    gr.LoginButton()

    run_button = gr.Button("Run Evaluation & Submit All Answers")

    status_output = gr.Textbox(
        label="Run Status / Submission Result", lines=5, interactive=False
    )
    # Removed max_rows=10 from DataFrame constructor
    results_table = gr.DataFrame(label="Questions and Agent Answers", wrap=True)

    run_button.click(
        fn=run_and_submit_all, inputs=None, outputs=[status_output, results_table]
    )

if __name__ == "__main__":
    print("\n" + "-" * 30 + " App Starting " + "-" * 30)
    # Check for SPACE_HOST and SPACE_ID at startup for information
    space_host_startup = os.getenv("SPACE_HOST")
    space_id_startup = os.getenv("SPACE_ID")  # Get SPACE_ID at startup

    if space_host_startup:
        print(f"✅ SPACE_HOST found: {space_host_startup}")
        print(f"   Runtime URL should be: https://{space_host_startup}.hf.space")
    else:
        print("ℹ️  SPACE_HOST environment variable not found (running locally?).")

    if space_id_startup:  # Print repo URLs if SPACE_ID is found
        print(f"✅ SPACE_ID found: {space_id_startup}")
        print(f"   Repo URL: https://huggingface.co/spaces/{space_id_startup}")
        print(
            f"   Repo Tree URL: https://huggingface.co/spaces/"
            f"{space_id_startup}/tree/main"
        )
    else:
        print(
            "ℹ️  SPACE_ID environment variable not found (running locally?). Repo URL "
            "cannot be determined."
        )

    print("-" * (60 + len(" App Starting ")) + "\n")

    print("Launching Gradio Interface for Basic Agent Evaluation...")
    gaia_ui.launch(debug=True, share=True)