aidial_adapter_bedrock/llm/tools/default_emulator.py (41 lines of code) (raw):
from typing import List, Optional
from aidial_adapter_bedrock.llm.message import (
AIFunctionCallMessage,
AIToolCallMessage,
BaseMessage,
ToolMessage,
)
from aidial_adapter_bedrock.llm.tools.emulator import ToolsEmulator
from aidial_adapter_bedrock.llm.tools.tools_config import ToolsConfig
from aidial_adapter_bedrock.utils.log_config import bedrock_logger as log
class DefaultToolsEmulator(ToolsEmulator):
def add_tool_declarations(
self, messages: List[BaseMessage]
) -> List[BaseMessage]:
if self.tool_config is not None:
log.warning(
"The model doesn't support tools/functions, however they were "
"specified in the request. Continuing without tools/functions."
)
return messages
def get_stop_sequences(self) -> List[str]:
return []
def convert_to_base_messages(
self, messages: List[BaseMessage | ToolMessage]
) -> List[BaseMessage]:
ret: List[BaseMessage] = [
msg for msg in messages if not isinstance(msg, ToolMessage)
]
if len(ret) != len(messages):
log.warning(
"The model doesn't support tools/functions, however messages "
"related to tools/functions were provided in the request. "
"Ignoring such messages."
)
return ret
def recognize_call(
self, content: str | None
) -> str | AIToolCallMessage | AIFunctionCallMessage | None:
return content
def default_tools_emulator(tool_config: Optional[ToolsConfig]) -> ToolsEmulator:
return DefaultToolsEmulator(tool_config=tool_config)