File size: 4,279 Bytes
10e9b7d eccf8e4 3c4371f 10e9b7d 9a7504a 3db6293 e80aab9 9a7504a 31243f4 9a7504a 4021bf3 9a7504a 3c4371f 9a7504a 7e4a06b 9a7504a 7e4a06b 7d65c66 3c4371f 7e4a06b 31243f4 9a7504a 31243f4 9a7504a 31243f4 36ed51a eccf8e4 31243f4 7d65c66 31243f4 9a7504a 7d65c66 9a7504a e80aab9 7d65c66 31243f4 7d65c66 31243f4 9a7504a 31243f4 7d65c66 e80aab9 7d65c66 e80aab9 31243f4 e80aab9 3c4371f e80aab9 31243f4 7d65c66 31243f4 9a7504a e80aab9 9a7504a 0ee0419 e514fd7 9a7504a e514fd7 e80aab9 7e4a06b 31243f4 9088b99 7d65c66 9a7504a e80aab9 9a7504a |
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 |
import os
import gradio as gr
import requests
import pandas as pd
# --- Smolagents/Tools Imports ---
from smolagents import CodeAgent, DuckDuckGoSearchTool, FinalAnswerTool, InferenceClientModel
DEFAULT_API_URL = "https://agents-course-unit4-scoring.hf.space"
# --- Smart Agent Definition ---
class MySmartAgent:
def __init__(self):
# Use a strong code/instruct model hosted by Hugging Face Inference API
self.model = InferenceClientModel(
model_id="Qwen/Qwen2.5-Coder-32B-Instruct", # Or try Llama, Mistral, etc.
max_tokens=2048,
temperature=0.3
)
# Give agent both web search & final answer generation
self.agent = CodeAgent(
model=self.model,
tools=[
DuckDuckGoSearchTool(),
FinalAnswerTool()
],
max_steps=6,
verbosity_level=1
)
def __call__(self, question: str) -> str:
return self.agent.run(question)
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"
# Instantiate smart agent
try:
agent = MySmartAgent()
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()
if not questions_data:
return "Fetched questions list is empty or invalid format.", None
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 = agent(question_text)
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})
except Exception as e:
results_log.append({"Task ID": task_id, "Question": question_text, "Submitted Answer": f"AGENT ERROR: {e}"})
if not answers_payload:
return "Agent did not produce any answers to submit.", pd.DataFrame(results_log)
submission_data = {"username": username.strip(), "agent_code": agent_code, "answers": answers_payload}
try:
response = requests.post(submit_url, json=submission_data, timeout=60)
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', '?')}/{result_data.get('total_attempted', '?')} correct)\n"
f"Message: {result_data.get('message', 'No message received.')}"
)
results_df = pd.DataFrame(results_log)
return final_status, results_df
except Exception as e:
results_df = pd.DataFrame(results_log)
return f"Submission Failed: {e}", results_df
with gr.Blocks() as demo:
gr.Markdown("# Smart Agent Evaluation Runner")
gr.Markdown(
"""
1. Clone this space and modify your agent (uses LLM + DuckDuckGo search)!
2. Log in with Hugging Face.
3. Click 'Run Evaluation & Submit' to score your assignment.
"""
)
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__":
demo.launch(debug=True, share=False)
|