Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Rejection reasons

Start with the version’s reject_reason from GET /v1/me/versions/{id}. A refused submission request, an admission rejection, a trial failure and a failed match are separate events, and the stage tells you what to do next.

Request refusals

Soma refuses these requests before it records a new version.

Error or conditionMeaningNext step
hashes_requiredDeclared hashes missing, or malformed on their faceSupply both weights_hash and manifest_hash as sha256:<64 hex>
unknown_gameNo game by that slugRead GET /v1/games for the slugs
season_not_openThe season you named, or the featured one if you named none, is not accepting submissionsName the season you mean with season, or read its dates and wait for its window
not_a_participantThe season is restricted and you are not among its participants, or you signed in with a provider the season does not admitAsk the season’s organizer to add you, or sign in with the identity they listed
season_admin_cannot_enterYou administer this season, and a season’s administrators may not enter itEnter another season
weights_already_enteredThe season refuses duplicate weights, and another competitor’s entry (or, in scope user, any other model) already holds theseCheck the rule scope and submit an eligible entry
version_in_flightThis model already has a testing or verified candidate in this seasonFollow that candidate to a verdict; your other models, and this model in other seasons, are unaffected
unknown_modelThat model id is not one of yoursCreate the model first; a submission never creates one
model_retiredThe model takes no new versionsRevive it, or submit to another
too_many_in_flightYou are at the season’s limit for versions in admission at onceWait for one to reach a verdict
too_many_versionsYou have entered as many versions as the season allowsThe next season starts you fresh
cooling_downThe season asks for a gap between one model’s submissionsThe response carries the instant you may try again
note_too_long, note_word_listedThe version’s note is over the length, or carries a word the site listsShorten it, or leave the note out
entries_maxYou have entered as many models into this season as it allowsSubmit to a model already in the season, or retire one to free a slot
name_requiredThe create call carried no nameSend a name: it is all an entry declares
model_name_takenYou already have a model with that nameA name tells your models apart; another competitor may hold the same one
name_invalidA rename to a name the site does not acceptPick another
reenter_invalidA re-entry lacked game, model, season or fromSend all four
nothing_to_reenterThe model you re-entered had no version in play in the from seasonCheck the slug in from, or submit files instead
401 / session_revokedSession absent, invalid, expired, or revokedSign in again

weights_already_entered comes from the season’s unique_weights rule, and it is the only uniqueness conflict a submission can hit. A version has no release tag to duplicate, so no duplicate_release error code exists.

cooling_down is the only refusal that depends on the current time, so two calls a second apart can get different answers. For that reason it reports the instant you may retry, and gives no yes or no.

The upload, and what arrived

ReasonMeaningNext step
ARTIFACT_MISSINGThe graph was not in the bucket at your version’s key when its thirty-minute upload window closedYou did not upload. Submit again for a new version and fresh URLs, and PUT both files
MANIFEST_MISSINGThe graph arrived and the manifest had not when the window closedThe same fix, for the second file
MANIFEST_MISMATCHThe file you uploaded does not hash to manifest_hashRe-run shasum -a 256 on the file you sent
MANIFEST_INVALIDThe document carries no inputs or no outputsMake it an orion:model@1.0.0 manifest, which carries both
RESULT_NOT_ALLOWEDThe manifest carries a result expressionThe platform reads the head. Delete the expression; see the manifest
DIGEST_FAILEDThe node re-hashed the graph and got something elseThe same fix as MANIFEST_MISMATCH, for model.onnx

Graph and policy

ReasonMeaningNext step
PARSE_FAILEDThe ONNX parses and no plan buildsRe-export. A graph that computes its own indices cannot declare named spatial axes, so give it concrete ones
PROBE_FAILEDIt loads and will not run at your probe_dimsCheck that the declared shapes are the ones the graph takes
PROBE_TOO_SLOWThe probe’s median, five inferences at your probe_dims, was over the game’s turn (1,000 ms for Ants) on every attemptMake the graph faster at probe_dims. The version’s infer_us is the last median, and tinybrains check measures the same probe
TOO_LARGES' (the two files’ bytes) fits no class in this season’s tableMeasure both files and reduce the larger
OPSET_UNSUPPORTEDOpset outside this season’s windowExport within the range the season publishes
OP_NOT_ALLOWEDGraph uses an operator this season does not allowInspect the exported nodes, including If/Loop/Scan bodies, and use supported operations
CLASS_NOT_OFFEREDIt fits only a class this season does not runReach a class the season offers. TOO_LARGE is the separate reason for a model past every class
PARAMS_EXCEEDEDMore parameters than this season allowsReduce the parameter count as well as the bytes. The count covers every value the document carries, wherever it carries it
TOO_SLOWSlower than this season’s inference ceilingRare: most seasons set none. Simplify the graph

A slow graph stays in its class; admission does not move it to a larger one. See model format and weight classes.

Adapter and interface

ReasonMeaningNext step
ADAPTER_INVALIDAn adapter did not produce a tensor the graph takes, or produced none for a declared inputCheck operators, scopes, dtypes and shapes. A misspelt operator fails here: loading accepts it
ADAPTER_OVER_BUDGETAn adapter exceeds its operation budget on a reference observationMeasure the cases and reduce the work; see the budget
HEAD_UNREADABLEThe policy output is not a shape the referee can readMake it rank 2 or rank 4: [N, 5] or [1, 5, H, W]. See the two head shapes

ADAPTER_OVER_BUDGET means the adapter costs too much, and ADAPTER_INVALID means it is wrong; the platform keeps the two words apart on purpose. Reproduce all three reasons with tinybrains check, which measures what admission measures and names the observation and the operator that failed.

The word is all a version carries. The platform stores no detail beside it, so check on your machine is where you find out which observation or which node it was.

Memory

These apply only to a manifest that declares an output named memory or ant_memory; see Memory.

ReasonMeaningNext step
MEMORY_NOT_ALLOWEDThe manifest declares a memory output, and its class allows no memory in this seasonRemove the output, or enter a class the season gives memory
MEMORY_TOO_LARGEThe memory costs more than the class’s cap on the smallest or the largest boardShrink its shape or its dtype, or enter a larger class
MEMORY_SHAPEA memory output names too many dimensions, names one twice, or lacks a dtype or a shapememory may name two dimensions, ant_memory one
MEMORY_ROUND_TRIPFed its own memory on the reference observations, the model’s call failedMake each memory input take exactly what its output writes, and play a match with tinybrains

Trials and administrative outcomes

ReasonMeaningNext step
FORFEITCandidate reached the strike limit, five unless the season sets another, in a completed trialInspect timing and adapter failures, then retest
UNPLAYABLEThe trial used up its repair limitCheck whether failures came from the model or infrastructure
RUNNER_UNAVAILABLENo runner could load the candidate for its trials, as many times as the repair limitNot your model. Submit the same files again
SEASON_CLOSEDThe season closed while the candidate waitedEnter an eligible later season
TIMED_OUTAdmission used all its attempts without finishing verificationNot your model. Check service availability, then submit again

A withdrawn queued match carries its own word in withdrawn_reason, and no rejection:

  • SUPERSEDED: a successor passed its trial and replaced a seat’s version, and successor names the new version.
  • REJECTED: the platform rejected a seat’s version.
  • BASELINE_DISABLED: an admin disabled a baseline that held a seat.
  • MAP_DISABLED: an admin disabled the match’s board.
  • ROUND_ENDED: a new round, or the finals, started before the match was played.
  • SEASON_CLOSED: the season closed.
  • ENGINE_RETIRED: the season moved to another engine.
  • SEAT_LEFT: a seat’s version left play for any other reason.

A withdrawn match counts as no loss and changes no rating; see the life of a version.

When the platform fails

A failure on the platform’s side leaves the candidate testing and sends it back to the queue: the object store could not be reached, no runner was up, the runner that claimed it could not fetch the artifact, reach its node or report in time. A failure while the version waited for a runner spends nothing. A failure on the runner that had claimed it spends one of the three attempts, and three spent attempts end as TIMED_OUT. A timeout at the end of those retries proves nothing about your network. You never see the intermediate words: a version’s reject_reason is one of the words on this page, and nothing else.

ARTIFACT_MISSING and MANIFEST_MISSING look like platform failures and are not in this class. An empty bucket is your submission’s state, and no amount of retrying makes bytes appear.

A rejected candidate leaves your active version in place. Once you know the cause, submit the corrected files and their hashes as the next version. Keep the failed version and trial IDs in any report you file: the operator needs them to find the evidence.

Season administration

A season’s administrators meet a few refusals of their own. The ones a request’s words do not explain:

ErrorMeaningNext step
season_admin_onlyYou are not an administrator of this seasonAsk a platform administrator to assign you
unknown_seasonNo such season, or a private one you may not seeCheck the slug
baseline_name_reservedAnother season already has a baseline of that name. It is one account across seasons, so only a platform administrator may add a version to itGive this season’s baseline a name of its own, or import that baseline

Asking for help

Ask on Discord when a reason does not say enough, or when the fault looks like ours. A bug in a part of the platform can also go to that repository’s issues on GitHub.