DJHumanRPT commited on
Commit
ac90f1c
·
verified ·
1 Parent(s): 4e3b069

Added KB updater and multiple generations per input

Browse files
Files changed (1) hide show
  1. app.py +114 -2
app.py CHANGED
@@ -27,7 +27,7 @@ def get_openai_client():
27
  return None
28
 
29
 
30
- @st.cache_resource
31
  def get_document_converter():
32
  """Cache the DocumentConverter to prevent reloading on each interaction"""
33
  return None # Return None initially
@@ -1410,6 +1410,10 @@ if "user_inputs" not in st.session_state:
1410
  st.session_state.user_inputs = {}
1411
  if "generated_output" not in st.session_state:
1412
  st.session_state.generated_output = ""
 
 
 
 
1413
 
1414
  # Sidebar setup
1415
  with st.sidebar:
@@ -1535,7 +1539,7 @@ with tab1:
1535
  )
1536
 
1537
  # Rest of your existing code for document processing...
1538
- if uploaded_files:
1539
  # Track filenames for UI feedback
1540
  st.session_state.uploaded_filenames = [file.name for file in uploaded_files]
1541
 
@@ -1707,6 +1711,114 @@ with tab2:
1707
  )
1708
  st.session_state.template_spec["prompt"] = prompt_template
1709
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1710
  # Knowledge Base Analysis Section
1711
  if st.session_state.knowledge_base:
1712
  with st.expander("Knowledge Base Analysis", expanded=False):
 
27
  return None
28
 
29
 
30
+ # @st.cache_resource
31
  def get_document_converter():
32
  """Cache the DocumentConverter to prevent reloading on each interaction"""
33
  return None # Return None initially
 
1410
  st.session_state.user_inputs = {}
1411
  if "generated_output" not in st.session_state:
1412
  st.session_state.generated_output = ""
1413
+ if "uploaded_filenames" not in st.session_state:
1414
+ st.session_state.uploaded_filenames = []
1415
+ if "kb_cleared" not in st.session_state:
1416
+ st.session_state.kb_cleared = False
1417
 
1418
  # Sidebar setup
1419
  with st.sidebar:
 
1539
  )
1540
 
1541
  # Rest of your existing code for document processing...
1542
+ if uploaded_files and not st.session_state.kb_cleared:
1543
  # Track filenames for UI feedback
1544
  st.session_state.uploaded_filenames = [file.name for file in uploaded_files]
1545
 
 
1711
  )
1712
  st.session_state.template_spec["prompt"] = prompt_template
1713
 
1714
+ # Knowledge Base Management Section
1715
+ with st.expander("Knowledge Base Management", expanded=False):
1716
+ st.info("Upload and manage documents to use as knowledge base")
1717
+
1718
+ # Upload interface
1719
+ uploaded_files = st.file_uploader(
1720
+ "Upload documents",
1721
+ accept_multiple_files=True,
1722
+ type=["pdf", "txt", "docx", "html"],
1723
+ )
1724
+
1725
+ # Handle document processing
1726
+ if uploaded_files:
1727
+ # Choose how to handle new uploads
1728
+ handle_method = st.radio(
1729
+ "How to handle new documents?",
1730
+ ["Replace existing", "Append to existing"],
1731
+ horizontal=True,
1732
+ )
1733
+
1734
+ if st.button("Process Documents"):
1735
+ parse_documents.clear()
1736
+ analyze_knowledge_base.clear()
1737
+ st.session_state.kb_cleared = True
1738
+ with st.spinner("Processing documents..."):
1739
+
1740
+ if handle_method == "Replace existing":
1741
+ new_content = parse_documents(uploaded_files)
1742
+ st.session_state.knowledge_base = new_content
1743
+ st.session_state.uploaded_filenames = [
1744
+ file.name for file in uploaded_files
1745
+ ]
1746
+ else: # Append
1747
+ # Find new files by comparing filenames
1748
+ new_files = []
1749
+ duplicate_files = []
1750
+
1751
+ for file in uploaded_files:
1752
+ if file.name in st.session_state.uploaded_filenames:
1753
+ duplicate_files.append(file.name)
1754
+ else:
1755
+ new_files.append(file)
1756
+ st.session_state.uploaded_filenames.append(
1757
+ file.name
1758
+ )
1759
+
1760
+ # Process only new files
1761
+ if new_files:
1762
+ new_content = parse_documents(new_files)
1763
+ st.session_state.knowledge_base += (
1764
+ "\n\n" + new_content
1765
+ )
1766
+
1767
+ # Provide feedback about duplicates
1768
+ if duplicate_files:
1769
+ st.info(
1770
+ f"Skipped {len(duplicate_files)} duplicate files: {', '.join(duplicate_files)}"
1771
+ )
1772
+
1773
+ # Reset any analysis that depends on knowledge base
1774
+ if "suggested_variables" in st.session_state:
1775
+ st.session_state.suggested_variables = []
1776
+ st.session_state.show_suggested_vars = False
1777
+
1778
+ st.success(f"Processed {len(uploaded_files)} documents")
1779
+ st.rerun()
1780
+
1781
+ # Display knowledge base information
1782
+ if st.session_state.knowledge_base:
1783
+ st.write(
1784
+ f"Knowledge base size: {len(st.session_state.knowledge_base)} characters"
1785
+ )
1786
+
1787
+ # Clear knowledge base button
1788
+ # Display uploaded filenames
1789
+ if st.session_state.uploaded_filenames:
1790
+ st.write("Uploaded files:")
1791
+ for filename in st.session_state.uploaded_filenames:
1792
+ st.write(f"- {filename}")
1793
+
1794
+ if st.button("Clear Knowledge Base"):
1795
+ analyze_knowledge_base.clear()
1796
+ st.session_state.knowledge_base = ""
1797
+ st.session_state.kb_cleared = True
1798
+ st.session_state.uploaded_filenames = []
1799
+ if "suggested_variables" in st.session_state:
1800
+ st.session_state.suggested_variables = []
1801
+ st.session_state.show_suggested_vars = False
1802
+ st.success("Knowledge base cleared")
1803
+ st.rerun()
1804
+
1805
+ # Option to edit knowledge base directly
1806
+ edit_kb = st.checkbox("Edit knowledge base directly")
1807
+ if edit_kb:
1808
+ new_content = st.text_area(
1809
+ "Edit knowledge base content",
1810
+ value=st.session_state.knowledge_base,
1811
+ height=300,
1812
+ )
1813
+ if st.button("Update Knowledge Base"):
1814
+ analyze_knowledge_base.clear()
1815
+ st.session_state.knowledge_base = new_content
1816
+ if "suggested_variables" in st.session_state:
1817
+ st.session_state.suggested_variables = []
1818
+ st.session_state.show_suggested_vars = False
1819
+ st.success("Knowledge base updated")
1820
+ st.rerun()
1821
+
1822
  # Knowledge Base Analysis Section
1823
  if st.session_state.knowledge_base:
1824
  with st.expander("Knowledge Base Analysis", expanded=False):