Quickstart
Install the SDK
pip install ./axiom-sdk/python
For OpenTimestamps anchoring:
pip install ./axiom-sdk/python[anchoring]
Create a record
from axiom_sdk import Record
record = Record.create(
kind="model.deployed",
subject_id="model-123",
subject_type="model",
payload={"environment": "prod", "traffic_pct": 100},
previous_hash=None,
)
print(record.to_json())
Verify a chain
axiom verify ./records.json
axiom anchor --path ./records.json --output ./records.ots
Build a federated anchor manifest
[
{
"participant_id": "tenant-alpha",
"record_hash": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"scope": "prod"
},
{
"participant_id": "tenant-bravo",
"record_hash": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
"scope": "prod"
}
]
axiom federated-build --input ./members.json --output ./federated-manifest.json
axiom federated-verify \
--manifest ./federated-manifest.json \
--participant-id tenant-alpha \
--record-hash aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa \
--scope prod
The manifest stores blinded per-member commitments plus Merkle proofs. Each tenant can present only their own participant_id, record_hash, nonce, and proof path.
Use the GitHub Action
- uses: ./axiom-sdk/github-action
with:
endpoint: ${{ secrets.AXIOM_ENDPOINT }}
api-token: ${{ secrets.AXIOM_TOKEN }}
kind: model.deployed
subject-id: model-123
subject-type: model
payload-file: ./build/axiom-payload.json
Provider middleware
from axiom_sdk import Client, wrap_anthropic_client
ledger = Client("https://ledger.example.com", token="secret")
anthropic = wrap_anthropic_client(anthropic, ledger)
reply = anthropic.messages.create(
model="claude-3-7-sonnet",
max_tokens=256,
messages=[{"role": "user", "content": "Summarize the policy"}],
)
Each wrapped call writes an AEF record with request summary, response summary, and provider error details when the upstream call fails.
Framework integrations
LangChain
from axiom_sdk import Client, LangChainAxiomCallbackHandler
ledger = Client("https://ledger.example.com", token="secret")
handler = LangChainAxiomCallbackHandler(ledger)
LlamaIndex
from axiom_sdk import Client, LlamaIndexAxiomCallbackHandler
ledger = Client("https://ledger.example.com", token="secret")
handler = LlamaIndexAxiomCallbackHandler(ledger)
Haystack
from axiom_sdk import Client, wrap_haystack_component
ledger = Client("https://ledger.example.com", token="secret")
generator = wrap_haystack_component(generator, ledger)