File size: 2,099 Bytes
5f30ad7
10e9b7d
5f30ad7
10e9b7d
eccf8e4
3c4371f
10e9b7d
5f30ad7
 
 
 
 
 
 
 
e80aab9
31243f4
5f30ad7
 
 
 
 
31243f4
5f30ad7
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
e80aab9
31243f4
7e4a06b
5f30ad7
 
 
 
e80aab9
5f30ad7
 
e80aab9
 
 
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
# app.py
import os
from dotenv import load_dotenv
import gradio as gr
import requests
import pandas as pd

from agent import GeminiAgent

# Load environment variables
load_dotenv()

API_URL = os.getenv("API_URL", "https://agents-course-unit4-scoring.hf.space")
SPACE_ID = os.getenv("SPACE_ID")
GOOGLE_API_KEY = os.getenv("GOOGLE_API_KEY")

class BasicAgent:
    def __init__(self, api_key: str):
        if not api_key:
            raise ValueError("GOOGLE_API_KEY environment variable not set.")
        self.agent = GeminiAgent(api_key)

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


def run_and_submit(profile):
    if not profile:
        return "Please log in to Hugging Face.", None
    username = profile.username

    # Fetch questions
    resp = requests.get(f"{API_URL}/questions", timeout=15)
    resp.raise_for_status()
    questions = resp.json() or []

    # Run agent
    basic = BasicAgent(GOOGLE_API_KEY)
    results, answers = [], []
    for q in questions:
        ans = basic(q.get("question", ""))
        results.append({"Task ID": q.get("task_id"), "Question": q.get("question"), "Answer": ans})
        answers.append({"task_id": q.get("task_id"), "submitted_answer": ans})

    # Submit answers
    submission = {
        "username": username,
        "agent_code": f"https://huggingface.co./spaces/{SPACE_ID}/tree/main",
        "answers": answers
    }
    resp2 = requests.post(f"{API_URL}/submit", json=submission, timeout=60)
    resp2.raise_for_status()
    data = resp2.json()
    status = f"Score: {data.get('score')}% ({data.get('correct_count')}/{data.get('total_attempted')})"

    return status, pd.DataFrame(results)

# Gradio UI
with gr.Blocks() as demo:
    gr.Markdown("# Basic Agent Evaluation Runner")
    gr.LoginButton()
    run_btn = gr.Button("Run Evaluation & Submit All Answers")
    status_out = gr.Textbox(label="Run Status", lines=5)
    table_out = gr.DataFrame(label="Results")
    run_btn.click(run_and_submit, outputs=[status_out, table_out])

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