cryogenic22 commited on
Commit
d871011
Β·
verified Β·
1 Parent(s): ae7cccb

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +85 -65
app.py CHANGED
@@ -1,11 +1,13 @@
1
  import streamlit as st
2
  from utils.vector_store import VectorStore
3
  from utils.document_processor import DocumentProcessor
 
4
  from components.template_generator import render_template_generator
5
 
6
  # Initialize components
7
- vector_store = None # Placeholder for lazy initialization
8
  doc_processor = DocumentProcessor()
 
9
 
10
  # Page configuration
11
  st.set_page_config(
@@ -15,86 +17,104 @@ st.set_page_config(
15
  initial_sidebar_state="expanded"
16
  )
17
 
18
- def get_vector_store():
19
- """Lazy initialization of VectorStore to avoid circular imports."""
20
- global vector_store
21
- if vector_store is None:
22
- vector_store = VectorStore()
23
- return vector_store
24
-
25
  def main():
26
- """Main function to handle app navigation and functionality."""
27
  # Sidebar navigation
28
  tab = st.sidebar.radio(
29
  "Navigation",
30
- ["πŸ“ Manage Documents", "πŸ“ Generate Templates", "πŸ” Search Documents"]
31
  )
32
 
33
- # Tab 1: Manage Documents
34
- if tab == "πŸ“ Manage Documents":
35
- st.title("πŸ“ Manage Documents")
36
- uploaded_file = st.file_uploader("Upload Document", type=["pdf", "docx", "txt"])
 
 
 
 
 
 
 
37
 
38
- if uploaded_file:
39
- try:
40
- with st.spinner("Processing document..."):
41
- # Process document and extract text/chunks
42
- text, chunks = doc_processor.process_document(uploaded_file)
43
- st.success("Document processed successfully!")
44
 
45
- # Add to vector store
46
- vector_store_instance = get_vector_store()
47
- vector_store_instance.add_texts(
48
- texts=[chunk["text"] for chunk in chunks],
49
- metadatas=[{
50
- "text": chunk["text"],
51
- "chunk_id": chunk["chunk_id"],
52
- "filename": uploaded_file.name
53
- } for chunk in chunks]
54
- )
55
- st.success("Document added to vector store!")
56
 
57
- # Display document preview
58
- with st.expander("Document Preview", expanded=False):
59
- st.text_area(
60
- "Content",
61
- value=text[:1000] + "..." if len(text) > 1000 else text,
62
- height=300,
63
- disabled=True
64
- )
65
 
66
- except Exception as e:
67
- st.error(f"Error processing document: {e}")
 
 
 
 
 
 
68
 
69
- # List processed documents
70
- st.subheader("Processed Documents")
71
- vector_store_instance = get_vector_store()
72
- processed_docs = vector_store_instance.metadata
73
- if processed_docs:
74
- for idx, doc in enumerate(processed_docs):
75
- st.markdown(f"{idx+1}. **{doc.get('filename', 'Unknown')}** - Chunk ID: {doc['chunk_id']}")
 
 
 
 
76
  else:
77
- st.info("No documents uploaded yet.")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
78
 
79
- # Tab 2: Generate Templates
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
80
  elif tab == "πŸ“ Generate Templates":
81
  st.title("πŸ“ Generate Templates")
82
  render_template_generator()
83
 
84
- # Tab 3: Search Documents
85
- elif tab == "πŸ” Search Documents":
86
- st.title("πŸ” Search Documents")
87
- query = st.text_input("Enter your query:")
88
- if query:
89
- with st.spinner("Searching for relevant chunks..."):
90
- vector_store_instance = get_vector_store()
91
- results = vector_store_instance.similarity_search(query)
92
- if results:
93
- st.success("Found relevant chunks:")
94
- for result in results:
95
- st.markdown(f"- **Chunk:** {result['text'][:200]}... (Relevance: {result['distance']:.2f})")
96
- else:
97
- st.warning("No relevant chunks found.")
98
-
99
  if __name__ == "__main__":
100
  main()
 
1
  import streamlit as st
2
  from utils.vector_store import VectorStore
3
  from utils.document_processor import DocumentProcessor
4
+ from utils.case_manager import CaseManager
5
  from components.template_generator import render_template_generator
6
 
7
  # Initialize components
8
+ case_manager = CaseManager()
9
  doc_processor = DocumentProcessor()
10
+ vector_store = VectorStore()
11
 
12
  # Page configuration
13
  st.set_page_config(
 
17
  initial_sidebar_state="expanded"
18
  )
19
 
 
 
 
 
 
 
 
20
  def main():
 
21
  # Sidebar navigation
22
  tab = st.sidebar.radio(
23
  "Navigation",
24
+ ["πŸ“ Case Manager", "πŸ“„ Document Manager", "πŸ€– Chat", "πŸ“ Generate Templates"]
25
  )
26
 
27
+ # Tab 1: Case Manager
28
+ if tab == "πŸ“ Case Manager":
29
+ st.title("πŸ“ Case Manager")
30
+
31
+ # Case creation form
32
+ with st.expander("Create New Case"):
33
+ with st.form("create_case_form"):
34
+ title = st.text_input("Case Title")
35
+ description = st.text_area("Description")
36
+ case_type = st.selectbox("Case Type", ["Judgement", "Contract", "MOU", "Will", "Other"])
37
+ create_case = st.form_submit_button("Create Case")
38
 
39
+ if create_case and title:
40
+ case_id = case_manager.create_case(title, description, case_type)
41
+ st.success(f"Case '{title}' created successfully!")
 
 
 
42
 
43
+ # List all cases
44
+ st.subheader("All Cases")
45
+ cases = case_manager.get_all_cases()
46
+ if cases:
47
+ for case in cases:
48
+ with st.expander(f"Case: {case['title']}"):
49
+ st.write(f"**Description**: {case['description']}")
50
+ st.write(f"**Type**: {case['case_type']}")
51
+ st.write(f"**Created At**: {case['created_at']}")
 
 
52
 
53
+ # List documents in case
54
+ documents = case_manager.list_documents(case["id"])
55
+ for doc in documents:
56
+ st.markdown(f"- **{doc['title']}** (Added: {doc['added_at']})")
 
 
 
 
57
 
58
+ # Upload new document
59
+ uploaded_file = st.file_uploader("Upload Document", key=f"upload_{case['id']}")
60
+ if uploaded_file:
61
+ with st.spinner("Processing document..."):
62
+ text, metadata = doc_processor.process_and_tag_document(uploaded_file)
63
+ doc_data = {"title": uploaded_file.name, "text": text, "metadata": metadata}
64
+ case_manager.add_document(case["id"], doc_data)
65
+ st.success(f"Document '{uploaded_file.name}' added to case!")
66
 
67
+ # Tab 2: Document Manager
68
+ elif tab == "πŸ“„ Document Manager":
69
+ st.title("πŸ“„ Document Manager")
70
+
71
+ # Search functionality
72
+ search_query = st.text_input("Search for a case or document:")
73
+ if search_query:
74
+ results = case_manager.search(search_query)
75
+ st.subheader("Search Results")
76
+ for result in results:
77
+ st.write(f"- **{result['title']}** ({result['type']})")
78
  else:
79
+ st.subheader("All Documents")
80
+ cases = case_manager.get_all_cases()
81
+ for case in cases:
82
+ st.write(f"**Case: {case['title']}**")
83
+ for doc in case_manager.list_documents(case["id"]):
84
+ with st.expander(f"Document: {doc['title']}"):
85
+ st.write(f"**Metadata**: {doc.get('metadata', 'No metadata available')}")
86
+ st.write(f"**Content Preview**: {doc['text'][:500]}...")
87
+
88
+ # Tab 3: Chat
89
+ elif tab == "πŸ€– Chat":
90
+ st.title("πŸ€– Chat")
91
+ selected_case = st.selectbox("Select Case", options=[case["id"] for case in case_manager.get_all_cases()])
92
+ selected_document = st.selectbox("Select Document", options=case_manager.list_documents(selected_case))
93
+
94
+ if selected_document:
95
+ st.write(f"**Chatting about Document:** {selected_document['title']}")
96
 
97
+ # Chat input and history
98
+ query = st.text_input("Ask a question about the document:")
99
+ if query:
100
+ with st.spinner("Generating response..."):
101
+ context = selected_document['text']
102
+ response = vector_store.chat_with_context(query, context)
103
+ st.write(f"**Response**: {response}")
104
+
105
+ # Allow adding new documents mid-chat
106
+ uploaded_file = st.file_uploader("Upload Document During Chat", key="chat_upload")
107
+ if uploaded_file:
108
+ with st.spinner("Processing document..."):
109
+ text, metadata = doc_processor.process_and_tag_document(uploaded_file)
110
+ doc_data = {"title": uploaded_file.name, "text": text, "metadata": metadata}
111
+ case_manager.add_document(selected_case, doc_data)
112
+ st.success(f"Document '{uploaded_file.name}' added to case!")
113
+
114
+ # Tab 4: Generate Templates
115
  elif tab == "πŸ“ Generate Templates":
116
  st.title("πŸ“ Generate Templates")
117
  render_template_generator()
118
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
119
  if __name__ == "__main__":
120
  main()