Files
context-paging/output/turn_008.json
2026-03-28 09:01:07 +00:00

2 lines
6.8 KiB
JSON

{"id":"chatcmpl-91867e2f506eaefa","object":"chat.completion","created":1774196471,"model":"NousResearch\/Hermes-3-Llama-3.2-3B","choices":[{"index":0,"message":{"role":"assistant","content":"import argparse\nimport datetime\nimport json\nimport uuid\nfrom colorama import Fore, Style\nfrom collections import defaultdict\n\nclass Task:\n def __init__(self, title, description=None, completed=False, priority='medium', due_date=None, tags=None, depends_on=None):\n self.id = self._generate_id()\n self.title = title\n self.description = description\n self.completed = completed\n self.priority = priority\n self.due_date = due_date\n self.tags = tags if tags is not None else set()\n self.depends_on = depends_on if depends_on is not None else set()\n self.created_at = datetime.now()\n\n @staticmethod\n def _generate_id():\n return str(uuid.uuid4())\n\nclass TaskManager:\n def __init__(self):\n self.tasks = []\n self.tasks_by_id = defaultdict(list)\n self.dependencies = defaultdict(set)\n\n def add_task(self, title, description=None, due_date=None, tags=None, depends_on=None):\n task = Task(title, description, due_date, tags, depends_on)\n self.tasks.append(task)\n for task_id in depends_on:\n self.dependencies[task_id].add(task.id)\n\n def list_tasks(self, show_completed=False):\n if show_completed:\n tasks = self.tasks\n else:\n tasks = [task for task in self.tasks if not task.completed]\n for task in tasks:\n color = Fore.YELLOW if task.priority == 'medium' else Fore.GREEN if task.priority == 'low' else Fore.RED\n print(f\"{color}ID: {task.id}, Title: {task.title}, Description: {task.description}, Completed: {task.completed}, Priority: {task.priority}, Tags: {', '.join(task.tags)}, Depends On: {', '.join([self.tasks_by_id[dep_id][0]['title'] for dep_id in task.depends_on])}{Style.RESET_ALL}\")\n\n def complete_task(self, task_id):\n for task in self.tasks:\n if task.id == task_id:\n task.completed = True\n for dep_id in task.depends_on:\n self.dependencies[dep_id].remove(task.id)\n if not any(self.dependencies[dep_id]):\n self.dependencies.pop(dep_id)\n break\n\n def delete_task(self, task_id):\n for task in self.tasks:\n if task.id == task_id:\n self.tasks.remove(task)\n for dep_id in task.depends_on:\n self.dependencies[dep_id].remove(task.id)\n self.dependencies.pop(task_id)\n break\n\n def save_to_file(self, filepath):\n with open(filepath, 'w') as f:\n json.dump(self.tasks, f)\n\n @staticmethod\n def load_from_file(filepath):\n with open(filepath, 'r') as f:\n tasks = json.load(f)\n task_manager = TaskManager()\n task_manager.tasks = tasks\n return task_manager\n\n def blocked_tasks(self):\n blocked = []\n for task in self.tasks:\n if not any(self.dependencies[dep_id] & set(task.depends_on) for dep_id in task.depends_on):\n blocked.append(task)\n return blocked\n\ndef main():\n parser = argparse.ArgumentParser(description='Task Manager CLI')\n subparsers = parser.add_subparsers(dest='command')\n\n add_parser = subparsers.add_parser('add', help='Add a new task')\n add_parser.add_argument('title', help='Task title')\n add_parser.add_argument('-d', '--description', help='Task description', default=None)\n add_parser.add_argument('--due', help='Due date (YYYY-MM-DD)', default=None)\n add_parser.add_argument('--tags', nargs='*', help='Tags for the task')\n add_parser.add_argument('--depends', nargs='*', help='Task IDs that this task depends on')\n\n list_parser = subparsers.add_parser('list', help='List all tasks')\n list_parser.add_argument('--tag', help='Filter by tag')\n list_parser.add_argument('--blocked', action='store_true', help='Show blocked tasks')\n\n complete_parser = subparsers.add_parser('complete', help='Mark a task as done')\n complete_parser.add_argument('id', help='Task ID')\n\n delete_parser = subparsers.add_parser('delete', help='Delete a task')\n delete_parser.add_argument('id', help='Task ID')\n\n overdue_parser = subparsers.add_parser('overdue', help='Show overdue tasks')\n overdue_parser.add_argument('--all', action='store_true', help='Show all overdue tasks')\n\n tags_parser = subparsers.add_parser('tags', help='List all used tags')\n\n args = parser.parse_args()\n\n task_manager = TaskManager()\n\n if args.command == 'add':\n task_manager.add_task(args.title, args.description, args.due, args.tags, args.depends)\n elif args.command == 'list':\n if args.tag:\n tasks = [task for task in task_manager.tasks if args.tag in [tag for task in task_manager.tasks for tag in task.tags]]\n elif args.blocked:\n blocked = task_manager.blocked_tasks()\n for task in blocked:\n print(f\"[BLOCKED] ID: {task.id}, Title: {task.title}\")\n else:\n for task in task_manager.tasks:\n color = Fore.YELLOW if task.priority == 'medium' else Fore.GREEN if task.priority == 'low' else Fore.RED\n print(f\"{color}ID: {task.id}, Title: {task.title}, Description: {task.description}, Completed: {task.completed}, Priority: {task.priority}, Tags: {', '.join(task.tags)}, Depends On: {', '.join([self.tasks_by_id[dep_id][0]['title'] for dep_id in task.depends_on])}{Style.RESET_ALL}\")\n elif args.command == 'complete':\n task_manager.complete_task(args.id)\n elif args.command == 'delete':\n task_manager.delete_task(args.id)\n elif args.command == 'load':\n task_manager = TaskManager.load_from_file(args.filepath)\n elif args.command == 'overdue':\n if args.all:\n overdue = [task for task in task_manager.tasks if task.completed and task.due_date < datetime.now().date()]\n else:\n overdue = [task for task in task_manager.tasks if task.completed and task.due_date < datetime.now().date()]\n for task in overdue:\n print(f\"[OVERDUE] ID: {task.id}, Title: {task.title}\")\n elif args.command == 'tags':\n task_manager.list_tags()\n\nif __name__ == '__main__':\n main()","refusal":null,"annotations":null,"audio":null,"function_call":null,"tool_calls":[],"reasoning":null},"logprobs":null,"finish_reason":"stop","token_ids":null}],"service_tier":null,"system_fingerprint":null,"usage":{"prompt_tokens":4619,"total_tokens":5996,"completion_tokens":1377,"prompt_tokens_details":null},"prompt_token_ids":null,"kv_transfer_params":null}