Skip to content

Scoring, Admin & Convenience Methods

Create a new model (step 1 of create-commit-reveal). Sets up the model’s economic parameters and staking pool. Returns the model ID for subsequent commit and reveal steps.

async def create_model(
signer: Keypair,
commission_rate: int,
stake_amount: Optional[float] = None,
) -> str
ParameterTypeRequiredDefaultDescription
signerKeypairYes-Keypair to sign the transaction
commission_rateintYes-Commission rate in basis points (100 = 1%)
stake_amountfloatNoNoneStake in SOMA (uses network minimum if omitted)

Returns: str — the assigned model ID

Commit model weights (step 2 of create-commit-reveal). Handles commitment computation, transaction building, signing, and execution. Works for both initial commits on created models and weight updates on active models.

async def commit_model(
signer: Keypair,
model_id: str,
weights_url: str,
encrypted_weights: bytes,
decryption_key: str,
embedding: list[float],
) -> None
ParameterTypeRequiredDefaultDescription
signerKeypairYes-Keypair to sign the transaction
model_idstrYes-Model ID from create_model
weights_urlstrYes-URL where encrypted weights will be hosted
encrypted_weightsbytesYes-Encrypted model weights
decryption_keystrYes-Base58 AES-256 decryption key (commitment auto-computed)
embeddinglist[float]Yes-Model embedding vector (commitment auto-computed)

Reveal a previously committed model (step 3 of create-commit-reveal). Must be called in the epoch after commit. Works for both initial reveals on pending models and weight updates on active models.

async def reveal_model(
signer: Keypair,
model_id: str,
decryption_key: str,
embedding: list[float],
) -> None
ParameterTypeRequiredDefaultDescription
signerKeypairYes-Keypair to sign
model_idstrYes-Model ID
decryption_keystrYes-Base58 AES-256 decryption key
embeddinglist[float]Yes-Model 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
signerKeypairYes-Model owner keypair
model_idstrYes-Model ID
new_rateintYes-New 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
signerKeypairYes-Keypair to sign
target_idstrYes-Target to submit to
databytesYes-Raw submission data
data_urlstrYes-URL where data is hosted
model_idstrYes-Model used for scoring
embeddinglist[float]Yes-Data embedding vector
distance_scorefloatYes-Distance score (must be ≤ target threshold)
loss_scorelist[float]Yes-Loss 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_urlstrYes-URL of the submission data
modelslist[ModelManifest]Yes-Model manifests to score against
target_embeddinglist[float]Yes-Target’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: bool. True if the service is reachable.

Transfer SOMA to a recipient.

async def transfer_coin(
signer: Keypair,
recipient: str,
amount: float,
) -> None
ParameterTypeRequiredDefaultDescription
signerKeypairYes-Keypair to sign the transaction
recipientstrYes-Recipient address
amountfloatYes-Amount in SOMA

Transfer objects by their IDs.

async def transfer_objects(
signer: Keypair,
recipient: str,
object_ids: list[str],
) -> None
ParameterTypeRequiredDefaultDescription
signerKeypairYes-Keypair to sign
recipientstrYes-Recipient address
object_idslist[str]Yes-Object IDs to transfer

Pay multiple recipients in a single transaction.

async def pay_coins(
signer: Keypair,
recipients: list[str],
amounts: list[float],
) -> None
ParameterTypeRequiredDefaultDescription
signerKeypairYes-Keypair to sign
recipientslist[str]Yes-Recipient addresses
amountslist[float]Yes-Amounts 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 SOMA for an address.

async def request_faucet(address: str) -> FaucetResponse
ParameterTypeRequiredDefaultDescription
addressstrYes-SOMA 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
signerKeypairYes-Keypair to sign
validatorstrYes-Validator address
amountfloatNoNoneAmount in SOMA (entire coin if omitted)

Withdraw staked SOMA.

async def withdraw_stake(
signer: Keypair,
staked_soma_id: str,
) -> None
ParameterTypeRequiredDefaultDescription
signerKeypairYes-Keypair to sign
staked_soma_idstrYes-StakedSoma object ID

Stake SOMA with a model.

async def add_stake_to_model(
signer: Keypair,
model_id: str,
amount: Optional[float] = None,
) -> None
ParameterTypeRequiredDefaultDescription
signerKeypairYes-Keypair to sign
model_idstrYes-Model 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