Spaces:
Paused
Paused
Update app.py via AI Editor
Browse files
app.py
CHANGED
@@ -188,7 +188,6 @@ def process_document(action, selected_filename=None, chat_input=None):
|
|
188 |
if result_holder["docx_bytes"] and result_holder["docx_name"]:
|
189 |
docx_name = result_holder["docx_name"]
|
190 |
try:
|
191 |
-
# We'll store the text as the plain shredded text (not binary docx) in uploaded_documents
|
192 |
uploaded_documents[docx_name] = result_holder["text"]
|
193 |
except Exception as e:
|
194 |
logging.error(f"Error adding shredded docx to uploaded_documents: {e}")
|
@@ -549,7 +548,7 @@ def master_callback(
|
|
549 |
del uploaded_documents_fileid[del_filename]
|
550 |
logging.info(f"Document deleted: {del_filename}")
|
551 |
if selected_doc == del_filename:
|
552 |
-
selected_doc =
|
553 |
upload_triggered = True
|
554 |
break
|
555 |
|
@@ -568,7 +567,7 @@ def master_callback(
|
|
568 |
del uploaded_proposals_fileid[del_filename]
|
569 |
logging.info(f"Proposal deleted: {del_filename}")
|
570 |
if selected_proposal == del_filename:
|
571 |
-
selected_proposal =
|
572 |
upload_triggered = True
|
573 |
break
|
574 |
|
@@ -581,7 +580,7 @@ def master_callback(
|
|
581 |
del generated_documents[del_filename]
|
582 |
logging.info(f"Generated doc deleted: {del_filename}")
|
583 |
if selected_generated == del_filename:
|
584 |
-
selected_generated =
|
585 |
upload_triggered = True
|
586 |
break
|
587 |
|
@@ -596,6 +595,7 @@ def master_callback(
|
|
596 |
upload_triggered = True
|
597 |
break
|
598 |
|
|
|
599 |
doc_options = [{'label': fn, 'value': fn} for fn in uploaded_documents.keys()]
|
600 |
doc_value = selected_doc if selected_doc in uploaded_documents else (next(iter(uploaded_documents), None) if uploaded_documents else None)
|
601 |
shredded_doc_list_items = get_shredded_doc_list(shredded_documents)
|
@@ -608,21 +608,20 @@ def master_callback(
|
|
608 |
|
609 |
if triggered_id == 'shred-action-btn':
|
610 |
output_data_upload = dcc.Loading(type="default", children=html.Div("Shredding document...", style={"wordWrap": "break-word"}))
|
611 |
-
shred_text, shredded_docx_bytes, shredded_docx_name, shredded_text = process_document('shred',
|
612 |
shred_store = {'text': shred_text, 'docx_bytes': shredded_docx_bytes, 'docx_name': shredded_docx_name}
|
613 |
|
614 |
if shredded_docx_bytes and shredded_docx_name:
|
615 |
shredded_documents[shredded_docx_name] = shredded_docx_bytes
|
616 |
logging.info(f"Shredded docx saved: {shredded_docx_name}")
|
617 |
-
# Add shredded docx to uploaded_documents as text so it appears as selectable
|
618 |
if shredded_docx_name not in uploaded_documents:
|
619 |
uploaded_documents[shredded_docx_name] = shredded_text
|
|
|
620 |
doc_options = [{'label': fn, 'value': fn} for fn in uploaded_documents.keys()]
|
621 |
-
doc_value = shredded_docx_name
|
622 |
uploaded_doc_list = get_uploaded_doc_list(uploaded_documents)
|
623 |
shredded_doc_list_items = get_shredded_doc_list(shredded_documents)
|
624 |
output_data_upload = dcc.Markdown(shred_text, style={"whiteSpace": "pre-wrap", "wordWrap": "break-word"})
|
625 |
-
|
626 |
return (
|
627 |
shred_store, proposal_store, output_data_upload,
|
628 |
uploaded_doc_list, doc_options, doc_value,
|
@@ -632,13 +631,13 @@ def master_callback(
|
|
632 |
|
633 |
if triggered_id == 'proposal-action-btn':
|
634 |
output_data_upload = dcc.Loading(type="default", children=html.Div("Generating proposal...", style={"wordWrap": "break-word"}))
|
635 |
-
proposal_text, proposal_docx_bytes, proposal_docx_name, proposal_text_preview = process_document('proposal',
|
636 |
proposal_store = {'text': proposal_text, 'docx_bytes': proposal_docx_bytes, 'docx_name': proposal_docx_name}
|
637 |
new_generated_doc_value = generated_doc_value
|
638 |
if proposal_docx_bytes and proposal_docx_name:
|
639 |
generated_documents[proposal_docx_name] = proposal_docx_bytes
|
640 |
generated_doc_options = [{'label': fn, 'value': fn} for fn in generated_documents.keys()]
|
641 |
-
new_generated_doc_value = proposal_docx_name
|
642 |
generated_doc_list = get_generated_doc_list(generated_documents)
|
643 |
logging.info(f"Generated proposal docx saved: {proposal_docx_name}")
|
644 |
output_data_upload = dcc.Markdown(proposal_text, style={"whiteSpace": "pre-wrap", "wordWrap": "break-word"})
|
@@ -675,6 +674,8 @@ def master_callback(
|
|
675 |
)
|
676 |
|
677 |
if upload_triggered:
|
|
|
|
|
678 |
output_data_upload = html.Div("Upload/Delete completed.", style={"wordWrap": "break-word"})
|
679 |
return (
|
680 |
shred_store, proposal_store, output_data_upload,
|
@@ -683,6 +684,9 @@ def master_callback(
|
|
683 |
generated_doc_list, generated_doc_options, generated_doc_value
|
684 |
)
|
685 |
|
|
|
|
|
|
|
686 |
return (
|
687 |
shred_store, proposal_store, output_data_upload,
|
688 |
uploaded_doc_list, doc_options, doc_value,
|
|
|
188 |
if result_holder["docx_bytes"] and result_holder["docx_name"]:
|
189 |
docx_name = result_holder["docx_name"]
|
190 |
try:
|
|
|
191 |
uploaded_documents[docx_name] = result_holder["text"]
|
192 |
except Exception as e:
|
193 |
logging.error(f"Error adding shredded docx to uploaded_documents: {e}")
|
|
|
548 |
del uploaded_documents_fileid[del_filename]
|
549 |
logging.info(f"Document deleted: {del_filename}")
|
550 |
if selected_doc == del_filename:
|
551 |
+
selected_doc = None
|
552 |
upload_triggered = True
|
553 |
break
|
554 |
|
|
|
567 |
del uploaded_proposals_fileid[del_filename]
|
568 |
logging.info(f"Proposal deleted: {del_filename}")
|
569 |
if selected_proposal == del_filename:
|
570 |
+
selected_proposal = None
|
571 |
upload_triggered = True
|
572 |
break
|
573 |
|
|
|
580 |
del generated_documents[del_filename]
|
581 |
logging.info(f"Generated doc deleted: {del_filename}")
|
582 |
if selected_generated == del_filename:
|
583 |
+
selected_generated = None
|
584 |
upload_triggered = True
|
585 |
break
|
586 |
|
|
|
595 |
upload_triggered = True
|
596 |
break
|
597 |
|
598 |
+
# Always recalculate options/values after any operation
|
599 |
doc_options = [{'label': fn, 'value': fn} for fn in uploaded_documents.keys()]
|
600 |
doc_value = selected_doc if selected_doc in uploaded_documents else (next(iter(uploaded_documents), None) if uploaded_documents else None)
|
601 |
shredded_doc_list_items = get_shredded_doc_list(shredded_documents)
|
|
|
608 |
|
609 |
if triggered_id == 'shred-action-btn':
|
610 |
output_data_upload = dcc.Loading(type="default", children=html.Div("Shredding document...", style={"wordWrap": "break-word"}))
|
611 |
+
shred_text, shredded_docx_bytes, shredded_docx_name, shredded_text = process_document('shred', doc_value, chat_input)
|
612 |
shred_store = {'text': shred_text, 'docx_bytes': shredded_docx_bytes, 'docx_name': shredded_docx_name}
|
613 |
|
614 |
if shredded_docx_bytes and shredded_docx_name:
|
615 |
shredded_documents[shredded_docx_name] = shredded_docx_bytes
|
616 |
logging.info(f"Shredded docx saved: {shredded_docx_name}")
|
|
|
617 |
if shredded_docx_name not in uploaded_documents:
|
618 |
uploaded_documents[shredded_docx_name] = shredded_text
|
619 |
+
# Recompute options/values after updating
|
620 |
doc_options = [{'label': fn, 'value': fn} for fn in uploaded_documents.keys()]
|
621 |
+
doc_value = shredded_docx_name if shredded_docx_name in uploaded_documents else (next(iter(uploaded_documents), None) if uploaded_documents else None)
|
622 |
uploaded_doc_list = get_uploaded_doc_list(uploaded_documents)
|
623 |
shredded_doc_list_items = get_shredded_doc_list(shredded_documents)
|
624 |
output_data_upload = dcc.Markdown(shred_text, style={"whiteSpace": "pre-wrap", "wordWrap": "break-word"})
|
|
|
625 |
return (
|
626 |
shred_store, proposal_store, output_data_upload,
|
627 |
uploaded_doc_list, doc_options, doc_value,
|
|
|
631 |
|
632 |
if triggered_id == 'proposal-action-btn':
|
633 |
output_data_upload = dcc.Loading(type="default", children=html.Div("Generating proposal...", style={"wordWrap": "break-word"}))
|
634 |
+
proposal_text, proposal_docx_bytes, proposal_docx_name, proposal_text_preview = process_document('proposal', doc_value, chat_input)
|
635 |
proposal_store = {'text': proposal_text, 'docx_bytes': proposal_docx_bytes, 'docx_name': proposal_docx_name}
|
636 |
new_generated_doc_value = generated_doc_value
|
637 |
if proposal_docx_bytes and proposal_docx_name:
|
638 |
generated_documents[proposal_docx_name] = proposal_docx_bytes
|
639 |
generated_doc_options = [{'label': fn, 'value': fn} for fn in generated_documents.keys()]
|
640 |
+
new_generated_doc_value = proposal_docx_name if proposal_docx_name in generated_documents else (next(iter(generated_documents), None) if generated_documents else None)
|
641 |
generated_doc_list = get_generated_doc_list(generated_documents)
|
642 |
logging.info(f"Generated proposal docx saved: {proposal_docx_name}")
|
643 |
output_data_upload = dcc.Markdown(proposal_text, style={"whiteSpace": "pre-wrap", "wordWrap": "break-word"})
|
|
|
674 |
)
|
675 |
|
676 |
if upload_triggered:
|
677 |
+
doc_value = doc_value if doc_value in uploaded_documents else (next(iter(uploaded_documents), None) if uploaded_documents else None)
|
678 |
+
generated_doc_value = generated_doc_value if generated_doc_value in generated_documents else (next(iter(generated_documents), None) if generated_documents else None)
|
679 |
output_data_upload = html.Div("Upload/Delete completed.", style={"wordWrap": "break-word"})
|
680 |
return (
|
681 |
shred_store, proposal_store, output_data_upload,
|
|
|
684 |
generated_doc_list, generated_doc_options, generated_doc_value
|
685 |
)
|
686 |
|
687 |
+
# Always return 10 outputs
|
688 |
+
doc_value = doc_value if doc_value in uploaded_documents else (next(iter(uploaded_documents), None) if uploaded_documents else None)
|
689 |
+
generated_doc_value = generated_doc_value if generated_doc_value in generated_documents else (next(iter(generated_documents), None) if generated_documents else None)
|
690 |
return (
|
691 |
shred_store, proposal_store, output_data_upload,
|
692 |
uploaded_doc_list, doc_options, doc_value,
|