| | import re |
| | import tempfile |
| | from pathlib import Path |
| |
|
| | import pandas as pd |
| | import requests |
| |
|
| |
|
| | class HsEvaluatorClient: |
| |
|
| | def __init__(self, username, space_id): |
| | self.space_id = space_id |
| | self.username = username |
| | self.base_url = "https://agents-course-unit4-scoring.hf.space" |
| |
|
| | def fetch_questions(self): |
| | try: |
| | response = requests.get(f"{self.base_url}/questions", timeout=15) |
| | response.raise_for_status() |
| | return response.json() |
| | except Exception as e: |
| | print(f"Error fetching questions: {e}") |
| | return None |
| |
|
| | def download_file_if_any(self, task_id: str) -> str | None: |
| | url = f"{self.base_url}/files/{task_id}" |
| | try: |
| | resp = requests.get(url, timeout=30) |
| | if resp.status_code == 404: |
| | return None |
| | resp.raise_for_status() |
| | except requests.exceptions.HTTPError as e: |
| | raise e |
| |
|
| | |
| | |
| | cdisp = resp.headers.get("content-disposition", "") |
| | filename = task_id |
| | if "filename=" in cdisp: |
| | m = re.search(r'filename="([^"]+)"', cdisp) |
| | if m: |
| | filename = m.group(1) |
| |
|
| | tmp_dir = Path(tempfile.gettempdir()) / "gaia_files" |
| | tmp_dir.mkdir(exist_ok=True) |
| | file_path = tmp_dir / filename |
| | with open(file_path, "wb") as f: |
| | f.write(resp.content) |
| | return str(file_path) |
| |
|
| | def submit_answers(self, answers_payload, results_log): |
| | agent_code = f"https://huggingface.co/spaces/{self.space_id}/tree/main" |
| | submission_data = { |
| | "username": self.username.strip(), |
| | "agent_code": agent_code, |
| | "answers": answers_payload |
| | } |
| | try: |
| | response = requests.post(f"{self.base_url}/submit", 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: |
| | return f"Submission Failed: {e}", pd.DataFrame(results_log) |
| |
|