zliang commited on
Commit
3bd5bbf
·
1 Parent(s): fd18969

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +48 -18
app.py CHANGED
@@ -9,9 +9,10 @@ from langchain.prompts.prompt import PromptTemplate
9
  from langchain.embeddings import HuggingFaceEmbeddings
10
  import json
11
  import hashlib
 
12
  # Initialize the storage directories if they don't exist
13
  model_name = "intfloat/e5-large-v2"
14
- model_kwargs = {'device': 'cpu'}
15
  encode_kwargs = {'normalize_embeddings': False}
16
  embeddings = HuggingFaceEmbeddings(
17
  model_name=model_name,
@@ -73,13 +74,14 @@ def save_metadata(metadata, metadata_dir):
73
  json.dump(metadata, f, indent=4)
74
 
75
  #Add a new entry to the metadata
76
- def add_metadata(file_path, title, author, year, publisher, DOI,page,volume,issue):
77
  metadata = load_metadata(st.session_state['metadata_dir'])
78
  metadata_dir = st.session_state['metadata_dir']
79
  metadata[file_path] = {
80
  'title': title,
81
  'author': author,
82
  'year': year,
 
83
  'publisher': publisher,
84
  'DOI': DOI,
85
  'page':page,
@@ -112,6 +114,7 @@ def edit_metadata_of_selected_pdf(metadata):
112
  edited_volume = st.text_input('volume', value=data['volume'])
113
 
114
  with col2:
 
115
  edited_publisher = st.text_input('Publisher', value=data['publisher'])
116
  edited_DOI = st.text_input('DOI', value=data['DOI'])
117
  edited_page = st.text_input('Page', value=data['page'])
@@ -126,6 +129,7 @@ def edit_metadata_of_selected_pdf(metadata):
126
  'title': edited_title,
127
  'author': edited_author,
128
  'year': edited_year,
 
129
  'publisher': edited_publisher,
130
  'DOI': edited_DOI,
131
  'page': edited_page,
@@ -140,13 +144,15 @@ def edit_metadata_of_selected_pdf(metadata):
140
  # Function to delete selected PDF and its metadata
141
  def delete_pdf_and_metadata(metadata):
142
  # Use a select box for users to choose a PDF to delete
 
 
143
  file_names = list(metadata.keys())
144
  if not file_names:
145
  st.write("No PDFs available to delete.")
146
  return
147
 
148
  selected_file_to_delete = st.selectbox('Select a PDF file to delete', file_names)
149
-
150
  # Button to delete the PDF and its metadata
151
  if st.button(f"Delete '{selected_file_to_delete}' and its metadata"):
152
  # Delete the PDF file
@@ -154,10 +160,10 @@ def delete_pdf_and_metadata(metadata):
154
 
155
  # Delete the metadata entry
156
  del metadata[selected_file_to_delete]
157
- save_metadata(metadata)
158
 
159
  # Update the display
160
- st.experimental_rerun()
161
 
162
  def generate_response(input_text,openai_api_key):
163
  db = FAISS.load_local(st.session_state['embed_dir'], embeddings)
@@ -172,14 +178,14 @@ def generate_response(input_text,openai_api_key):
172
  {context}
173
  Question: {question}
174
 
175
- use metadata in the "metadata" html block to create APA style references and list them in the reference section:
176
  <metadata>
177
  {source1},{source2},{source3},{source4},{source5}
178
  <metadata/>
179
 
180
  make sure to add references
181
 
182
- format the answer in mardown format
183
 
184
  """
185
  QA_PROMPT = PromptTemplate(input_variables=["question", "context"],
@@ -233,6 +239,20 @@ def init_user_assets(username):
233
  os.makedirs(embed_dir)
234
  return assets_dir, pdf_dir, metadata_dir, embed_dir
235
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
236
  # Main App
237
  def main():
238
  st.title('LLM powered paper management system')
@@ -285,24 +305,33 @@ def main():
285
  if uploaded_file is not None:
286
  # Save file
287
  file_path = os.path.join(st.session_state['pdf_dir'], uploaded_file.name)
 
288
  with open(file_path, "wb") as f:
289
  f.write(uploaded_file.getbuffer())
290
-
 
291
  # Collect metadata
292
  with st.form(key=uploaded_file.name):
293
  st.write("Metadata for:", uploaded_file.name)
294
- title = st.text_input('Title', key=f'title_{uploaded_file.name}')
295
- author = st.text_input('Author', key=f'author_{uploaded_file.name}')
296
- year = st.text_input('Published Year', key=f'year_{uploaded_file.name}')
297
- publisher = st.text_input('Publisher', key=f'publisher_{uploaded_file.name}')
298
- DOI = st.text_input('DOI', key=f'DOI_{uploaded_file.name}')
299
- page = st.text_input('page', key=f'page_{uploaded_file.name}')
300
- volume = st.text_input('volume', key=f'volume_{uploaded_file.name}')
301
- issue = st.text_input('issue', key=f'issue_{uploaded_file.name}')
 
 
 
 
 
 
 
 
302
  submitted = st.form_submit_button('Save Metadata')
303
-
304
  if submitted:
305
- add_metadata(file_path, title, author, year, publisher, DOI,page,volume,issue)
306
  st.success('Metadata saved!')
307
 
308
  with tab2:
@@ -338,6 +367,7 @@ def main():
338
  "title": corresponding_metadata["title"],
339
  "author": corresponding_metadata["author"],
340
  "year": corresponding_metadata["year"],
 
341
  "publisher": corresponding_metadata["publisher"],
342
  "DOI": corresponding_metadata["DOI"],
343
  "page": corresponding_metadata["page"],
 
9
  from langchain.embeddings import HuggingFaceEmbeddings
10
  import json
11
  import hashlib
12
+ import pdf2bib
13
  # Initialize the storage directories if they don't exist
14
  model_name = "intfloat/e5-large-v2"
15
+ model_kwargs = {'device': 'cuda'}
16
  encode_kwargs = {'normalize_embeddings': False}
17
  embeddings = HuggingFaceEmbeddings(
18
  model_name=model_name,
 
74
  json.dump(metadata, f, indent=4)
75
 
76
  #Add a new entry to the metadata
77
+ def add_metadata(file_path, title, author, year,journal, publisher, DOI,page,volume,issue):
78
  metadata = load_metadata(st.session_state['metadata_dir'])
79
  metadata_dir = st.session_state['metadata_dir']
80
  metadata[file_path] = {
81
  'title': title,
82
  'author': author,
83
  'year': year,
84
+ 'journal': journal,
85
  'publisher': publisher,
86
  'DOI': DOI,
87
  'page':page,
 
114
  edited_volume = st.text_input('volume', value=data['volume'])
115
 
116
  with col2:
117
+ edited_journal = st.text_input('journal', value=data['journal'])
118
  edited_publisher = st.text_input('Publisher', value=data['publisher'])
119
  edited_DOI = st.text_input('DOI', value=data['DOI'])
120
  edited_page = st.text_input('Page', value=data['page'])
 
129
  'title': edited_title,
130
  'author': edited_author,
131
  'year': edited_year,
132
+ 'journal': edited_journal,
133
  'publisher': edited_publisher,
134
  'DOI': edited_DOI,
135
  'page': edited_page,
 
144
  # Function to delete selected PDF and its metadata
145
  def delete_pdf_and_metadata(metadata):
146
  # Use a select box for users to choose a PDF to delete
147
+ metadata_dir = st.session_state['metadata_dir']
148
+ st.write(list(metadata.keys()))
149
  file_names = list(metadata.keys())
150
  if not file_names:
151
  st.write("No PDFs available to delete.")
152
  return
153
 
154
  selected_file_to_delete = st.selectbox('Select a PDF file to delete', file_names)
155
+ st.write(selected_file_to_delete)
156
  # Button to delete the PDF and its metadata
157
  if st.button(f"Delete '{selected_file_to_delete}' and its metadata"):
158
  # Delete the PDF file
 
160
 
161
  # Delete the metadata entry
162
  del metadata[selected_file_to_delete]
163
+ save_metadata(metadata, metadata_dir)
164
 
165
  # Update the display
166
+ #st.experimental_rerun()
167
 
168
  def generate_response(input_text,openai_api_key):
169
  db = FAISS.load_local(st.session_state['embed_dir'], embeddings)
 
178
  {context}
179
  Question: {question}
180
 
181
+ use metadata in the "metadata" html block to create APA style references and list them in a reference section:
182
  <metadata>
183
  {source1},{source2},{source3},{source4},{source5}
184
  <metadata/>
185
 
186
  make sure to add references
187
 
188
+ format the answer in markdown format
189
 
190
  """
191
  QA_PROMPT = PromptTemplate(input_variables=["question", "context"],
 
239
  os.makedirs(embed_dir)
240
  return assets_dir, pdf_dir, metadata_dir, embed_dir
241
 
242
+
243
+
244
+ def all_author_names(data):
245
+ author_full_names = []
246
+ authors_string =[]
247
+ # Iterate over each author in the author list
248
+ for author in data["author"]:
249
+ # Combine given and family names
250
+ full_name = f"{author['family']},{author['given']}"
251
+ author_full_names.append(full_name)
252
+
253
+ # Join the list of author names into a single string separated by commas
254
+ authors_string = "; ".join(author_full_names)
255
+ return authors_string
256
  # Main App
257
  def main():
258
  st.title('LLM powered paper management system')
 
305
  if uploaded_file is not None:
306
  # Save file
307
  file_path = os.path.join(st.session_state['pdf_dir'], uploaded_file.name)
308
+
309
  with open(file_path, "wb") as f:
310
  f.write(uploaded_file.getbuffer())
311
+ pdfextractdata = pdf2bib.pdf2bib(file_path)
312
+ #st.write(pdfextractdata['metadata'])
313
  # Collect metadata
314
  with st.form(key=uploaded_file.name):
315
  st.write("Metadata for:", uploaded_file.name)
316
+ col1, col2, col3 = st.columns(3)
317
+
318
+ with col1:
319
+ title = st.text_input('Title', key=f'title_{uploaded_file.name}', value=pdfextractdata['metadata'].get('title', ''))
320
+ year = st.text_input('Published Year', key=f'year_{uploaded_file.name}', value=pdfextractdata['metadata'].get('year', ''))
321
+ volume = st.text_input('Volume', key=f'volume_{uploaded_file.name}', value=pdfextractdata['metadata'].get('volume', ''))
322
+
323
+ with col2:
324
+ author = st.text_input('Author', key=f'author_{uploaded_file.name}', value=all_author_names(pdfextractdata['metadata']))
325
+ journal = st.text_input('Journal', key=f'journal_{uploaded_file.name}', value=pdfextractdata['metadata'].get('journal', ''))
326
+ issue = st.text_input('Issue', key=f'issue_{uploaded_file.name}', value=pdfextractdata['metadata'].get('issue', ''))
327
+
328
+ with col3:
329
+ publisher = st.text_input('Publisher', key=f'publisher_{uploaded_file.name}', value=pdfextractdata['metadata'].get('publisher', ''))
330
+ DOI = st.text_input('DOI', key=f'DOI_{uploaded_file.name}', value=pdfextractdata['metadata'].get('doi', ''))
331
+ page = st.text_input('Pages', key=f'page_{uploaded_file.name}', value=pdfextractdata['metadata'].get('page', ''))
332
  submitted = st.form_submit_button('Save Metadata')
 
333
  if submitted:
334
+ add_metadata(file_path, title, author, year, journal,publisher, DOI,page,volume,issue)
335
  st.success('Metadata saved!')
336
 
337
  with tab2:
 
367
  "title": corresponding_metadata["title"],
368
  "author": corresponding_metadata["author"],
369
  "year": corresponding_metadata["year"],
370
+ "journal": corresponding_metadata["journal"],
371
  "publisher": corresponding_metadata["publisher"],
372
  "DOI": corresponding_metadata["DOI"],
373
  "page": corresponding_metadata["page"],