Skip to content

Wire & identifiers

Opaque NewType identifiers (JobId, ProjectId, TrainedModelId, …) buy type checker distinctness over what are, at runtime, plain strings. Friendly Job, Model, Recording, and Output IDs add strict parsers for the identifiers people see and copy. The wire enums and records further down are the shapes that ride between the simulo client, the control plane, and the workers.

Each of these is a typing.NewType over str: at runtime it is a plain string — zero cost, no wrapper object, no validation — but a type checker treats it as a distinct type, so a function typed to take a JobId rejects a ProjectId passed by mistake even though both are strings underneath. They show up as field types on wire dataclasses and as argument/return types across the SDK. There is no constructor to call — construct one by passing the plain string value wherever one is expected.

Job, Model, Recording, and Output ID aliases remain plain strings at runtime, while their parsers enforce the complete friendly-ID grammar. Parsers accept only outer ASCII whitespace and ASCII uppercase as normalization; malformed, partial, wildcard, and Unicode-confusable values are rejected.

This type rides the wire between the simulo client, the control plane, and the workers. Enum values are a stable ABI (append-only, never renamed). OutputKind is a top-level name — prefer simulo.OutputKind in your own code.

  • simulo.OutputKind — Kind of a job-produced output — a checkpoint is NOT a trained model.
  • simulo.SystemType — An abstract GPU system tier — one of a closed, published set.