bluenevus commited on
Commit
9abebbc
·
1 Parent(s): 2fccc3f

Update app.py via AI Editor

Browse files
Files changed (1) hide show
  1. app.py +23 -31
app.py CHANGED
@@ -162,7 +162,7 @@ def process_document(action, selected_filename=None, chat_input=None):
162
  if chat_input:
163
  prompt += f"User additional instructions: {chat_input}\n"
164
  prompt += f"\nFile Name: {selected_filename}\n\n"
165
- result_holder = {"text": None, "docx_bytes": None, "docx_name": None}
166
  def thread_shred():
167
  global shredded_document
168
  shredded_document = ""
@@ -173,8 +173,8 @@ def process_document(action, selected_filename=None, chat_input=None):
173
  logging.info("Document shredded successfully.")
174
  docx_bytes = save_shredded_as_docx(result, selected_filename)
175
  generated_docx_name = f"{os.path.splitext(selected_filename)[0]}_shredded.docx"
 
176
  result_holder["text"] = result
177
- result_holder["docx_bytes"] = docx_bytes
178
  result_holder["docx_name"] = generated_docx_name
179
  except Exception as e:
180
  shredded_document = f"Error during shredding: {e}"
@@ -184,13 +184,10 @@ def process_document(action, selected_filename=None, chat_input=None):
184
  t = Thread(target=thread_shred)
185
  t.start()
186
  t.join()
187
- if result_holder["docx_bytes"] and result_holder["docx_name"]:
188
- docx_name = result_holder["docx_name"]
189
- try:
190
- uploaded_documents[docx_name] = result_holder["text"]
191
- except Exception as e:
192
- logging.error(f"Error adding shredded docx to uploaded_documents: {e}")
193
- return result_holder["text"], result_holder["docx_bytes"], result_holder["docx_name"], result_holder["text"]
194
 
195
  elif action == 'generate':
196
  if not shredded_document:
@@ -204,7 +201,7 @@ def process_document(action, selected_filename=None, chat_input=None):
204
  if chat_input:
205
  prompt += f"User additional instructions: {chat_input}\n"
206
  prompt += f"\nFile Name: {selected_filename}\n\n{shredded_document}"
207
- result_holder = {"text": None, "docx_bytes": None, "docx_name": None}
208
  def thread_generate():
209
  global generated_response
210
  generated_response = ""
@@ -215,8 +212,8 @@ def process_document(action, selected_filename=None, chat_input=None):
215
  logging.info("Proposal response generated successfully.")
216
  docx_bytes = save_proposal_as_docx(result, selected_filename)
217
  generated_docx_name = f"{os.path.splitext(selected_filename)[0]}_proposal.docx"
 
218
  result_holder["text"] = result
219
- result_holder["docx_bytes"] = docx_bytes
220
  result_holder["docx_name"] = generated_docx_name
221
  except Exception as e:
222
  generated_response = f"Error during generation: {e}"
@@ -226,7 +223,7 @@ def process_document(action, selected_filename=None, chat_input=None):
226
  t = Thread(target=thread_generate)
227
  t.start()
228
  t.join()
229
- return result_holder["text"], result_holder["docx_bytes"], result_holder["docx_name"], result_holder["text"]
230
 
231
  elif action == 'proposal':
232
  if not doc_content:
@@ -244,7 +241,7 @@ def process_document(action, selected_filename=None, chat_input=None):
244
  prompt += f"User additional instructions: {chat_input}\n"
245
  prompt += f"\n---\nRFP/SOW/PWS/RFI ({rfp_filename}):\n{doc_content}\n"
246
  logging.info(f"Sending proposal prompt to Gemini. RFP: {rfp_filename}")
247
- result_holder = {"text": None, "docx_bytes": None, "docx_name": None}
248
  def thread_proposal():
249
  try:
250
  logging.info("Connecting to Gemini for proposal.")
@@ -252,8 +249,8 @@ def process_document(action, selected_filename=None, chat_input=None):
252
  logging.info("Received proposal results from Gemini.")
253
  docx_bytes = save_proposal_as_docx(response, rfp_filename)
254
  generated_docx_name = f"{os.path.splitext(rfp_filename)[0]}_proposal.docx"
 
255
  result_holder["text"] = response
256
- result_holder["docx_bytes"] = docx_bytes
257
  result_holder["docx_name"] = generated_docx_name
258
  except Exception as e:
259
  logging.error("Error during Gemini proposal request: %s", e)
@@ -261,7 +258,7 @@ def process_document(action, selected_filename=None, chat_input=None):
261
  t = Thread(target=thread_proposal)
262
  t.start()
263
  t.join()
264
- return result_holder["text"], result_holder["docx_bytes"], result_holder["docx_name"], result_holder["text"]
265
 
266
  elif action == 'compliance':
267
  return "Compliance checking not implemented yet.", None, None, None
@@ -347,8 +344,8 @@ def get_ctx_input_n_clicks(ctx, idx):
347
  return []
348
 
349
  app.layout = dbc.Container([
350
- dcc.Store(id='shred-store', data={'text': None, 'docx_bytes': None, 'docx_name': None}),
351
- dcc.Store(id='proposal-store', data={'text': None, 'docx_bytes': None, 'docx_name': None}),
352
  dbc.Row([
353
  dbc.Col([
354
  dbc.Card([
@@ -514,8 +511,8 @@ def master_callback(
514
 
515
  upload_triggered = False
516
 
517
- shred_store = {'text': None, 'docx_bytes': None, 'docx_name': None}
518
- proposal_store = {'text': None, 'docx_bytes': None, 'docx_name': None}
519
 
520
  rfp_delete_clicks = safe_get_n_clicks(ctx, 4)
521
  proposal_delete_clicks = safe_get_n_clicks(ctx, 8)
@@ -628,14 +625,10 @@ def master_callback(
628
 
629
  if triggered_id == 'shred-action-btn':
630
  output_data_upload = dcc.Loading(type="default", children=html.Div("Shredding document...", style={"wordWrap": "break-word"}))
631
- shred_text, shredded_docx_bytes, shredded_docx_name, shredded_text = process_document('shred', doc_value, chat_input)
632
- shred_store = {'text': shred_text, 'docx_bytes': shredded_docx_bytes, 'docx_name': shredded_docx_name}
633
-
634
- if shredded_docx_bytes and shredded_docx_name:
635
- shredded_documents[shredded_docx_name] = shredded_docx_bytes
636
- logging.info(f"Shredded docx saved: {shredded_docx_name}")
637
- if shredded_docx_name not in uploaded_documents:
638
- uploaded_documents[shredded_docx_name] = shredded_text
639
  doc_options = [{'label': fn, 'value': fn} for fn in uploaded_documents.keys()]
640
  doc_value = shredded_docx_name if shredded_docx_name in uploaded_documents else (next(iter(uploaded_documents), None) if uploaded_documents else None)
641
  uploaded_doc_list = get_uploaded_doc_list(uploaded_documents)
@@ -650,11 +643,10 @@ def master_callback(
650
 
651
  if triggered_id == 'proposal-action-btn':
652
  output_data_upload = dcc.Loading(type="default", children=html.Div("Generating proposal...", style={"wordWrap": "break-word"}))
653
- proposal_text, proposal_docx_bytes, proposal_docx_name, proposal_text_preview = process_document('proposal', doc_value, chat_input)
654
- proposal_store = {'text': proposal_text, 'docx_bytes': proposal_docx_bytes, 'docx_name': proposal_docx_name}
655
  new_generated_doc_value = generated_doc_value
656
- if proposal_docx_bytes and proposal_docx_name:
657
- generated_documents[proposal_docx_name] = proposal_docx_bytes
658
  generated_doc_options = [{'label': fn, 'value': fn} for fn in generated_documents.keys()]
659
  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)
660
  generated_doc_list = get_generated_doc_list(generated_documents)
 
162
  if chat_input:
163
  prompt += f"User additional instructions: {chat_input}\n"
164
  prompt += f"\nFile Name: {selected_filename}\n\n"
165
+ result_holder = {"text": None, "docx_name": None}
166
  def thread_shred():
167
  global shredded_document
168
  shredded_document = ""
 
173
  logging.info("Document shredded successfully.")
174
  docx_bytes = save_shredded_as_docx(result, selected_filename)
175
  generated_docx_name = f"{os.path.splitext(selected_filename)[0]}_shredded.docx"
176
+ shredded_documents[generated_docx_name] = docx_bytes
177
  result_holder["text"] = result
 
178
  result_holder["docx_name"] = generated_docx_name
179
  except Exception as e:
180
  shredded_document = f"Error during shredding: {e}"
 
184
  t = Thread(target=thread_shred)
185
  t.start()
186
  t.join()
187
+ if result_holder["docx_name"] and result_holder["text"]:
188
+ if result_holder["docx_name"] not in uploaded_documents:
189
+ uploaded_documents[result_holder["docx_name"]] = result_holder["text"]
190
+ return result_holder["text"], None, result_holder["docx_name"], result_holder["text"]
 
 
 
191
 
192
  elif action == 'generate':
193
  if not shredded_document:
 
201
  if chat_input:
202
  prompt += f"User additional instructions: {chat_input}\n"
203
  prompt += f"\nFile Name: {selected_filename}\n\n{shredded_document}"
204
+ result_holder = {"text": None, "docx_name": None}
205
  def thread_generate():
206
  global generated_response
207
  generated_response = ""
 
212
  logging.info("Proposal response generated successfully.")
213
  docx_bytes = save_proposal_as_docx(result, selected_filename)
214
  generated_docx_name = f"{os.path.splitext(selected_filename)[0]}_proposal.docx"
215
+ generated_documents[generated_docx_name] = docx_bytes
216
  result_holder["text"] = result
 
217
  result_holder["docx_name"] = generated_docx_name
218
  except Exception as e:
219
  generated_response = f"Error during generation: {e}"
 
223
  t = Thread(target=thread_generate)
224
  t.start()
225
  t.join()
226
+ return result_holder["text"], None, result_holder["docx_name"], result_holder["text"]
227
 
228
  elif action == 'proposal':
229
  if not doc_content:
 
241
  prompt += f"User additional instructions: {chat_input}\n"
242
  prompt += f"\n---\nRFP/SOW/PWS/RFI ({rfp_filename}):\n{doc_content}\n"
243
  logging.info(f"Sending proposal prompt to Gemini. RFP: {rfp_filename}")
244
+ result_holder = {"text": None, "docx_name": None}
245
  def thread_proposal():
246
  try:
247
  logging.info("Connecting to Gemini for proposal.")
 
249
  logging.info("Received proposal results from Gemini.")
250
  docx_bytes = save_proposal_as_docx(response, rfp_filename)
251
  generated_docx_name = f"{os.path.splitext(rfp_filename)[0]}_proposal.docx"
252
+ generated_documents[generated_docx_name] = docx_bytes
253
  result_holder["text"] = response
 
254
  result_holder["docx_name"] = generated_docx_name
255
  except Exception as e:
256
  logging.error("Error during Gemini proposal request: %s", e)
 
258
  t = Thread(target=thread_proposal)
259
  t.start()
260
  t.join()
261
+ return result_holder["text"], None, result_holder["docx_name"], result_holder["text"]
262
 
263
  elif action == 'compliance':
264
  return "Compliance checking not implemented yet.", None, None, None
 
344
  return []
345
 
346
  app.layout = dbc.Container([
347
+ dcc.Store(id='shred-store', data={'text': None, 'docx_name': None}),
348
+ dcc.Store(id='proposal-store', data={'text': None, 'docx_name': None}),
349
  dbc.Row([
350
  dbc.Col([
351
  dbc.Card([
 
511
 
512
  upload_triggered = False
513
 
514
+ shred_store = {'text': None, 'docx_name': None}
515
+ proposal_store = {'text': None, 'docx_name': None}
516
 
517
  rfp_delete_clicks = safe_get_n_clicks(ctx, 4)
518
  proposal_delete_clicks = safe_get_n_clicks(ctx, 8)
 
625
 
626
  if triggered_id == 'shred-action-btn':
627
  output_data_upload = dcc.Loading(type="default", children=html.Div("Shredding document...", style={"wordWrap": "break-word"}))
628
+ shred_text, _, shredded_docx_name, shredded_text = process_document('shred', doc_value, chat_input)
629
+ shred_store = {'text': shred_text, 'docx_name': shredded_docx_name}
630
+
631
+ if shredded_docx_name:
 
 
 
 
632
  doc_options = [{'label': fn, 'value': fn} for fn in uploaded_documents.keys()]
633
  doc_value = shredded_docx_name if shredded_docx_name in uploaded_documents else (next(iter(uploaded_documents), None) if uploaded_documents else None)
634
  uploaded_doc_list = get_uploaded_doc_list(uploaded_documents)
 
643
 
644
  if triggered_id == 'proposal-action-btn':
645
  output_data_upload = dcc.Loading(type="default", children=html.Div("Generating proposal...", style={"wordWrap": "break-word"}))
646
+ proposal_text, _, proposal_docx_name, proposal_text_preview = process_document('proposal', doc_value, chat_input)
647
+ proposal_store = {'text': proposal_text, 'docx_name': proposal_docx_name}
648
  new_generated_doc_value = generated_doc_value
649
+ if proposal_docx_name:
 
650
  generated_doc_options = [{'label': fn, 'value': fn} for fn in generated_documents.keys()]
651
  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)
652
  generated_doc_list = get_generated_doc_list(generated_documents)