Skip to main content

Building blocks for AI Agents

Project description

AgentPress: Building Blocks for AI Agents

AgentPress is a collection of simple, but powerful utilities that serve as building blocks for creating AI agents. Plug, play, and customize.

AgentPress Flow

See How It Works for an explanation of this flow.

Core Components

  • Threads: Manage Messages[] as threads.
  • Tools: Register code as callable tools with definitions in both OpenAPI and XML
  • Response Processing: Support for native-LLM OpenAPI and XML-based tool calling
  • State Management: Thread-safe JSON key-value state management
  • LLM: +100 LLMs using the OpenAI I/O Format powered by LiteLLM

Installation & Setup

  1. Install the package:
pip install agentpress
  1. Initialize AgentPress in your project:
agentpress init

Creates a agentpress directory with all the core utilities. Check out File Overview for explanations of the generated files.

  1. If you selected the example agent during initialization:
    • Creates an agent.py file with a web development agent example
    • Creates a tools directory with example tools:
      • files_tool.py: File operations (create/update files, read directory and load into state)
      • terminal_tool.py: Terminal command execution
    • Creates a workspace directory for the agent to work in

Quick Start

  1. Set up your environment variables in a .env file:
OPENAI_API_KEY=your_key_here
ANTHROPIC_API_KEY=your_key_here
GROQ_API_KEY=your_key_here
  1. Create a calculator tool with OpenAPI schema:
from agentpress.tool import Tool, ToolResult, openapi_schema

class CalculatorTool(Tool):
    @openapi_schema({
        "type": "function",
        "function": {
            "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:
        try:
            result = a + b
            return self.success_response(f"The sum is {result}")
        except Exception as e:
            return self.fail_response(f"Failed to add numbers: {str(e)}")
  1. Or create a tool with XML schema:
from agentpress.tool import Tool, ToolResult, xml_schema

class FilesTool(Tool):
    @xml_schema(
        tag_name="create-file",
        mappings=[
            {"param_name": "file_path", "node_type": "attribute", "path": "."},
            {"param_name": "file_contents", "node_type": "content", "path": "."}
        ],
        example='''
        <create-file file_path="path/to/file">
        File contents go here
        </create-file>
        '''
    )
    async def create_file(self, file_path: str, file_contents: str) -> ToolResult:
        # Implementation here
        pass
  1. Use the Thread Manager with tool execution:
import asyncio
from agentpress.thread_manager import ThreadManager
from calculator_tool import CalculatorTool

async def main():
    # Initialize thread manager and add tools
    manager = ThreadManager()
    manager.add_tool(CalculatorTool)

    # Create a new thread
    thread_id = await manager.create_thread()
    
    # Add your message
    await manager.add_message(thread_id, {
        "role": "user", 
        "content": "What's 2 + 2?"
    })
    
    # Run with streaming and tool execution
    response = await manager.run_thread(
        thread_id=thread_id,
        system_message={
            "role": "system", 
            "content": "You are a helpful assistant with calculation abilities."
        },
        model_name="anthropic/claude-3-5-sonnet-latest",
        execute_tools=True,
        native_tool_calling=True, # Contrary to xml_tool_calling = True
        parallel_tool_execution=True # Will execute tools in parallel, contrary to sequential (one after another)
    )

asyncio.run(main())
  1. View conversation threads in a web UI:
streamlit run agentpress/thread_viewer_ui.py

How It Works

Each AI agent iteration follows a clear, modular flow:

  1. Message & LLM Handling

    • Messages are managed in threads via ThreadManager
    • LLM API calls are made through a unified interface (llm.py)
    • Supports streaming responses for real-time interaction
  2. Response Processing

    • LLM returns both content and tool calls
    • Content is streamed in real-time
    • Tool calls are parsed using either:
      • Standard OpenAPI function calling
      • XML-based tool definitions
      • Custom parsers (extend ToolParserBase)
  3. Tool Execution

    • Tools are executed either:
      • In real-time during streaming (execute_tools_on_stream)
      • After complete response
      • In parallel or sequential order
    • Supports both standard and XML tool formats
    • Extensible through ToolExecutorBase
  4. Results Management

    • Results from both content and tool executions are handled
    • Supports different result formats (standard/XML)
    • Customizable through ResultsAdderBase

This modular architecture allows you to:

  • Use standard OpenAPI function calling
  • Switch to XML-based tool definitions
  • Create custom processors by extending base classes
  • Mix and match different approaches

File Overview

Core Components

agentpress/llm.py

LLM API interface using LiteLLM. Supports 100+ LLMs with OpenAI-compatible format. Includes streaming, retry logic, and error handling.

agentpress/thread_manager.py

Manages conversation threads with support for:

  • Message history management
  • Tool registration and execution
  • Streaming responses
  • Both OpenAPI and XML tool calling patterns

agentpress/tool.py

Base infrastructure for tools with:

  • OpenAPI schema decorator for standard function calling
  • XML schema decorator for XML-based tool calls
  • Standardized ToolResult responses

agentpress/tool_registry.py

Central registry for tool management:

  • Registers both OpenAPI and XML tools
  • Maintains tool schemas and implementations
  • Provides tool lookup and validation

agentpress/state_manager.py

Thread-safe state persistence:

  • JSON-based key-value storage
  • Atomic operations with locking
  • Automatic file handling

Response Processing

agentpress/llm_response_processor.py

Handles LLM response processing with support for:

  • Streaming and complete responses
  • Tool call extraction and execution
  • Result formatting and message management

Standard Processing

  • standard_tool_parser.py: Parses OpenAPI function calls
  • standard_tool_executor.py: Executes standard tool calls
  • standard_results_adder.py: Manages standard results

XML Processing

  • xml_tool_parser.py: Parses XML-formatted tool calls
  • xml_tool_executor.py: Executes XML tool calls
  • xml_results_adder.py: Manages XML results

Philosophy

  • Plug & Play: Start with our defaults, then customize to your needs.
  • Agnostic: Built on LiteLLM, supporting any LLM provider. Minimal opinions, maximum flexibility.
  • Simplicity: Clean, readable code that's easy to understand and modify.
  • No Lock-in: Take full ownership of the code. Copy what you need directly into your codebase.

Contributing

We welcome contributions! Feel free to:

  • Submit issues for bugs or suggestions
  • Fork the repository and send pull requests
  • Share how you've used AgentPress in your projects

Development

  1. Clone:
git clone https://github.com/kortix-ai/agentpress
cd agentpress
  1. Install dependencies:
pip install poetry
poetry install
  1. For quick testing:
pip install -e .

License

MIT License

Built with ❤️ by Kortix AI Corp

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

agentpress-0.1.11.tar.gz (38.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

agentpress-0.1.11-py3-none-any.whl (48.4 kB view details)

Uploaded Python 3

File details

Details for the file agentpress-0.1.11.tar.gz.

File metadata

  • Download URL: agentpress-0.1.11.tar.gz
  • Upload date:
  • Size: 38.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.8.4 CPython/3.12.7 Linux/6.5.0-1025-azure

File hashes

Hashes for agentpress-0.1.11.tar.gz
Algorithm Hash digest
SHA256 71e1dad69c4234fe1bb02fa8e22133f2a51d1bb687a1ff02d9ef0ad71e2aad15
MD5 2062e0ab452997acb9198c65189dcacc
BLAKE2b-256 8ac76c103c9c4ccdd698ac55c756903bc7ec605de2280ffac9d9e27980368f1c

See more details on using hashes here.

File details

Details for the file agentpress-0.1.11-py3-none-any.whl.

File metadata

  • Download URL: agentpress-0.1.11-py3-none-any.whl
  • Upload date:
  • Size: 48.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.8.4 CPython/3.12.7 Linux/6.5.0-1025-azure

File hashes

Hashes for agentpress-0.1.11-py3-none-any.whl
Algorithm Hash digest
SHA256 a403a974a84a619028443fa5db482f5d56f7a39f14c2c1561a4ca02191c75102
MD5 50bb2732df1cdd966055d250fc1f27b4
BLAKE2b-256 8bc2e5ce0d5bd99f31f3ccfdd650b1c96411539c326753423cfeffe8fff83e8f

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page