framsouza's picture
Update app.py
5f30ad7 verified
raw
history blame
2.1 kB
# 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)