BiGuan's picture
Update app.py
4b78dea verified
Raw
History Blame Contribute Delete
4.62 kB
import os
import gradio as gr
import requests
import pandas as pd
# =====================================================
# Constants (DO NOT CHANGE)
# =====================================================
DEFAULT_API_URL = "https://agents-course-unit4-scoring.hf.space"
# =====================================================
# Agent Definition (THIS IS THE ONLY PART YOU EDIT)
# =====================================================
from agent import agent as gaia_agent
class BasicAgent:
def __init__(self):
"""
Initialize your GAIA agent here.
"""
pass
def __call__(self, question: str) -> str:
"""
Required interface for HF Unit 4 scoring.
"""
return gaia_agent(question, files=None)
# =====================================================
# Evaluation & Submission Logic (DO NOT CHANGE)
# =====================================================
def run_and_submit_all(profile: gr.OAuthProfile | None):
"""
Fetches all GAIA questions, runs the agent, submits answers,
and returns the official score.
"""
space_id = os.getenv("SPACE_ID")
if not profile:
return "❌ Please log in with Hugging Face.", None
username = profile.username
api_url = DEFAULT_API_URL
questions_url = f"{api_url}/questions"
submit_url = f"{api_url}/submit"
# 1. Load agent
try:
agent = BasicAgent()
except Exception as e:
return f"❌ Error initializing agent: {e}", None
agent_code = f"https://huggingface.co/spaces/{space_id}/tree/main"
# 2. Fetch questions
try:
resp = requests.get(questions_url, timeout=15)
resp.raise_for_status()
questions = resp.json()
except Exception as e:
return f"❌ Error fetching questions: {e}", None
if not questions:
return "❌ No questions returned.", None
# 3. Run agent
results_log = []
answers_payload = []
for item in questions:
task_id = item.get("task_id")
question_text = item.get("question")
if not task_id or question_text is None:
continue
try:
answer = agent(question_text)
answers_payload.append({
"task_id": task_id,
"submitted_answer": answer
})
results_log.append({
"Task ID": task_id,
"Question": question_text,
"Submitted Answer": answer
})
except Exception as e:
results_log.append({
"Task ID": task_id,
"Question": question_text,
"Submitted Answer": f"AGENT ERROR: {e}"
})
if not answers_payload:
return "❌ Agent produced no answers.", pd.DataFrame(results_log)
# 4. Submit
submission = {
"username": username.strip(),
"agent_code": agent_code,
"answers": answers_payload
}
try:
resp = requests.post(submit_url, json=submission, timeout=180)
resp.raise_for_status()
result = resp.json()
status = (
f"βœ… Submission Successful\n"
f"User: {result.get('username')}\n"
f"Score: {result.get('score')}%\n"
f"Correct: {result.get('correct_count')} / {result.get('total_attempted')}\n"
f"Message: {result.get('message')}"
)
return status, pd.DataFrame(results_log)
except requests.exceptions.HTTPError as e:
detail = e.response.text
try:
detail = e.response.json().get("detail", detail)
except Exception:
pass
return f"❌ Submission failed: {detail}", pd.DataFrame(results_log)
except Exception as e:
return f"❌ Unexpected error: {e}", pd.DataFrame(results_log)
# =====================================================
# Gradio Interface (DO NOT CHANGE)
# =====================================================
with gr.Blocks() as demo:
gr.Markdown("# 🧠 HF Agents Course β€” Unit 4 Evaluation")
gr.Markdown(
"1. Log in with Hugging Face\n"
"2. Click **Run Evaluation & Submit All Answers**\n"
"3. Wait for your GAIA score"
)
gr.LoginButton()
run_btn = gr.Button("Run Evaluation & Submit All Answers")
status = gr.Textbox(label="Submission Result", lines=6, interactive=False)
table = gr.DataFrame(label="Agent Output", wrap=True)
run_btn.click(
fn=run_and_submit_all,
outputs=[status, table]
)
if __name__ == "__main__":
demo.launch(debug=True, share=False)