Spaces:
Sleeping
Sleeping
File size: 4,747 Bytes
75849d9 a55ef75 75849d9 a55ef75 6a741f5 75849d9 a55ef75 6a741f5 75849d9 bcf2762 a55ef75 085f277 bcf2762 52370d5 bcf2762 085f277 a55ef75 75849d9 a55ef75 75849d9 a55ef75 75849d9 a55ef75 75849d9 a55ef75 75849d9 a55ef75 75849d9 a55ef75 75849d9 a55ef75 75849d9 a55ef75 75849d9 a55ef75 75849d9 a55ef75 92d2175 a55ef75 75849d9 bcf2762 a55ef75 92d2175 bcf2762 a55ef75 75849d9 a55ef75 75849d9 a55ef75 |
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 130 131 132 133 134 135 136 137 |
"""
GRADIO INTERFACE FOR LANGGRAPH AI AGENT
Features:
- Interactive Q&A with AI agent
- Support for task_id and file uploads
- Real-time processing with Qwen3-8B
- Beautiful UI với LangGraph workflow visualization
"""
import os
import gradio as gr
import requests
import pandas as pd
from agent import process_question
# --- Constants ---
DEFAULT_API_URL = "https://agents-course-unit4-scoring.hf.space"
# --- Basic Agent Definition ---
# ----- THIS IS WHERE YOU CAN BUILD WHAT YOU WANT ------
class BasicAgent:
def __init__(self):
print("BasicAgent initialized.")
def __call__(self, question: str) -> str:
print(f"Agent received question (first 50 chars): {question[:50]}...")
answer = process_question(question)
print(f"Agent returning answer: {answer}")
return answer
def run_and_submit_all(profile: gr.OAuthProfile | None = None):
"""
Fetches all questions, runs the BasicAgent on them, submits all answers,
and displays the results.
"""
# Determine HF Space Runtime URL and Repo URL
space_id = os.getenv("SPACE_ID", "unknown_space")
if profile:
username = f"{profile.username}"
print(f"User logged in: {username}")
else:
print("User not logged in, using anonymous.")
username = "anonymous"
print(f"Running as user: {username}")
api_url = DEFAULT_API_URL
questions_url = f"{api_url}/questions"
submit_url = f"{api_url}/submit"
# Instantiate Agent
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(agent_code)
# Fetch Questions
try:
response = requests.get(questions_url, timeout=15)
response.raise_for_status()
questions_data = response.json()
if not questions_data:
print("Fetched questions list is empty.")
return "Fetched questions list is empty or invalid.", None
print(f"Fetched {len(questions_data)} questions.")
except Exception as e:
print(f"Error fetching questions: {e}")
return f"Error fetching questions: {e}", None
# Run Agent on each question
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:
print(f"Error on task {task_id}: {e}")
results_log.append({"Task ID": task_id, "Question": question_text, "Submitted Answer": f"ERROR: {e}"})
if not answers_payload:
print("Agent did not produce any answers to submit.")
return "No answers to submit.", pd.DataFrame(results_log)
# Submit answers
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"Score: {result_data.get('score', 'N/A')}%\n"
f"Message: {result_data.get('message', '')}"
)
return final_status, pd.DataFrame(results_log)
except Exception as e:
print(f"Submission failed: {e}")
return f"Submission failed: {e}", pd.DataFrame(results_log)
# --- Build Gradio Interface ---
with gr.Blocks() as demo:
gr.Markdown("# Basic Agent Evaluation Runner")
gr.Markdown(
"""
**Instructions:**
1. Login to Hugging Face using the button below (required for submission)
2. Click 'Run Evaluation & Submit All Answers' to fetch, run the 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,
outputs=[status_output, results_table]
)
if __name__ == "__main__":
demo.launch(debug=True, share=False) |