Spaces:
Sleeping
Sleeping
| import argparse | |
| import json | |
| import logging | |
| from pathlib import Path | |
| from typing import Any | |
| from gaia_agent.agent import GaiaAgent | |
| from gaia_agent.client import ScoringClient | |
| from gaia_agent.models import Answer | |
| USERNAME = "AyhamJo7" | |
| AGENT_CODE_URL = "https://huggingface.co/spaces/AyhamJo7/Final_Assignment_Template/tree/main" | |
| def _parser() -> argparse.ArgumentParser: | |
| parser = argparse.ArgumentParser(description="Run the GAIA course final-assignment agent") | |
| subparsers = parser.add_subparsers(dest="command", required=True) | |
| evaluate = subparsers.add_parser("evaluate") | |
| evaluate.add_argument("--output", type=Path, default=Path("answers.json")) | |
| evaluate.add_argument("--downloads", type=Path, default=Path("downloads")) | |
| submit = subparsers.add_parser("submit") | |
| submit.add_argument("--answers", type=Path, default=Path("answers.json")) | |
| return parser | |
| def evaluate(output: Path, downloads: Path) -> None: | |
| agent = GaiaAgent() | |
| answers: list[dict[str, str]] = [] | |
| with ScoringClient() as client: | |
| questions = client.questions() | |
| for index, question in enumerate(questions, start=1): | |
| logging.info("Solving %s/%s: %s", index, len(questions), question.task_id) | |
| attachment = client.download_attachment(question, downloads) | |
| record = agent.solve(question, attachment) | |
| answers.append( | |
| {"task_id": question.task_id, "submitted_answer": record.submitted_answer} | |
| ) | |
| _write_answers(output, answers) | |
| def _write_answers(output: Path, answers: list[dict[str, str]]) -> None: | |
| output.write_text(json.dumps(answers, indent=2, ensure_ascii=True) + "\n", encoding="utf-8") | |
| def submit(path: Path) -> None: | |
| raw: Any = json.loads(path.read_text(encoding="utf-8")) | |
| answers = [Answer.model_validate(item) for item in raw] | |
| with ScoringClient() as client: | |
| score = client.submit(USERNAME, AGENT_CODE_URL, answers) | |
| print(score.model_dump_json(indent=2)) | |
| def main() -> None: | |
| logging.basicConfig(level=logging.INFO, format="%(levelname)s %(message)s") | |
| args = _parser().parse_args() | |
| if args.command == "evaluate": | |
| evaluate(args.output, args.downloads) | |
| else: | |
| submit(args.answers) | |
| if __name__ == "__main__": | |
| main() | |