# 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)