seansullivan commited on
Commit
c08f768
·
verified ·
1 Parent(s): 0fc43fd

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +22 -16
app.py CHANGED
@@ -15,10 +15,10 @@ nltk.download('punkt_tab')
15
 
16
 
17
  @st.cache_resource
18
- def init_agent(namespace1: str, namespace2: str):
19
  """
20
  Initialize the LangGraph agent with two Pinecone retriever tools,
21
- each configured with a different namespace.
22
  """
23
  # Retrieve API keys from environment variables
24
  OPENAI_API_KEY = os.environ.get("OPENAI_API_KEY")
@@ -37,39 +37,39 @@ def init_agent(namespace1: str, namespace2: str):
37
  index_name = 'autogen'
38
  pc = Pinecone(api_key=PINE_API_KEY)
39
  index = pc.Index(index_name)
40
- # Allow the index to connect
41
  time.sleep(1)
42
  index.describe_index_stats()
43
 
44
  # --- BM25 Sparse Encoder ---
45
  bm25_encoder = BM25Encoder().default()
46
 
47
- # --- Create first Pinecone Hybrid Retriever Tool using namespace1 ---
48
  retriever1 = PineconeHybridSearchRetriever(
49
  embeddings=embed,
50
  sparse_encoder=bm25_encoder,
51
  index=index,
52
  namespace=namespace1,
53
- top_k=4
54
  )
55
  retriever_tool1 = create_retriever_tool(
56
  retriever1,
57
  "retrieve_context_1",
58
- f"Search and return information from Autogen's codebase and documentation using namespace '{namespace1}'.",
59
  )
60
 
61
- # --- Create second (duplicate) Pinecone Hybrid Retriever Tool using namespace2 ---
62
  retriever2 = PineconeHybridSearchRetriever(
63
  embeddings=embed,
64
  sparse_encoder=bm25_encoder,
65
  index=index,
66
  namespace=namespace2,
67
- top_k=4
68
  )
69
  retriever_tool2 = create_retriever_tool(
70
  retriever2,
71
  "retrieve_context_2",
72
- f"Search and return information from Autogen's codebase and documentation using namespace '{namespace2}'.",
73
  )
74
 
75
  # Both retriever tools are added to the list of available tools.
@@ -127,14 +127,20 @@ Now, please help the user with their coding query for LangGraph:
127
  return graph
128
 
129
 
130
- # ----------------- Sidebar: Namespace Selection ----------------- #
131
- st.sidebar.header("Namespace Selection for Retriever Tools")
 
 
132
  namespace_options = ["langgraph-main", "autogen"]
133
  namespace1 = st.sidebar.selectbox("Select namespace for Retriever Tool 1:", namespace_options, index=0)
 
 
 
134
  namespace2 = st.sidebar.selectbox("Select namespace for Retriever Tool 2:", namespace_options, index=0)
 
135
 
136
- # Initialize the agent with the selected namespaces.
137
- graph = init_agent(namespace1, namespace2)
138
 
139
 
140
  # ----------------- Main Chat App UI ----------------- #
@@ -145,7 +151,7 @@ if "chat_history" not in st.session_state:
145
  st.session_state.chat_history = [] # Each entry is a tuple: (role, message)
146
 
147
  def display_conversation():
148
- """Display the chat history."""
149
  for role, message in st.session_state.chat_history:
150
  if role == "user":
151
  st.markdown(f"**You:** {message}")
@@ -167,7 +173,7 @@ with st.form("chat_form", clear_on_submit=True):
167
  if st.session_state.chat_history and st.session_state.chat_history[-1][0] == "user":
168
  inputs = {"messages": st.session_state.chat_history}
169
 
170
- # Placeholder to update the response stream in real time.
171
  response_placeholder = st.empty()
172
  assistant_message = ""
173
 
@@ -182,6 +188,6 @@ if st.session_state.chat_history and st.session_state.chat_history[-1][0] == "us
182
  assistant_message += text
183
  response_placeholder.markdown(f"**Assistant:** {assistant_message}")
184
 
185
- # Append the full assistant response to the chat history.
186
  st.session_state.chat_history.append(("assistant", assistant_message))
187
  st.experimental_rerun()
 
15
 
16
 
17
  @st.cache_resource
18
+ def init_agent(namespace1: str, top_k1: int, namespace2: str, top_k2: int):
19
  """
20
  Initialize the LangGraph agent with two Pinecone retriever tools,
21
+ each configured with a specified namespace and top_k value.
22
  """
23
  # Retrieve API keys from environment variables
24
  OPENAI_API_KEY = os.environ.get("OPENAI_API_KEY")
 
37
  index_name = 'autogen'
38
  pc = Pinecone(api_key=PINE_API_KEY)
39
  index = pc.Index(index_name)
40
+ # Allow a moment for the index to connect
41
  time.sleep(1)
42
  index.describe_index_stats()
43
 
44
  # --- BM25 Sparse Encoder ---
45
  bm25_encoder = BM25Encoder().default()
46
 
47
+ # --- Create first Pinecone Hybrid Retriever Tool using namespace1 and top_k1 ---
48
  retriever1 = PineconeHybridSearchRetriever(
49
  embeddings=embed,
50
  sparse_encoder=bm25_encoder,
51
  index=index,
52
  namespace=namespace1,
53
+ top_k=top_k1
54
  )
55
  retriever_tool1 = create_retriever_tool(
56
  retriever1,
57
  "retrieve_context_1",
58
+ f"Search and return information from Autogen's codebase and documentation using namespace '{namespace1}' with top_k = {top_k1}.",
59
  )
60
 
61
+ # --- Create second Pinecone Hybrid Retriever Tool using namespace2 and top_k2 ---
62
  retriever2 = PineconeHybridSearchRetriever(
63
  embeddings=embed,
64
  sparse_encoder=bm25_encoder,
65
  index=index,
66
  namespace=namespace2,
67
+ top_k=top_k2
68
  )
69
  retriever_tool2 = create_retriever_tool(
70
  retriever2,
71
  "retrieve_context_2",
72
+ f"Search and return information from Autogen's codebase and documentation using namespace '{namespace2}' with top_k = {top_k2}.",
73
  )
74
 
75
  # Both retriever tools are added to the list of available tools.
 
127
  return graph
128
 
129
 
130
+ # ----------------- Sidebar: Namespace & Top_K Selection ----------------- #
131
+ st.sidebar.header("Retriever Tool Settings")
132
+
133
+ # Dropdown and slider for Retriever Tool 1
134
  namespace_options = ["langgraph-main", "autogen"]
135
  namespace1 = st.sidebar.selectbox("Select namespace for Retriever Tool 1:", namespace_options, index=0)
136
+ top_k1 = st.sidebar.slider("Select top_k for Retriever Tool 1:", min_value=1, max_value=4, value=1, step=1)
137
+
138
+ # Dropdown and slider for Retriever Tool 2
139
  namespace2 = st.sidebar.selectbox("Select namespace for Retriever Tool 2:", namespace_options, index=0)
140
+ top_k2 = st.sidebar.slider("Select top_k for Retriever Tool 2:", min_value=1, max_value=4, value=1, step=1)
141
 
142
+ # Initialize the agent with the selected namespaces and top_k values.
143
+ graph = init_agent(namespace1, top_k1, namespace2, top_k2)
144
 
145
 
146
  # ----------------- Main Chat App UI ----------------- #
 
151
  st.session_state.chat_history = [] # Each entry is a tuple: (role, message)
152
 
153
  def display_conversation():
154
+ """Display the chat conversation."""
155
  for role, message in st.session_state.chat_history:
156
  if role == "user":
157
  st.markdown(f"**You:** {message}")
 
173
  if st.session_state.chat_history and st.session_state.chat_history[-1][0] == "user":
174
  inputs = {"messages": st.session_state.chat_history}
175
 
176
+ # Placeholder for real-time streaming of the response.
177
  response_placeholder = st.empty()
178
  assistant_message = ""
179
 
 
188
  assistant_message += text
189
  response_placeholder.markdown(f"**Assistant:** {assistant_message}")
190
 
191
+ # Append the complete assistant response to the chat history.
192
  st.session_state.chat_history.append(("assistant", assistant_message))
193
  st.experimental_rerun()