added final graph function
Browse files
agent.py
CHANGED
@@ -141,39 +141,38 @@ retriever_tool = create_retriever_tool(
|
|
141 |
description="Retrieve similar questions from a vector store."
|
142 |
)
|
143 |
|
144 |
-
## ----- LLM WITH TOOLS ----- ##
|
145 |
-
|
146 |
-
llm = ChatOpenAI(model="gpt-4o", temperature=0)
|
147 |
-
llm_with_tools = llm.bind_tools(tools)
|
148 |
-
|
149 |
## ----- GRAPH PIPELINE ----- ##
|
150 |
|
151 |
-
def
|
152 |
-
|
153 |
-
|
154 |
-
|
155 |
-
|
156 |
-
|
157 |
-
|
158 |
-
|
159 |
-
|
160 |
-
|
161 |
-
|
162 |
-
|
163 |
-
|
164 |
-
|
165 |
-
|
166 |
-
|
167 |
-
|
168 |
-
|
169 |
-
|
170 |
-
builder.
|
171 |
-
builder.
|
172 |
-
builder.
|
173 |
-
|
174 |
-
|
175 |
-
|
176 |
-
|
|
|
|
|
|
|
|
|
177 |
|
178 |
## ----- TESTING (Optional) ----- ##
|
179 |
|
|
|
141 |
description="Retrieve similar questions from a vector store."
|
142 |
)
|
143 |
|
|
|
|
|
|
|
|
|
|
|
144 |
## ----- GRAPH PIPELINE ----- ##
|
145 |
|
146 |
+
def graph():
|
147 |
+
llm = ChatOpenAI(model="gpt-4o", temperature=0)
|
148 |
+
llm_with_tools = llm.bind_tools(tools)
|
149 |
+
|
150 |
+
def assistant(state: MessagesState):
|
151 |
+
"""Assistant node to generate answers."""
|
152 |
+
return {"messages": [llm_with_tools.invoke(state["messages"])]}
|
153 |
+
|
154 |
+
# Use a retriever node to inject a similar example
|
155 |
+
def retriever(state: MessagesState):
|
156 |
+
"""Retriever node to provide example context."""
|
157 |
+
similar = vector_store.similarity_search(state["messages"][0].content)
|
158 |
+
if not similar:
|
159 |
+
return {"messages": [sys_msg] + state["messages"]}
|
160 |
+
example = HumanMessage(content=f"Similar Q&A for context:\n\n{similar[0].page_content}")
|
161 |
+
return {"messages": [sys_msg] + state["messages"] + [example]}
|
162 |
+
|
163 |
+
# Build graph
|
164 |
+
builder = StateGraph(MessagesState)
|
165 |
+
builder.add_node("retriever", retriever)
|
166 |
+
builder.add_node("assistant", assistant)
|
167 |
+
builder.add_node("tools", ToolNode(tools))
|
168 |
+
|
169 |
+
builder.add_edge(START, "retriever")
|
170 |
+
builder.add_edge("retriever", "assistant")
|
171 |
+
builder.add_conditional_edges("assistant", tools_condition)
|
172 |
+
builder.add_edge("tools", "assistant")
|
173 |
+
|
174 |
+
return builder.compile()
|
175 |
+
|
176 |
|
177 |
## ----- TESTING (Optional) ----- ##
|
178 |
|