File size: 3,436 Bytes
c419a9b
2adc70d
c419a9b
 
 
2adc70d
 
 
6c44be5
2adc70d
c419a9b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2adc70d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
c419a9b
6c44be5
 
 
 
 
 
 
 
 
 
 
 
 
 
 
c419a9b
 
 
 
 
 
 
2adc70d
 
6c44be5
 
 
c419a9b
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
from langgraph.graph import StateGraph
from langgraph.prebuilt import tools_condition
from src.langgraph_agentic_ai.state.state import State
from langgraph.graph import START,END
from src.langgraph_agentic_ai.nodes.basic_chatbot_node import BasicChatbotNode
from src.langgraph_agentic_ai.tools.search_tool import get_tools,create_tool_node
from langgraph.prebuilt import tools_condition,ToolNode
from src.langgraph_agentic_ai.nodes.chatbot_with_tool_node import chatbotwithToolNode
from src.langgraph_agentic_ai.nodes.ai_news_node import AiNewsNode


class GraphBuilder:
    def __init__(self,model):
        self.llm=model
        # Provide the required state schema to StateGraph constructor
        self.graph_builder=StateGraph(State)


    def basic_chatbot_build_graph(self):
        """
        builds a basic chatbot using Langgraph
        This method initializes a chatbot node using the 'BasicChatbotNode' class
        and integrates it into the graph. The chatbot node is set as both the 
        entry and exit point of the 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.
        """
        ## Define the tool and tool node
        tools=get_tools()
        tool_node=create_tool_node(tools)

        ## Define the LLM
        llm=self.llm

        ## Define the chatbot node
        obj_chatbot_with_node=chatbotwithToolNode(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)
        
        self.graph_builder.add_edge(START,"chatbot")
        self.graph_builder.add_conditional_edges("chatbot",tools_condition)
        self.graph_builder.add_edge("tools","chatbot")
        self.graph_builder.add_edge("chatbot",END)


    
    def ai_news_builder_graph(self):

        ai_news_node=AiNewsNode(self.llm)

        self.graph_builder.add_node("fetch_news",ai_news_node.fetch_news)
        self.graph_builder.add_node("summarize_news",ai_news_node.summarize_news)
        self.graph_builder.add_node("save_result",ai_news_node.save_result)

        self.graph_builder.set_entry_point("fetch_news")
        self.graph_builder.add_edge("fetch_news","summarize_news")
        self.graph_builder.add_edge("summarize_news","save_result")
        self.graph_builder.add_edge("save_result",END)

    def setup_graph(self,usecase:str):
        """
        Sets up the graph for the selected use case 
        
        """
        if usecase == "Basic Chatbot":
            self.basic_chatbot_build_graph()
        if usecase == "Chatbot with WebSearch":
            self.chatbot_with_tools_build_graph()
        if usecase == "AI News":
            self.ai_news_builder_graph()

        
        return self.graph_builder.compile()