Ubik80's picture
Update app.py
e0cc1b7 verified
raw
history blame
3.82 kB
import os
import gradio as gr
import requests
import pandas as pd
from smolagents import CodeAgent, OpenAIServerModel
from tools import FinalAnswerTool
# --- Constants ---
DEFAULT_API_URL = "https://agents-course-unit4-scoring.hf.space"
class BasicAgent:
def __init__(self):
model = OpenAIServerModel(model_id="gpt-4o")
final_tool = FinalAnswerTool()
self.agent = CodeAgent(
model=model,
tools=[final_tool],
# opzioni aggiuntive, se vuoi:
max_steps=3,
verbosity_level=1
)
def __call__(self, question: str) -> str:
return self.agent.run(question)
def run_and_submit_all(profile):
space_id = os.getenv("SPACE_ID")
if not profile:
return "Please login to Hugging Face with the login button.", None
username = getattr(profile, "username", None) or getattr(profile, "name", None)
if not username:
return "Login error: username not found.", None
# 1) Fetch questions
try:
resp = requests.get(f"{DEFAULT_API_URL}/questions", timeout=15)
resp.raise_for_status()
questions = resp.json()
except Exception as e:
return f"Error fetching questions: {e}", None
# 2) Run agent
agent = BasicAgent()
results, payload = [], []
for q in questions:
tid, text = q["task_id"], q["question"]
try:
ans = agent(text)
except Exception as e:
ans = f"ERROR: {e}"
results.append({"Task ID": tid, "Question": text, "Answer": ans})
payload.append({"task_id": tid, "submitted_answer": ans})
if not payload:
return "Agent returned no answers.", pd.DataFrame(results)
# 3) Submit
submission = {
"username": username,
"agent_code": f"https://huggingface.co/spaces/{space_id}/tree/main",
"answers": payload
}
try:
sub_resp = requests.post(f"{DEFAULT_API_URL}/submit", json=submission, timeout=60)
sub_resp.raise_for_status()
data = sub_resp.json()
status = (
f"Submission Successful!\n"
f"User: {data['username']}\n"
f"Score: {data['score']}% "
f"({data['correct_count']}/{data['total_attempted']})\n"
f"Message: {data['message']}"
)
except Exception as e:
status = f"Submission Failed: {e}"
return status, pd.DataFrame(results)
def test_random_question(profile):
if not profile:
return "Please login to Hugging Face with the login button.", ""
try:
q = requests.get(f"{DEFAULT_API_URL}/random-question", timeout=15).json()
ans = BasicAgent()(q["question"])
return q["question"], ans
except Exception as e:
return f"Error during test: {e}", ""
# --- Gradio UI ---
with gr.Blocks() as demo:
gr.Markdown("# Basic Agent Evaluation Runner")
gr.Markdown("""
**Instructions:**
1. Clone this space and define your agent in `tools.py`.
2. Log in with your HF account.
3. Use **Run Evaluation & Submit All Answers** or **Test Random Question**.
""")
login = gr.LoginButton()
run_btn = gr.Button("Run Evaluation & Submit All Answers")
test_btn = gr.Button("Test Random Question")
status_out = gr.Textbox(label="Status / Result", lines=5, interactive=False)
table_out = gr.DataFrame(label="Full Results Table", wrap=True)
question_out = gr.Textbox(label="Random Question", lines=3, interactive=False)
answer_out = gr.Textbox(label="Agent Answer", lines=3, interactive=False)
run_btn.click(run_and_submit_all, inputs=[login], outputs=[status_out, table_out])
test_btn.click(test_random_question, inputs=[login], outputs=[question_out, answer_out])
if __name__ == "__main__":
demo.launch(debug=True, share=False)