BitSage Network SDK - Verifiable ML inference, ZKML transaction classifier, and agent firewall
Project description
obelyzk
Python SDK for ObelyZK -- verifiable ML inference on Starknet.
All proofs use full OODS + Merkle + FRI + PoW (trustless) verification on Starknet Sepolia.
Installation
pip install obelyzk
Quick Start
from obelyzk import ObelyzkClient
client = ObelyzkClient()
# Prove and verify on-chain
result = client.prove(
model="smollm2-135m",
input=[1.0, 2.0, 3.0],
on_chain=True,
)
print(f"Output: {result.output}")
print(f"TX: {result.tx_hash}")
print(f"Verified: {result.verified}")
API Reference
ObelyzkClient(url?, api_key?)
# Hosted prover (default)
client = ObelyzkClient()
# Custom prover
client = ObelyzkClient(url="http://your-gpu:8080")
# With API key
client = ObelyzkClient(api_key="your-key")
client.prove(model, input, on_chain?, recursive?)
Prove a model execution.
result = client.prove(
model="smollm2-135m", # model name or HuggingFace ID
input=[1.0, 2.0, 3.0], # input tensor
on_chain=True, # submit to Starknet (default: False)
recursive=True, # use recursive STARK (default: True)
)
# result.output -> list[float] model output
# result.proof_hash -> str Poseidon hash
# result.tx_hash -> str | None Starknet TX (if on_chain)
# result.verified -> bool | None on-chain status
# result.prove_time -> float seconds (~102s for SmolLM2)
# result.recursive_time -> float seconds (~3.55s)
# result.felts -> int calldata size (~942)
# result.model_id -> str hex identifier
client.attest(model, input, submit_on_chain?)
Full attestation with on-chain submission.
attestation = client.attest(
model="smollm2-135m",
input=[1.0, 2.0, 3.0],
submit_on_chain=True,
)
client.models()
List available models.
models = client.models()
for m in models:
print(f"{m.name}: {m.params} params, {m.layers} layers")
client.job(job_id)
Check async job status.
job = client.job("job-abc123")
print(f"Status: {job.status}, Progress: {job.progress}%")
Async Support
import asyncio
from obelyzk import AsyncObelyzkClient
async def main():
client = AsyncObelyzkClient()
# Prove with async/await
result = await client.prove(
model="smollm2-135m",
input=[1.0, 2.0, 3.0],
on_chain=True,
)
print(f"TX: {result.tx_hash}")
print(f"Verified: {result.verified}")
# List models
models = await client.models()
for m in models:
print(f"{m.name}: {m.params}")
# Async attestation
attestation = await client.attest(
model="smollm2-135m",
input=[1.0, 2.0, 3.0],
submit_on_chain=True,
)
asyncio.run(main())
Supported Models
| Model | Params | Prove Time (GPU) | Recursive Felts |
|---|---|---|---|
| SmolLM2-135M | 135M | ~102s | 942 |
| Qwen2-0.5B | 500M | ~45s | ~900 |
| Phi-3-mini | 3.8B | ~180s | ~950 |
On-Chain Verification
Proofs are verified on the ObelyZK Recursive Verifier contract using full OODS + Merkle + FRI + PoW (trustless):
- Contract:
0x707819dea6210ab58b358151419a604ffdb16809b568bf6f8933067c2a28715 - Network: Starknet Sepolia
- Verification: Full OODS + Merkle + FRI + PoW (trustless)
- Felts: ~942 per proof (49x compression)
- Cost: ~$0.02 per verification
Verify independently:
from starknet_py.net.full_node_client import FullNodeClient
node_client = FullNodeClient(
node_url="https://starknet-sepolia.g.alchemy.com/starknet/version/rpc/v0_8/demo"
)
result = await node_client.call_contract(
contract_address=0x707819dea6210ab58b358151419a604ffdb16809b568bf6f8933067c2a28715,
entry_point_selector="get_recursive_verification_count",
calldata=[model_id],
)
print(f"Verification count: {result[0]}")
Environment Variables
| Variable | Description | Required |
|---|---|---|
OBELYSK_API_KEY |
API key for hosted prover | For hosted |
OBELYSK_PROVER_URL |
Custom prover URL | For self-hosted |
STARKNET_ACCOUNT |
Starknet account address | For on-chain |
STARKNET_PRIVATE_KEY |
Starknet private key | For on-chain |
Self-Hosted Prover
client = ObelyzkClient(url="http://your-gpu:8080")
See the Self-Hosting Guide for GPU setup.
Links
Project details
Release history Release notifications | RSS feed
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 bitsage_sdk-0.2.0.tar.gz.
File metadata
- Download URL: bitsage_sdk-0.2.0.tar.gz
- Upload date:
- Size: 19.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ba7ac94d786393e8b831135f977a00c8666800e1df8cc022c55511172f938ca7
|
|
| MD5 |
e27bcd0fe69de37116a3c99fd2ba0380
|
|
| BLAKE2b-256 |
87c04924c9fe4a4ddd82c525e23cab42e53d2f8b8c0c50ea7ea462924a58e2ca
|
File details
Details for the file bitsage_sdk-0.2.0-py3-none-any.whl.
File metadata
- Download URL: bitsage_sdk-0.2.0-py3-none-any.whl
- Upload date:
- Size: 17.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
fc9376880b2e8e82c1ba1f5f6bee4a3366ebad3e7ebd7399bb36a09ff1ff87eb
|
|
| MD5 |
3bf0191a3d2cf614286ea32dba499c2c
|
|
| BLAKE2b-256 |
2191e3fd3ed56db4e7e5f7ccbace176b551583fee9a14c3354df720f6518c073
|