Official Python SDK for the Aethis developer API — eligibility decisions and ruleset schemas
Project description
Aethis SDK for Python
Official Python SDK for the Aethis developer API — eligibility decisions, ruleset schemas, and stateful decision sessions.
Documentation: docs.aethis.ai · OpenAPI spec · agents via MCP: claude mcp add aethis -- npx -y aethis-mcp
Authoring is in private beta. Decision endpoints are public —
Aethis()works with no key. Authoring endpoints require an invite. The CLI (aethis-cli) is the supported authoring path during the beta — see docs.aethis.ai/recipes/author-a-rule for the test-driven workflow (rulesets cannot publish with a failing test). Request access at aethis.ai/developer-access.
Install
uv add aethis-sdk
# Or, for a standalone venv:
uv pip install aethis-sdk
Python 3.11+. Requires httpx and pydantic. SDK v0.5.0+ ships the composed-rulebook decision surface (decide_rulebook) and rulebook_id on DecideResponse.
Quickstart
Examples below target aethis/uk-fsm/child-eligibility — a live public ruleset (UK Free School Meals, child-eligibility section). Browse all live rulesets with curl https://api.aethis.ai/api/v1/public/rulesets.
Single-ruleset decision endpoints are anonymous on public rulesets — Aethis() works with no key. Composed-rulebook decisions (decide_rulebook) and authoring endpoints require an API key. Pass api_key="ak_live_..." to Aethis(...) for those paths.
One-shot decision (sync)
from aethis_sdk import Aethis
with Aethis() as client:
response = client.decide(
ruleset_id="aethis/uk-fsm/child-eligibility",
field_values={
"child.age": 10,
"child.school_type": "state_funded",
},
)
print(response.decision) # "eligible" | "not_eligible" | "undetermined"
print(response.inputs_hash) # canonical SHA-256 fingerprint of the input set
print(response.decision_id) # per-call audit identifier
print(response.engine_version) # e.g. "aethis-core@0.27.0"
The four audit fields above (inputs_hash, decision_id, decision_time, engine_version) ship in 0.3.2+. Same inputs_hash always produces the same outcome from the same engine_version — store these alongside the decision for a defensible audit trail.
One-shot decision (async)
import asyncio
from aethis_sdk import AsyncAethis
async def main():
async with AsyncAethis() as client:
response = await client.decide(
ruleset_id="aethis/uk-fsm/child-eligibility",
field_values={"child.age": 10, "child.school_type": "state_funded"},
)
print(response.decision)
asyncio.run(main())
Composed rulebook (requires API key — v0.5.0+)
A Rulebook composes multiple rulesets via an outcome_logic expression — e.g. UK FSM's child_eligibility AND (household_criteria OR universal_infant). Hit the whole-form decision with decide_rulebook:
from aethis_sdk import Aethis
with Aethis(api_key="ak_live_...") as client:
response = client.decide_rulebook(
rulebook_id="aethis/uk-fsm",
field_values={
"child.age": 10, "child.year_group": "year_6",
"child.school_type": "state_funded",
"household.receives_universal_credit": True,
"household.annual_net_earnings": 5000,
"household.receives_income_support": False,
"household.receives_income_based_jsa": False,
"household.receives_income_related_esa": False,
"household.receives_child_tax_credit_only": False,
"household.receives_nass_support": False,
"child.is_looked_after": False,
"child.is_care_leaver": False,
},
)
print(response.decision) # "eligible"
print(response.rulebook_id) # "rb_kzZ_td0tbKW_OLRB" (slug resolved)
Rulebook decide is always scope-gated by the engine — anonymous callers get HTTP 401, regardless of rulebook visibility. The decide_rulebook method and the rulebook_id field on DecideResponse ship in SDK v0.5.0. AsyncAethis.decide_rulebook(...) is the async equivalent.
Stateful decision session
Accumulate answers locally and query the API only when needed. Cached until an answer changes. The session does not manage the client — the caller keeps the Aethis context open for the session's lifetime.
from aethis_sdk import Aethis, SyncDecisionSession
RULESET_ID = "aethis/uk-fsm/child-eligibility"
with Aethis() as client:
schema = client.get_schema(RULESET_ID)
session = SyncDecisionSession(RULESET_ID, client, schema)
session.answer("child.school_type", "state_funded")
while (nq := session.next_question()) is not None:
answer = input(f"{nq.question} ")
session.answer(nq.field_id, answer)
print("Eligible:", session.is_eligible())
Note: input() returns a string. For non-string fields (int / bool / enum) coerce the answer before calling session.answer() — the API expects the typed value.
Authoring (requires a key)
with Aethis(api_key="ak_live_...") as client:
# ruleset publishing endpoints — see the Aethis CLI for the
# full authoring workflow:
# https://github.com/Aethis-ai/aethis-cli
...
The async equivalent is DecisionSession — same surface, await on the HTTP methods (decide, is_eligible, next_question, status).
What's included
| Import | Purpose |
|---|---|
Aethis, AsyncAethis |
HTTP clients for /decide, /rulesets/{id}/schema, /me, /rulesets/{id}/explain, /rulesets/{id}/source |
SyncDecisionSession, DecisionSession |
Stateful adapters over the stateless /decide endpoint |
DecideResponse, SchemaResponse, SchemaField, NextQuestion, SectionResult |
Pydantic response models |
AethisError, AethisAPIError, AethisUnavailable, AethisTimeout |
Exception hierarchy |
Configuration
api_key— optional during the developer beta for evaluation endpoints (/decide,/schema,/explain,/source). Required for authoring endpoints (publishing rulesets, etc.). Provisioned via aethis.ai.base_url— defaults tohttps://api.aethis.ai. HTTP is only permitted forlocalhost/127.0.0.1or when passing a testtransport.timeout— per-request, seconds. Defaults to 5.iam_token— optional bearer token for Cloud Run service-to-service auth.
Status
Pre-1.0. The decision surface (/decide, /schema) is stable; authoring endpoints (projects, rulesets, publishing) are not yet exposed here — use the Aethis CLI for those.
Links
- Issue tracker: https://github.com/Aethis-ai/aethis-sdk-python/issues
- API docs: https://aethis.ai
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 aethis_sdk-0.6.0.tar.gz.
File metadata
- Download URL: aethis_sdk-0.6.0.tar.gz
- Upload date:
- Size: 19.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
da29d2afdcb061818b646e936a88682ab931e7b3c90deb17f045ab62af79a1db
|
|
| MD5 |
a054efb5c2ae86f14ccbeb78b95ebdef
|
|
| BLAKE2b-256 |
71f1b7f2af97976551315ff0bd7cc818975eaf136c86940e6632ab30045149e2
|
Provenance
The following attestation bundles were made for aethis_sdk-0.6.0.tar.gz:
Publisher:
publish.yml on Aethis-ai/aethis-sdk-python
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
aethis_sdk-0.6.0.tar.gz -
Subject digest:
da29d2afdcb061818b646e936a88682ab931e7b3c90deb17f045ab62af79a1db - Sigstore transparency entry: 1630439893
- Sigstore integration time:
-
Permalink:
Aethis-ai/aethis-sdk-python@ecd2c3325cdc6fe96793f562726f8519ebe6c5f0 -
Branch / Tag:
refs/tags/v0.6.0 - Owner: https://github.com/Aethis-ai
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@ecd2c3325cdc6fe96793f562726f8519ebe6c5f0 -
Trigger Event:
push
-
Statement type:
File details
Details for the file aethis_sdk-0.6.0-py3-none-any.whl.
File metadata
- Download URL: aethis_sdk-0.6.0-py3-none-any.whl
- Upload date:
- Size: 13.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f0ecef984e01828835c0f9822c854c90595774bd28643bce8c51e8f696a5712e
|
|
| MD5 |
c4a69b4bb5959a95415964a857dc9b43
|
|
| BLAKE2b-256 |
04ff293681c96a1afe2781e2bbeb966003c4453296fe478c487c952e37dd5d8d
|
Provenance
The following attestation bundles were made for aethis_sdk-0.6.0-py3-none-any.whl:
Publisher:
publish.yml on Aethis-ai/aethis-sdk-python
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
aethis_sdk-0.6.0-py3-none-any.whl -
Subject digest:
f0ecef984e01828835c0f9822c854c90595774bd28643bce8c51e8f696a5712e - Sigstore transparency entry: 1630439921
- Sigstore integration time:
-
Permalink:
Aethis-ai/aethis-sdk-python@ecd2c3325cdc6fe96793f562726f8519ebe6c5f0 -
Branch / Tag:
refs/tags/v0.6.0 - Owner: https://github.com/Aethis-ai
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@ecd2c3325cdc6fe96793f562726f8519ebe6c5f0 -
Trigger Event:
push
-
Statement type: