Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
|
@@ -237,7 +237,7 @@ class AgentDispatcher:
|
|
| 237 |
if not agent:
|
| 238 |
raise ValueError(f"Unknown agent: {agent_name}")
|
| 239 |
|
| 240 |
-
self.log_queue.put(f"[{agent_name.replace('_', ' ').title()}]: Starting task...")
|
| 241 |
if agent_name == "prompt_optimizer":
|
| 242 |
context = await agent.optimize_prompt(context, api_key)
|
| 243 |
elif agent_name == "orchestrator":
|
|
@@ -299,7 +299,7 @@ async def multi_agent_conversation(task_message: str, log_queue: queue.Queue, ap
|
|
| 299 |
|
| 300 |
next_agent = await dispatcher.determine_next_agent(context, api_key)
|
| 301 |
if next_agent == "code_reviewer" and context.review_comments and "APPROVE" in [comment.get('issue',"").upper() for comment_list in context.review_comments for comment in comment_list.get("comments",[]) ]:
|
| 302 |
-
|
| 303 |
# Check for maximum revisions
|
| 304 |
if next_agent == "coder" and len([entry for entry in context.conversation_history if entry["agent"] == "Coder"]) > 5:
|
| 305 |
log_queue.put("Maximum revision iterations reached. Exiting.")
|
|
@@ -309,20 +309,20 @@ async def multi_agent_conversation(task_message: str, log_queue: queue.Queue, ap
|
|
| 309 |
log_queue.put(("result", context.conversation_history))
|
| 310 |
|
| 311 |
# -------------------- Process Generator and Human Input --------------------
|
| 312 |
-
def process_conversation_generator(task_message: str, api_key: str, human_in_the_loop_event: threading.Event, human_input_queue: queue.Queue) -> Generator[str, None, None]:
|
| 313 |
"""
|
| 314 |
Wraps the conversation, yields log messages, and handles human input within a single thread.
|
|
|
|
| 315 |
"""
|
| 316 |
-
log_q: queue.Queue = queue.Queue()
|
| 317 |
|
| 318 |
# Run the multi-agent conversation *synchronously* within this function.
|
| 319 |
-
asyncio.run(multi_agent_conversation(task_message,
|
| 320 |
|
| 321 |
# Process the log queue and handle human-in-the-loop
|
| 322 |
final_result = None
|
| 323 |
while True: # Loop indefinitely to handle multiple potential human feedback requests.
|
| 324 |
try:
|
| 325 |
-
msg =
|
| 326 |
if isinstance(msg, tuple) and msg[0] == "result":
|
| 327 |
final_result = msg[1]
|
| 328 |
yield "Conversation complete." # Indicate completion.
|
|
@@ -389,8 +389,11 @@ def multi_agent_chat(message: str, history: List[Any], openai_api_key: str = Non
|
|
| 389 |
|
| 390 |
human_in_the_loop_event = threading.Event()
|
| 391 |
human_input_queue = queue.Queue() # Use a single queue for both requests and responses
|
|
|
|
|
|
|
|
|
|
|
|
|
| 392 |
|
| 393 |
-
yield from process_conversation_generator(message, openai_api_key, human_in_the_loop_event, human_input_queue)
|
| 394 |
|
| 395 |
|
| 396 |
# -------------------- Launch the Chatbot --------------------
|
|
@@ -416,4 +419,5 @@ if __name__ == "__main__":
|
|
| 416 |
demo = gr.TabbedInterface([iface, dummy_iface], ["Chatbot", "Dummy"])
|
| 417 |
demo.launch(share=True)
|
| 418 |
|
| 419 |
-
import time #Import the time module
|
|
|
|
|
|
| 237 |
if not agent:
|
| 238 |
raise ValueError(f"Unknown agent: {agent_name}")
|
| 239 |
|
| 240 |
+
self.log_queue.put(f"[{agent_name.replace('_', ' ').title()}]: Starting task...") # Log here
|
| 241 |
if agent_name == "prompt_optimizer":
|
| 242 |
context = await agent.optimize_prompt(context, api_key)
|
| 243 |
elif agent_name == "orchestrator":
|
|
|
|
| 299 |
|
| 300 |
next_agent = await dispatcher.determine_next_agent(context, api_key)
|
| 301 |
if next_agent == "code_reviewer" and context.review_comments and "APPROVE" in [comment.get('issue',"").upper() for comment_list in context.review_comments for comment in comment_list.get("comments",[]) ]:
|
| 302 |
+
next_agent = await dispatcher.determine_next_agent(context, api_key)
|
| 303 |
# Check for maximum revisions
|
| 304 |
if next_agent == "coder" and len([entry for entry in context.conversation_history if entry["agent"] == "Coder"]) > 5:
|
| 305 |
log_queue.put("Maximum revision iterations reached. Exiting.")
|
|
|
|
| 309 |
log_queue.put(("result", context.conversation_history))
|
| 310 |
|
| 311 |
# -------------------- Process Generator and Human Input --------------------
|
| 312 |
+
def process_conversation_generator(task_message: str, api_key: str, human_in_the_loop_event: threading.Event, human_input_queue: queue.Queue, log_queue: queue.Queue) -> Generator[str, None, None]:
|
| 313 |
"""
|
| 314 |
Wraps the conversation, yields log messages, and handles human input within a single thread.
|
| 315 |
+
Crucially, takes the log_queue as an argument.
|
| 316 |
"""
|
|
|
|
| 317 |
|
| 318 |
# Run the multi-agent conversation *synchronously* within this function.
|
| 319 |
+
asyncio.run(multi_agent_conversation(task_message, log_queue, api_key, human_in_the_loop_event, human_input_queue))
|
| 320 |
|
| 321 |
# Process the log queue and handle human-in-the-loop
|
| 322 |
final_result = None
|
| 323 |
while True: # Loop indefinitely to handle multiple potential human feedback requests.
|
| 324 |
try:
|
| 325 |
+
msg = log_queue.get_nowait() # Non-blocking get from the log queue.
|
| 326 |
if isinstance(msg, tuple) and msg[0] == "result":
|
| 327 |
final_result = msg[1]
|
| 328 |
yield "Conversation complete." # Indicate completion.
|
|
|
|
| 389 |
|
| 390 |
human_in_the_loop_event = threading.Event()
|
| 391 |
human_input_queue = queue.Queue() # Use a single queue for both requests and responses
|
| 392 |
+
log_queue = queue.Queue() #Create log queue here
|
| 393 |
+
|
| 394 |
+
yield from process_conversation_generator(message, openai_api_key, human_in_the_loop_event, human_input_queue, log_queue)
|
| 395 |
+
|
| 396 |
|
|
|
|
| 397 |
|
| 398 |
|
| 399 |
# -------------------- Launch the Chatbot --------------------
|
|
|
|
| 419 |
demo = gr.TabbedInterface([iface, dummy_iface], ["Chatbot", "Dummy"])
|
| 420 |
demo.launch(share=True)
|
| 421 |
|
| 422 |
+
import time #Import the time module
|
| 423 |
+
|