Skip to content

Scoring, Admin & Convenience Methods

Commit a new model in a single call. Handles commitment computation, ID generation, transaction building, signing, and execution.

async def commit_model(
signer: Keypair,
weights_url: str,
encrypted_weights: bytes,
decryption_key: str,
embedding: list[float],
commission_rate: int,
stake_amount: Optional[float] = None,
) -> str
ParameterTypeRequiredDefaultDescription
signerKeypairYesKeypair to sign the transaction
weights_urlstrYesURL where encrypted weights will be hosted
encrypted_weightsbytesYesEncrypted model weights
decryption_keystrYesHex AES-256 decryption key (committed during this phase)
embeddinglist[float]YesModel embedding vector (committed during this phase)
commission_rateintYesCommission rate in basis points (100 = 1%)
stake_amountfloatNoNoneStake in SOMA (uses network minimum if omitted)

Returns: str — the assigned model ID

Reveal a previously committed model. Must be called in the epoch after commit. The weights URL and encrypted weights were already provided during commit. Only the decryption key and embedding are needed here.

async def reveal_model(
signer: Keypair,
model_id: str,
decryption_key: str,
embedding: list[float],
) -> None
ParameterTypeRequiredDefaultDescription
signerKeypairYesKeypair to sign
model_idstrYesModel ID from commit step
decryption_keystrYesHex AES-256 decryption key
embeddinglist[float]YesModel embedding vector

Commit updated weights for an active model.

async def commit_model_update(
signer: Keypair,
model_id: str,
weights_url: str,
encrypted_weights: bytes,
decryption_key: str,
embedding: list[float],
) -> None
ParameterTypeRequiredDefaultDescription
signerKeypairYesKeypair to sign
model_idstrYesModel ID to update
weights_urlstrYesURL of new encrypted weights
encrypted_weightsbytesYesNew encrypted weights
decryption_keystrYesHex AES-256 decryption key (committed during this phase)
embeddinglist[float]YesUpdated model embedding vector (committed during this phase)

Reveal updated weights. Must be called in the epoch after commit. The weights URL and encrypted weights were already provided during the update commit. Only the decryption key and embedding are needed here.

async def reveal_model_update(
signer: Keypair,
model_id: str,
decryption_key: str,
embedding: list[float],
) -> None
ParameterTypeRequiredDefaultDescription
signerKeypairYesKeypair to sign
model_idstrYesModel ID
decryption_keystrYesHex AES-256 decryption key
embeddinglist[float]YesUpdated embedding vector

Voluntarily deactivate a model.

async def deactivate_model(
signer: Keypair,
model_id: str,
) -> None

Set a model’s commission rate for the next epoch.

async def set_model_commission_rate(
signer: Keypair,
model_id: str,
new_rate: int,
) -> None
ParameterTypeRequiredDefaultDescription
signerKeypairYesModel owner keypair
model_idstrYesModel ID
new_rateintYesNew rate in basis points

Report a misbehaving model.

async def report_model(signer: Keypair, model_id: str) -> None

Undo a previous model report.

async def undo_report_model(signer: Keypair, model_id: str) -> None

Submit data to fill a target. Handles commitment computation, coin selection, and execution.

async def submit_data(
signer: Keypair,
target_id: str,
data: bytes,
data_url: str,
model_id: str,
embedding: list[float],
distance_score: float,
loss_score: list[float],
) -> None
ParameterTypeRequiredDefaultDescription
signerKeypairYesKeypair to sign
target_idstrYesTarget to submit to
databytesYesRaw submission data
data_urlstrYesURL where data is hosted
model_idstrYesModel used for scoring
embeddinglist[float]YesData embedding vector
distance_scorefloatYesDistance score (must be ≤ target threshold)
loss_scorelist[float]YesLoss score from model inference

Claim rewards from a filled target after the challenge window closes.

async def claim_rewards(signer: Keypair, target_id: str) -> None

Report a fraudulent submission.

async def report_submission(
signer: Keypair,
target_id: str,
) -> None

Undo a previous submission report.

async def undo_report_submission(signer: Keypair, target_id: str) -> None

Score a data submission against target models. The scoring service downloads model weights and data, runs inference, and returns the results.

async def score(
data_url: str,
models: list[ModelManifest],
target_embedding: list[float],
data: Optional[bytes] = None,
data_checksum: Optional[str] = None,
data_size: Optional[int] = None,
seed: int = 0,
) -> ScoreResult
ParameterTypeRequiredDefaultDescription
data_urlstrYesURL of the submission data
modelslist[ModelManifest]YesModel manifests to score against
target_embeddinglist[float]YesTarget’s embedding vector
databytesNoNoneRaw data (alternative to URL fetch)
data_checksumstrNoNoneExpected data checksum
data_sizeintNoNoneExpected data size
seedintNo0Random seed for reproducibility

Returns: ScoreResult

targets = await client.get_targets(status="open", limit=1)
target = targets[0]
manifests = await client.get_model_manifests(target)
result = await client.score(
data_url="https://storage.example.com/data.bin",
models=manifests,
target_embedding=target.embedding,
)
print(f"Winner: model {result.winner}, distances: {result.distance}")

Check if the scoring service is healthy.

async def scoring_health() -> bool

Returns: boolTrue if the service is reachable

Transfer SOMA to a recipient.

async def transfer_coin(
signer: Keypair,
recipient: str,
amount: float,
) -> None
ParameterTypeRequiredDefaultDescription
signerKeypairYesKeypair to sign the transaction
recipientstrYesRecipient address
amountfloatYesAmount in SOMA

Transfer objects by their IDs.

async def transfer_objects(
signer: Keypair,
recipient: str,
object_ids: list[str],
) -> None
ParameterTypeRequiredDefaultDescription
signerKeypairYesKeypair to sign
recipientstrYesRecipient address
object_idslist[str]YesObject IDs to transfer

Pay multiple recipients in a single transaction.

async def pay_coins(
signer: Keypair,
recipients: list[str],
amounts: list[float],
) -> None
ParameterTypeRequiredDefaultDescription
signerKeypairYesKeypair to sign
recipientslist[str]YesRecipient addresses
amountslist[float]YesAmounts in SOMA (must match recipients length)

Force-advance the epoch (admin/localnet only).

async def advance_epoch() -> int

Returns: int — the new epoch number

Request test tokens for an address.

async def request_faucet(address: str) -> FaucetResponse
ParameterTypeRequiredDefaultDescription
addressstrYesSOMA address to fund

Returns: FaucetResponse

response = await client.request_faucet(kp.address())
print(f"Status: {response.status}")
for coin in response.coins_sent:
print(f" {coin.id}: {coin.amount} shannons")

Stake SOMA with a validator.

async def add_stake(
signer: Keypair,
validator: str,
amount: Optional[float] = None,
) -> None
ParameterTypeRequiredDefaultDescription
signerKeypairYesKeypair to sign
validatorstrYesValidator address
amountfloatNoNoneAmount in SOMA (entire coin if omitted)

Withdraw staked SOMA.

async def withdraw_stake(
signer: Keypair,
staked_soma_id: str,
) -> None
ParameterTypeRequiredDefaultDescription
signerKeypairYesKeypair to sign
staked_soma_idstrYesStakedSoma object ID

Stake SOMA with a model.

async def add_stake_to_model(
signer: Keypair,
model_id: str,
amount: Optional[float] = None,
) -> None
ParameterTypeRequiredDefaultDescription
signerKeypairYesKeypair to sign
model_idstrYesModel object ID
amountfloatNoNoneAmount in SOMA (entire coin if omitted)

Register a new validator.

async def add_validator(
signer: Keypair,
pubkey_bytes: bytes,
network_pubkey_bytes: bytes,
worker_pubkey_bytes: bytes,
proof_of_possession: bytes,
net_address: bytes,
p2p_address: bytes,
primary_address: bytes,
proxy_address: bytes,
) -> None

Remove a validator from the committee.

async def remove_validator(signer: Keypair, pubkey_bytes: bytes) -> None

Update validator metadata (takes effect next epoch).

async def update_validator_metadata(
signer: Keypair,
next_epoch_network_address: Optional[bytes] = None,
next_epoch_p2p_address: Optional[bytes] = None,
next_epoch_primary_address: Optional[bytes] = None,
next_epoch_proxy_address: Optional[bytes] = None,
next_epoch_protocol_pubkey: Optional[bytes] = None,
next_epoch_worker_pubkey: Optional[bytes] = None,
next_epoch_network_pubkey: Optional[bytes] = None,
next_epoch_proof_of_possession: Optional[bytes] = None,
) -> None

Set the validator commission rate for the next epoch.

async def set_validator_commission_rate(signer: Keypair, new_rate: int) -> None

Report a misbehaving validator.

async def report_validator(signer: Keypair, reportee: str) -> None

Undo a previous validator report.

async def undo_report_validator(signer: Keypair, reportee: str) -> None