CosmickVisions commited on
Commit
875d07e
·
verified ·
1 Parent(s): c13bc35

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +11 -1
app.py CHANGED
@@ -10,16 +10,20 @@ from langchain.embeddings import HuggingFaceEmbeddings
10
  import fitz # PyMuPDF
11
  import base64
12
 
 
13
  load_dotenv()
14
  client = groq.Client(api_key=os.getenv("GROQ_FINANCE_API_KEY"))
15
  embeddings = HuggingFaceEmbeddings(model_name="sentence-transformers/all-MiniLM-L6-v2")
16
 
 
17
  FAISS_INDEX_DIR = "faiss_indexes_finance"
18
  if not os.path.exists(FAISS_INDEX_DIR):
19
  os.makedirs(FAISS_INDEX_DIR)
20
 
 
21
  user_vectorstores = {}
22
 
 
23
  custom_css = """
24
  :root {
25
  --primary-green: #10B981;
@@ -47,6 +51,7 @@ body { background-color: var(--light-grey); font-family: 'Inter', sans-serif; }
47
  .stats-box { background-color: var(--light-green); padding: 10px; border-radius: 8px; margin-top: 10px; }
48
  """
49
 
 
50
  def process_pdf(pdf_file):
51
  if pdf_file is None:
52
  return None, "No file uploaded", {"page_images": [], "total_pages": 0, "total_words": 0}
@@ -87,6 +92,7 @@ def process_pdf(pdf_file):
87
  os.unlink(pdf_path)
88
  return None, f"Error processing PDF: {str(e)}", {"page_images": [], "total_pages": 0, "total_words": 0}
89
 
 
90
  def generate_response(message, session_id, model_name, history):
91
  if not message:
92
  return history
@@ -116,16 +122,19 @@ def generate_response(message, session_id, model_name, history):
116
  history.append((message, f"Error generating response: {str(e)}"))
117
  return history
118
 
 
119
  def update_pdf_viewer(pdf_state):
120
  if not pdf_state["total_pages"]:
121
  return 0, None, "No PDF uploaded yet"
122
  return pdf_state["total_pages"], f"data:image/png;base64,{pdf_state['page_images'][0]}", f"**Total Pages:** {pdf_state['total_pages']}\n**Total Words:** {pdf_state['total_words']}"
123
 
 
124
  def update_image(page_num, pdf_state):
125
  if not pdf_state["total_pages"] or page_num < 1 or page_num > pdf_state["total_pages"]:
126
  return None
127
  return f"data:image/png;base64,{pdf_state['page_images'][page_num - 1]}"
128
 
 
129
  with gr.Blocks(css=custom_css, theme=gr.themes.Soft()) as demo:
130
  current_session_id = gr.State(None)
131
  pdf_state = gr.State({"page_images": [], "total_pages": 0, "total_words": 0})
@@ -155,7 +164,7 @@ with gr.Blocks(css=custom_css, theme=gr.themes.Soft()) as demo:
155
  clear_btn = gr.Button("Clear Conversation")
156
  with gr.TabItem("PDF Viewer"):
157
  with gr.Column(elem_classes="pdf-viewer-container"):
158
- page_slider = gr.Slider(minimum=1, maximum=0, step=1, label="Page Number", value=1)
159
  pdf_image = gr.Image(label="PDF Page", type="pil", elem_classes="pdf-viewer-image")
160
  stats_display = gr.Markdown("No PDF uploaded yet", elem_classes="stats-box")
161
 
@@ -194,5 +203,6 @@ with gr.Blocks(css=custom_css, theme=gr.themes.Soft()) as demo:
194
  outputs=[pdf_image]
195
  )
196
 
 
197
  if __name__ == "__main__":
198
  demo.launch()
 
10
  import fitz # PyMuPDF
11
  import base64
12
 
13
+ # Load environment variables
14
  load_dotenv()
15
  client = groq.Client(api_key=os.getenv("GROQ_FINANCE_API_KEY"))
16
  embeddings = HuggingFaceEmbeddings(model_name="sentence-transformers/all-MiniLM-L6-v2")
17
 
18
+ # Directory to store FAISS indexes
19
  FAISS_INDEX_DIR = "faiss_indexes_finance"
20
  if not os.path.exists(FAISS_INDEX_DIR):
21
  os.makedirs(FAISS_INDEX_DIR)
22
 
23
+ # Dictionary to store user-specific vectorstores
24
  user_vectorstores = {}
25
 
26
+ # Custom CSS for styling
27
  custom_css = """
28
  :root {
29
  --primary-green: #10B981;
 
51
  .stats-box { background-color: var(--light-green); padding: 10px; border-radius: 8px; margin-top: 10px; }
52
  """
53
 
54
+ # Function to process PDF files
55
  def process_pdf(pdf_file):
56
  if pdf_file is None:
57
  return None, "No file uploaded", {"page_images": [], "total_pages": 0, "total_words": 0}
 
92
  os.unlink(pdf_path)
93
  return None, f"Error processing PDF: {str(e)}", {"page_images": [], "total_pages": 0, "total_words": 0}
94
 
95
+ # Function to generate chatbot responses
96
  def generate_response(message, session_id, model_name, history):
97
  if not message:
98
  return history
 
122
  history.append((message, f"Error generating response: {str(e)}"))
123
  return history
124
 
125
+ # Function to update the PDF viewer with the first page
126
  def update_pdf_viewer(pdf_state):
127
  if not pdf_state["total_pages"]:
128
  return 0, None, "No PDF uploaded yet"
129
  return pdf_state["total_pages"], f"data:image/png;base64,{pdf_state['page_images'][0]}", f"**Total Pages:** {pdf_state['total_pages']}\n**Total Words:** {pdf_state['total_words']}"
130
 
131
+ # Function to update the displayed PDF page based on the slider value
132
  def update_image(page_num, pdf_state):
133
  if not pdf_state["total_pages"] or page_num < 1 or page_num > pdf_state["total_pages"]:
134
  return None
135
  return f"data:image/png;base64,{pdf_state['page_images'][page_num - 1]}"
136
 
137
+ # Gradio interface
138
  with gr.Blocks(css=custom_css, theme=gr.themes.Soft()) as demo:
139
  current_session_id = gr.State(None)
140
  pdf_state = gr.State({"page_images": [], "total_pages": 0, "total_words": 0})
 
164
  clear_btn = gr.Button("Clear Conversation")
165
  with gr.TabItem("PDF Viewer"):
166
  with gr.Column(elem_classes="pdf-viewer-container"):
167
+ page_slider = gr.Slider(minimum=1, maximum=1, step=1, label="Page Number", value=1)
168
  pdf_image = gr.Image(label="PDF Page", type="pil", elem_classes="pdf-viewer-image")
169
  stats_display = gr.Markdown("No PDF uploaded yet", elem_classes="stats-box")
170
 
 
203
  outputs=[pdf_image]
204
  )
205
 
206
+ # Launch the app
207
  if __name__ == "__main__":
208
  demo.launch()