bluenevus commited on
Commit
4699f5b
·
1 Parent(s): bf9a234

Update app.py via AI Editor

Browse files
Files changed (1) hide show
  1. app.py +88 -14
app.py CHANGED
@@ -199,9 +199,9 @@ def get_left_col_content():
199
  'overflowY': 'auto'
200
  },
201
  rows=5,
202
- wrap='soft'
 
203
  ),
204
- dcc.Store(id="chat-input-rows", data=5),
205
  dbc.Row([
206
  dbc.Col(
207
  dbc.Button("Send", id="btn-send-chat", color="primary", className="mb-3 w-100"),
@@ -292,8 +292,8 @@ def get_right_col_content(selected_type, shred_doc, pink_doc, pink_review_doc, r
292
  loaded_preview = markdown_narrative_preview(red_doc) if red_doc else html.Div("No Red document loaded.")
293
  elif src == "red_review":
294
  label = "Red Review"
295
- store_var = red_doc
296
- loaded_preview = markdown_narrative_preview(red_doc) if red_doc else html.Div("No Red Review document loaded.")
297
  elif src == "gold":
298
  label = "Gold Document"
299
  store_var = gold_doc
@@ -359,6 +359,7 @@ app.layout = dbc.Container([
359
  dcc.Store(id='store-gold-review'),
360
  dcc.Store(id='store-loe'),
361
  dcc.Store(id='store-virtual-board'),
 
362
  dbc.Row([
363
  dbc.Col(
364
  html.H2(id='main-title', className="mt-3 mb-2", style={'textAlign': 'center', 'width':'100%'}),
@@ -477,22 +478,95 @@ def handle_shred_upload(upload_contents, upload_filenames, existing_files, curre
477
  )
478
  ], id={'type': 'file-row', 'index': name}, align="center", className="mb-1")
479
  )
 
480
  return files_display, new_shred, markdown_table_preview(new_shred), ""
481
  return files_display, new_shred, markdown_table_preview(new_shred) if new_shred else html.Div("No Shred document loaded."), ""
482
 
483
  @app.callback(
484
- Output("chat-input", "rows"),
485
- Input("chat-input", "value"),
486
- State("chat-input", "rows"),
 
 
 
 
 
 
 
 
 
 
 
487
  prevent_initial_call=True
488
  )
489
- def auto_expand_textarea(value, current_rows):
490
- if value is None or value == "":
491
- return 5
492
- num_lines = value.count('\n') + 1
493
- max_rows = 20
494
- rows = min(max(num_lines, 5), max_rows)
495
- return rows
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
496
 
497
  if __name__ == '__main__':
498
  print("Starting the Dash application...")
 
199
  'overflowY': 'auto'
200
  },
201
  rows=5,
202
+ wrap='soft',
203
+ autoFocus=True
204
  ),
 
205
  dbc.Row([
206
  dbc.Col(
207
  dbc.Button("Send", id="btn-send-chat", color="primary", className="mb-3 w-100"),
 
292
  loaded_preview = markdown_narrative_preview(red_doc) if red_doc else html.Div("No Red document loaded.")
293
  elif src == "red_review":
294
  label = "Red Review"
295
+ store_var = red_review_doc
296
+ loaded_preview = markdown_table_preview(red_review_doc) if red_review_doc else html.Div("No Red Review document loaded.")
297
  elif src == "gold":
298
  label = "Gold Document"
299
  store_var = gold_doc
 
359
  dcc.Store(id='store-gold-review'),
360
  dcc.Store(id='store-loe'),
361
  dcc.Store(id='store-virtual-board'),
362
+ dcc.Store(id='store-generated-doc'),
363
  dbc.Row([
364
  dbc.Col(
365
  html.H2(id='main-title', className="mt-3 mb-2", style={'textAlign': 'center', 'width':'100%'}),
 
478
  )
479
  ], id={'type': 'file-row', 'index': name}, align="center", className="mb-1")
480
  )
481
+ logging.info("Shred document uploaded and stored.")
482
  return files_display, new_shred, markdown_table_preview(new_shred), ""
483
  return files_display, new_shred, markdown_table_preview(new_shred) if new_shred else html.Div("No Shred document loaded."), ""
484
 
485
  @app.callback(
486
+ Output('document-preview', 'children'),
487
+ Output('store-generated-doc', 'data'),
488
+ Output('loading-output', 'children'),
489
+ Input({'type': 'btn-generate-doc', 'index': ALL}, 'n_clicks'),
490
+ State('selected-doc-type', 'data'),
491
+ State('store-shred', 'data'),
492
+ State('store-pink', 'data'),
493
+ State('store-pink-review', 'data'),
494
+ State('store-red', 'data'),
495
+ State('store-red-review', 'data'),
496
+ State('store-gold', 'data'),
497
+ State('store-gold-review', 'data'),
498
+ State('store-loe', 'data'),
499
+ State('store-virtual-board', 'data'),
500
  prevent_initial_call=True
501
  )
502
+ def generate_document(n_clicks, selected_type, shred, pink, pink_review, red, red_review, gold, gold_review, loe, virtual_board):
503
+ ctx = callback_context
504
+ if not ctx.triggered or not any(n_clicks):
505
+ raise dash.exceptions.PreventUpdate
506
+ logging.info(f"Generating document for type: {selected_type}")
507
+ # Gather necessary documents
508
+ inputs = {
509
+ "shred": shred,
510
+ "pink": pink,
511
+ "pink_review": pink_review,
512
+ "red": red,
513
+ "red_review": red_review,
514
+ "gold": gold,
515
+ "gold_review": gold_review,
516
+ "loe": loe,
517
+ "virtual_board": virtual_board
518
+ }
519
+ prompt = document_types.get(selected_type, "")
520
+ # Compose context for Gemini
521
+ context = ""
522
+ if selected_type in doc_dependencies:
523
+ for dep in doc_dependencies[selected_type]["source"]:
524
+ context += f"\n\n{dep.upper()}:\n{inputs.get(dep, '')}"
525
+ else:
526
+ context += f"\n\n{inputs.get('shred','')}"
527
+ full_prompt = f"{prompt}\n\n{context}"
528
+ # Gemini API call (threaded for responsiveness)
529
+ result_holder = {}
530
+ def gemini_thread():
531
+ try:
532
+ model = genai.GenerativeModel(GEMINI_MODEL)
533
+ response = model.generate_content(full_prompt, stream=False)
534
+ result_holder['result'] = response.text if hasattr(response, 'text') else str(response)
535
+ logging.info("Gemini document generated successfully.")
536
+ except Exception as e:
537
+ logging.error(f"Error with Gemini API: {str(e)}")
538
+ result_holder['result'] = f"Error generating document: {str(e)}"
539
+ t = threading.Thread(target=gemini_thread)
540
+ t.start()
541
+ t.join(timeout=60)
542
+ generated_doc = result_holder.get('result', 'Error: No document generated.')
543
+ # Store and preview
544
+ if selected_type in spreadsheet_types:
545
+ preview = markdown_table_preview(generated_doc)
546
+ else:
547
+ preview = markdown_narrative_preview(generated_doc)
548
+ logging.info("Document preview updated.")
549
+ return preview, generated_doc, ""
550
+
551
+ @app.callback(
552
+ Output("download-document", "data"),
553
+ Input("btn-download", "n_clicks"),
554
+ State('selected-doc-type', 'data'),
555
+ State('store-generated-doc', 'data'),
556
+ prevent_initial_call=True
557
+ )
558
+ def download_document(n_clicks, selected_type, generated_doc):
559
+ if not generated_doc:
560
+ logging.warning("No generated document to download.")
561
+ return dash.no_update
562
+ if selected_type in spreadsheet_types:
563
+ xlsx_io = markdown_tables_to_xlsx(generated_doc)
564
+ logging.info("Spreadsheet document prepared for download.")
565
+ return dcc.send_bytes(xlsx_io.getvalue(), filename=f"{selected_type}_output.xlsx")
566
+ else:
567
+ content = generated_doc.encode('utf-8')
568
+ logging.info("Narrative document prepared for download.")
569
+ return dcc.send_bytes(content, filename=f"{selected_type}_output.md")
570
 
571
  if __name__ == '__main__':
572
  print("Starting the Dash application...")