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
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) |