siddhartharya commited on
Commit
677ed4e
·
verified ·
1 Parent(s): ad34ca4

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +62 -63
app.py CHANGED
@@ -86,7 +86,6 @@ openai.api_base = "https://api.groq.com/openai/v1"
86
  # Initialize global variables for rate limiting
87
  api_lock = threading.Lock()
88
  last_api_call_time = 0
89
-
90
  def extract_main_content(soup):
91
  """
92
  Extract the main content from a webpage while filtering out boilerplate content.
@@ -155,6 +154,7 @@ def get_page_metadata(soup):
155
  metadata['title'] = og_title.get('content', '').strip()
156
 
157
  return metadata
 
158
  def generate_summary_and_assign_category(bookmark):
159
  """
160
  Generate a concise summary and assign a category using a single LLM call.
@@ -298,7 +298,6 @@ Category: [One category]
298
  bookmark['summary'] = 'No summary available.'
299
  bookmark['category'] = 'Uncategorized'
300
  break
301
-
302
  def parse_bookmarks(file_content):
303
  """
304
  Parse bookmarks from HTML file.
@@ -449,7 +448,6 @@ def display_bookmarks():
449
  cards += card_html
450
  logger.info("HTML display generated")
451
  return cards
452
-
453
  def process_uploaded_file(file, state_bookmarks):
454
  """
455
  Process the uploaded bookmarks file.
@@ -616,35 +614,41 @@ def chatbot_response(user_query, chat_history):
616
  try:
617
  chat_history.append({"role": "user", "content": user_query})
618
 
619
- with api_lock:
620
- global last_api_call_time
621
- current_time = time.time()
622
- elapsed = current_time - last_api_call_time
623
- if elapsed < 2:
624
- sleep_duration = 2 - elapsed
625
- logger.info(f"Sleeping for {sleep_duration:.2f} seconds to respect rate limits.")
626
- time.sleep(sleep_duration)
627
- last_api_call_time = time.time()
628
-
629
- query_vector = embedding_model.encode([user_query]).astype('float32')
630
- k = 5
631
- distances, ids = faiss_index.search(query_vector, k)
632
- ids = ids.flatten()
633
-
634
- id_to_bookmark = {bookmark['id']: bookmark for bookmark in bookmarks}
635
- matching_bookmarks = [id_to_bookmark.get(id) for id in ids if id in id_to_bookmark]
636
-
637
- if not matching_bookmarks:
638
- answer = "No relevant bookmarks found for your query."
639
- chat_history.append({"role": "assistant", "content": answer})
640
- return chat_history
641
-
642
- bookmarks_info = "\n".join([
643
- f"Title: {bookmark['title']}\nURL: {bookmark['url']}\nSummary: {bookmark['summary']}"
644
- for bookmark in matching_bookmarks
645
- ])
646
-
647
- prompt = f"""
 
 
 
 
 
 
648
  A user asked: "{user_query}"
649
  Based on the bookmarks below, provide a helpful answer to the user's query, referencing the relevant bookmarks.
650
  Bookmarks:
@@ -652,39 +656,34 @@ Bookmarks:
652
  Provide a concise and helpful response.
653
  """
654
 
655
- def estimate_tokens(text):
656
- return len(text) / 4
657
-
658
- prompt_tokens = estimate_tokens(prompt)
659
- max_tokens = 300
660
- total_tokens = prompt_tokens + max_tokens
661
-
662
- tokens_per_minute = 40000
663
- tokens_per_second = tokens_per_minute / 60
664
- required_delay = total_tokens / tokens_per_second
665
- sleep_time = max(required_delay, 2)
666
-
667
- response = openai.ChatCompletion.create(
668
- model='llama-3.1-70b-versatile',
669
- messages=[
670
- {"role": "user", "content": prompt}
671
- ],
672
- max_tokens=int(max_tokens),
673
- temperature=0.7,
674
- )
675
-
676
- answer = response['choices'][0]['message']['content'].strip()
677
- logger.info("Chatbot response generated")
678
- time.sleep(sleep_time)
679
 
680
- chat_history.append({"role": "assistant", "content": answer})
681
- return chat_history
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
682
 
683
- except openai.error.RateLimitError as e:
684
- wait_time = int(e.headers.get("Retry-After", 5))
685
- logger.warning(f"Rate limit reached. Waiting for {wait_time} seconds before retrying...")
686
- time.sleep(wait_time)
687
- return chatbot_response(user_query, chat_history)
688
  except Exception as e:
689
  error_message = f"⚠️ Error processing your query: {str(e)}"
690
  logger.error(error_message, exc_info=True)
 
86
  # Initialize global variables for rate limiting
87
  api_lock = threading.Lock()
88
  last_api_call_time = 0
 
89
  def extract_main_content(soup):
90
  """
91
  Extract the main content from a webpage while filtering out boilerplate content.
 
154
  metadata['title'] = og_title.get('content', '').strip()
155
 
156
  return metadata
157
+
158
  def generate_summary_and_assign_category(bookmark):
159
  """
160
  Generate a concise summary and assign a category using a single LLM call.
 
298
  bookmark['summary'] = 'No summary available.'
299
  bookmark['category'] = 'Uncategorized'
300
  break
 
301
  def parse_bookmarks(file_content):
302
  """
303
  Parse bookmarks from HTML file.
 
448
  cards += card_html
449
  logger.info("HTML display generated")
450
  return cards
 
451
  def process_uploaded_file(file, state_bookmarks):
452
  """
453
  Process the uploaded bookmarks file.
 
614
  try:
615
  chat_history.append({"role": "user", "content": user_query})
616
 
617
+ # Implement better rate limiting
618
+ max_retries = 5
619
+ base_wait = 2 # Base wait time in seconds
620
+ for attempt in range(max_retries):
621
+ try:
622
+ with api_lock:
623
+ global last_api_call_time
624
+ current_time = time.time()
625
+ elapsed = current_time - last_api_call_time
626
+ if elapsed < base_wait:
627
+ sleep_duration = base_wait - elapsed
628
+ logger.info(f"Rate limiting: Waiting for {sleep_duration:.2f} seconds...")
629
+ time.sleep(sleep_duration)
630
+ last_api_call_time = time.time()
631
+
632
+ # Search for relevant bookmarks
633
+ query_vector = embedding_model.encode([user_query]).astype('float32')
634
+ k = 5
635
+ distances, ids = faiss_index.search(query_vector, k)
636
+ ids = ids.flatten()
637
+
638
+ id_to_bookmark = {bookmark['id']: bookmark for bookmark in bookmarks}
639
+ matching_bookmarks = [id_to_bookmark.get(id) for id in ids if id in id_to_bookmark]
640
+
641
+ if not matching_bookmarks:
642
+ answer = "No relevant bookmarks found for your query."
643
+ chat_history.append({"role": "assistant", "content": answer})
644
+ return chat_history
645
+
646
+ bookmarks_info = "\n".join([
647
+ f"Title: {bookmark['title']}\nURL: {bookmark['url']}\nSummary: {bookmark['summary']}"
648
+ for bookmark in matching_bookmarks
649
+ ])
650
+
651
+ prompt = f"""
652
  A user asked: "{user_query}"
653
  Based on the bookmarks below, provide a helpful answer to the user's query, referencing the relevant bookmarks.
654
  Bookmarks:
 
656
  Provide a concise and helpful response.
657
  """
658
 
659
+ response = openai.ChatCompletion.create(
660
+ model='llama-3.1-70b-versatile',
661
+ messages=[
662
+ {"role": "user", "content": prompt}
663
+ ],
664
+ max_tokens=300,
665
+ temperature=0.7,
666
+ )
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
667
 
668
+ answer = response['choices'][0]['message']['content'].strip()
669
+ logger.info("Chatbot response generated")
670
+
671
+ # Add a small delay between successful requests
672
+ time.sleep(base_wait)
673
+
674
+ chat_history.append({"role": "assistant", "content": answer})
675
+ return chat_history
676
+
677
+ except openai.error.RateLimitError as e:
678
+ wait_time = min(base_wait * (2 ** attempt), 30) # Cap maximum wait time at 30 seconds
679
+ logger.warning(f"Rate limit reached. Attempt {attempt + 1}/{max_retries}. Waiting for {wait_time} seconds...")
680
+ time.sleep(wait_time)
681
+ if attempt == max_retries - 1:
682
+ error_message = "⚠️ The service is currently experiencing high demand. Please try again in a few moments."
683
+ chat_history.append({"role": "assistant", "content": error_message})
684
+ return chat_history
685
+ continue
686
 
 
 
 
 
 
687
  except Exception as e:
688
  error_message = f"⚠️ Error processing your query: {str(e)}"
689
  logger.error(error_message, exc_info=True)