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,
|