Attestant
AI compliance for regulated lenders. Validate, approve, monitor, and defend AI-driven models and decisions.
Install
pip install attestant
Quick Start
import attestant
import pandas as pd
# Configure (or set ATTESTANT_API_KEY environment variable)
attestant.configure(api_key="pvt_live_...")
# 1. Declare data sources — provenance tracks automatically
data = attestant.source(pd.read_csv("applicants.csv"), "applicants")
demographics = attestant.source(
pd.read_csv("demographics.csv"), "demographics",
protected=["race", "gender", "age"],
)
# 2. Normal pandas — taint propagation happens behind the scenes
merged = data.merge(demographics, on="id")
X = merged[["income", "credit_score", "dti"]]
y = merged["approved"]
# 3. Validate before deployment
result = attestant.upload(
model=model,
X_test=X, y_test=y,
protected_columns=["race", "gender", "age"],
model_name="credit_approval",
model_version="v2.1",
)
print(result.dashboard_url)
# 4. Gate in production (one line)
attestant.gate("credit_approval", "v2.1")
# 5. Log predictions for monitoring
attestant.log_predictions(
model_name="credit_approval",
model_version="v2.1",
predictions=model.predict_proba(X_new)[:, 1],
features=X_new,
protected_data=demographics_new,
protected_columns=["race", "gender", "age"],
applicant_ids=df["application_id"].tolist(),
)
What It Does
- 41 automated compliance checks across ECOA/Reg B, SR 11-7, and EU AI Act
- Fairness analysis with disparate impact detection and SHAP-based adverse action reason codes
- Model gating -- block unapproved models from production with one line
- Inference monitoring -- track predictions, detect drift, generate alerts
- Decision defense -- reconstruct any individual decision for examiner review
- Data provenance -- automatic lineage tracking through pandas operations
Protected Columns
Mark columns containing protected attributes (race, gender, age, etc.) so Attestant can check for disparate impact and proxy discrimination:
data = attestant.source(df, "applicants", protected=["race", "gender", "age"])
Attestant automatically tracks whether protected data influences predictions -- even through indirect feature engineering.
Age Column Handling
Specify how age data is formatted:
result = attestant.upload(
...,
age_column="applicant_age",
age_format="years", # or: "months", "days", "dob", "birth_year"
)
Vendor Models
Validate vendor/third-party models the same way -- just pass predictions instead of a model:
# Get predictions from vendor API
vendor_predictions = vendor_api.score(X_test)
# Validate with full compliance suite
result = attestant.upload(
predictions=vendor_predictions,
X_test=X_test, y_test=y_test,
protected_columns=["race", "gender", "age"],
model_name="vendor_credit_score",
model_version="v3.2",
)
# Gate and monitor in production
attestant.gate("vendor_credit_score", "v3.2")
attestant.log_predictions(
model_name="vendor_credit_score",
model_version="v3.2",
predictions=vendor_api.score(X_new),
features=X_new,
protected_data=demographics_new,
protected_columns=["race", "gender", "age"],
)
All 41 compliance checks, fairness analysis, model gating, and inference monitoring work identically for vendor models.
CI/CD Integration
export ATTESTANT_API_KEY=pvt_live_...
attestant gate-check --model credit_approval --version v2.1
# Exit 0 = approved, 1 = blocked
Documentation
Full documentation at getattestant.com/docs
License
Apache 2.0
Metadata
Release files for attestant 0.23.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Built distributions (wheels)
Total release size: 47.2 MB
Release files / attestant-0.23.1-cp313-cp313-win_amd64.whl
| Download URL | attestant-0.23.1-cp313-cp313-win_amd64.whl |
|---|---|
| Size | 1.3 MB |
| Tags | CPython 3.13 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
6768346357736f62180d6914c3fb10f96e69aa1eb6d212693b9c8c5250e4e9ab
|
|
BLAKE2b-256 checksum How to use checksums |
6ae0ef5ff9ac14e21b6b118cea64ad66b213c6738a5e190d12f347ecb341f4a0
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Release files / attestant-0.23.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
| Download URL | attestant-0.23.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl |
|---|---|
| Size | 5.2 MB |
| Tags | CPython 3.13 Linux glibc 2.17+ x86-64 |
|
SHA-256 checksum How to use checksums |
6d63e0036f30342122d633022af482931bf25b267ddd6477371b82112f5981c3
|
|
BLAKE2b-256 checksum How to use checksums |
6155521eeddb0dec257d4d7432df4fcbeef1fddd8b48456030743c86d7cc9463
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Release files / attestant-0.23.1-cp313-cp313-macosx_11_0_arm64.whl
| Download URL | attestant-0.23.1-cp313-cp313-macosx_11_0_arm64.whl |
|---|---|
| Size | 1.4 MB |
| Tags | CPython 3.13 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
25f83fab1ffa3d64959b6a7e86fa898b6f233a5931f3cbbc0716533257f792bd
|
|
BLAKE2b-256 checksum How to use checksums |
f3abe5cea9b7dee60e5707947dfd2c20214125aea62de545675452624e629dbb
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Release files / attestant-0.23.1-cp313-cp313-macosx_10_13_x86_64.whl
| Download URL | attestant-0.23.1-cp313-cp313-macosx_10_13_x86_64.whl |
|---|---|
| Size | 1.4 MB |
| Tags | CPython 3.13 macOS 10.13+ x86-64 |
|
SHA-256 checksum How to use checksums |
53c415147defd84f9c89acbfa8c7e5b18dcf66621168dbf6663d3d5fd05440e0
|
|
BLAKE2b-256 checksum How to use checksums |
ae1905b24d5d6e44fb61d33659bd0f5aa46f5ea5925a766e2c6f9339a40f183d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Release files / attestant-0.23.1-cp312-cp312-win_amd64.whl
| Download URL | attestant-0.23.1-cp312-cp312-win_amd64.whl |
|---|---|
| Size | 1.3 MB |
| Tags | CPython 3.12 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
349bfb41df6263e8ee37aec9fb7976977e6d522727cedbc607bb20baec8b3906
|
|
BLAKE2b-256 checksum How to use checksums |
ad5f8e057c6d5fff21a4b21c027c521c07eee667b6680478295afb5a4b8c9a2b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Release files / attestant-0.23.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
| Download URL | attestant-0.23.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl |
|---|---|
| Size | 5.2 MB |
| Tags | CPython 3.12 Linux glibc 2.17+ x86-64 |
|
SHA-256 checksum How to use checksums |
1575e91b5e49bf96fec42bdccfe024e51dedb97e20278d9d9a7f0da681796f14
|
|
BLAKE2b-256 checksum How to use checksums |
55bdf807c47f61b85b9c993c250e1fc26244798751e7c00a9b1b58a371acea46
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Release files / attestant-0.23.1-cp312-cp312-macosx_11_0_arm64.whl
| Download URL | attestant-0.23.1-cp312-cp312-macosx_11_0_arm64.whl |
|---|---|
| Size | 1.4 MB |
| Tags | CPython 3.12 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
613a8e49e458337345cad75beb3671dd01b7d23787abf72f6f67576a5224e648
|
|
BLAKE2b-256 checksum How to use checksums |
2bd13400dc3e3c06305ed8493c910dc9e08f3f33022f4fe9312b0add6844ccfe
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Release files / attestant-0.23.1-cp312-cp312-macosx_10_13_x86_64.whl
| Download URL | attestant-0.23.1-cp312-cp312-macosx_10_13_x86_64.whl |
|---|---|
| Size | 1.4 MB |
| Tags | CPython 3.12 macOS 10.13+ x86-64 |
|
SHA-256 checksum How to use checksums |
7eea4e18ac5f0d860d1f8abb54dfda64dcd72aa5d78b09c815a6289a5e9e2dc2
|
|
BLAKE2b-256 checksum How to use checksums |
77fa431c7e22db6ccb9715dca72d7cf1d2b0448961c6c171ee6be475f408b16e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Release files / attestant-0.23.1-cp311-cp311-win_amd64.whl
| Download URL | attestant-0.23.1-cp311-cp311-win_amd64.whl |
|---|---|
| Size | 1.3 MB |
| Tags | CPython 3.11 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
27203b769ff4928979f00862265622b5b3f9c5596889e7b9b29ae1bb1fbcaea1
|
|
BLAKE2b-256 checksum How to use checksums |
37252e526b7ef0bcd2efa2b56030de2b5b8ed669aa2ff2fb51b0ff19599ee4f5
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Release files / attestant-0.23.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
| Download URL | attestant-0.23.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl |
|---|---|
| Size | 5.4 MB |
| Tags | CPython 3.11 Linux glibc 2.17+ x86-64 |
|
SHA-256 checksum How to use checksums |
d9101e845411bfe9e3747cf9f24cf75fd7288bc9443e4b3027097bf8f7517487
|
|
BLAKE2b-256 checksum How to use checksums |
44cb9fb67b8a6dd0a76ccfe8dcfcedebcd8d4bdd8d651957d8fe1aa75d9baa94
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Release files / attestant-0.23.1-cp311-cp311-macosx_11_0_arm64.whl
| Download URL | attestant-0.23.1-cp311-cp311-macosx_11_0_arm64.whl |
|---|---|
| Size | 1.4 MB |
| Tags | CPython 3.11 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
b1581c3545662a523058a5ef2bba601a891e577d5bde90dd84d914dd4aec9e99
|
|
BLAKE2b-256 checksum How to use checksums |
d874d6775f6398347194b9ef2da5b79ae078727f5e27bd7d15c647874f5a9a9c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Release files / attestant-0.23.1-cp311-cp311-macosx_10_9_x86_64.whl
| Download URL | attestant-0.23.1-cp311-cp311-macosx_10_9_x86_64.whl |
|---|---|
| Size | 1.5 MB |
| Tags | CPython 3.11 macOS 10.9+ x86-64 |
|
SHA-256 checksum How to use checksums |
1dffa8d0f83eaa6f098075cfd232cb28262810fbb25ff38cee268ff61734d251
|
|
BLAKE2b-256 checksum How to use checksums |
02365507022b5bbfeafef3ec113228d966d834d448a2e16f4302f85c0cea2d24
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Release files / attestant-0.23.1-cp310-cp310-win_amd64.whl
| Download URL | attestant-0.23.1-cp310-cp310-win_amd64.whl |
|---|---|
| Size | 1.3 MB |
| Tags | CPython 3.10 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
6ec602305fe64c0193d436a2db96477a7fdf5a4143234cda59f16bfd797838aa
|
|
BLAKE2b-256 checksum How to use checksums |
4fe57eadc17404cba05692405588520355b03c8e047fb3b58b04031c25059f8e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Release files / attestant-0.23.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
| Download URL | attestant-0.23.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl |
|---|---|
| Size | 5.2 MB |
| Tags | CPython 3.10 Linux glibc 2.17+ x86-64 |
|
SHA-256 checksum How to use checksums |
15ae16ccb3b3fc6f15e258d798af2d877ab795680052237ce9a2aaa20ecebdff
|
|
BLAKE2b-256 checksum How to use checksums |
fb7bbf8136016eb6539ba0bb125198d12753b5315fd07506a48f1385e78b5037
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Release files / attestant-0.23.1-cp310-cp310-macosx_11_0_arm64.whl
| Download URL | attestant-0.23.1-cp310-cp310-macosx_11_0_arm64.whl |
|---|---|
| Size | 1.4 MB |
| Tags | CPython 3.10 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
15e42e9b30e59789b8d3cb9c3ac21f56457e05e680850c44caae6dfc3bca175c
|
|
BLAKE2b-256 checksum How to use checksums |
19e7f4ef85722958bbbc37b9dad3c7ed4c1200be8d2a051396f2d07c6cc2dfe6
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Release files / attestant-0.23.1-cp310-cp310-macosx_10_9_x86_64.whl
| Download URL | attestant-0.23.1-cp310-cp310-macosx_10_9_x86_64.whl |
|---|---|
| Size | 1.5 MB |
| Tags | CPython 3.10 macOS 10.9+ x86-64 |
|
SHA-256 checksum How to use checksums |
fa5c3499c273949e772e2b75e8d9c0adc48c5fa6850f4e1834f224ee5e806ea8
|
|
BLAKE2b-256 checksum How to use checksums |
6d905a46a2f0540cbc3639e58cedc237949c4e460180d4b1faae12aad86b8b01
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Release files / attestant-0.23.1-cp39-cp39-win_amd64.whl
| Download URL | attestant-0.23.1-cp39-cp39-win_amd64.whl |
|---|---|
| Size | 1.3 MB |
| Tags | CPython 3.9 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
a73692d40f080567477f11ccdec46fc7bf9cd291afc3359e23157583db55ee8d
|
|
BLAKE2b-256 checksum How to use checksums |
9721280a1aa5fb025d6bf28bba414044de4dbfcb9049e3924bcf8b4f029f918e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Release files / attestant-0.23.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
| Download URL | attestant-0.23.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl |
|---|---|
| Size | 5.2 MB |
| Tags | CPython 3.9 Linux glibc 2.17+ x86-64 |
|
SHA-256 checksum How to use checksums |
ff054660d7f1c8273c46d5d9b5f88ce414044b3bd0bf68dc5aab7ad8529fb529
|
|
BLAKE2b-256 checksum How to use checksums |
b1c59887792c5aeb8b346d09dc3c18f59750c5a1057095fd743b16dfda6a7693
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Release files / attestant-0.23.1-cp39-cp39-macosx_11_0_arm64.whl
| Download URL | attestant-0.23.1-cp39-cp39-macosx_11_0_arm64.whl |
|---|---|
| Size | 1.4 MB |
| Tags | CPython 3.9 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
540b73f6355557579552a4d8d8f8031ebc3a939c2ba2a4f9476da2a1610127d6
|
|
BLAKE2b-256 checksum How to use checksums |
3beed800ddfb6cef06ad5319ea98a621b99ec82253a8a82eff1c79f514cdda12
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Release files / attestant-0.23.1-cp39-cp39-macosx_10_9_x86_64.whl
| Download URL | attestant-0.23.1-cp39-cp39-macosx_10_9_x86_64.whl |
|---|---|
| Size | 1.5 MB |
| Tags | CPython 3.9 macOS 10.9+ x86-64 |
|
SHA-256 checksum How to use checksums |
3a4b9e497451ca74f16d33055316680ed46baf344d1129a197ec63af00b761f4
|
|
BLAKE2b-256 checksum How to use checksums |
e8bb7c3e15f1966c1729a9823aa51bd3266a3b32fdd7a79923f9fe86891b949e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|