suna/README.md

139 lines
4.3 KiB
Markdown

# AgentPress: LLM Messages[] API on Steroids called "Threads" with automatic Tool Execution and simple state management.
AgentPress is a lightweight, powerful utility for kickstarting your LLM App or AI Agent. It provides a simple way to manage message threads, execute LLM calls, and automatically handle tool interactions.
## Key Features
- **Thread Management**: Easily create, update, and manage message threads.
- **Automatic Tool Execution**: Define tools as Python classes and have them automatically called by the LLM.
- **Flexible LLM Integration**: Uses LiteLLM under the hood, allowing easy switching between different LLM providers.
- **State Management**: JSON-based state persistence for storing information, tool data, and runtime state.
## Installation
```bash
pip install agentpress
```
## Quick Start
1. Set up your environment variables (API keys, etc.) in a `.env` file.
2. Create a simple tool:
```python
from agentpress.tool import Tool, ToolResult, tool_schema
class CalculatorTool(Tool):
@tool_schema({
"name": "add",
"description": "Add two numbers",
"parameters": {
"type": "object",
"properties": {
"a": {"type": "number"},
"b": {"type": "number"}
},
"required": ["a", "b"]
}
})
async def add(self, a: float, b: float) -> ToolResult:
return self.success_response(f"The sum is {a + b}")
```
3. Use the ThreadManager to run a conversation:
```python
import asyncio
from agentpress.thread_manager import ThreadManager
async def main():
manager = ThreadManager()
manager.add_tool(CalculatorTool)
thread_id = await manager.create_thread()
await manager.add_message(thread_id, {"role": "user", "content": "What's 2 + 2?"})
system_message = {"role": "system", "content": "You are a helpful assistant with calculation abilities."}
response = await manager.run_thread(
thread_id=thread_id,
system_message=system_message,
model_name="gpt-4o",
execute_model_tool_calls=True
)
print("Response:", response)
asyncio.run(main())
```
4. Create an autonomous agent with multiple iterations:
```python
import asyncio
from agentpress.thread_manager import ThreadManager
from tools.files_tool import FilesTool
async def run_autonomous_agent(max_iterations=5):
thread_manager = ThreadManager()
thread_id = await thread_manager.create_thread()
thread_manager.add_tool(FilesTool)
system_message = {"role": "system", "content": "You are a helpful assistant that can create, read, update, and delete files."}
for iteration in range(max_iterations):
print(f"Iteration {iteration + 1}/{max_iterations}")
await thread_manager.add_message(thread_id, {"role": "user", "content": "Continue!"})
response = await thread_manager.run_thread(
thread_id=thread_id,
system_message=system_message,
model_name="anthropic/claude-3-5-sonnet-20240620",
temperature=0.7,
max_tokens=4096,
tool_choice="auto",
execute_tools_async=False,
execute_model_tool_calls=True
)
if __name__ == "__main__":
asyncio.run(run_autonomous_agent())
```
This example demonstrates how to create an autonomous agent that runs for a specified number of iterations. It uses the `FilesTool` to
interact with the file system and showcases how to control the behavior of `run_thread` by adjusting parameters like `temperature`,
`max_tokens`, and `tool_choice`. The agent creates files autonomously.
## Development Setup
If you want to contribute or modify the package:
1. Clone the repository:
```bash
git clone https://github.com/kortix-ai/agentpress
cd agentpress
```
2. Install Poetry (if not already installed):
```bash
pip install poetry
```
3. Install dependencies:
```bash
poetry install
```
## Contributing
We welcome contributions to AgentPress! Please feel free to submit issues, fork the repository and send pull requests!
## License
[MIT License](LICENSE)
Built with ❤️ by [Kortix AI Corp](https://www.kortix.ai)