Spaces:
Runtime error
Runtime error
File size: 3,556 Bytes
a39e119 574b6ca 70fa272 7963312 70fa272 757ebd9 e80aab9 3db6293 e80aab9 70fa272 a39e119 7963312 70fa272 a39e119 70fa272 a39e119 7963312 a39e119 70fa272 7963312 70fa272 7963312 70fa272 7963312 70fa272 a39e119 8f6825e 70fa272 31243f4 70fa272 757ebd9 36ed51a eccf8e4 70fa272 a39e119 70fa272 31243f4 70fa272 7963312 70fa272 e80aab9 70fa272 7963312 70fa272 7963312 70fa272 7963312 a39e119 7963312 70fa272 7963312 70fa272 e80aab9 a39e119 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 |
# app.py
import os
import gradio as gr
import requests
import pandas as pd
from bs4 import BeautifulSoup
from smolagents import CodeAgent, tool, InferenceClientModel
# --- Constants ---
DEFAULT_API_URL = "https://agents-course-unit4-scoring.hf.space"
# --- Custom Web Search Tool (avoiding proxies) ---
@tool
def simple_search(query: str) -> str:
"""
Search DuckDuckGo via HTML parsing.
Args:
query (str): search query string.
Returns:
str: top 3 titles and URLs.
"""
try:
resp = requests.get(
"https://html.duckduckgo.com/html/",
params={"q": query},
timeout=10
)
resp.raise_for_status()
soup = BeautifulSoup(resp.text, "html.parser")
results = []
for a in soup.select("a.result__a")[:3]:
title = a.get_text()
url = a["href"]
results.append(f"- {title}\n {url}")
return "\n".join(results) if results else "No results."
except Exception as e:
return f"Search error: {e}"
# --- Enhanced Agent ---
class BasicAgent:
def __init__(self):
print("BasicAgent initialized.")
self.model = InferenceClientModel()
self.agent = CodeAgent(
model=self.model,
tools=[simple_search]
)
def __call__(self, question: str) -> str:
print("Received:", question[:50], "...")
try:
return self.agent.run(question)
except Exception as e:
return f"Agent run error: {e}"
def run_and_submit_all(profile: gr.OAuthProfile | None):
space_id = os.getenv("SPACE_ID")
if not profile:
return "Please login to Hugging Face", None
username = profile.username
questions_url = f"{DEFAULT_API_URL}/questions"
submit_url = f"{DEFAULT_API_URL}/submit"
try: agent = BasicAgent()
except Exception as e:
return f"Agent init error: {e}", None
agent_code = f"https://huggingface.co/spaces/{space_id}/tree/main"
try:
r = requests.get(questions_url, timeout=15)
r.raise_for_status()
qs = r.json()
except Exception as e:
return f"Fetch questions error: {e}", None
logs, payload = [], []
for item in qs:
tid, q = item.get("task_id"), item.get("question")
if not tid or q is None: continue
ans = agent(q)
payload.append({"task_id": tid, "submitted_answer": ans})
logs.append({"Task ID": tid, "Question": q, "Submitted Answer": ans})
if not payload:
return "No answers generated.", pd.DataFrame(logs)
submit = {"username": username, "agent_code": agent_code, "answers": payload}
try:
resp = requests.post(submit_url, json=submit, timeout=60)
resp.raise_for_status()
data = resp.json()
status = (
f"✅ Score: {data.get('score','N/A')}% "
f"({data.get('correct_count','?')}/{data.get('total_attempted','?')} correct)\n"
f"{data.get('message','No message')}"
)
return status, pd.DataFrame(logs)
except Exception as e:
return f"Submit error: {e}", pd.DataFrame(logs)
# --- Gradio UI ---
with gr.Blocks() as demo:
gr.Markdown("# GAIA Evaluation Runner")
gr.LoginButton()
run_btn = gr.Button("Run Evaluation & Submit")
status = gr.Textbox(lines=5, interactive=False)
results = gr.DataFrame(wrap=True)
run_btn.click(run_and_submit_all, outputs=[status, results])
if __name__ == "__main__":
demo.launch(debug=True, share=False)
|