from langgraph.graph import StateGraph,START,END,MessagesState from langgraph.prebuilt import tools_condition,ToolNode from langchain_core.prompts import ChatPromptTemplate import datetime from src.langgraphagenticai.state.state import State from src.langgraphagenticai.nodes.basic_chatbot_node import BasicChatbotNode from src.langgraphagenticai.tools.search_tool import get_tools,create_tool_node from src.langgraphagenticai.nodes.chatbot_with_tools_node import ChatbotWithToolNode from IPython.display import display,Image class GraphBuilder: def __init__(self,model): self.llm = model self.graph_builder = StateGraph(State) def basic_chatbot_build_graph(self): """ Builds a basic chatbot Graph using LangGraph. This method initializes a chatbot node using the 'BasicChatbotNode' class and integrates into the graph.The chatbot node is set as both the entry entry and exit point of graph """ self.basic_chatbot_node = BasicChatbotNode(self.llm) self.graph_builder.add_node("chatbot",self.basic_chatbot_node.process) self.graph_builder.add_edge(START,"chatbot") self.graph_builder.add_edge("chatbot",END) def chatbot_with_tools_build_graph(self): """ Builds an advanced chatbot graph with tool integration. This method creates a chatbot graph that includes both a chatbot node and a tool node. It defines tools, initializes the chatbot with tool capabilities, and sets up conditional and direct edges between nodes. The chatbot node is set as the entry point. """ tools = get_tools() tool_node = create_tool_node(tools) # Define LLM llm = self.llm # Define chatbot node obj_chatbot_with_node = ChatbotWithToolNode(model=llm) chatbot_node = obj_chatbot_with_node.create_chatbot(tools) # Add nodes self.graph_builder.add_node("chatbot",chatbot_node) self.graph_builder.add_node("tools",tool_node) # Define direct and conditional edges self.graph_builder.add_edge(START,"chatbot") self.graph_builder.add_conditional_edges("chatbot",tools_condition) self.graph_builder.add_edge("tools","chatbot") def setup_graph(self,usecase:str): """ Sets up the graph for the selected use cases """ if usecase == "Basic Chatbot": self.basic_chatbot_build_graph() elif usecase == "Chatbot with Tool": self.chatbot_with_tools_build_graph() return self.graph_builder.compile()