Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
|
@@ -803,52 +803,57 @@ def side():
|
|
| 803 |
accept_multiple_files=True,
|
| 804 |
key="file_uploader"
|
| 805 |
)
|
|
|
|
| 806 |
if uploaded_files:
|
| 807 |
for uploaded_file in uploaded_files:
|
| 808 |
try:
|
| 809 |
-
|
| 810 |
-
|
| 811 |
-
st.sidebar.success(f"File '{uploaded_file.name}' uploaded and converted to TXT!")
|
| 812 |
-
|
| 813 |
except Exception as e:
|
| 814 |
st.sidebar.error(f"Error processing file '{uploaded_file.name}': {e}")
|
| 815 |
-
|
| 816 |
else:
|
| 817 |
-
|
|
|
|
| 818 |
# Display and delete functionality for documents
|
| 819 |
if st.session_state.get("documents"):
|
| 820 |
doc_ids = list(st.session_state["documents"].keys())
|
| 821 |
doc_options = ["None (use only main knowledge base)"] + doc_ids
|
| 822 |
-
|
| 823 |
-
"Select
|
| 824 |
options=doc_options,
|
|
|
|
| 825 |
format_func=lambda x: st.session_state["documents"][x].get("name", f"Document {x}") if x != "None (use only main knowledge base)" else x,
|
| 826 |
-
key="
|
| 827 |
)
|
| 828 |
-
|
| 829 |
-
|
| 830 |
-
|
|
|
|
|
|
|
| 831 |
else:
|
| 832 |
st.info("Using only the main knowledge base.")
|
| 833 |
else:
|
| 834 |
-
st.warning("Please upload
|
| 835 |
-
|
| 836 |
-
|
| 837 |
-
|
| 838 |
-
|
|
|
|
| 839 |
try:
|
| 840 |
-
|
| 841 |
-
|
| 842 |
-
|
| 843 |
-
# Remove the document from session state
|
| 844 |
-
fetch_documents()
|
| 845 |
-
|
| 846 |
|
|
|
|
|
|
|
|
|
|
| 847 |
|
| 848 |
-
st.
|
| 849 |
-
st.
|
| 850 |
except Exception as e:
|
| 851 |
-
st.
|
|
|
|
|
|
|
| 852 |
|
| 853 |
st.sidebar.markdown("</div>", unsafe_allow_html=True)
|
| 854 |
trust_buckets = ["Any","Stability", "Development", "Relationship", "Benefit", "Vision", "Competence"]
|
|
@@ -1120,9 +1125,9 @@ def google_search(query):
|
|
| 1120 |
|
| 1121 |
|
| 1122 |
# RAG response function
|
| 1123 |
-
def rag_response(query,
|
| 1124 |
"""
|
| 1125 |
-
Handle queries by searching both the main knowledge base and the selected
|
| 1126 |
"""
|
| 1127 |
try:
|
| 1128 |
results = []
|
|
@@ -1132,16 +1137,21 @@ def rag_response(query, selected_doc_id=None):
|
|
| 1132 |
retrieved_docs = search_knowledge_base(query)
|
| 1133 |
results.extend(retrieved_docs)
|
| 1134 |
|
| 1135 |
-
#
|
| 1136 |
-
if
|
| 1137 |
-
|
| 1138 |
-
|
| 1139 |
-
|
| 1140 |
-
|
| 1141 |
-
|
| 1142 |
-
st.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1143 |
else:
|
| 1144 |
-
st.
|
| 1145 |
|
| 1146 |
# Combine results into a single context
|
| 1147 |
context = "\n".join([doc.page_content for doc in results])
|
|
@@ -1159,9 +1169,6 @@ def rag_response(query, selected_doc_id=None):
|
|
| 1159 |
logger.error(f"Error generating RAG response: {e}")
|
| 1160 |
return "An error occurred during the RAG response generation process."
|
| 1161 |
|
| 1162 |
-
|
| 1163 |
-
|
| 1164 |
-
|
| 1165 |
# Define tools
|
| 1166 |
@tool
|
| 1167 |
def knowledge_base_tool(query: str):
|
|
|
|
| 803 |
accept_multiple_files=True,
|
| 804 |
key="file_uploader"
|
| 805 |
)
|
| 806 |
+
|
| 807 |
if uploaded_files:
|
| 808 |
for uploaded_file in uploaded_files:
|
| 809 |
try:
|
| 810 |
+
upload_to_firebase(st.session_state["wix_user_id"], uploaded_file)
|
| 811 |
+
st.sidebar.success(f"File '{uploaded_file.name}' uploaded and converted to TXT!")
|
|
|
|
|
|
|
| 812 |
except Exception as e:
|
| 813 |
st.sidebar.error(f"Error processing file '{uploaded_file.name}': {e}")
|
|
|
|
| 814 |
else:
|
| 815 |
+
st.sidebar.warning("Please select a file to upload.")
|
| 816 |
+
|
| 817 |
# Display and delete functionality for documents
|
| 818 |
if st.session_state.get("documents"):
|
| 819 |
doc_ids = list(st.session_state["documents"].keys())
|
| 820 |
doc_options = ["None (use only main knowledge base)"] + doc_ids
|
| 821 |
+
selected_options = st.multiselect(
|
| 822 |
+
"Select documents to include in your query:",
|
| 823 |
options=doc_options,
|
| 824 |
+
default="None (use only main knowledge base)",
|
| 825 |
format_func=lambda x: st.session_state["documents"][x].get("name", f"Document {x}") if x != "None (use only main knowledge base)" else x,
|
| 826 |
+
key="select_docs"
|
| 827 |
)
|
| 828 |
+
selected_doc_ids = [doc_id for doc_id in selected_options if doc_id != "None (use only main knowledge base)"]
|
| 829 |
+
|
| 830 |
+
if selected_doc_ids:
|
| 831 |
+
selected_doc_names = [st.session_state['documents'][doc_id]['name'] for doc_id in selected_doc_ids]
|
| 832 |
+
st.info(f"Selected Documents: {', '.join(selected_doc_names)}")
|
| 833 |
else:
|
| 834 |
st.info("Using only the main knowledge base.")
|
| 835 |
else:
|
| 836 |
+
st.warning("Please upload documents to include in your queries.")
|
| 837 |
+
selected_doc_ids = []
|
| 838 |
+
|
| 839 |
+
# Button to delete the selected documents
|
| 840 |
+
if selected_doc_ids:
|
| 841 |
+
if st.button("Delete Selected Documents", key="delete_button"):
|
| 842 |
try:
|
| 843 |
+
for doc_id in selected_doc_ids:
|
| 844 |
+
# Remove the document from Firebase
|
| 845 |
+
db.child("users").child(st.session_state["wix_user_id"]).child("KnowledgeBase").child(doc_id).remove()
|
|
|
|
|
|
|
|
|
|
| 846 |
|
| 847 |
+
# Remove from session state
|
| 848 |
+
st.session_state["vector_store"].pop(doc_id, None)
|
| 849 |
+
st.session_state["documents"].pop(doc_id, None)
|
| 850 |
|
| 851 |
+
st.success("Selected documents deleted successfully!")
|
| 852 |
+
st.experimental_rerun()
|
| 853 |
except Exception as e:
|
| 854 |
+
st.error(f"Error deleting documents: {e}")
|
| 855 |
+
|
| 856 |
+
|
| 857 |
|
| 858 |
st.sidebar.markdown("</div>", unsafe_allow_html=True)
|
| 859 |
trust_buckets = ["Any","Stability", "Development", "Relationship", "Benefit", "Vision", "Competence"]
|
|
|
|
| 1125 |
|
| 1126 |
|
| 1127 |
# RAG response function
|
| 1128 |
+
def rag_response(query, selected_doc_ids=None):
|
| 1129 |
"""
|
| 1130 |
+
Handle queries by searching both the main knowledge base and the selected documents.
|
| 1131 |
"""
|
| 1132 |
try:
|
| 1133 |
results = []
|
|
|
|
| 1137 |
retrieved_docs = search_knowledge_base(query)
|
| 1138 |
results.extend(retrieved_docs)
|
| 1139 |
|
| 1140 |
+
# If selected_doc_ids is None, try to get it from session state
|
| 1141 |
+
if selected_doc_ids is None:
|
| 1142 |
+
selected_doc_ids = st.session_state.get('selected_doc_ids', [])
|
| 1143 |
+
|
| 1144 |
+
# Search vector stores of the selected documents
|
| 1145 |
+
if selected_doc_ids:
|
| 1146 |
+
for doc_id in selected_doc_ids:
|
| 1147 |
+
vector_store = st.session_state.get("vector_store", {}).get(doc_id)
|
| 1148 |
+
if vector_store:
|
| 1149 |
+
vector_store_results = vector_store.similarity_search(query, k=5)
|
| 1150 |
+
results.extend(vector_store_results)
|
| 1151 |
+
else:
|
| 1152 |
+
st.warning(f"Vector store for document '{st.session_state['documents'][doc_id]['name']}' not found.")
|
| 1153 |
else:
|
| 1154 |
+
st.info("No documents selected. Proceeding with main knowledge base only.")
|
| 1155 |
|
| 1156 |
# Combine results into a single context
|
| 1157 |
context = "\n".join([doc.page_content for doc in results])
|
|
|
|
| 1169 |
logger.error(f"Error generating RAG response: {e}")
|
| 1170 |
return "An error occurred during the RAG response generation process."
|
| 1171 |
|
|
|
|
|
|
|
|
|
|
| 1172 |
# Define tools
|
| 1173 |
@tool
|
| 1174 |
def knowledge_base_tool(query: str):
|