bluenevus commited on
Commit
1b75ac2
·
1 Parent(s): aca96fb

Update app.py via AI Editor

Browse files
Files changed (1) hide show
  1. app.py +44 -8
app.py CHANGED
@@ -150,7 +150,7 @@ def process_document(action, selected_filename=None, chat_input=None, rfp_decode
150
 
151
  doc_content = None
152
  doc_fileid = None
153
- if action in ["shred", "compliance", "virtual_board", "proposal"]:
154
  if selected_filename and selected_filename in uploaded_documents:
155
  doc_content = uploaded_documents[selected_filename]
156
  doc_fileid = uploaded_documents_fileid.get(selected_filename)
@@ -224,7 +224,6 @@ def process_document(action, selected_filename=None, chat_input=None, rfp_decode
224
  return "No RFP/SOW/PWS/RFI document selected.", None, None, None, None
225
  rfp_filename = selected_filename
226
  rfp_fileid = uploaded_documents_fileid.get(selected_filename)
227
- # Try to upload to Gemini if fileid missing and we have bytes
228
  if not rfp_fileid and rfp_filename in uploaded_documents_bytes:
229
  try:
230
  fileid = upload_to_gemini_file(uploaded_documents_bytes[rfp_filename], rfp_filename)
@@ -255,7 +254,38 @@ def process_document(action, selected_filename=None, chat_input=None, rfp_decode
255
  return result, None, None, None, None
256
 
257
  elif action == 'recover':
258
- return "Recovery not implemented yet.", None, None, None, None
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
259
  elif action == 'loe':
260
  return "LOE estimation not implemented yet.", None, None, None, None
261
  return "Action not implemented yet.", None, None, None, None
@@ -608,15 +638,21 @@ def master_callback(
608
  try:
609
  if triggered_id == "proposal-action-btn":
610
  action_name = "proposal"
 
 
 
 
 
611
  elif triggered_id == "recover-action-btn":
612
  action_name = "recover"
 
 
 
 
 
613
  elif triggered_id == "loe-action-btn":
614
  action_name = "loe"
615
- else:
616
- action_name = None
617
- # For proposal, always use the selected doc_value and its bytes if available
618
- selected_bytes = uploaded_documents_bytes.get(doc_value, None)
619
- if action_name:
620
  result, _, _, generated_filename, generated_docx_bytes = process_document(
621
  action_name, doc_value, chat_input, selected_bytes, None
622
  )
 
150
 
151
  doc_content = None
152
  doc_fileid = None
153
+ if action in ["shred", "compliance", "virtual_board", "proposal", "recover"]:
154
  if selected_filename and selected_filename in uploaded_documents:
155
  doc_content = uploaded_documents[selected_filename]
156
  doc_fileid = uploaded_documents_fileid.get(selected_filename)
 
224
  return "No RFP/SOW/PWS/RFI document selected.", None, None, None, None
225
  rfp_filename = selected_filename
226
  rfp_fileid = uploaded_documents_fileid.get(selected_filename)
 
227
  if not rfp_fileid and rfp_filename in uploaded_documents_bytes:
228
  try:
229
  fileid = upload_to_gemini_file(uploaded_documents_bytes[rfp_filename], rfp_filename)
 
254
  return result, None, None, None, None
255
 
256
  elif action == 'recover':
257
+ # For recover: need compliance check or shred (selected_filename), and proposal (selected_proposal_filename)
258
+ if not selected_proposal_filename or selected_proposal_filename not in proposals:
259
+ return "No proposal document selected for recovery.", None, None, None, None
260
+ if not selected_filename or selected_filename not in uploaded_documents:
261
+ return "No compliance check or shredded requirements document selected for recovery.", None, None, None, None
262
+ findings_content = uploaded_documents[selected_filename]
263
+ proposal_text = proposals[selected_proposal_filename]
264
+ logging.info(f"Recovery: fixing proposal [{selected_proposal_filename}] based on findings [{selected_filename}]")
265
+ prompt = (
266
+ "You are a proposal compliance recovery expert. Use the following findings and recommendations table, and the original proposal response. "
267
+ "Address ONLY those sections of the proposal that have a finding and a recommendation for improvement. "
268
+ "Do NOT change sections that are marked as fully compliant or already fully address the requirements. "
269
+ "For each section that needs fixing, revise it in the proposal to address the recommendation for compliance or to strengthen the response. "
270
+ "Return the full proposal with only the necessary sections revised, and leave all other sections untouched. "
271
+ "Do not add any introduction, summary, or comments. Return only the revised proposal in markdown, nothing else.\n\n"
272
+ "Findings and Recommendations Table or Requirements Table:\n"
273
+ f"{findings_content}\n"
274
+ "---\nOriginal Proposal:\n"
275
+ f"{proposal_text}\n"
276
+ )
277
+ result = gemini_generate_content(prompt, file_id=None, chat_input=chat_input)
278
+ if result and not result.startswith("Error"):
279
+ # Name for the recovered proposal: <original proposal base>_recovered.docx
280
+ base_name = os.path.splitext(selected_proposal_filename)[0]
281
+ recovered_docx_name = f"{base_name}_recovered.docx"
282
+ docx_bytes = save_proposal_as_docx(result, base_name)
283
+ proposals[recovered_docx_name] = result
284
+ proposals_fileid[recovered_docx_name] = None
285
+ return result, None, None, recovered_docx_name, docx_bytes
286
+ else:
287
+ return result, None, None, None, None
288
+
289
  elif action == 'loe':
290
  return "LOE estimation not implemented yet.", None, None, None, None
291
  return "Action not implemented yet.", None, None, None, None
 
638
  try:
639
  if triggered_id == "proposal-action-btn":
640
  action_name = "proposal"
641
+ selected_bytes = uploaded_documents_bytes.get(doc_value, None)
642
+ result, _, _, generated_filename, generated_docx_bytes = process_document(
643
+ action_name, doc_value, chat_input, selected_bytes, None
644
+ )
645
+ output_data_upload = dcc.Markdown(result, style={"whiteSpace": "pre-wrap", "wordWrap": "break-word"})
646
  elif triggered_id == "recover-action-btn":
647
  action_name = "recover"
648
+ # For recover, use selected compliance/shred doc (doc_value) and selected proposal (proposal_value)
649
+ result, _, _, generated_filename, generated_docx_bytes = process_document(
650
+ action_name, doc_value, chat_input, None, proposal_value
651
+ )
652
+ output_data_upload = dcc.Markdown(result, style={"whiteSpace": "pre-wrap", "wordWrap": "break-word"})
653
  elif triggered_id == "loe-action-btn":
654
  action_name = "loe"
655
+ selected_bytes = uploaded_documents_bytes.get(doc_value, None)
 
 
 
 
656
  result, _, _, generated_filename, generated_docx_bytes = process_document(
657
  action_name, doc_value, chat_input, selected_bytes, None
658
  )