divya1308's picture
Update app.py
0711fc0 verified
Raw
History Blame Contribute Delete
3.42 kB
import os
import gradio as gr
import requests
import pandas as pd
from smolagents import (
CodeAgent,
DuckDuckGoSearchTool,
VisitWebpageTool,
InferenceClientModel
)
# --- Constants ---
DEFAULT_API_URL = "https://agents-course-unit4-scoring.hf.space"
# -----------------------------
# REAL AGENT (FIXED VERSION)
# -----------------------------
class BasicAgent:
def __init__(self):
print("Initializing real agent...")
# Model (Hugging Face hosted inference)
self.model = InferenceClientModel()
# Tools
tools = [
DuckDuckGoSearchTool(),
VisitWebpageTool()
]
# CodeAgent (actual reasoning agent)
self.agent = CodeAgent(
tools=tools,
model=self.model
)
def __call__(self, question: str) -> str:
print(f"Question: {question}")
try:
result = self.agent.run(question)
return str(result)
except Exception as e:
print(f"Agent error: {e}")
return f"ERROR: {e}"
# -----------------------------
# RUN + SUBMIT FUNCTION
# -----------------------------
def run_and_submit_all(profile: gr.OAuthProfile | None):
space_id = os.getenv("SPACE_ID")
if profile:
username = profile.username
print(f"User logged in: {username}")
else:
return "Please login first using Hugging Face button.", None
api_url = DEFAULT_API_URL
questions_url = f"{api_url}/questions"
submit_url = f"{api_url}/submit"
# Create agent
agent = BasicAgent()
agent_code = f"https://huggingface.co/spaces/{space_id}/tree/main"
# Fetch questions
response = requests.get(questions_url, timeout=30)
response.raise_for_status()
questions_data = response.json()
results_log = []
answers_payload = []
# Run agent
for item in questions_data:
task_id = item["task_id"]
question = item["question"]
answer = agent(question)
answers_payload.append({
"task_id": task_id,
"submitted_answer": answer
})
results_log.append({
"Task ID": task_id,
"Question": question,
"Answer": answer
})
# Submit results
submission_data = {
"username": username,
"agent_code": agent_code,
"answers": answers_payload
}
submit_response = requests.post(submit_url, json=submission_data, timeout=60)
submit_response.raise_for_status()
result = submit_response.json()
status = (
f"Submission Successful!\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)
# -----------------------------
# GRADIO UI
# -----------------------------
with gr.Blocks() as demo:
gr.Markdown("# Unit 4 Agent Evaluation (Fixed Version)")
gr.Markdown(
"1. Login with Hugging Face\n"
"2. Click Run Evaluation\n"
"3. Wait for scoring"
)
gr.LoginButton()
btn = gr.Button("Run Evaluation")
status = gr.Textbox(label="Status")
table = gr.DataFrame(label="Results")
btn.click(
fn=run_and_submit_all,
outputs=[status, table]
)
if __name__ == "__main__":
demo.launch()