mirror of https://github.com/kortix-ai/suna.git
89 lines
2.6 KiB
Python
89 lines
2.6 KiB
Python
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())
|