You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

36 lines
1.7 KiB
Python

import inspect
from typing import Optional
from agentkit.types import OnTaskStartCallback, OnTaskProgressCallback, OnTaskCompleteCallback
class AgentKitTaskProgress:
def __init__(self):
self.on_task_start_listeners: list[OnTaskStartCallback] = []
self.on_task_progress_listeners: list[OnTaskProgressCallback] = []
self.on_task_complete_listeners: list[OnTaskCompleteCallback] = []
def add_on_task_start_listener(self, listener: OnTaskStartCallback) -> None:
self.on_task_start_listeners.append(listener)
def add_on_task_progress_listener(self, listener: OnTaskProgressCallback) -> None:
self.on_task_progress_listeners.append(listener)
def add_on_task_complete_listener(self, listener: OnTaskCompleteCallback) -> None:
self.on_task_complete_listeners.append(listener)
async def _emit(self, listeners: list, *args) -> None:
for listener in listeners:
ret = listener(*args)
if inspect.isawaitable(ret):
await ret
async def task_start(self, task_title: str, task_description: str = "") -> None:
await self._emit(self.on_task_start_listeners, task_title, task_description)
async def task_progress(self, current: int, total: Optional[int] = None, task_description: Optional[str] = None) -> None:
await self._emit(self.on_task_progress_listeners, current, total, task_description)
async def task_progress_infinite(self, task_description: Optional[str] = None) -> None:
await self._emit(self.on_task_progress_listeners, 0, 0, task_description)
async def task_complete(self) -> None:
await self._emit(self.on_task_complete_listeners)