sofials's picture
Update app.py
87f73fb verified
Raw History Blame Contribute Delete
4.67 kB
import os
import gradio as gr
import requests
import pandas as pd
from smolagents import CodeAgent, DuckDuckGoSearchTool, VisitWebpageTool, InferenceClientModel
import spaces
# Dummy function per soddisfare il requisito ZeroGPU
@spaces.GPU(duration=1)
def dummy_gpu():
pass
DEFAULT_API_URL = "https://agents-course-unit4-scoring.hf.space"
def build_agent():
model = InferenceClientModel(
model_id="Qwen/Qwen2.5-Coder-32B-Instruct",
token=os.getenv("HF_TOKEN"),
)
agent = CodeAgent(
tools=[
DuckDuckGoSearchTool(),
VisitWebpageTool(),
],
model=model,
max_steps=10,
additional_authorized_imports=["math", "datetime", "re", "json"],
)
return agent
def run_agent(agent, question: str) -> str:
prompt = f"""Answer the following question.
Your answer must be as concise as possible — just the final answer, no explanation.
If the answer is a number, return just the number.
If the answer is a name, return just the name.
If the answer is a list, return comma-separated values.
Question: {question}"""
try:
response = agent.run(prompt)
return str(response).strip()
except Exception as e:
print(f"Error: {e}")
return "I don't know"
def run_and_submit_all(profile: gr.OAuthProfile | None):
space_id = os.getenv("SPACE_ID")
if profile:
username = f"{profile.username}"
else:
return "Please Login to Hugging Face with the button.", None
api_url = DEFAULT_API_URL
questions_url = f"{api_url}/questions"
submit_url = f"{api_url}/submit"
try:
agent = build_agent()
print("Agent initialized!")
except Exception as e:
return f"Error initializing agent: {e}", None
agent_code = f"https://huggingface.co/spaces/{space_id}/tree/main"
try:
response = requests.get(questions_url, timeout=15)
response.raise_for_status()
questions_data = response.json()
print(f"Fetched {len(questions_data)} questions.")
except Exception as e:
return f"Error fetching questions: {e}", None
results_log = []
answers_payload = []
for item in questions_data:
task_id = item.get("task_id")
question_text = item.get("question")
if not task_id or question_text is None:
continue
try:
submitted_answer = run_agent(agent, question_text)
answers_payload.append({"task_id": task_id, "submitted_answer": submitted_answer})
results_log.append({
"Task ID": task_id,
"Question": question_text[:100],
"Submitted Answer": submitted_answer
})
print(f"✅ {task_id}: {submitted_answer[:50]}")
except Exception as e:
print(f"❌ {task_id}: {e}")
results_log.append({
"Task ID": task_id,
"Question": question_text[:100],
"Submitted Answer": "I don't know"
})
answers_payload.append({"task_id": task_id, "submitted_answer": "I don't know"})
submission_data = {
"username": username.strip(),
"agent_code": agent_code,
"answers": answers_payload
}
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"Score: {result_data.get('score', 'N/A')}% "
f"({result_data.get('correct_count', '?')}/{result_data.get('total_attempted', '?')} correct)\n"
f"Message: {result_data.get('message', 'No message received.')}"
)
return final_status, pd.DataFrame(results_log)
except Exception as e:
return f"Submission Failed: {e}", pd.DataFrame(results_log)
with gr.Blocks() as demo:
gr.Markdown("# 🎩 GAIA Agent — sofials")
gr.Markdown("""
**Instructions:**
1. Log in with your Hugging Face account
2. Click 'Run Evaluation & Submit All Answers'
""")
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("-"*30 + " App Starting " + "-"*30)
demo.launch(debug=True, share=False)