Spaces:
Runtime error
Runtime error
import os | |
import requests | |
import pandas as pd | |
import gradio as gr | |
from langchain_core.messages import HumanMessage | |
from agent import build_graph | |
DEFAULT_API_URL = "https://agents-course-unit4-scoring.hf.space" | |
class BasicAgent: | |
def __init__(self): | |
self.graph = build_graph() | |
def __call__(self, question: str) -> str: | |
result = self.graph.invoke({"messages": [HumanMessage(content=question)]}) | |
return result['messages'][-1].content | |
def run_and_submit_all(profile: gr.OAuthProfile | None): | |
if not profile: | |
return "Please Login to Hugging Face with the button.", None | |
username = profile.username | |
agent_code = f"https://huggingface.co/spaces/{os.getenv('SPACE_ID')}/tree/main" | |
session = requests.Session() | |
try: | |
agent = BasicAgent() | |
except Exception as e: | |
return f"Error initializing agent: {e}", None | |
try: | |
response = session.get(f"{DEFAULT_API_URL}/questions", timeout=15) | |
response.raise_for_status() | |
questions = response.json() | |
if not questions: | |
return "No questions received from server.", None | |
except Exception as e: | |
return f"Error fetching questions: {e}", None | |
results_log = [] | |
answers_payload = [] | |
for item in questions: | |
task_id = item.get("task_id") | |
q = item.get("question") | |
if not (task_id and q): | |
continue | |
try: | |
answer = agent(q) | |
answers_payload.append({"task_id": task_id, "submitted_answer": answer}) | |
except Exception as e: | |
answer = f"AGENT ERROR: {e}" | |
results_log.append({"Task ID": task_id, "Question": q, "Submitted Answer": answer}) | |
if not answers_payload: | |
return "Agent did not produce valid answers.", pd.DataFrame(results_log) | |
try: | |
res = session.post( | |
f"{DEFAULT_API_URL}/submit", | |
json={ | |
"username": username.strip(), | |
"agent_code": agent_code, | |
"answers": answers_payload | |
}, | |
timeout=60 | |
) | |
res.raise_for_status() | |
r = res.json() | |
status = ( | |
f"Submission Successful!\nUser: {r.get('username')}\n" | |
f"Score: {r.get('score', 'N/A')}% " | |
f"({r.get('correct_count', '?')}/{r.get('total_attempted', '?')})\n" | |
f"Message: {r.get('message', 'No message received.')}" | |
) | |
return status, pd.DataFrame(results_log) | |
except requests.exceptions.RequestException as e: | |
return f"Submission Failed: {e}", pd.DataFrame(results_log) | |