Spaces:
Restarting
Restarting
# 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) | |