Spaces:
Runtime error
Runtime error
File size: 4,358 Bytes
051c1ef bd9a51c 051c1ef 5d6dd93 bd9a51c e4bdf70 051c1ef 5d6dd93 051c1ef e4bdf70 051c1ef 5d6dd93 e4bdf70 051c1ef 5d6dd93 051c1ef 5d6dd93 051c1ef e4bdf70 051c1ef e4bdf70 051c1ef e4bdf70 051c1ef e4bdf70 051c1ef e4bdf70 051c1ef e4bdf70 051c1ef e4bdf70 bd9a51c 051c1ef e4bdf70 051c1ef e4bdf70 5d6dd93 |
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 |
""" Basic Agent Evaluation Runner"""
import os
import gradio as gr
import requests
import pandas as pd
from langchain_core.messages import HumanMessage
from agent import ninu # استيراد دالة بناء الـ agent من ملف agent.py
# Constants
DEFAULT_API_URL = "https://agents-course-unit4-scoring.hf.space"
class BasicAgent:
"""A langgraph agent."""
def __init__(self):
print("BasicAgent initialized.")
self.graph = ninu() # نستخدم دالة ninu لبناء الـ graph
def __call__(self, question: str) -> str:
print(f"Agent received question (first 50 chars): {question[:50]}...")
messages = [HumanMessage(content=question)]
messages = self.graph.invoke({"messages": messages})
answer = messages['messages'][-1].content
return answer[14:] # تعديل حسب البنية التي يرجعها النموذج
def run_and_submit_all(profile: gr.OAuthProfile | None):
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:
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()
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:
return f"Submission Failed: {e}", pd.DataFrame(results_log)
# Gradio UI
with gr.Blocks() as demo:
gr.Markdown("# Basic Agent Evaluation Runner")
gr.Markdown(
"""
**Instructions:**
1. Clone this space and customize the agent logic.
2. Log in with Hugging Face to enable submission.
3. Click the button to run evaluation and submit all answers.
"""
)
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__":
print("\nLaunching Gradio Interface...")
demo.launch(debug=True, share=False)
|