Skip to main content

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 URL
  • AENV_API_KEY: API key for authentication
  • AENV_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 tools
  • search_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


Download files

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

Source Distribution

aenvironment-0.1.8rc1.tar.gz (98.2 kB view details)

Uploaded Source

Built Distribution

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

aenvironment-0.1.8rc1-py3-none-any.whl (138.9 kB view details)

Uploaded Python 3

File details

Details for the file aenvironment-0.1.8rc1.tar.gz.

File metadata

  • Download URL: aenvironment-0.1.8rc1.tar.gz
  • Upload date:
  • Size: 98.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for aenvironment-0.1.8rc1.tar.gz
Algorithm Hash digest
SHA256 aec964c3a8308276fb49f2d7260eab390bf6f7842624f46f7f40f271a82ea7f8
MD5 84b0185f5e77a8fd4516ddf78d5ade02
BLAKE2b-256 753815831bdcb1eaf28e2c476e64006807d09bd0d9131a5b0e471d813cd729a3

See more details on using hashes here.

File details

Details for the file aenvironment-0.1.8rc1-py3-none-any.whl.

File metadata

  • Download URL: aenvironment-0.1.8rc1-py3-none-any.whl
  • Upload date:
  • Size: 138.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for aenvironment-0.1.8rc1-py3-none-any.whl
Algorithm Hash digest
SHA256 45730c398e9d6a77356192eead3512123b7df539e71d1d5331c8e4b50b0dcb4b
MD5 1a9c2873f27eec761ef013593a317cd0
BLAKE2b-256 7ece4677aed92d65f83a9aaca7ebb40aee54b58ed4b33aba0579e0afb032872c

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