suna/agent.py

89 lines
2.6 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import asyncio
import json
from agentpress.thread_manager import ThreadManager
from tools.files_tool import FilesTool
from state_manager import StateManager
async def run_agent(
thread_manager: ThreadManager,
thread_id: int,
state_manager: StateManager,
max_iterations: int = 10
):
async def init():
pass
async def pre_iteration():
pass
async def after_iteration():
await thread_manager.add_message(thread_id, {"role": "user", "content": "CREATE MORE RANDOM FILES WITH RANDOM CONTENTS. JSUT CREATE IT NO QUESTINS PLEASE.'"})
pass
async def finalizer():
pass
await init()
iteration = 0
while iteration < max_iterations:
iteration += 1
await pre_iteration()
# Get entire state store
state = await state_manager.export_store()
state_info = f"Current state store:\n{json.dumps(state, indent=2)}"
system_message = {
"role": "system",
"content": f"You are a helpful assistant that can create, read, update, and delete files.\n\n{state_info}"
}
model_name = "gpt-4o"
# Include entire state in additional message
# additional_message = {
# "role": "user",
# "content": state_info
# }
response = await thread_manager.run_thread(
thread_id=thread_id,
system_message=system_message,
model_name=model_name,
temperature=0.7,
max_tokens=150,
tool_choice="auto",
# additional_message=additional_message,
execute_tools_async=False,
use_tools=True,
execute_model_tool_calls=True
)
await after_iteration()
await finalizer()
if __name__ == "__main__":
async def main():
thread_manager = ThreadManager()
state_manager = StateManager("state.json")
thread_id = await thread_manager.create_thread()
# Read current file contents
files = await state_manager.get("files")
await thread_manager.add_message(thread_id, {"role": "user", "content": "Please create a file with a random name with the content 'Hello, world!'"})
thread_manager.add_tool(FilesTool)
await run_agent(
thread_manager=thread_manager,
thread_id=thread_id,
state_manager=state_manager,
max_iterations=5
)
asyncio.run(main())