Schema-driven module development framework for AI-perceivable interfaces
Project description
apcore
Schema-driven module development framework for AI-perceivable interfaces.
apcore provides a unified task orchestration framework with strict type safety, access control, middleware pipelines, and built-in observability. It enables you to define modules with structured input/output schemas that are easily consumed by LLMs and other automated systems.
Features
- Schema-driven modules -- Define input/output contracts using Pydantic models with automatic validation
- 10-step execution pipeline -- Context creation, safety checks, ACL enforcement, validation, middleware chains, and execution with timeout support
@moduledecorator -- Turn plain functions into fully schema-aware modules with zero boilerplate- YAML bindings -- Register modules declaratively without modifying source code
- Access control (ACL) -- Pattern-based, first-match-wins rules with wildcard support
- Middleware system -- Composable before/after hooks with error recovery
- Observability -- Tracing (spans), metrics collection, and structured context logging
- Async support -- Seamless sync and async module execution
- Safety guards -- Call depth limits, circular call detection, frequency throttling
Requirements
- Python >= 3.11
Installation
pip install -e .
For development:
pip install -e ".[dev]"
Quick Start
Define a module with the decorator
from apcore import module
@module(description="Add two integers", tags=["math"])
def add(a: int, b: int) -> int:
return a + b
Define a module with a class
from pydantic import BaseModel
from apcore import Context
class GreetInput(BaseModel):
name: str
class GreetOutput(BaseModel):
message: str
class GreetModule:
input_schema = GreetInput
output_schema = GreetOutput
description = "Greet a user"
def execute(self, inputs: dict, context: Context) -> dict:
return {"message": f"Hello, {inputs['name']}!"}
Register and execute
from apcore import Registry, Executor
registry = Registry()
registry.register("greet", GreetModule())
executor = Executor(registry=registry)
result = executor.call("greet", {"name": "Alice"})
# {"message": "Hello, Alice!"}
Add middleware
from apcore import LoggingMiddleware, TracingMiddleware
executor.use(LoggingMiddleware())
executor.use(TracingMiddleware())
Access control
from apcore import ACL, ACLRule
acl = ACL(rules=[
ACLRule(callers=["admin.*"], targets=["*"], effect="allow", description="Admins can call anything"),
ACLRule(callers=["*"], targets=["admin.*"], effect="deny", description="Others cannot call admin modules"),
])
executor = Executor(registry=registry, acl=acl)
Project Structure
src/apcore/
__init__.py # Public API
context.py # Execution context & identity
executor.py # Core execution engine
decorator.py # @module decorator
bindings.py # YAML binding loader
config.py # Configuration
acl.py # Access control
errors.py # Error hierarchy
module.py # Module annotations & metadata
middleware/ # Middleware system
observability/ # Tracing, metrics, logging
registry/ # Module discovery & registration
schema/ # Schema loading, validation, export
utils/ # Utilities
Development
Run tests
pytest
Run tests with coverage
pytest --cov=src/apcore --cov-report=html
Lint and format
ruff check --fix src/ tests/
ruff format src/ tests/
Type check
mypy src/ tests/
📄 License
Apache-2.0
🔗 Links
- Documentation: docs/apcore - Complete documentation
- Website: aipartnerup.com
- GitHub: aipartnerup/apcore
- PyPI: apcore
- Issues: GitHub Issues
- Discussions: GitHub Discussions
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 apcore-0.3.0.tar.gz.
File metadata
- Download URL: apcore-0.3.0.tar.gz
- Upload date:
- Size: 79.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.10
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f461454c03c02749364e88e2877a90b99fa682f47c490b23b27f72524d18dbb3
|
|
| MD5 |
db00c5b707656d9ae7388191428028ec
|
|
| BLAKE2b-256 |
23f5439ed2550202216ee0a7bd734e32dbc5c83788755a268a8ed478724d9295
|
File details
Details for the file apcore-0.3.0-py3-none-any.whl.
File metadata
- Download URL: apcore-0.3.0-py3-none-any.whl
- Upload date:
- Size: 62.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.10
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b99e8f25ac19d65c1862217eb8aaf57b4a3e0146371f2fc2caf5797ad8b62e13
|
|
| MD5 |
fcf4c905905924c329362595a56e96f3
|
|
| BLAKE2b-256 |
55ecc1d53f121f2e6caacee2a67176911b5b8c480d9e435ff57d54a3aaab6fa7
|