Spaces:
Sleeping
Sleeping
# app.py | |
import gradio as gr | |
from agents.programmer import ProgrammerAgent | |
from agents.debugger import DebuggerAgent | |
from agents.base_agent import ACPMessage | |
# Initialize agents | |
codebot = ProgrammerAgent() | |
bugbot = DebuggerAgent() | |
# Chat history | |
conversation = [] | |
def start_conversation(): | |
global conversation | |
conversation = [] # reset | |
# Initial message from BugBot | |
msg = bugbot.create_message( | |
receiver=codebot.name, | |
performative="request", | |
content="Can you write a Python function to reverse a list?" | |
) | |
conversation.append(str(msg)) | |
# CodeBot responds | |
reply = codebot.receive_message(msg) | |
conversation.append(str(reply)) | |
return "\n\n".join(conversation) | |
def continue_conversation(): | |
if len(conversation) < 2: | |
return "Please start the conversation first." | |
# Last reply came from CodeBot β BugBot now responds | |
last_msg = conversation[-1] | |
parsed = parse_acp_string(last_msg) | |
reply = bugbot.receive_message(parsed) | |
conversation.append(str(reply)) | |
# CodeBot replies again | |
reply2 = codebot.receive_message(reply) | |
conversation.append(str(reply2)) | |
return "\n\n".join(conversation) | |
def parse_acp_string(message_str: str) -> ACPMessage: | |
""" | |
Convert "[PERFORMATIVE] sender β receiver: content" | |
back to an ACPMessage object | |
""" | |
try: | |
parts = message_str.split("] ", 1) | |
performative = parts[0][1:].lower() | |
meta, content = parts[1].split(": ", 1) | |
sender, receiver = [s.strip() for s in meta.split("β")] | |
return ACPMessage(sender, receiver, performative, content.strip()) | |
except Exception: | |
return ACPMessage("Unknown", "Unknown", "inform", "Failed to parse message.") | |
# Gradio interface | |
with gr.Blocks(title="BotTalks") as demo: | |
gr.Markdown("# π€ BotTalks: Programmer vs Debugger\nAgent Communication Protocol Chat") | |
chatbox = gr.Textbox(label="Conversation", lines=20) | |
with gr.Row(): | |
start_btn = gr.Button("Start Conversation π") | |
next_btn = gr.Button("Next Turn π") | |
start_btn.click(start_conversation, outputs=chatbox) | |
next_btn.click(continue_conversation, outputs=chatbox) | |
# Run app | |
demo.launch() | |