AEnvironment Python SDK - Production-grade environment for AI agent tools
Project description
AEnv Python SDK
A production-grade Python SDK for managing AI agent tools in containerized environments with MCP protocol support.
Features
- Simple Tool Definition: Create tools with just a decorator
- MCP Protocol Support: Full compatibility with Model Context Protocol using FastMCP
- Containerized Environments: Run tools in isolated, scalable environments
- Production Ready: Built-in error handling, retries, and monitoring
- Streamable HTTP: Uses FastMCP's streamable_http protocol for better performance
- Type Safety: Full type hints and validation
Quick Start
code architecture
aenv/ ├── pyproject.toml ├── src/ │ └── cli/ │ ├── init.py │ ├── cmds/ │ │ ├── init.py │ │ └── cli.py │ └── env/ │ ├── init.py │ └── another_file.py └── README.md
Installation
pip install aenvironment
Creating Tools
Create a Python file with your tools:
# my_tools.py
from aenv import register_tool
@register_tool
def get_weather(location: str, unit: str = "celsius") -> dict:
"""Get weather for a location."""
return {"location": location, "temperature": 22.5, "unit": unit}
@register_tool
async def search_web(query: str, max_results: int = 10) -> list:
"""Search the web."""
return [{"title": f"Result for {query}", "url": "https://example.com"}]
Local Development
Start an MCP server with your tools using FastMCP:
# Start MCP server on http://localhost:8081
python main.py ./my_tools.py
# Start with custom host and port
python main.py ./my_tools.py --host 0.0.0.0 --port 8080
# Start with tools from directory
python main.py ./tools/
# Start with custom server name
python main.py ./tools/ --name my-server
Using Environments
import asyncio
import Environment
async def main():
# Create environment
async with Environment("my-env") as environment:
# List available tools
tools = environment.list_tools()
print("Available tools:", tools)
# Call a tool
result = await environment.call_tool(
"my-env/get_weather",
{"location": "Beijing", "unit": "celsius"}
)
print("Weather:", result.content)
asyncio.run(main())
Architecture
Core Concepts
- Tool: The smallest executable unit with input/output schemas
- Environment: Containerized runtime for tools with lifecycle management
- Registry: Global tool discovery and management
Directory Structure
aenv/
├── core/ # Core SDK components
├── server/ # FastMCP server implementation
├── client/ # API client for backend
└── examples/ # Usage examples
Tool Definition
Tools are defined using the @register_tool decorator:
from aenv import register_tool
from typing import Dict, Any
@register_tool
def my_tool(
param1: str,
param2: int = 42,
param3: bool = False
) -> Dict[str, Any]:
"""
Tool description for LLMs.
Args:
param1: Description of param1
param2: Description of param2 (default: 42)
param3: Description of param3
Returns:
Dictionary with results
"""
return {"result": f"Processed {param1} with {param2}"}
Environment Management
Creating Environments
from aenv import Environment
# Create environment
env = Environment("my-env", scheduler_url="http://localhost:8080")
await env.initialize()
# Use as context manager
async with Environment("my-env") as env:
tools = env.list_tools()
result = await env.call_tool("tool_name", {"arg": "value"})
Configuration
Environment variables:
AENV_SCHEDULER_URL: Default scheduler URLAENV_API_KEY: API key for authenticationAENV_TIMEOUT: Default timeout in seconds
Error Handling
The SDK provides comprehensive error handling:
from env.core import (
ToolError, ToolTimeoutError, EnvironmentError, NetworkError
)
try:
result = await env.call_tool("tool_name", {"arg": "value"})
except ToolTimeoutError as e:
print(f"Tool timed out: {e.timeout}s")
except ToolError as e:
print(f"Tool failed: {e.message}")
except EnvironmentError as e:
print(f"Environment error: {e.message}")
Testing
Run tests:
pip install -e ".[dev]"
pytest tests/
Examples
See the examples/ directory for complete examples:
weather_tools.py: Weather-related toolssearch_tools.py: Web search and analysis tools
Development
Setup
git clone https://github.com/inclusionAI/AEnvironment
cd AEnvironment
pip install -e ".[dev]"
Running Tests
pytest tests/ -v
Code Quality
black aenv/
isort aenv/
mypy aenv/
License
MIT License - see LICENSE file for details.
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 aenvironment-0.1.6.tar.gz.
File metadata
- Download URL: aenvironment-0.1.6.tar.gz
- Upload date:
- Size: 96.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
388c526ee427ac3fdbdfa07cc444095df31da5668f5b03ff89c882500891438f
|
|
| MD5 |
3019a5f9e59863ecfd6803e5ea415bb5
|
|
| BLAKE2b-256 |
392acc1ce728eaf0680838f307ee9ecb9277015f7f212e9e3cd7911c2d32e15d
|
File details
Details for the file aenvironment-0.1.6-py3-none-any.whl.
File metadata
- Download URL: aenvironment-0.1.6-py3-none-any.whl
- Upload date:
- Size: 136.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b0857e5213a8ad153898cdf503cde9edfaa48c6821dd1dce31e6d9bb8cb79547
|
|
| MD5 |
1043c0ca26b0c924d1e7dd228b3c81f8
|
|
| BLAKE2b-256 |
b417b3044edc5b9c4322ce4aa831966e6939e86743e6a74bc3e8c272bdc082dd
|