File size: 4,891 Bytes
10e9b7d eccf8e4 7d65c66 3c4371f 1a3177b 10e9b7d e80aab9 3db6293 e80aab9 1a3177b 31243f4 1a3177b 31243f4 1a3177b 4021bf3 1a3177b 31243f4 1a3177b 7e4a06b 1a3177b 3c4371f 7e4a06b 3c4371f 7d65c66 3c4371f 7e4a06b 31243f4 e80aab9 31243f4 3c4371f 31243f4 1a3177b 36ed51a 3c4371f 31243f4 eccf8e4 31243f4 7d65c66 31243f4 1a3177b 3c4371f 31243f4 7d65c66 1a3177b e80aab9 7d65c66 1a3177b 3c4371f 31243f4 7d65c66 1a3177b 7d65c66 31243f4 7d65c66 1a3177b e80aab9 7d65c66 e80aab9 31243f4 e80aab9 3c4371f e80aab9 1a3177b 7d65c66 1a3177b e80aab9 1a3177b e80aab9 31243f4 1a3177b 7e4a06b 31243f4 9088b99 7d65c66 1a3177b 31243f4 e80aab9 1a3177b | 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 | import os
import gradio as gr
import requests
import inspect
import pandas as pd
from smolagents import HfApiModel
# --- Constants ---
DEFAULT_API_URL = "https://agents-course-unit4-scoring.hf.space"
# --- Intelligent Agent Definition ---
class BasicAgent:
def __init__(self):
print("Intelligent Agent initialized.")
# Hum Hugging Face ka free Qwen model use kar rahe hain answers dene ke liye
self.model = HfApiModel(model_id="Qwen/Qwen2.5-Coder-32B-Instruct")
def __call__(self, question: str) -> str:
print(f"Agent received question (first 50 chars): {question[:50]}...")
try:
# Model ko input message format mein question bhejna
messages = [{"role": "user", "content": f"Answer this question shortly and accurately: {question}"}]
response = self.model(messages)
# Response se string answer nikalna
if hasattr(response, 'content'):
answer = response.content.strip()
else:
answer = str(response).strip()
print(f"Agent generated answer: {answer}")
return answer
except Exception as e:
print(f"Model error, falling back: {e}")
return "Error generating response"
def run_and_submit_all(profile: gr.OAuthProfile | None):
"""
Fetches all questions, runs the BasicAgent on them, submits all answers,
and displays the results.
"""
space_id = os.getenv("SPACE_ID")
if profile:
username = f"{profile.username}"
print(f"User logged in: {username}")
else:
print("User not logged in.")
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 = BasicAgent()
except Exception as e:
print(f"Error instantiating agent: {e}")
return f"Error initializing agent: {e}", None
agent_code = f"https://huggingface.co/spaces/{space_id}/tree/main"
print(f"Fetching questions from: {questions_url}")
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
print(f"Fetched {len(questions_data)} questions.")
except Exception as e:
return f"Error fetching questions: {e}", None
results_log = []
answers_payload = []
print(f"Running agent on {len(questions_data)} questions...")
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.')}"
)
return final_status, pd.DataFrame(results_log)
except Exception as e:
status_message = f"Submission Failed: {e}"
return status_message, pd.DataFrame(results_log)
# --- Build Gradio Interface ---
with gr.Blocks() as demo:
gr.Markdown("# Basic Agent Evaluation Runner")
gr.Markdown("Click the button below to automatically solve questions using Qwen LLM.")
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)
|