import requests class APIClient: """Handles all API interactions with error handling.""" def __init__(self, base_url): self.base_url = base_url.rstrip('/') def get_questions(self): """Fetch the full list of evaluation questions.""" try: resp = requests.get(f"{self.base_url}/questions", timeout=10) resp.raise_for_status() return resp.json() except Exception as e: raise RuntimeError(f"Failed to fetch questions: {e}") def get_random_question(self): """Fetch a single random question.""" try: resp = requests.get(f"{self.base_url}/random-question", timeout=10) resp.raise_for_status() return resp.json() except Exception as e: raise RuntimeError(f"Failed to fetch random question: {e}") def get_file(self, task_id): """Download a specific file associated with a given task ID.""" try: resp = requests.get(f"{self.base_url}/files/{task_id}", timeout=20) resp.raise_for_status() return resp.content except Exception as e: raise RuntimeError(f"Failed to fetch file for task {task_id}: {e}") def submit(self, username, agent_code, answers): """Submit agent answers and return the result.""" data = {"username": username, "agent_code": agent_code, "answers": answers} try: resp = requests.post(f"{self.base_url}/submit", json=data, timeout=60) resp.raise_for_status() return resp.json() except Exception as e: raise RuntimeError(f"Failed to submit answers: {e}")