Skip to main content

band-sdk-core

Shared Band event-payload validation, memory-taxonomy, and inbound-delivery runtime state, compiled from Rust into a native Python extension (import band_sdk_core). Every function is synchronous, pure computation — no network, filesystem, or logging.

band-sdk-core-core (Rust)  -->  band-sdk-core (this package, PyPI)  -->  band-sdk-python

If you're using band-sdk-python, it already depends on this package — you don't need to install it yourself. Install it directly only if you're calling into it without that SDK. Full picture: repository architecture.

Install

pip install band-sdk-core

Wheels are prebuilt (abi3, Python >= 3.11) for Linux (manylinux/musllinux, x86_64/aarch64), macOS (arm64/x86_64), and Windows (amd64/arm64) — no Rust toolchain needed to install.

Quickstart

import band_sdk_core

try:
    payload = band_sdk_core.validate_event_payload("room_deleted", {"id": "room-1"})
except ValueError as e:
    for path, code, message in e.issues:
        print(f"{path}: {code} - {message}")

validate_event_payload is the platform's inbound WebSocket payload policy: normalize a well-formed payload, or reject a malformed one with every violation reported at once, never just the first.

Public surface

validate_event_payload(event_type, raw, trace_context=None)

event_type is a platform name ("message_created", "agent.control", …) or an EventType. raw is a JSON-shaped Python value. Success returns the normalized payload (event_created returns the input unchanged). Failure raises ValueError with .args == (message,) (str(e) is ordinary), .issues (a tuple of (path, code, message)), and .trace_context. There is no custom exception class.

EventType

The closed set of inbound event names.

Delivery-state runtime classes

ClaimRegistry, RetryTracker, ParticipantRoster, and SubscriptionTracker are the inbound-delivery runtime state classes — lifecycle and design decisions live as rustdoc on each type in crates/core/src/runtime/.

A participant is any mapping; add/set_all read id, name, type, handle, description from it and list() returns dicts with exactly those five keys. id is required and must be a string; the other four are each a string or None. A non-mapping value, a missing/non-string id, or another field that is not a string or None raises TypeError. set_all takes an optional trace_context and raises ValueError — leaving the roster unchanged, with .issues and .trace_context attached like validate_event_payload's error — if its snapshot names the same id twice. RetryTracker's max_tracked must be at least 1; 0 raises ValueError. ClaimRegistry's max_completed must be at least 1 too — 0 also raises ValueError.

SubscriptionTracker provides synchronous, transport-independent decisions for agent-topic joins and the two-topic room subscription transaction. It returns opaque integer tickets; callers supply the matching ticket when recording each completion. Failed rollbacks and failed or unknown leaves require explicit reconciliation before a fresh claim is allowed.

SubscriptionTracker lifecycle

from band_sdk_core import LeaveOutcome, RoomStatus, RoomSubscribeResult, SubscriptionTracker

tracker = SubscriptionTracker()
ticket = tracker.begin_room_subscribe("room-1")
if ticket is None:
    raise RuntimeError("room is not claimable")

result = tracker.record_room_participants_join_failed("room-1", ticket, False)
if result is RoomSubscribeResult.RollbackFailed:
    assert tracker.room_status("room-1") is RoomStatus.NeedsReconciliation
    assert tracker.acknowledge_room_reconciled("room-1") is True
    ticket = tracker.begin_room_subscribe("room-1")
    assert ticket is not None
    assert tracker.record_both_room_topics_joined("room-1", ticket) is RoomSubscribeResult.Subscribed
    leave_ticket = tracker.unsubscribe_room("room-1")
    assert leave_ticket is not None
    assert tracker.mark_room_leave_complete("room-1", leave_ticket, LeaveOutcome.Left) is True
else:
    match result:
        case (
            RoomSubscribeResult.Subscribed
            | RoomSubscribeResult.JoinFailed
            | RoomSubscribeResult.RolledBack
            | RoomSubscribeResult.Stale
        ):
            pass
        case _:
            raise AssertionError(f"unhandled subscription result: {result}")

Session — WebSocket reconnect state machine

Session/SessionPolicy are a sans-io session state machine plus reconnect backoff/jitter policy; classify_close/classify_upgrade classify a WebSocket close code or HTTP upgrade-rejection status. Session never sleeps, connects, or closes a socket itself — the caller drives its own transport and reports what happened through on_connected/ on_socket_close/on_upgrade_rejected/on_supersede. Decisions live as rustdoc in crates/core/src/runtime/session.rs.

Session lifecycle

from band_sdk_core import Session, SessionPolicy, SessionState

session = Session(SessionPolicy.default())
epoch = session.begin_attempt(0.0)
assert epoch is not None

connected = session.on_connected(epoch, 0.0)
assert connected.state is SessionState.Up

disconnected = session.on_socket_close(epoch, 5.0, 1006, 0.5)
assert disconnected.state is SessionState.Reconnecting
assert disconnected.retry_after_s is not None

Memory taxonomy

MemorySystem, MemoryType, MemorySegment, MemoryStoreScope, MemoryListScope, MemoryStatus are the canonical memory taxonomy — design decisions live as rustdoc in crates/core/src/memory.rs. Each is a closed set with a wire_name property and a from_wire_name static method (None for an unrecognized string), mirroring EventType.

validate_memory_type_for_system(system, memory_type, trace_context=None)

system/memory_type are each a wire-name string or the matching MemorySystem/MemoryType instance (mirroring validate_event_payload's acceptance of either an event name or an EventType), and it returns None on success. Failure raises ValueError with the same .issues/.trace_context contract as validate_event_payload — an unrecognized system and an unrecognized memory_type are independent issues, both reported when both strings are invalid.

Values across the language boundary

JSON objects become Python dicts. JSON null becomes None. An explicit null stays distinct from an absent key — a distinction the payload validator uses. Values that cannot be converted raise TypeError, which except Exception catches.

Build / test

just check type-checks and lints this crate. Linking the extension happens through uv / maturin (just test-py, just build-py), not cargo test.

just test-py     # uv sync, pytest, isolated wheel install
just build-py    # uv build (wheel only)

Wheels are platform-specific. Recipes use uv and honor UV_PYTHON, or PYTHON / PYTHON_BIN. Windows builds need the MSVC toolchain rustup's default host target uses.

The wheel is abi3 for Python >= 3.11. Typed stubs are band_sdk_core.pyi plus an empty py.typed. just test-py checks they match the runtime package and that they ship in the wheel.

License

MIT — see LICENSE.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

band_sdk_core-1.2.1-cp311-abi3-win_arm64.whl (315.0 kB view details)

Uploaded CPython 3.11+Windows ARM64

band_sdk_core-1.2.1-cp311-abi3-win_amd64.whl (331.3 kB view details)

Uploaded CPython 3.11+Windows x86-64

band_sdk_core-1.2.1-cp311-abi3-musllinux_1_2_x86_64.whl (721.2 kB view details)

Uploaded CPython 3.11+musllinux: musl 1.2+ x86-64

band_sdk_core-1.2.1-cp311-abi3-musllinux_1_2_aarch64.whl (685.2 kB view details)

Uploaded CPython 3.11+musllinux: musl 1.2+ ARM64

band_sdk_core-1.2.1-cp311-abi3-manylinux_2_28_x86_64.whl (508.6 kB view details)

Uploaded CPython 3.11+manylinux: glibc 2.28+ x86-64

band_sdk_core-1.2.1-cp311-abi3-manylinux_2_28_aarch64.whl (508.7 kB view details)

Uploaded CPython 3.11+manylinux: glibc 2.28+ ARM64

band_sdk_core-1.2.1-cp311-abi3-macosx_11_0_arm64.whl (458.4 kB view details)

Uploaded CPython 3.11+macOS 11.0+ ARM64

band_sdk_core-1.2.1-cp311-abi3-macosx_10_12_x86_64.whl (456.5 kB view details)

Uploaded CPython 3.11+macOS 10.12+ x86-64

File details

Details for the file band_sdk_core-1.2.1-cp311-abi3-win_arm64.whl.

File metadata

File hashes

Hashes for band_sdk_core-1.2.1-cp311-abi3-win_arm64.whl
Algorithm Hash digest
SHA256 312d466fb8758e06031ba2a7a8e84cfcffaf277f5fad9535865aa1acdeb1e333
MD5 ca134fb6ddc6bd7d85c3279c3606a433
BLAKE2b-256 549b76219b41badff3e204513ccf97cf8b9a8326a41bd089fee2d7c9c2e8eed4

See more details on using hashes here.

Provenance

The following attestation bundles were made for band_sdk_core-1.2.1-cp311-abi3-win_arm64.whl:

Publisher: publish.yml on band-ai/band-sdk-core

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file band_sdk_core-1.2.1-cp311-abi3-win_amd64.whl.

File metadata

File hashes

Hashes for band_sdk_core-1.2.1-cp311-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 588b9a6da4cd2810940f8d3d0b6f337a8e0808e7331f82c85540ed4966cf0ab3
MD5 67eaaa690feded1574eb8bddfdeb1875
BLAKE2b-256 180c258bd0a76cdbe1c907a1ef3de35fcd15a810ed1d59a3d8775c729fb7bd69

See more details on using hashes here.

Provenance

The following attestation bundles were made for band_sdk_core-1.2.1-cp311-abi3-win_amd64.whl:

Publisher: publish.yml on band-ai/band-sdk-core

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file band_sdk_core-1.2.1-cp311-abi3-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for band_sdk_core-1.2.1-cp311-abi3-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 52d9b5269428b80ee126901e651435e589f6b344ab3f16a61bf84dcb18ac33ea
MD5 2ea400aa6d6c9c22bbc7f49ae97d243c
BLAKE2b-256 c22dd3c55986ea39751069704feba4ed35c3a60bbad5411006135e25ee9d79bc

See more details on using hashes here.

Provenance

The following attestation bundles were made for band_sdk_core-1.2.1-cp311-abi3-musllinux_1_2_x86_64.whl:

Publisher: publish.yml on band-ai/band-sdk-core

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file band_sdk_core-1.2.1-cp311-abi3-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for band_sdk_core-1.2.1-cp311-abi3-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 c6b81490a4d466ea1c0d234ebf5141226e17cc1b7bfd8cace7ba0c792cea5152
MD5 5fa5aa3c17556ce8c836ba7b74df7110
BLAKE2b-256 c21469baa63522bcbb7a6ee8e44dccab29e0adfdc3f255ad542e9f722d53b720

See more details on using hashes here.

Provenance

The following attestation bundles were made for band_sdk_core-1.2.1-cp311-abi3-musllinux_1_2_aarch64.whl:

Publisher: publish.yml on band-ai/band-sdk-core

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file band_sdk_core-1.2.1-cp311-abi3-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for band_sdk_core-1.2.1-cp311-abi3-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 327318e5f028849303a979d7e2d203f189bf242e3c9a32f775820c4c4285ce9f
MD5 a5be69f5797c5e6a391d94eeb951fa99
BLAKE2b-256 9e78df7cf6b12f0ae1e81d432a4910d2dea755eabf05f644a8206a1385368278

See more details on using hashes here.

Provenance

The following attestation bundles were made for band_sdk_core-1.2.1-cp311-abi3-manylinux_2_28_x86_64.whl:

Publisher: publish.yml on band-ai/band-sdk-core

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file band_sdk_core-1.2.1-cp311-abi3-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for band_sdk_core-1.2.1-cp311-abi3-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 503202ff8151dfb9d3336732a3fcd8a8176a3e5558ff784d787646e48fcfcc37
MD5 25fc37868e96eeae92de4b07687041ae
BLAKE2b-256 385db8406f66625a1bf2ef2f619783fb0f00dca41c32e67bdd84388af9558ca3

See more details on using hashes here.

Provenance

The following attestation bundles were made for band_sdk_core-1.2.1-cp311-abi3-manylinux_2_28_aarch64.whl:

Publisher: publish.yml on band-ai/band-sdk-core

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file band_sdk_core-1.2.1-cp311-abi3-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for band_sdk_core-1.2.1-cp311-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 54b4fb0ac2676ee2ef0ffe6591561ba4c780d327342c912abe192a9ee99c864d
MD5 8768a94c71d175029b2420f2c6911d09
BLAKE2b-256 42e571b52071f76fa197790c9b847bb3fba7100520727248c44e0bab95a11401

See more details on using hashes here.

Provenance

The following attestation bundles were made for band_sdk_core-1.2.1-cp311-abi3-macosx_11_0_arm64.whl:

Publisher: publish.yml on band-ai/band-sdk-core

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file band_sdk_core-1.2.1-cp311-abi3-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for band_sdk_core-1.2.1-cp311-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 7dcebc9adddd24c0b64d3b79b95cce4fc49930e5c3050a652a60872f4612f1d4
MD5 8d8c0767d2e2e678be705c70a49c2c63
BLAKE2b-256 819ffe0b093e8c19f05f22df2b40ebfbe512068831bf39dc6d4b96c06294e416

See more details on using hashes here.

Provenance

The following attestation bundles were made for band_sdk_core-1.2.1-cp311-abi3-macosx_10_12_x86_64.whl:

Publisher: publish.yml on band-ai/band-sdk-core

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

2.4.0

8 files

2.3.0

8 files

2.2.0

8 files

2.1.0

8 files

2.0.0

8 files

This release

1.2.1 This release

8 files

1.2.0

8 files

1.1.0

8 files

1.0.1

8 files

1.0.0

8 files

0.8.0

8 files

0.7.2

8 files

0.7.1

8 files

0.7.0

8 files

0.6.0

8 files

0.5.0

8 files

0.4.1

8 files

0.4.0

8 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page