|
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) |
|
|