achapman commited on
Commit
8c5710f
·
1 Parent(s): ebc19c5

Answer questions, commit work in progress

Browse files
BuildingAChainlitApp.md CHANGED
@@ -133,6 +133,8 @@ Simply put, this downloads the file as a temp file, we load it in with `TextFile
133
 
134
  Why do we want to support streaming? What about streaming is important, or useful?
135
 
 
 
136
  ## On Chat Start:
137
 
138
  The next scope is where "the magic happens". On Chat Start is when a user begins a chat session. This will happen whenever a user opens a new chat window, or refreshes an existing chat window.
@@ -175,6 +177,8 @@ Now, we'll save that into our user session!
175
 
176
  Why are we using User Session here? What about Python makes us need to use this? Why not just store everything in a global variable?
177
 
 
 
178
  ## On Message
179
 
180
  First, we load our chain from the user session:
 
133
 
134
  Why do we want to support streaming? What about streaming is important, or useful?
135
 
136
+ It helps reduce the user's wait time until the first token appears, making chatbot apps seem more responsive.
137
+
138
  ## On Chat Start:
139
 
140
  The next scope is where "the magic happens". On Chat Start is when a user begins a chat session. This will happen whenever a user opens a new chat window, or refreshes an existing chat window.
 
177
 
178
  Why are we using User Session here? What about Python makes us need to use this? Why not just store everything in a global variable?
179
 
180
+ It separates a user's info from other users, which is important in order to keep track of conversational context, uploaded documents, and other session-specific information.
181
+
182
  ## On Message
183
 
184
  First, we load our chain from the user session:
aimakerspace/qa_pipeline.py CHANGED
@@ -1,4 +1,5 @@
1
  from rank_bm25 import BM25Plus
 
2
 
3
  from .openai_utils.prompts import (
4
  SystemRolePrompt
@@ -17,14 +18,23 @@ def bm25plus_rerank(corpus, query, initial_ranking, top_n=3):
17
  ranked_indices = [initial_ranking[i] for i in bm25_scores.argsort()[::-1]]
18
  return ranked_indices[:top_n]
19
 
 
 
 
 
 
 
20
 
21
  class RetrievalAugmentedQAPipeline:
22
- def __init__(self, llm: ChatOpenAI(), vector_db_retriever: VectorDatabase) -> None:
23
  self.llm = llm
24
  self.vector_db_retriever = vector_db_retriever
25
 
26
  async def arun_pipeline(self, user_query: str):
27
- context_list = self.vector_db_retriever.search_by_text(user_query, k=4)
 
 
 
28
 
29
  context_prompt = ""
30
  for context in context_list:
@@ -46,8 +56,10 @@ class RerankedQAPipeline(RetrievalAugmentedQAPipeline):
46
  async def arun_pipeline(self, user_query: str, rerank: bool=False) -> str:
47
  # Retrieve the top 10 results. Either return the top 3, or rerank with BM25 and then return
48
  # the new top 3
49
- context_list = self.vector_db_retriever.search_by_text(user_query, k=10)
50
-
 
 
51
  # Convert from tuples to strings
52
  context_list_str = [context_list[i][0] for i in range(len(context_list))]
53
 
 
1
  from rank_bm25 import BM25Plus
2
+ from langchain.vectorstores import Qdrant
3
 
4
  from .openai_utils.prompts import (
5
  SystemRolePrompt
 
18
  ranked_indices = [initial_ranking[i] for i in bm25_scores.argsort()[::-1]]
19
  return ranked_indices[:top_n]
20
 
21
+ def search_by_text(qdrant: Qdrant, query_text: str, k: int, return_as_text: bool = False) -> List[Tuple[str, float]]:
22
+ results = qdrant.similarity_search_with_score(query_text, k)
23
+ if return_as_text:
24
+ return [result[0].page_content for result in results]
25
+ return [(result[0].page_content, result[1]) for result in results]
26
+
27
 
28
  class RetrievalAugmentedQAPipeline:
29
+ def __init__(self, llm: ChatOpenAI(), vector_db_retriever) -> None:
30
  self.llm = llm
31
  self.vector_db_retriever = vector_db_retriever
32
 
33
  async def arun_pipeline(self, user_query: str):
34
+ if type(self.vector_db_retriever == "Qdrant"):
35
+ context_list = search_by_text(self.vector_db_retriever,user_query, k=4)
36
+ else:
37
+ context_list = self.vector_db_retriever.search_by_text(user_query, k=4)
38
 
39
  context_prompt = ""
40
  for context in context_list:
 
56
  async def arun_pipeline(self, user_query: str, rerank: bool=False) -> str:
57
  # Retrieve the top 10 results. Either return the top 3, or rerank with BM25 and then return
58
  # the new top 3
59
+ if type(self.vector_db_retriever == "Qdrant"):
60
+ context_list = search_by_text(self.vector_db_retriever,user_query, k=10)
61
+ else:
62
+ context_list = self.vector_db_retriever.search_by_text(user_query, k=10)
63
  # Convert from tuples to strings
64
  context_list_str = [context_list[i][0] for i in range(len(context_list))]
65