autogen/examples/coder_reviewer.py

68 lines
2.4 KiB
Python
Raw Normal View History

2024-06-13 00:10:35 -07:00
import asyncio
2024-06-13 00:10:35 -07:00
from agnext.application import SingleThreadedAgentRuntime
from agnext.chat.agents import ChatCompletionAgent
from agnext.chat.memory import BufferedChatMemory
from agnext.chat.patterns import GroupChatManager
from agnext.chat.types import TextMessage
from agnext.components.models import OpenAI, SystemMessage
from agnext.core import AgentRuntime
def coder_reviewer(runtime: AgentRuntime) -> None:
coder = ChatCompletionAgent(
name="Coder",
description="An agent that writes code",
runtime=runtime,
system_messages=[
SystemMessage(
"You are a coder. You can write code to solve problems.\n"
"Work with the reviewer to improve your code."
)
],
model_client=OpenAI(model="gpt-4-turbo"),
memory=BufferedChatMemory(buffer_size=10),
)
reviewer = ChatCompletionAgent(
name="Reviewer",
description="An agent that reviews code",
runtime=runtime,
system_messages=[
SystemMessage(
"You are a code reviewer. You focus on correctness, efficiency and safety of the code.\n"
"Provide reviews only.\n"
"Output only 'APPROVE' to approve the code and end the conversation."
)
],
model_client=OpenAI(model="gpt-4-turbo"),
memory=BufferedChatMemory(buffer_size=10),
)
_ = GroupChatManager(
name="Manager",
description="A manager that orchestrates a back-and-forth converation between a coder and a reviewer.",
runtime=runtime,
2024-06-17 15:37:46 -04:00
participants=[coder.id, reviewer.id], # The order of the participants indicates the order of speaking.
2024-06-13 00:10:35 -07:00
memory=BufferedChatMemory(buffer_size=10),
termination_word="APPROVE",
on_message_received=lambda message: print(f"{'-'*80}\n{message.source}: {message.content}"),
)
async def main() -> None:
runtime = SingleThreadedAgentRuntime()
coder_reviewer(runtime)
runtime.publish_message(
TextMessage(
content="Write a Python script that find near-duplicate paragraphs in a directory of many text files. "
"Output the file names, line numbers and the similarity score of the near-duplicate paragraphs. ",
source="Human",
)
)
# Start the runtime.
while True:
await runtime.process_next()
await asyncio.sleep(1)
asyncio.run(main())