Spaces:
Paused
Paused
Update app.py via AI Editor
Browse files
app.py
CHANGED
@@ -225,7 +225,7 @@ def get_left_col_content():
|
|
225 |
html.H5("Maiko Chat", className="mb-2"),
|
226 |
dcc.Loading(
|
227 |
id="chat-loading",
|
228 |
-
type="
|
229 |
children=[
|
230 |
dcc.Textarea(
|
231 |
id="chat-input",
|
@@ -269,15 +269,6 @@ def get_left_col_content():
|
|
269 |
|
270 |
def get_right_col_content(selected_type, store_data):
|
271 |
controls = []
|
272 |
-
controls.append(
|
273 |
-
html.Div(id='progress-dot-area', style={'textAlign': 'center', 'marginBottom': '8px'})
|
274 |
-
)
|
275 |
-
controls.append(dcc.Loading(
|
276 |
-
id="loading-indicator",
|
277 |
-
type="dot",
|
278 |
-
children=[html.Div(id="loading-output")]
|
279 |
-
))
|
280 |
-
|
281 |
if selected_type == "Shred":
|
282 |
controls.append(
|
283 |
html.Div([
|
@@ -390,7 +381,8 @@ app.layout = dbc.Container([
|
|
390 |
dcc.Store(id='store-loe'),
|
391 |
dcc.Store(id='store-virtual-board'),
|
392 |
dcc.Store(id='store-generated-doc'),
|
393 |
-
|
|
|
394 |
dbc.Row([
|
395 |
dbc.Col(
|
396 |
html.H2(id='main-title', className="mt-3 mb-2", style={'textAlign': 'center', 'width':'100%'}),
|
@@ -417,7 +409,6 @@ app.layout = dbc.Container([
|
|
417 |
),
|
418 |
dbc.Col(
|
419 |
html.Div([
|
420 |
-
html.Div(id='progress-dot-area', style={'textAlign': 'center', 'marginBottom': '8px'}),
|
421 |
html.Div(id='right-col-content')
|
422 |
]),
|
423 |
width=9
|
@@ -499,7 +490,7 @@ def update_right_col(selected_type):
|
|
499 |
Output('document-preview', 'children'),
|
500 |
Output('store-generated-doc', 'data'),
|
501 |
Output('download-document', 'data'),
|
502 |
-
Output('
|
503 |
],
|
504 |
[
|
505 |
Input({'type': 'upload-doc-type', 'subtype': ALL, 'index': ALL}, 'contents'),
|
@@ -546,8 +537,8 @@ def unified_handler(contents_lists, n_clicks_generate_list, n_clicks_download, s
|
|
546 |
"virtual_board": 8
|
547 |
}
|
548 |
|
549 |
-
# Show
|
550 |
-
|
551 |
if "upload-doc-type" in trigger:
|
552 |
for i, (contents, filenames) in enumerate(zip(contents_lists, filenames_lists)):
|
553 |
if contents and filenames:
|
@@ -585,7 +576,7 @@ def unified_handler(contents_lists, n_clicks_generate_list, n_clicks_download, s
|
|
585 |
preview = markdown_table_preview(file_text)
|
586 |
generated_doc = dash.no_update
|
587 |
download_data = dash.no_update
|
588 |
-
return stores + [file_list, uploaded_doc_name_shred, preview, generated_doc, download_data,
|
589 |
|
590 |
if any(n_clicks_generate_list):
|
591 |
logging.info(f"Generating document for type: {selected_type}")
|
@@ -629,7 +620,7 @@ def unified_handler(contents_lists, n_clicks_generate_list, n_clicks_download, s
|
|
629 |
else:
|
630 |
preview = markdown_narrative_preview(generated_doc)
|
631 |
download_data = dash.no_update
|
632 |
-
return stores + [file_list, uploaded_doc_name_shred, preview, generated_doc, download_data,
|
633 |
|
634 |
if "btn-download" in trigger:
|
635 |
doc = prev_generated
|
@@ -656,17 +647,17 @@ def unified_handler(contents_lists, n_clicks_generate_list, n_clicks_download, s
|
|
656 |
doc = stores[8]
|
657 |
if not doc:
|
658 |
logging.warning("No generated document to download.")
|
659 |
-
return stores + [file_list, uploaded_doc_name_shred, dash.no_update, dash.no_update, dash.no_update,
|
660 |
if selected_type in spreadsheet_types:
|
661 |
xlsx_io = markdown_tables_to_xlsx(doc)
|
662 |
logging.info("Spreadsheet document prepared for download.")
|
663 |
download_data = dcc.send_bytes(xlsx_io.getvalue(), filename=f"{selected_type}_output.xlsx")
|
664 |
-
return stores + [file_list, uploaded_doc_name_shred, dash.no_update, dash.no_update, download_data,
|
665 |
else:
|
666 |
content = doc.encode('utf-8')
|
667 |
logging.info("Narrative document prepared for download.")
|
668 |
download_data = dcc.send_bytes(content, filename=f"{selected_type}_output.md")
|
669 |
-
return stores + [file_list, uploaded_doc_name_shred, dash.no_update, dash.no_update, download_data,
|
670 |
|
671 |
doc = get_generated_doc(selected_type)
|
672 |
if not doc:
|
@@ -692,30 +683,19 @@ def unified_handler(contents_lists, n_clicks_generate_list, n_clicks_download, s
|
|
692 |
preview = markdown_narrative_preview(doc)
|
693 |
else:
|
694 |
preview = html.Div("No document loaded.")
|
695 |
-
return stores + [file_list, uploaded_doc_name_shred, preview, dash.no_update, dash.no_update,
|
696 |
if selected_type in spreadsheet_types:
|
697 |
preview = markdown_table_preview(doc)
|
698 |
else:
|
699 |
preview = markdown_narrative_preview(doc)
|
700 |
-
return stores + [file_list, uploaded_doc_name_shred, preview, doc, dash.no_update,
|
701 |
-
|
702 |
-
@app.callback(
|
703 |
-
Output("progress-dot-area", "children"),
|
704 |
-
Input('progress-dot-store', 'data')
|
705 |
-
)
|
706 |
-
def update_right_progress_dot(progress):
|
707 |
-
if progress == "progress":
|
708 |
-
return html.Div("...", id="progress-blinker", style={'fontSize': '2rem', 'letterSpacing': '0.5rem', 'animation': 'blink 1s infinite'})
|
709 |
-
return ""
|
710 |
|
711 |
@app.callback(
|
712 |
Output("main-progress-dot-output", "children"),
|
713 |
-
Input('
|
714 |
)
|
715 |
def update_main_progress_dot(progress):
|
716 |
-
|
717 |
-
return html.Div("...", style={'fontSize': '2rem', 'letterSpacing': '0.5rem', 'animation': 'blink 1s infinite'})
|
718 |
-
return ""
|
719 |
|
720 |
if __name__ == '__main__':
|
721 |
print("Starting the Dash application...")
|
|
|
225 |
html.H5("Maiko Chat", className="mb-2"),
|
226 |
dcc.Loading(
|
227 |
id="chat-loading",
|
228 |
+
type="default",
|
229 |
children=[
|
230 |
dcc.Textarea(
|
231 |
id="chat-input",
|
|
|
269 |
|
270 |
def get_right_col_content(selected_type, store_data):
|
271 |
controls = []
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
272 |
if selected_type == "Shred":
|
273 |
controls.append(
|
274 |
html.Div([
|
|
|
381 |
dcc.Store(id='store-loe'),
|
382 |
dcc.Store(id='store-virtual-board'),
|
383 |
dcc.Store(id='store-generated-doc'),
|
384 |
+
# This store triggers the main loader
|
385 |
+
dcc.Store(id='main-loader-trigger'),
|
386 |
dbc.Row([
|
387 |
dbc.Col(
|
388 |
html.H2(id='main-title', className="mt-3 mb-2", style={'textAlign': 'center', 'width':'100%'}),
|
|
|
409 |
),
|
410 |
dbc.Col(
|
411 |
html.Div([
|
|
|
412 |
html.Div(id='right-col-content')
|
413 |
]),
|
414 |
width=9
|
|
|
490 |
Output('document-preview', 'children'),
|
491 |
Output('store-generated-doc', 'data'),
|
492 |
Output('download-document', 'data'),
|
493 |
+
Output('main-loader-trigger', 'data')
|
494 |
],
|
495 |
[
|
496 |
Input({'type': 'upload-doc-type', 'subtype': ALL, 'index': ALL}, 'contents'),
|
|
|
537 |
"virtual_board": 8
|
538 |
}
|
539 |
|
540 |
+
# Show loader as soon as action is triggered
|
541 |
+
loader_trigger = time.time()
|
542 |
if "upload-doc-type" in trigger:
|
543 |
for i, (contents, filenames) in enumerate(zip(contents_lists, filenames_lists)):
|
544 |
if contents and filenames:
|
|
|
576 |
preview = markdown_table_preview(file_text)
|
577 |
generated_doc = dash.no_update
|
578 |
download_data = dash.no_update
|
579 |
+
return stores + [file_list, uploaded_doc_name_shred, preview, generated_doc, download_data, loader_trigger]
|
580 |
|
581 |
if any(n_clicks_generate_list):
|
582 |
logging.info(f"Generating document for type: {selected_type}")
|
|
|
620 |
else:
|
621 |
preview = markdown_narrative_preview(generated_doc)
|
622 |
download_data = dash.no_update
|
623 |
+
return stores + [file_list, uploaded_doc_name_shred, preview, generated_doc, download_data, loader_trigger]
|
624 |
|
625 |
if "btn-download" in trigger:
|
626 |
doc = prev_generated
|
|
|
647 |
doc = stores[8]
|
648 |
if not doc:
|
649 |
logging.warning("No generated document to download.")
|
650 |
+
return stores + [file_list, uploaded_doc_name_shred, dash.no_update, dash.no_update, dash.no_update, loader_trigger]
|
651 |
if selected_type in spreadsheet_types:
|
652 |
xlsx_io = markdown_tables_to_xlsx(doc)
|
653 |
logging.info("Spreadsheet document prepared for download.")
|
654 |
download_data = dcc.send_bytes(xlsx_io.getvalue(), filename=f"{selected_type}_output.xlsx")
|
655 |
+
return stores + [file_list, uploaded_doc_name_shred, dash.no_update, dash.no_update, download_data, loader_trigger]
|
656 |
else:
|
657 |
content = doc.encode('utf-8')
|
658 |
logging.info("Narrative document prepared for download.")
|
659 |
download_data = dcc.send_bytes(content, filename=f"{selected_type}_output.md")
|
660 |
+
return stores + [file_list, uploaded_doc_name_shred, dash.no_update, dash.no_update, download_data, loader_trigger]
|
661 |
|
662 |
doc = get_generated_doc(selected_type)
|
663 |
if not doc:
|
|
|
683 |
preview = markdown_narrative_preview(doc)
|
684 |
else:
|
685 |
preview = html.Div("No document loaded.")
|
686 |
+
return stores + [file_list, uploaded_doc_name_shred, preview, dash.no_update, dash.no_update, loader_trigger]
|
687 |
if selected_type in spreadsheet_types:
|
688 |
preview = markdown_table_preview(doc)
|
689 |
else:
|
690 |
preview = markdown_narrative_preview(doc)
|
691 |
+
return stores + [file_list, uploaded_doc_name_shred, preview, doc, dash.no_update, loader_trigger]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
692 |
|
693 |
@app.callback(
|
694 |
Output("main-progress-dot-output", "children"),
|
695 |
+
Input('main-loader-trigger', 'data')
|
696 |
)
|
697 |
def update_main_progress_dot(progress):
|
698 |
+
return "" # dcc.Loading handles the animation via children update
|
|
|
|
|
699 |
|
700 |
if __name__ == '__main__':
|
701 |
print("Starting the Dash application...")
|