CultriX commited on
Commit
479edc1
·
verified ·
1 Parent(s): 763898d

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +20 -16
app.py CHANGED
@@ -349,35 +349,39 @@ async def multi_agent_conversation(task_message: str, log_queue: queue.Queue, ap
349
  log_queue.put(("result", context.conversation_history))
350
 
351
  # -------------------- Process Generator and Human Input --------------------
352
-
353
  def process_conversation_generator(task_message: str, api_key: str,
354
  human_event: threading.Event, human_input_queue: queue.Queue,
355
  log_queue: queue.Queue) -> Generator[str, None, None]:
356
  """
357
- Runs the conversation and yields log messages.
 
358
  """
359
- # Run the conversation asynchronously.
360
- asyncio.run(multi_agent_conversation(task_message, log_queue, api_key, human_event, human_input_queue))
361
-
362
- final_result = None
363
- while True:
 
 
 
 
364
  try:
365
- msg = log_queue.get_nowait()
366
  if isinstance(msg, tuple) and msg[0] == "result":
367
- final_result = msg[1]
368
- yield gr.Chatbot.update(value=final_result, visible=True)
369
- yield "Conversation complete."
370
- break
371
  else:
372
  yield msg
373
  except queue.Empty:
374
  pass
375
-
376
- # If human feedback is requested, yield an appropriate message.
377
  if human_event.is_set():
378
  yield "Waiting for human feedback..."
379
- # Use a short asynchronous sleep to avoid busy-waiting.
380
- asyncio.run(asyncio.sleep(0.1))
 
 
 
381
 
382
  def get_human_feedback(placeholder_text: str, human_input_queue: queue.Queue) -> gr.Blocks:
383
  """
 
349
  log_queue.put(("result", context.conversation_history))
350
 
351
  # -------------------- Process Generator and Human Input --------------------
 
352
  def process_conversation_generator(task_message: str, api_key: str,
353
  human_event: threading.Event, human_input_queue: queue.Queue,
354
  log_queue: queue.Queue) -> Generator[str, None, None]:
355
  """
356
+ Runs the multi-agent conversation in a background thread and yields log messages
357
+ to update the chat box without blocking the UI.
358
  """
359
+ def run_conversation():
360
+ asyncio.run(multi_agent_conversation(task_message, log_queue, api_key, human_event, human_input_queue))
361
+
362
+ # Start the asynchronous conversation in a separate thread.
363
+ conversation_thread = threading.Thread(target=run_conversation)
364
+ conversation_thread.start()
365
+
366
+ # Continuously yield log messages until the conversation is complete.
367
+ while conversation_thread.is_alive() or not log_queue.empty():
368
  try:
369
+ msg = log_queue.get(timeout=0.1)
370
  if isinstance(msg, tuple) and msg[0] == "result":
371
+ # Update the chat box with the final conversation history.
372
+ yield gr.Chatbot.update(value=msg[1], visible=True)
 
 
373
  else:
374
  yield msg
375
  except queue.Empty:
376
  pass
377
+
 
378
  if human_event.is_set():
379
  yield "Waiting for human feedback..."
380
+
381
+ # Small sleep to prevent busy-waiting.
382
+ time.sleep(0.1)
383
+
384
+ yield "Conversation complete."
385
 
386
  def get_human_feedback(placeholder_text: str, human_input_queue: queue.Queue) -> gr.Blocks:
387
  """