aidial_adapter_bedrock/llm/tools/call_recognizer.py (23 lines of code) (raw):

from typing import Callable from aidial_adapter_bedrock.llm.message import ( AIFunctionCallMessage, AIToolCallMessage, ) CallParser = Callable[[str], AIToolCallMessage | AIFunctionCallMessage | None] class CallRecognizer: start_tag: str call_parser: CallParser acc: str def __init__(self, start_tag: str, call_parser: CallParser): self.start_tag = start_tag self.call_parser = call_parser self.acc = "" def consume_chunk( self, chunk: str | None ) -> str | AIToolCallMessage | AIFunctionCallMessage | None: if chunk is None: """End of the chunk stream""" if self.start_tag in self.acc: return self.call_parser(self.acc) else: return self.acc self.acc += chunk