Raj
Upload 6 files
08fe068 verified
Raw
History Blame Contribute Delete
6.33 kB
import os
import traceback
import gradio as gr
import pandas as pd
import requests
import config
from agent import GaiaAgent
def run_and_submit_all(profile: gr.OAuthProfile | None):
"""Fetch GAIA questions, run the agent, submit answers, render results."""
space_id = os.getenv("SPACE_ID")
if profile:
username = f"{profile.username}"
print(f"User logged in: {username}")
else:
print("User not logged in.")
return "Please Login to Hugging Face with the button.", None
api_url = config.GAIA_API_URL
questions_url = f"{api_url}/questions"
submit_url = f"{api_url}/submit"
# 1. Instantiate agent
try:
agent = GaiaAgent()
except Exception as e:
print(f"Error instantiating agent: {e}")
return f"Error initializing agent: {e}", None
agent_code = f"https://huggingface.co/spaces/{space_id}/tree/main"
print(agent_code)
# 2. Fetch questions
print(f"Fetching questions from: {questions_url}")
try:
response = requests.get(questions_url, timeout=30)
response.raise_for_status()
questions_data = response.json()
if not questions_data:
return "Fetched questions list is empty or invalid format.", None
print(f"Fetched {len(questions_data)} questions.")
except requests.exceptions.RequestException as e:
return f"Error fetching questions: {e}", None
except requests.exceptions.JSONDecodeError as e:
return f"Error decoding server response for questions: {e}", None
except Exception as e:
return f"An unexpected error occurred fetching questions: {e}", None
# 3. Run agent over all questions
results_log = []
answers_payload = []
print(f"Running agent on {len(questions_data)} questions...")
for i, item in enumerate(questions_data, 1):
task_id = item.get("task_id")
question_text = item.get("question")
if not task_id or question_text is None:
print(f"Skipping item with missing task_id or question: {item}")
continue
print(f"\n=== [{i}/{len(questions_data)}] task {task_id} ===")
try:
submitted_answer = agent(question_text, task_id=task_id)
except Exception as e:
traceback.print_exc()
submitted_answer = f"AGENT ERROR: {e}"
print(f" -> {submitted_answer!r}")
answers_payload.append(
{"task_id": task_id, "submitted_answer": submitted_answer}
)
results_log.append(
{
"Task ID": task_id,
"Question": question_text,
"Submitted Answer": submitted_answer,
}
)
if not answers_payload:
return (
"Agent did not produce any answers to submit.",
pd.DataFrame(results_log),
)
# 4. Prepare submission
submission_data = {
"username": username.strip(),
"agent_code": agent_code,
"answers": answers_payload,
}
print(
f"Agent finished. Submitting {len(answers_payload)} answers for "
f"user '{username}'..."
)
# 5. Submit
print(f"Submitting {len(answers_payload)} answers to: {submit_url}")
try:
response = requests.post(submit_url, json=submission_data, timeout=120)
response.raise_for_status()
result_data = response.json()
final_status = (
f"Submission Successful!\n"
f"User: {result_data.get('username')}\n"
f"Overall Score: {result_data.get('score', 'N/A')}% "
f"({result_data.get('correct_count', '?')}/"
f"{result_data.get('total_attempted', '?')} correct)\n"
f"Message: {result_data.get('message', 'No message received.')}"
)
print("Submission successful.")
return final_status, pd.DataFrame(results_log)
except requests.exceptions.HTTPError as e:
error_detail = f"Server responded with status {e.response.status_code}."
try:
error_json = e.response.json()
error_detail += f" Detail: {error_json.get('detail', e.response.text)}"
except requests.exceptions.JSONDecodeError:
error_detail += f" Response: {e.response.text[:500]}"
return f"Submission Failed: {error_detail}", pd.DataFrame(results_log)
except requests.exceptions.Timeout:
return "Submission Failed: The request timed out.", pd.DataFrame(results_log)
except requests.exceptions.RequestException as e:
return f"Submission Failed: Network error - {e}", pd.DataFrame(results_log)
except Exception as e:
return (
f"An unexpected error occurred during submission: {e}",
pd.DataFrame(results_log),
)
# --- Build Gradio Interface using Blocks ---
with gr.Blocks() as demo:
gr.Markdown("# GAIA Agent — Final Assignment Runner")
gr.Markdown(
"""
**Instructions:**
1. Add `HF_TOKEN` and `SERPER_API_KEY` as Space secrets.
2. Log in to Hugging Face with the button below.
3. Click **Run Evaluation & Submit All Answers**. Running 20 questions
can take 10–20 minutes; stay on the tab.
"""
)
gr.LoginButton()
run_button = gr.Button("Run Evaluation & Submit All Answers")
status_output = gr.Textbox(
label="Run Status / Submission Result", lines=5, interactive=False
)
results_table = gr.DataFrame(label="Questions and Agent Answers", wrap=True)
run_button.click(fn=run_and_submit_all, outputs=[status_output, results_table])
if __name__ == "__main__":
print("\n" + "-" * 30 + " App Starting " + "-" * 30)
space_host_startup = os.getenv("SPACE_HOST")
space_id_startup = os.getenv("SPACE_ID")
if space_host_startup:
print(f"SPACE_HOST: {space_host_startup}")
print(f" Runtime URL: https://{space_host_startup}.hf.space")
else:
print("SPACE_HOST not set (running locally?).")
if space_id_startup:
print(f"SPACE_ID: {space_id_startup}")
print(f" Repo URL: https://huggingface.co/spaces/{space_id_startup}")
print("-" * (60 + len(" App Starting ")) + "\n")
print("Launching Gradio Interface for GAIA Agent Runner...")
demo.launch(debug=True, share=False)