LLM Agent Framework with tool execution capabilities
Project description
Acton Agent
A lightweight, flexible Python framework for building LLM agents with tool execution capabilities
⚠️ Experimental Project: This is a personal project currently in an experimental phase. The API may change without notice, and features may be incomplete or unstable. Use at your own discretion.
Acton Agent enables you to build AI agents that can interact with external APIs, execute custom Python functions, and maintain conversation context. With minimal configuration, you can create agents that reason through complex tasks, call tools, and stream responses in real-time.
Quick Start
pip install acton-agent
from acton_agent import Agent, FunctionTool
from acton_agent.client import OpenAIClient
# Create a simple calculator tool
def calculate(a: float, b: float, operation: str) -> float:
ops = {"add": a + b, "subtract": a - b, "multiply": a * b, "divide": a / b}
return ops.get(operation, 0)
# Initialize agent with OpenAI
client = OpenAIClient(api_key="your-key", model="gpt-4o")
agent = Agent(llm_client=client)
# Register the tool
agent.register_tool(FunctionTool(
name="calculator",
description="Perform basic arithmetic operations",
func=calculate,
schema={
"type": "object",
"properties": {
"a": {"type": "number"},
"b": {"type": "number"},
"operation": {"type": "string", "enum": ["add", "subtract", "multiply", "divide"]}
},
"required": ["a", "b", "operation"]
}
))
# Run the agent
result = agent.run("What is 25 multiplied by 4?")
print(result) # "The result of 25 multiplied by 4 is 100."
Key Features
🔧 Flexible Tool System
Create tools from Python functions, HTTP APIs, or custom classes. Organize related tools with ToolSets and shared configuration.
from pydantic import Field
from acton_agent import ToolSet, FunctionTool
from acton_agent.tools import ConfigSchema
# Define configuration schema
class WeatherConfig(ConfigSchema):
api_key: str = Field(..., description="API key for weather service")
# Define tools that use an API key
def get_weather(city: str, api_key: str) -> str:
# api_key will be automatically injected from toolset config
return f"Weather in {city}: Sunny, 72°F"
def get_forecast(city: str, days: int, api_key: str) -> str:
return f"{days}-day forecast for {city}"
# Group related tools with shared configuration
weather_tools = ToolSet(
name="weather",
description="Weather data tools",
tools=[
FunctionTool(
name="current_weather",
description="Get current weather for a city",
func=get_weather,
schema={
"type": "object",
"properties": {"city": {"type": "string"}},
"required": ["city"]
}
),
FunctionTool(
name="forecast",
description="Get weather forecast",
func=get_forecast,
schema={
"type": "object",
"properties": {
"city": {"type": "string"},
"days": {"type": "integer"}
},
"required": ["city", "days"]
}
)
],
config_schema=WeatherConfig,
)
# Set configuration using update_config()
weather_tools.update_config({"api_key": "secret-api-key"})
agent.register_toolset(weather_tools)
🔄 Automatic Retry & Error Handling
Built-in retry logic with exponential backoff for both LLM calls and tool execution.
from acton_agent.agent import RetryConfig
agent = Agent(llm_client=client, retry_config=RetryConfig(max_attempts=5))
💬 Conversation Memory Management
Automatic token-based history truncation to stay within context limits.
from acton_agent import SimpleAgentMemory
agent = Agent(llm_client=client, memory=SimpleAgentMemory(max_history_tokens=8000))
🌊 Streaming Support
Stream agent responses token-by-token for real-time feedback.
from acton_agent.agent import AgentToken
for event in agent.run_stream("Tell me a story"):
if isinstance(event, AgentToken):
print(event.content, end="", flush=True)
🔌 Multi-Provider Support
Works with OpenAI, OpenRouter, and any OpenAI-compatible API.
from acton_agent import OpenRouterClient
client = OpenRouterClient(api_key="your-key", model="anthropic/claude-3-opus")
📝 Configurable Logging
Control logging output with the verbose parameter and customize log levels via environment variables.
# Disable logging (default - no output)
agent = Agent(llm_client=client, verbose=False)
# Enable logging at INFO level
agent = Agent(llm_client=client, verbose=True)
# Set custom log level via environment variable
import os
os.environ['ACTON_LOG_LEVEL'] = 'DEBUG' # TRACE, DEBUG, INFO, SUCCESS, WARNING, ERROR, CRITICAL
agent = Agent(llm_client=client, verbose=True)
Documentation
- Getting Started - Installation and first steps
- Core Concepts - Understanding agents, tools, and memory
- API Reference - Complete API documentation
- Examples - Practical examples from basic to advanced
Examples
Explore complete examples in the examples/ directory:
- Function Tools - Wrap Python functions as agent tools
- Custom Tools - Build custom tool classes
- ToolSet Configuration - Use hidden configuration for API keys and credentials
License
MIT License - see LICENSE file for details.
Disclaimer: This is an experimental project. Use at your own risk. No guarantees about stability, security, or fitness for any particular purpose.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file acton_agent-0.0.22.tar.gz.
File metadata
- Download URL: acton_agent-0.0.22.tar.gz
- Upload date:
- Size: 71.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
cacb320dacb2e09ec8e99202ea43cac4a5793191f6a4a92336cf62e85235b512
|
|
| MD5 |
501021d521bf07bcfa4e2a68746c8da8
|
|
| BLAKE2b-256 |
7e86b3def96867c2697e4d4547eadd6c3ab2358bde6d6efab4beed84f5a70dfd
|
Provenance
The following attestation bundles were made for acton_agent-0.0.22.tar.gz:
Publisher:
python-publish.yml on akstspace/acton-agent
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
acton_agent-0.0.22.tar.gz -
Subject digest:
cacb320dacb2e09ec8e99202ea43cac4a5793191f6a4a92336cf62e85235b512 - Sigstore transparency entry: 776222946
- Sigstore integration time:
-
Permalink:
akstspace/acton-agent@886eaf466aa509d2c33e5dae13bcc83480960d6a -
Branch / Tag:
refs/tags/v0.0.22 - Owner: https://github.com/akstspace
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
python-publish.yml@886eaf466aa509d2c33e5dae13bcc83480960d6a -
Trigger Event:
release
-
Statement type:
File details
Details for the file acton_agent-0.0.22-py3-none-any.whl.
File metadata
- Download URL: acton_agent-0.0.22-py3-none-any.whl
- Upload date:
- Size: 44.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
bc6322b8eadc8accba746c38b650e8d54e0a272f9a588871ca4d4788dd10b1dc
|
|
| MD5 |
796372a5db8c7b8bed9392b8927ab7ef
|
|
| BLAKE2b-256 |
0b1adf6065fa49b403e61d919c16539ceeb3ff32eddacfde98d7a248edb81155
|
Provenance
The following attestation bundles were made for acton_agent-0.0.22-py3-none-any.whl:
Publisher:
python-publish.yml on akstspace/acton-agent
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
acton_agent-0.0.22-py3-none-any.whl -
Subject digest:
bc6322b8eadc8accba746c38b650e8d54e0a272f9a588871ca4d4788dd10b1dc - Sigstore transparency entry: 776222948
- Sigstore integration time:
-
Permalink:
akstspace/acton-agent@886eaf466aa509d2c33e5dae13bcc83480960d6a -
Branch / Tag:
refs/tags/v0.0.22 - Owner: https://github.com/akstspace
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
python-publish.yml@886eaf466aa509d2c33e5dae13bcc83480960d6a -
Trigger Event:
release
-
Statement type: