import logging import os import json import shutil # from agentverse.agentverse import AgentVerse from agentverse.tasksolving import TaskSolving from agentverse.logging import get_logger from argparse import ArgumentParser import asyncio from dataloader import dataloader_registry parser = ArgumentParser() parser.add_argument("--task", type=str, default="tasksolving/responsegen") parser.add_argument( "--tasks_dir", type=str, default=os.path.join(os.path.dirname(__file__), "..", "agentverse", "tasks"), ) parser.add_argument("--dataset_path", type=str, required=True) parser.add_argument("--output_path", type=str, default=None) parser.add_argument("--has_tools", action="store_true") parser.add_argument("--tool_tmp_path", type=str) parser.add_argument("--overwrite", action="store_true") parser.add_argument("--debug", action="store_true") args = parser.parse_args() logger = get_logger() logger.set_level(logging.DEBUG if args.debug else logging.INFO) def get_dataloader(task, dataset_path): return dataloader_registry.build(task, path=dataset_path) def cli_main(): dataloader = get_dataloader(args.task, args.dataset_path) if args.output_path is None: os.makedirs(f"./results/{args.task}", exist_ok=True) args.output_path = f"./results/{args.task}" else: os.makedirs(args.output_path, exist_ok=True) shutil.copyfile( f"{args.tasks_dir}/{args.task}/config.yaml", f"{args.output_path}/config.yaml", ) skip_cnt = 0 if not args.overwrite and os.path.exists(f"{args.output_path}/results.jsonl"): with open(f"{args.output_path}/results.jsonl", "r") as f: for line in f: if line.strip(): skip_cnt += 1 f = open(f"{args.output_path}/results.jsonl", "w" if args.overwrite else "a") for i, example in enumerate(dataloader): if i < skip_cnt: continue logger.info(f"Input: {example['input']}\nAnswer: {example['answer']}") if args.has_tools: assert args.tool_tmp_path is not None with open(args.tool_tmp_path, "w") as f: f.write(json.dumps(example["tools"])) agentverse = TaskSolving.from_task(args.task, args.tasks_dir) agentverse.environment.set_task_description(example["input"]) # print(args.single_agent) # print(args.discussion_mode) # exit() plan, result, logs = agentverse.run() f.write( json.dumps( { "input": example["input"], "response": plan, "label": example["answer"], "logs": logs, } ) + "\n" ) f.flush() f.close() if __name__ == "__main__": cli_main()