Shreyas094 commited on
Commit
d48360b
·
verified ·
1 Parent(s): 14c16ca

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +19 -19
app.py CHANGED
@@ -82,17 +82,17 @@ class EnhancedContextDrivenChatbot:
82
 
83
  def extract_instructions(self, text):
84
  instruction_patterns = [
85
- r"^(?:please\s+)?(?:can\s+you\s+)?(?:could\s+you\s+)?(.*?)\s*(?:for\s+me|for\s+this\s+response|in\s+your\s+response|in\s+your\s+answer)(?:\s*\?)?$",
86
- r"^(?:I\s+want\s+you\s+to\s+)?(.*?)\s*(?:for\s+me|for\s+this\s+response|in\s+your\s+response|in\s+your\s+answer)(?:\s*\?)?$",
87
- r"^(?:make\s+sure\s+to\s+)?(.*?)\s*(?:for\s+me|for\s+this\s+response|in\s+your\s+response|in\s+your\s+answer)(?:\s*\?)?$",
88
  ]
89
 
90
  for pattern in instruction_patterns:
91
  match = re.match(pattern, text, re.IGNORECASE)
92
  if match:
93
- return match.group(1).strip(), True
94
 
95
- return text, False
96
 
97
  def get_most_relevant_context(self, question):
98
  if not self.history:
@@ -136,21 +136,19 @@ class EnhancedContextDrivenChatbot:
136
  return rephrased_question.strip()
137
 
138
  def process_question(self, question):
139
- question, has_instructions = self.extract_instructions(question)
140
 
141
- if has_instructions:
142
- self.last_instructions = question
143
- contextualized_question = self.get_most_relevant_context(question)
144
- else:
145
- contextualized_question = self.get_most_relevant_context(question)
146
- if self.is_follow_up_question(question):
147
- contextualized_question = self.rephrase_query(contextualized_question, self.last_instructions)
148
 
149
  topics = self.extract_topics(contextualized_question)
150
 
151
  self.add_to_history(question)
 
152
 
153
- return contextualized_question, topics, self.entity_tracker, self.last_instructions
154
 
155
  # Initialize LlamaParse
156
  llama_parser = LlamaParse(
@@ -349,6 +347,8 @@ def ask_question(question, temperature, top_p, repetition_penalty, web_search, c
349
  if web_search:
350
  contextualized_question, topics, entity_tracker, instructions = chatbot.process_question(question)
351
  serializable_entity_tracker = {k: list(v) for k, v in entity_tracker.items()}
 
 
352
  search_results = google_search(contextualized_question)
353
  all_answers = []
354
 
@@ -365,10 +365,10 @@ def ask_question(question, temperature, top_p, repetition_penalty, web_search, c
365
 
366
  context_str = "\n".join([f"Source: {doc.metadata['source']}\nContent: {doc.page_content}" for doc in web_docs])
367
 
368
- instruction_prompt = f"Instructions: {instructions}\n" if instructions else ""
369
 
370
  prompt_template = f"""
371
- Answer the question based on the following web search results, conversation context, entity information, and any provided instructions:
372
  Web Search Results:
373
  {{context}}
374
  Conversation Context: {{conv_context}}
@@ -377,15 +377,15 @@ def ask_question(question, temperature, top_p, repetition_penalty, web_search, c
377
  Entity Information: {{entities}}
378
  {instruction_prompt}
379
  If the web search results don't contain relevant information, state that the information is not available in the search results.
380
- Provide a summarized and direct answer to the question without mentioning the web search or these instructions.
381
- Do not include any source information in your answer.
382
  """
383
 
384
  prompt_val = ChatPromptTemplate.from_template(prompt_template)
385
  formatted_prompt = prompt_val.format(
386
  context=context_str,
387
  conv_context=chatbot.get_context(),
388
- question=contextualized_question,
389
  topics=", ".join(topics),
390
  entities=json.dumps(serializable_entity_tracker)
391
  )
 
82
 
83
  def extract_instructions(self, text):
84
  instruction_patterns = [
85
+ r"(.*?),?\s*(?:please\s+)?(provide\s+(?:me\s+)?a\s+.*?|give\s+(?:me\s+)?a\s+.*?|create\s+a\s+.*?)$",
86
+ r"(.*?),?\s*(?:please\s+)?(summarize|analyze|explain|describe|elaborate\s+on).*$",
87
+ r"(.*?),?\s*(?:please\s+)?(in\s+detail|briefly|concisely).*$",
88
  ]
89
 
90
  for pattern in instruction_patterns:
91
  match = re.match(pattern, text, re.IGNORECASE)
92
  if match:
93
+ return match.group(1).strip(), match.group(2).strip()
94
 
95
+ return text, None
96
 
97
  def get_most_relevant_context(self, question):
98
  if not self.history:
 
136
  return rephrased_question.strip()
137
 
138
  def process_question(self, question):
139
+ core_question, instructions = self.extract_instructions(question)
140
 
141
+ contextualized_question = self.get_most_relevant_context(core_question)
142
+
143
+ if self.is_follow_up_question(core_question):
144
+ contextualized_question = self.rephrase_query(contextualized_question, instructions)
 
 
 
145
 
146
  topics = self.extract_topics(contextualized_question)
147
 
148
  self.add_to_history(question)
149
+ self.last_instructions = instructions
150
 
151
+ return contextualized_question, topics, self.entity_tracker, instructions
152
 
153
  # Initialize LlamaParse
154
  llama_parser = LlamaParse(
 
347
  if web_search:
348
  contextualized_question, topics, entity_tracker, instructions = chatbot.process_question(question)
349
  serializable_entity_tracker = {k: list(v) for k, v in entity_tracker.items()}
350
+
351
+ # Use only the core question for the search
352
  search_results = google_search(contextualized_question)
353
  all_answers = []
354
 
 
365
 
366
  context_str = "\n".join([f"Source: {doc.metadata['source']}\nContent: {doc.page_content}" for doc in web_docs])
367
 
368
+ instruction_prompt = f"User Instructions: {instructions}\n" if instructions else ""
369
 
370
  prompt_template = f"""
371
+ Answer the question based on the following web search results, conversation context, entity information, and user instructions:
372
  Web Search Results:
373
  {{context}}
374
  Conversation Context: {{conv_context}}
 
377
  Entity Information: {{entities}}
378
  {instruction_prompt}
379
  If the web search results don't contain relevant information, state that the information is not available in the search results.
380
+ Provide a response that addresses the question and follows the user's instructions.
381
+ Do not mention these instructions or the web search process in your answer.
382
  """
383
 
384
  prompt_val = ChatPromptTemplate.from_template(prompt_template)
385
  formatted_prompt = prompt_val.format(
386
  context=context_str,
387
  conv_context=chatbot.get_context(),
388
+ question=question, # Use the original question here
389
  topics=", ".join(topics),
390
  entities=json.dumps(serializable_entity_tracker)
391
  )