# AI Audit Trail SDK - Python
Drop-in SDK for logging AI/ML decisions with compliance tracking. Get GDPR and EU AI Act compliant audit trails in under 15 minutes.
## Installation
```bash
pip install ai-audit-sdk
```
## Quick Start
```python
from ai_audit_sdk import AuditLogger
import openai
```python
# Initialize the logger with your API key
logger = AuditLogger(api_key="your_api_key")
```
For development and testing, use your sandbox API key:
```python
# Development/Testing with sandbox tenant
logger = AuditLogger(api_key="your_sandbox_api_key")
```
# Your existing OpenAI code
client = openai.OpenAI()
response = client.chat.completions.create(
model="gpt-4",
messages=[{"role": "user", "content": "Hello, world!"}]
)
# Log the decision for compliance
logger.log_decision(
input_text="Hello, world!",
output_text=response.choices[0].message.content,
model_name="gpt-4",
metadata={
"user_id": "user123",
"session_id": "session456"
}
)
```
## Features
- **Asynchronous Logging**: Won't slow down your application
- **Compliance Ready**: GDPR Article 22 and EU AI Act support
- **Multi-Model Support**: Works with any AI/ML model
- **Secure**: API key authentication with encrypted transmission
- **Reliable**: Built-in error handling and timeout management
## API Reference
### AuditLogger
Main class for logging AI decisions.
```python
logger = AuditLogger(api_key="your_key")
```
**Production:**
```python
logger = AuditLogger(api_key="prod_api_key_xxx")
```
**Development/Testing:**
```python
logger = AuditLogger(api_key="sandbox_api_key_xxx")
```
> **Note**: All traffic goes through the production infrastructure at `https://explainableai.azurewebsites.net`. Tenant isolation is handled via API keys, not URLs.
#### Methods
##### `log_decision(input_text, output_text, ...)`
Log an AI decision asynchronously (recommended).
```python
logger.log_decision(
input_text="The input prompt",
output_text="The AI response",
model_name="gpt-4", # optional, defaults to 'unknown'
metadata={ # optional
"user_id": "user123",
"session_id": "session456",
"tags": ["production", "chat"]
},
confidence=0.95, # optional, 0.0 to 1.0
response_time=1200, # optional, in milliseconds
provider="openai", # optional
model_version="2024-02-01", # optional
risk_level="low", # optional: 'low', 'medium', 'high'
prompt_tokens=100, # optional
completion_tokens=50, # optional
total_tokens=150, # optional
cost_micros=1000, # optional, cost in millionths of currency unit
external_ref="req_123", # optional, your internal reference
data_subject_id="user_123", # optional, for GDPR compliance
lawful_basis="consent", # optional, GDPR lawful basis
automated_decision=True, # optional, GDPR Article 22
redact_pii=False, # optional, redact PII from stored data
priority="normal" # optional: 'low', 'normal', 'high'
)
```
Log an AI decision asynchronously (recommended).
**Parameters:**
- `input_text` (str): The input prompt or data
- `output_text` (str): The AI model's output
- `model_name` (str): Name of the AI model used
- `metadata` (dict): Additional context (user_id, session_id, etc.)
- `confidence` (float): Model confidence score (0.0 to 1.0)
- `response_time` (int): Response time in milliseconds
##### `log_decision_sync(...)`
Same as `log_decision()` but blocks until complete. Returns `True` if successful.
### Simple Function
For one-off logging:
```python
from ai_audit_sdk import log_ai_decision
log_ai_decision(
api_key="your_key",
input_text="prompt",
output_text="response",
model_name="gpt-4"
)
```
## Configuration
Set your API key as an environment variable:
```bash
export AI_AUDIT_API_KEY="your_api_key"
```
Then use it in your code:
```python
import os
from ai_audit_sdk import AuditLogger
logger = AuditLogger(api_key=os.getenv("AI_AUDIT_API_KEY"))
```
## Error Handling
The SDK uses fire-and-forget async logging by default. Errors are logged to stdout but won't crash your application.
For critical applications, use synchronous logging:
```python
success = logger.log_decision_sync(input_text, output_text)
if not success:
# Handle logging failure
print("Failed to log decision")
```
## Examples
### OpenAI Integration
```python
import openai
from ai_audit_sdk import AuditLogger
logger = AuditLogger(api_key="your_audit_key")
client = openai.OpenAI(api_key="your_openai_key")
def get_ai_response(prompt, user_id):
start_time = time.time()
response = client.chat.completions.create(
model="gpt-4",
messages=[{"role": "user", "content": prompt}]
)
response_time = int((time.time() - start_time) * 1000)
# Log for compliance
logger.log_decision(
input_text=prompt,
output_text=response.choices[0].message.content,
model_name="gpt-4",
metadata={"user_id": user_id},
response_time=response_time
)
return response.choices[0].message.content
```
### Context Manager
```python
with AuditLogger(api_key="your_key") as logger:
logger.log_decision("input", "output", "model")
# Logger automatically closes when exiting the context
```
## License
MIT License
Raw data
{
"_id": null,
"home_page": "https://github.com/aiaudit/python-sdk",
"name": "ai-audit-sdk",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.7",
"maintainer_email": "AI Audit Trail <support@explainable-ai.dev>",
"keywords": "ai, audit, compliance, gdpr, ai-act, logging, ml, openai",
"author": "AI Audit Trail",
"author_email": "AI Audit Trail <support@explainable-ai.dev>",
"download_url": "https://files.pythonhosted.org/packages/a3/20/088adc758dce689259154648f5db6dcc526be17c604055bd5a648c90b915/ai_audit_sdk-1.0.0.tar.gz",
"platform": null,
"description": "# AI Audit Trail SDK - Python\n\nDrop-in SDK for logging AI/ML decisions with compliance tracking. Get GDPR and EU AI Act compliant audit trails in under 15 minutes.\n\n## Installation\n\n```bash\npip install ai-audit-sdk\n```\n\n## Quick Start\n\n```python\nfrom ai_audit_sdk import AuditLogger\nimport openai\n\n```python\n# Initialize the logger with your API key\nlogger = AuditLogger(api_key=\"your_api_key\")\n```\n\nFor development and testing, use your sandbox API key:\n```python\n# Development/Testing with sandbox tenant\nlogger = AuditLogger(api_key=\"your_sandbox_api_key\")\n```\n\n# Your existing OpenAI code\nclient = openai.OpenAI()\nresponse = client.chat.completions.create(\n model=\"gpt-4\",\n messages=[{\"role\": \"user\", \"content\": \"Hello, world!\"}]\n)\n\n# Log the decision for compliance\nlogger.log_decision(\n input_text=\"Hello, world!\",\n output_text=response.choices[0].message.content,\n model_name=\"gpt-4\",\n metadata={\n \"user_id\": \"user123\",\n \"session_id\": \"session456\"\n }\n)\n```\n\n## Features\n\n- **Asynchronous Logging**: Won't slow down your application\n- **Compliance Ready**: GDPR Article 22 and EU AI Act support\n- **Multi-Model Support**: Works with any AI/ML model\n- **Secure**: API key authentication with encrypted transmission\n- **Reliable**: Built-in error handling and timeout management\n\n## API Reference\n\n### AuditLogger\n\nMain class for logging AI decisions.\n\n```python\nlogger = AuditLogger(api_key=\"your_key\")\n```\n\n**Production:**\n```python\nlogger = AuditLogger(api_key=\"prod_api_key_xxx\")\n```\n\n**Development/Testing:**\n```python\nlogger = AuditLogger(api_key=\"sandbox_api_key_xxx\")\n```\n\n> **Note**: All traffic goes through the production infrastructure at `https://explainableai.azurewebsites.net`. Tenant isolation is handled via API keys, not URLs.\n\n#### Methods\n\n##### `log_decision(input_text, output_text, ...)`\n\nLog an AI decision asynchronously (recommended).\n\n```python\nlogger.log_decision(\n input_text=\"The input prompt\",\n output_text=\"The AI response\",\n model_name=\"gpt-4\", # optional, defaults to 'unknown'\n metadata={ # optional\n \"user_id\": \"user123\",\n \"session_id\": \"session456\",\n \"tags\": [\"production\", \"chat\"]\n },\n confidence=0.95, # optional, 0.0 to 1.0\n response_time=1200, # optional, in milliseconds\n provider=\"openai\", # optional\n model_version=\"2024-02-01\", # optional\n risk_level=\"low\", # optional: 'low', 'medium', 'high'\n prompt_tokens=100, # optional\n completion_tokens=50, # optional\n total_tokens=150, # optional\n cost_micros=1000, # optional, cost in millionths of currency unit\n external_ref=\"req_123\", # optional, your internal reference\n data_subject_id=\"user_123\", # optional, for GDPR compliance\n lawful_basis=\"consent\", # optional, GDPR lawful basis\n automated_decision=True, # optional, GDPR Article 22\n redact_pii=False, # optional, redact PII from stored data\n priority=\"normal\" # optional: 'low', 'normal', 'high'\n)\n```\n\nLog an AI decision asynchronously (recommended).\n\n**Parameters:**\n- `input_text` (str): The input prompt or data\n- `output_text` (str): The AI model's output\n- `model_name` (str): Name of the AI model used\n- `metadata` (dict): Additional context (user_id, session_id, etc.)\n- `confidence` (float): Model confidence score (0.0 to 1.0)\n- `response_time` (int): Response time in milliseconds\n\n##### `log_decision_sync(...)` \n\nSame as `log_decision()` but blocks until complete. Returns `True` if successful.\n\n### Simple Function\n\nFor one-off logging:\n\n```python\nfrom ai_audit_sdk import log_ai_decision\n\nlog_ai_decision(\n api_key=\"your_key\",\n input_text=\"prompt\",\n output_text=\"response\",\n model_name=\"gpt-4\"\n)\n```\n\n## Configuration\n\nSet your API key as an environment variable:\n\n```bash\nexport AI_AUDIT_API_KEY=\"your_api_key\"\n```\n\nThen use it in your code:\n\n```python\nimport os\nfrom ai_audit_sdk import AuditLogger\n\nlogger = AuditLogger(api_key=os.getenv(\"AI_AUDIT_API_KEY\"))\n```\n\n## Error Handling\n\nThe SDK uses fire-and-forget async logging by default. Errors are logged to stdout but won't crash your application.\n\nFor critical applications, use synchronous logging:\n\n```python\nsuccess = logger.log_decision_sync(input_text, output_text)\nif not success:\n # Handle logging failure\n print(\"Failed to log decision\")\n```\n\n## Examples\n\n### OpenAI Integration\n\n```python\nimport openai\nfrom ai_audit_sdk import AuditLogger\n\nlogger = AuditLogger(api_key=\"your_audit_key\")\nclient = openai.OpenAI(api_key=\"your_openai_key\")\n\ndef get_ai_response(prompt, user_id):\n start_time = time.time()\n \n response = client.chat.completions.create(\n model=\"gpt-4\",\n messages=[{\"role\": \"user\", \"content\": prompt}]\n )\n \n response_time = int((time.time() - start_time) * 1000)\n \n # Log for compliance\n logger.log_decision(\n input_text=prompt,\n output_text=response.choices[0].message.content,\n model_name=\"gpt-4\",\n metadata={\"user_id\": user_id},\n response_time=response_time\n )\n \n return response.choices[0].message.content\n```\n\n### Context Manager\n\n```python\nwith AuditLogger(api_key=\"your_key\") as logger:\n logger.log_decision(\"input\", \"output\", \"model\")\n # Logger automatically closes when exiting the context\n```\n\n## License\n\nMIT License\n",
"bugtrack_url": null,
"license": "MIT",
"summary": "SDK for logging AI/ML decisions with compliance tracking",
"version": "1.0.0",
"project_urls": {
"Documentation": "https://docs.aiaudit.com",
"Homepage": "https://github.com/appdroidinc/TrailJustifier",
"Issues": "https://github.com/appdroidinc/TrailJustifier/issues",
"Repository": "https://github.com/appdroidinc/TrailJustifier"
},
"split_keywords": [
"ai",
" audit",
" compliance",
" gdpr",
" ai-act",
" logging",
" ml",
" openai"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "8db8185fa7236b03d08d8f9ea37d26684ac7ae837ba982a4a8ed136125c0c73b",
"md5": "072cb28ddd8d3432a72a1c8813e7b650",
"sha256": "eb0f43c5e974fa13b4f0b894d13f815ab1437b70414b92fcc6c9956e144cd9b6"
},
"downloads": -1,
"filename": "ai_audit_sdk-1.0.0-py3-none-any.whl",
"has_sig": false,
"md5_digest": "072cb28ddd8d3432a72a1c8813e7b650",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.7",
"size": 11375,
"upload_time": "2025-09-09T22:39:06",
"upload_time_iso_8601": "2025-09-09T22:39:06.711411Z",
"url": "https://files.pythonhosted.org/packages/8d/b8/185fa7236b03d08d8f9ea37d26684ac7ae837ba982a4a8ed136125c0c73b/ai_audit_sdk-1.0.0-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "a320088adc758dce689259154648f5db6dcc526be17c604055bd5a648c90b915",
"md5": "7298a92f72556e8d8d991a72d3c9d46c",
"sha256": "382d5cf31c04ff25fd2883cf8bb2d3c94dd2a01acc527de05cce622b1ce370f9"
},
"downloads": -1,
"filename": "ai_audit_sdk-1.0.0.tar.gz",
"has_sig": false,
"md5_digest": "7298a92f72556e8d8d991a72d3c9d46c",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.7",
"size": 12471,
"upload_time": "2025-09-09T22:39:08",
"upload_time_iso_8601": "2025-09-09T22:39:08.154969Z",
"url": "https://files.pythonhosted.org/packages/a3/20/088adc758dce689259154648f5db6dcc526be17c604055bd5a648c90b915/ai_audit_sdk-1.0.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-09-09 22:39:08",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "aiaudit",
"github_project": "python-sdk",
"github_not_found": true,
"lcname": "ai-audit-sdk"
}