Spaces:
Paused
Paused
Update app.py via AI Editor
Browse files
app.py
CHANGED
@@ -673,7 +673,6 @@ def unified_master_callback(
|
|
673 |
chat_input, cancel_clicks, preview_window_state,
|
674 |
session_id_state, session_id_store_input
|
675 |
):
|
676 |
-
# Determine session_id
|
677 |
sid = get_session_id(session_id_state if session_id_state else session_id_store_input)
|
678 |
sess_data = get_session_data(sid)
|
679 |
ctx = callback_context
|
@@ -690,7 +689,6 @@ def unified_master_callback(
|
|
690 |
doc_delete_clicks = safe_get_n_clicks(ctx, 8)
|
691 |
proposal_delete_clicks = safe_get_n_clicks(ctx, 12)
|
692 |
|
693 |
-
# On first page load, just show the lists
|
694 |
if not ctx.triggered or triggered_id in ['session-id-store']:
|
695 |
doc_options = [{'label': truncate_filename(fn), 'value': fn} for fn in sess_data["uploaded_documents"].keys()]
|
696 |
doc_value = next(iter(sess_data["uploaded_documents"]), None) if sess_data["uploaded_documents"] else None
|
@@ -759,25 +757,29 @@ def unified_master_callback(
|
|
759 |
else:
|
760 |
logging.error(f"[{sid}] Failed to decode uploaded proposal: {proposal_filename}")
|
761 |
|
|
|
762 |
if triggered_id and isinstance(doc_delete_clicks, list):
|
763 |
for i, n_click in enumerate(doc_delete_clicks):
|
764 |
if n_click:
|
765 |
btn_id = ctx.inputs_list[8][i]['id']
|
766 |
del_filename = btn_id['index']
|
|
|
767 |
if del_filename in sess_data["uploaded_documents"]:
|
768 |
del sess_data["uploaded_documents"][del_filename]
|
769 |
-
|
770 |
-
|
771 |
-
|
772 |
-
|
773 |
-
|
774 |
-
|
775 |
-
|
776 |
-
|
777 |
-
|
|
|
|
|
778 |
if del_filename in sess_data["shredded_documents"]:
|
779 |
del sess_data["shredded_documents"][del_filename]
|
780 |
-
|
781 |
if selected_doc == del_filename:
|
782 |
selected_doc = None
|
783 |
break
|
@@ -787,15 +789,17 @@ def unified_master_callback(
|
|
787 |
if n_click:
|
788 |
btn_id = ctx.inputs_list[12][i]['id']
|
789 |
del_filename = btn_id['index']
|
|
|
790 |
if del_filename in sess_data["proposals"]:
|
791 |
del sess_data["proposals"][del_filename]
|
792 |
-
|
793 |
-
|
794 |
-
|
795 |
-
|
796 |
-
|
797 |
-
|
798 |
-
|
|
|
799 |
if selected_proposal == del_filename:
|
800 |
selected_proposal = None
|
801 |
break
|
|
|
673 |
chat_input, cancel_clicks, preview_window_state,
|
674 |
session_id_state, session_id_store_input
|
675 |
):
|
|
|
676 |
sid = get_session_id(session_id_state if session_id_state else session_id_store_input)
|
677 |
sess_data = get_session_data(sid)
|
678 |
ctx = callback_context
|
|
|
689 |
doc_delete_clicks = safe_get_n_clicks(ctx, 8)
|
690 |
proposal_delete_clicks = safe_get_n_clicks(ctx, 12)
|
691 |
|
|
|
692 |
if not ctx.triggered or triggered_id in ['session-id-store']:
|
693 |
doc_options = [{'label': truncate_filename(fn), 'value': fn} for fn in sess_data["uploaded_documents"].keys()]
|
694 |
doc_value = next(iter(sess_data["uploaded_documents"]), None) if sess_data["uploaded_documents"] else None
|
|
|
757 |
else:
|
758 |
logging.error(f"[{sid}] Failed to decode uploaded proposal: {proposal_filename}")
|
759 |
|
760 |
+
# --- Fix for delete buttons below ---
|
761 |
if triggered_id and isinstance(doc_delete_clicks, list):
|
762 |
for i, n_click in enumerate(doc_delete_clicks):
|
763 |
if n_click:
|
764 |
btn_id = ctx.inputs_list[8][i]['id']
|
765 |
del_filename = btn_id['index']
|
766 |
+
# Remove from uploaded_documents
|
767 |
if del_filename in sess_data["uploaded_documents"]:
|
768 |
del sess_data["uploaded_documents"][del_filename]
|
769 |
+
# Remove from uploaded_documents_fileid and delete Gemini file if exists
|
770 |
+
if del_filename in sess_data["uploaded_documents_fileid"]:
|
771 |
+
try:
|
772 |
+
genai.delete_file(sess_data["uploaded_documents_fileid"][del_filename])
|
773 |
+
except Exception as e:
|
774 |
+
logging.warning(f"[{sid}] Failed to delete Gemini file {del_filename}: {e}")
|
775 |
+
del sess_data["uploaded_documents_fileid"][del_filename]
|
776 |
+
# Remove from uploaded_documents_bytes
|
777 |
+
if del_filename in sess_data["uploaded_documents_bytes"]:
|
778 |
+
del sess_data["uploaded_documents_bytes"][del_filename]
|
779 |
+
# Remove from shredded_documents
|
780 |
if del_filename in sess_data["shredded_documents"]:
|
781 |
del sess_data["shredded_documents"][del_filename]
|
782 |
+
logging.info(f"[{sid}] Document deleted: {del_filename}")
|
783 |
if selected_doc == del_filename:
|
784 |
selected_doc = None
|
785 |
break
|
|
|
789 |
if n_click:
|
790 |
btn_id = ctx.inputs_list[12][i]['id']
|
791 |
del_filename = btn_id['index']
|
792 |
+
# Remove from proposals
|
793 |
if del_filename in sess_data["proposals"]:
|
794 |
del sess_data["proposals"][del_filename]
|
795 |
+
# Remove from proposals_fileid and delete Gemini file if exists
|
796 |
+
if del_filename in sess_data["proposals_fileid"]:
|
797 |
+
try:
|
798 |
+
genai.delete_file(sess_data["proposals_fileid"][del_filename])
|
799 |
+
except Exception as e:
|
800 |
+
logging.warning(f"[{sid}] Failed to delete Gemini proposal file {del_filename}: {e}")
|
801 |
+
del sess_data["proposals_fileid"][del_filename]
|
802 |
+
logging.info(f"[{sid}] Proposal deleted: {del_filename}")
|
803 |
if selected_proposal == del_filename:
|
804 |
selected_proposal = None
|
805 |
break
|