File size: 4,682 Bytes
10e9b7d eccf8e4 3c4371f 10e9b7d d93eb8a e80aab9 3db6293 edd289b d93eb8a 656091a 2e84b5d 2faef85 d93eb8a dcd737d 2e84b5d d93eb8a 2faef85 d93eb8a 9ca6d70 d93eb8a 2e84b5d d93eb8a 9ca6d70 74d3e13 d93eb8a 2e84b5d d93eb8a 2e84b5d d93eb8a eccf8e4 31243f4 7d65c66 31243f4 d93eb8a 7d65c66 d93eb8a 7d65c66 31243f4 d93eb8a 74d3e13 31243f4 d93eb8a 7d65c66 d93eb8a e80aab9 7d65c66 e80aab9 31243f4 e80aab9 3c4371f e80aab9 d93eb8a 7d65c66 d93eb8a e80aab9 d93eb8a e80aab9 31243f4 d93eb8a 6d1ab96 7e4a06b 31243f4 9088b99 7d65c66 d93eb8a 31243f4 d93eb8a 31243f4 74d3e13 d93eb8a e80aab9 d93eb8a | 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 117 118 119 120 121 122 123 124 125 126 127 128 129 | import os
import gradio as gr
import requests
import pandas as pd
from smolagents import CodeAgent, DuckDuckGoSearchTool, InferenceClientModel, PythonInterpreterTool, WikipediaSearchTool, FinalAnswerTool
# --- Constants ---
DEFAULT_API_URL = "https://agents-course-unit4-scoring.hf.space"
# --- Hugging Face API Key ---
HF_API_KEY = os.environ.get("HF_TOKEN")
if not HF_API_KEY:
raise ValueError("❌ Hugging Face API key not found. Please add it under Settings → Variables and secrets.")
# --- Initialize Hugging Face Model ---
model = InferenceClientModel(
model_id="HuggingFaceH4/zephyr-7b-beta", # ✅ chat model
token=HF_API_KEY
)
# --- Basic Agent Definition ---
class BasicAgent:
def __init__(self, model):
self.model = model
self.agent = CodeAgent(
tools=[
DuckDuckGoSearchTool(),
PythonInterpreterTool(),
WikipediaSearchTool(),
FinalAnswerTool()
],
model=self.model
)
print("✅ BasicAgent initialized with Hugging Face model.")
def __call__(self, question: str) -> str:
print(f"Agent received question (first 50 chars): {question[:50]}...")
try:
answer = self.agent.run(question)
if not answer:
return "⚠️ Model returned no answer."
return answer
except Exception as e:
print(f"❌ Error during agent run: {e}")
return f"AGENT ERROR: {str(e)}"
# --- Run & Submit Function ---
def run_and_submit_all(profile: gr.OAuthProfile | None = None):
if not profile:
return "Please login to Hugging Face with the button.", None
username = profile.username
print(f"User logged in: {username}")
# Initialize agent
agent = BasicAgent(model=model)
# Fetch questions
questions_url = f"{DEFAULT_API_URL}/questions"
submit_url = f"{DEFAULT_API_URL}/submit"
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
# Run agent on all questions
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
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})
if not answers_payload:
return "Agent did not produce any answers to submit.", pd.DataFrame(results_log)
# Prepare submission
space_id = os.getenv("SPACE_ID", "your_space_id_here") # optional fallback
agent_code = f"https://huggingface.co/spaces/{space_id}/tree/main"
submission_data = {"username": username.strip(), "agent_code": agent_code, "answers": answers_payload}
# Submit
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.')}"
)
return final_status, pd.DataFrame(results_log)
except Exception as e:
return f"Submission Failed: {e}", pd.DataFrame(results_log)
# --- Gradio Interface ---
with gr.Blocks() as demo:
gr.Markdown("# Basic Agent Evaluation Runner")
gr.Markdown("""
**Instructions:**
1. Login with your Hugging Face account.
2. Click 'Run Evaluation & Submit All Answers' to fetch questions, run your agent, and submit.
""")
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,
inputs=(),
outputs=[status_output, results_table]
)
if __name__ == "__main__":
demo.launch(debug=True, share=False)
|