A Python package for enforcing behavioural contracts in AI agents
Project description
Behavioural Contracts
A Python package for enforcing behavioural contracts in AI agents. This package provides a framework for defining, validating, and enforcing behavioural contracts that ensure AI agents operate within specified constraints and patterns.
Installation
pip install behavioural-contracts
Quick Start
from behavioural_contracts import behavioural_contract, generate_contract
# Define your contract
contract_data = {
"version": "1.1",
"description": "Financial Analyst Agent",
"policy": {
"pii": False,
"compliance_tags": ["EU-AI-ACT"],
"allowed_tools": ["search", "summary"]
},
"behavioural_flags": {
"conservatism": "moderate",
"verbosity": "compact",
"temperature_control": {
"mode": "adaptive",
"range": [0.2, 0.6]
}
},
"response_contract": {
"output_format": {
"type": "object",
"required_fields": [
"decision", "confidence", "summary", "reasoning",
"compliance_tags", "temperature_used"
],
"on_failure": {
"action": "fallback",
"max_retries": 1,
"fallback": {
"decision": "unknown",
"confidence": "low",
"summary": "Recommendation rejected due to validation failure.",
"reasoning": "The model's response failed validation checks."
}
}
},
"max_response_time_ms": 4000,
"behaviour_signature": {
"key": "decision",
"expected_type": "string"
}
}
}
# Generate a formatted contract
contract = generate_contract(contract_data)
# Use the contract with your agent
@behavioural_contract(contract)
def analyst_agent(signal: dict, **kwargs):
return {
"decision": "BUY",
"confidence": "high",
"summary": "Strong buy signal based on technical indicators",
"reasoning": "Multiple indicators show bullish momentum",
"compliance_tags": ["EU-AI-ACT"],
"temperature_used": 0.3 # Required field for temperature validation
}
Key Features
1. Contract Generation
Generate properly formatted contracts from specification data:
from behavioural_contracts import generate_contract
# Basic contract
basic_contract = generate_contract({
"version": "1.1",
"description": "Simple Agent",
"response_contract": {
"output_format": {
"required_fields": ["decision", "confidence", "temperature_used"]
}
}
})
# Contract with policy and response validation
policy_contract = generate_contract({
"version": "1.1",
"description": "Compliant Agent",
"policy": {
"pii": False,
"compliance_tags": ["GDPR", "HIPAA"],
"allowed_tools": ["search", "analyze"]
},
"response_contract": {
"output_format": {
"required_fields": [
"decision", "confidence", "compliance_tags", "temperature_used"
]
},
"max_response_time_ms": 2000
}
})
2. Contract Formatting
Format existing contracts to ensure proper value types:
from behavioural_contracts import format_contract
# Format a contract with mixed types
formatted = format_contract({
"version": 1.1, # Will be converted to string
"description": "My Agent",
"response_contract": {
"output_format": {
"required_fields": ["decision", "temperature_used"]
},
"max_response_time_ms": 1000
}
})
3. Behavioural Contract Decorator
Use the decorator to enforce contracts on your agent functions:
from behavioural_contracts import behavioural_contract
# Using a dictionary
@behavioural_contract({
"version": "1.1",
"description": "Trading Agent",
"policy": {
"pii": False,
"compliance_tags": ["FINRA"]
},
"response_contract": {
"output_format": {
"required_fields": [
"decision", "confidence", "compliance_tags", "temperature_used"
]
}
}
})
def trading_agent(signal: dict, **kwargs):
return {
"decision": "BUY",
"confidence": "high",
"compliance_tags": ["FINRA"],
"temperature_used": 0.3
}
4. Response Validation
The contract system enforces response validation including:
- Required fields
- Temperature range validation
- Response time limits
- Compliance tag verification
- PII detection
- Tool usage validation
@behavioural_contract({
"version": "1.1",
"description": "Validated Agent",
"behavioural_flags": {
"temperature_control": {
"range": [0.2, 0.6]
}
},
"response_contract": {
"output_format": {
"required_fields": [
"decision", "confidence", "temperature_used"
]
},
"max_response_time_ms": 1000
}
})
def validated_agent(signal: dict, **kwargs):
# Response will be validated for:
# - All required fields present
# - Temperature within range
# - Response time under 1000ms
return {
"decision": "APPROVE",
"confidence": "high",
"temperature_used": 0.3
}
Contract Structure
A behavioural contract consists of several key sections:
-
Basic Information
version: Contract versiondescription: Agent description
-
Policy Settings
pii: PII handling flagcompliance_tags: Required compliance tagsallowed_tools: List of allowed tools
-
Behavioural Flags
conservatism: Agent conservatism levelverbosity: Output verbositytemperature_control: Temperature settingsmode: Control mode (fixed/adaptive)range: Allowed temperature range [min, max]
-
Response Contract
output_format: Response structure requirementstype: Output type (usually "object")required_fields: List of required fieldson_failure: Fallback configuration
max_response_time_ms: Maximum allowed response timebehaviour_signature: Key field to track for suspicious behavior
Python Installation
Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
License
This project is licensed under the MIT License - see the LICENSE file for details.
Overview
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
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 behavioural_contracts-0.1.2.tar.gz.
File metadata
- Download URL: behavioural_contracts-0.1.2.tar.gz
- Upload date:
- Size: 17.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.0.1 CPython/3.12.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b2c74f59005e54cdac0556308335b4813a1df131aab3d7f64367120b41636d0e
|
|
| MD5 |
ff1e4e44e538419bc923e0acca9e9838
|
|
| BLAKE2b-256 |
e88ec74b14a09812dba4c9c277863e2418e8590239a9fa3fbbe9528145ee1d70
|
File details
Details for the file behavioural_contracts-0.1.2-py3-none-any.whl.
File metadata
- Download URL: behavioural_contracts-0.1.2-py3-none-any.whl
- Upload date:
- Size: 17.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.0.1 CPython/3.12.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
22c1dc4e95fa7488f78378f34dc877817528138b744565ca9e431e9419341757
|
|
| MD5 |
8802b8aa9eb2860f172c5da53e01db61
|
|
| BLAKE2b-256 |
07abe38dc6b295b91e37608e6b8b12baa28a5bd1a5b288c0980f3f5b7baaf68c
|