Suraj Yadav
Implemented tool calling chatbot node [skip ci]
0a518ff
from typing import Any, List
from langchain_core.language_models.chat_models import BaseChatModel
from langchain_core.messages import AIMessage
from src.basicchatbot.state.state import BasicChatBotState
class ChatbotWithToolsNode:
"""Handles chatbot interactions using an LLM and associated tools."""
def __init__(self, model: BaseChatModel, tools: List[Any]) -> None:
"""
Initialize the chatbot node with a model and tools.
Args:
model (BaseChatModel): The language model used for processing messages.
tools (List[Any]): A list of tools that can be used with the chatbot.
"""
self.llm = model
self.tools = tools
def node(self, state: BasicChatBotState) -> dict:
"""
Processes the chatbot state and generates a response.
Args:
state (BasicChatBotState): The current chatbot state containing messages.
Returns:
dict: A dictionary containing the chatbot's response messages.
"""
try:
messages = state.get("messages", [])
if not messages:
return {"messages": [AIMessage(content="ERROR: `messages` key is missing in the state. Contact developer to fix.")]}
response = self.llm.bind_tools(self.tools).invoke(input=messages)
return {"messages": [response] }
except Exception as e:
return {"messages": [AIMessage(content=f"Error processing request: {str(e)}")]}