bluenevus commited on
Commit
228c612
·
1 Parent(s): efb8d18

Update app.py via AI Editor

Browse files
Files changed (1) hide show
  1. app.py +14 -19
app.py CHANGED
@@ -46,6 +46,7 @@ def decode_document(decoded_bytes):
46
  def anthropic_stream_generate(prompt):
47
  stream_result = []
48
  try:
 
49
  with anthropic_client.messages.create(
50
  model=CLAUDE3_SONNET_MODEL,
51
  max_tokens=CLAUDE3_MAX_OUTPUT_TOKENS,
@@ -57,6 +58,7 @@ def anthropic_stream_generate(prompt):
57
  piece = event.delta.text
58
  stream_result.append(piece)
59
  logging.debug(f"Streaming piece: {piece}")
 
60
  return ''.join(stream_result)
61
  except Exception as e:
62
  logging.error("Error during anthropic streaming request: %s", e)
@@ -179,8 +181,10 @@ def process_document(action, selected_filename=None, chat_input=None, selected_p
179
  rfp_filename = selected_filename
180
  generated_docname = selected_generated
181
  if not (selected_filename and selected_filename in uploaded_documents):
 
182
  return "No RFP/SOW/PWS/RFI document selected.", None, None
183
  if not (selected_generated and selected_generated in generated_documents):
 
184
  return "No generated document selected.", None, None
185
  rfp_content = uploaded_documents[selected_filename]
186
  gen_bytes = generated_documents[selected_generated]
@@ -208,11 +212,13 @@ def process_document(action, selected_filename=None, chat_input=None, selected_p
208
  prompt += f"User additional instructions: {chat_input}\n"
209
  prompt += f"\n---\nRFP/SOW/PWS/RFI ({rfp_filename}):\n{rfp_content}\n"
210
  prompt += f"\n---\nGenerated Document ({generated_docname}):\n{generated_doc_content}\n"
211
- logging.info("Sending proposal prompt to anthropic. This is a streaming call.")
212
  result_holder = {"text": None, "docx_bytes": None, "docx_name": None}
213
  def thread_proposal():
214
  try:
 
215
  result = anthropic_stream_generate(prompt)
 
216
  docx_bytes = save_proposal_as_docx(result, rfp_filename)
217
  generated_docx_name = f"{os.path.splitext(rfp_filename)[0]}_{os.path.splitext(generated_docname)[0]}_proposal.docx"
218
  result_holder["text"] = result
@@ -514,22 +520,7 @@ def master_callback(
514
  'recover-action-btn', 'board-action-btn', 'loe-action-btn'
515
  ]
516
 
517
- if triggered_id == 'proposal-action-btn':
518
- output_data_upload = html.Div("Generating proposal from selected documents...", style={"wordWrap": "break-word"})
519
- # This is a progress placeholder, real work will happen in the next callback (Dash pattern)
520
- return (
521
- uploaded_doc_list,
522
- doc_options,
523
- doc_value,
524
- proposal_options,
525
- proposal_value,
526
- uploaded_proposal_list,
527
- generated_doc_list,
528
- generated_doc_options,
529
- generated_doc_value,
530
- output_data_upload
531
- )
532
-
533
  if triggered_id in action_buttons:
534
  result = ""
535
  generated_docx_bytes = None
@@ -544,12 +535,16 @@ def master_callback(
544
  new_selected_generated = generated_docx_name
545
 
546
  elif triggered_id == 'proposal-action-btn':
 
 
 
 
547
  result, generated_docx_bytes, generated_docx_name = process_document(
548
  'proposal',
549
- selected_filename,
550
  chat_input,
551
  None,
552
- selected_generated_dropdown_state
553
  )
554
  if generated_docx_bytes and generated_docx_name:
555
  generated_documents[generated_docx_name] = generated_docx_bytes
 
46
  def anthropic_stream_generate(prompt):
47
  stream_result = []
48
  try:
49
+ logging.info("Connecting to Anthropic Claude for streaming completion...")
50
  with anthropic_client.messages.create(
51
  model=CLAUDE3_SONNET_MODEL,
52
  max_tokens=CLAUDE3_MAX_OUTPUT_TOKENS,
 
58
  piece = event.delta.text
59
  stream_result.append(piece)
60
  logging.debug(f"Streaming piece: {piece}")
61
+ logging.info("Received response from Anthropic Claude streaming.")
62
  return ''.join(stream_result)
63
  except Exception as e:
64
  logging.error("Error during anthropic streaming request: %s", e)
 
181
  rfp_filename = selected_filename
182
  generated_docname = selected_generated
183
  if not (selected_filename and selected_filename in uploaded_documents):
184
+ logging.warning("No RFP/SOW/PWS/RFI document selected for proposal action.")
185
  return "No RFP/SOW/PWS/RFI document selected.", None, None
186
  if not (selected_generated and selected_generated in generated_documents):
187
+ logging.warning("No generated document selected for proposal action.")
188
  return "No generated document selected.", None, None
189
  rfp_content = uploaded_documents[selected_filename]
190
  gen_bytes = generated_documents[selected_generated]
 
212
  prompt += f"User additional instructions: {chat_input}\n"
213
  prompt += f"\n---\nRFP/SOW/PWS/RFI ({rfp_filename}):\n{rfp_content}\n"
214
  prompt += f"\n---\nGenerated Document ({generated_docname}):\n{generated_doc_content}\n"
215
+ logging.info(f"Sending proposal prompt to anthropic. RFP: {rfp_filename}, Generated Doc: {generated_docname}")
216
  result_holder = {"text": None, "docx_bytes": None, "docx_name": None}
217
  def thread_proposal():
218
  try:
219
+ logging.info("Connecting to Anthropic Claude for proposal streaming...")
220
  result = anthropic_stream_generate(prompt)
221
+ logging.info("Received proposal results from Anthropic Claude.")
222
  docx_bytes = save_proposal_as_docx(result, rfp_filename)
223
  generated_docx_name = f"{os.path.splitext(rfp_filename)[0]}_{os.path.splitext(generated_docname)[0]}_proposal.docx"
224
  result_holder["text"] = result
 
520
  'recover-action-btn', 'board-action-btn', 'loe-action-btn'
521
  ]
522
 
523
+ # Fix: When "Proposal" is clicked, trigger proposal streaming with correct dropdown doc selections
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
524
  if triggered_id in action_buttons:
525
  result = ""
526
  generated_docx_bytes = None
 
535
  new_selected_generated = generated_docx_name
536
 
537
  elif triggered_id == 'proposal-action-btn':
538
+ # Use the currently selected doc and generated doc from dropdowns
539
+ rfp_doc = selected_filename
540
+ gen_doc = selected_generated_dropdown_state
541
+ logging.info(f"Starting proposal streaming with RFP: {rfp_doc}, Generated Doc: {gen_doc}")
542
  result, generated_docx_bytes, generated_docx_name = process_document(
543
  'proposal',
544
+ rfp_doc,
545
  chat_input,
546
  None,
547
+ gen_doc
548
  )
549
  if generated_docx_bytes and generated_docx_name:
550
  generated_documents[generated_docx_name] = generated_docx_bytes