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.

31 lines
1.3 KiB
Python

from __future__ import annotations
from typing import Callable
from type_defs.chat_complete_task import ChatCompleteServiceResponse
from utils.program import run_listeners
class ChatCompleteEvent:
def __init__(self):
self.on_tool_running: list[Callable[[str, str], None]] = []
self.on_tool_output: list[Callable[[str], None]] = []
self.on_message_output: list[Callable[[str], None]] = []
async def emit_tool_running(self, tool_name: str, running_state: str = "") -> None:
await run_listeners(self.on_tool_running, tool_name, running_state)
async def emit_tool_output(self, output: str) -> None:
await run_listeners(self.on_tool_output, output)
async def emit_message_output(self, output: str) -> None:
await run_listeners(self.on_message_output, output)
class ChatCompleteTaskEvent(ChatCompleteEvent):
def __init__(self):
super().__init__()
self.on_finished: list[Callable[[str | None], None]] = []
self.on_error: list[Callable[[str], None]] = []
async def emit_finished(self, result: ChatCompleteServiceResponse | None) -> None:
await run_listeners(self.on_finished, result)
async def emit_error(self, ex: Exception) -> None:
await run_listeners(self.on_error, ex)