0.10.0

Changes

  • The registry holds a provider’s model as a model version. Register it with the HOSTED variant, the provider in provider, and the name the provider serves it under in ref, such as {"variant":"HOSTED","provider":"openai","ref":"gpt-4o-2024-08-06"}. A named model holds hosted versions only, and training, evaluations and endpoints refuse a hosted version.

  • Deprecate a model version with POST /v1/registry/models/{ns}/{name}/versions/{vN}/deprecate and retire it with POST /v1/registry/models/{ns}/{name}/versions/{vN}/retire, each with a reason. The registry records who made each move and when. Retire is final: a retired version cannot be deprecated, and no alias can be moved onto it. Every read of a model version states its lifecycle, ACTIVE, DEPRECATED or RETIRED.

  • GET /v1/registry/model-versions lists every model version across named models in one request, narrowed to one namespace with ?namespace=. It leaves out archived namespaces unless the request asks for ?archived=true.

  • akka models reads the model directory from the services that own each fact. akka models list lists every model version in the registry with its hosting, served name and lifecycle, then the served names that the pricing catalog prices or that carried traffic in the last 30 days and that no version accounts for. It lists the versions of archived namespaces with --archived, and counts them as accounting for their served names either way. akka models get shows one version with the run that trained it, its dataset and newest scores, the endpoints that serve it, the destinations, rules and manifest that reach it, and the price of its served names. A part whose service does not answer within 10 seconds, or within --timeout where you state one, is shown as unavailable, and the command still succeeds. -o json prints each part as its service answered it. akka models deprecate and akka models retire move a version’s lifecycle with a reason, and both list what still routes to the version.

  • akka training base-models envelopes lists every measured training envelope of the deployment, and whether the catalog is advisory or strict. -o json gives strictEnvelopes and measurements. akka training capacity no longer lists the envelopes. It shows the mode alone, on a Training envelopes line.

  • akka training capacity lists the GPUs that Ray work outside the trainer holds, such as a job submitted to the cluster directly or a Serve application the trainer does not manage, under Outside the trainer. Each row names the Ray job, the submission id or Serve application, the job’s metadata.owner, its status, its GPUs and when it started. The trainer does not read the entrypoint or runtime environment of any job, actor or task. A reading in which Ray cut a listing short, or answered one with a warning, is a warning on the pool. GET /v1/training/capacity reports the holders as outsideClaims.

  • The scheduler counts the GPUs that Ray work outside the trainer holds as taken. A run, evaluation or endpoint that does not fit beside that work waits with the blocking reason OUTSIDE_WORK. akka training runs get says how many GPUs that work holds, such as behind outside work (13 GPUs), and akka training capacity and -o json name each holder and its owner. Previously, the scheduler granted those GPUs, and the work waited on Ray until its pending timeout. A pool grants from what it declares, and never more than the cluster has left beside the outside work, so a catalog that declares the trainer’s share of a larger cluster is not held back by work outside that share. A reading of the cluster counts for trainer.gpu-scheduler.outside-work-counts-for, 3 minutes by default. An older reading counts as none, and akka training capacity shows whether each one still counts.

  • A training run records the most host memory each node it held had in use, as peakHostMemoryGbByNode, the most of them as peakHostMemoryGb, and what each node had in use as the run arrived on it, as startHostMemoryGbByNode. A node is keyed by its position in the run, "1", "2" and so on, where node 1 holds the run’s first rank. The figures count every process on a node, so on a node shared with other work, the peak less the start is the most the run could have added. akka training runs get shows them as Host memory, beside the device peak, such as 349.1 GiB in use on node 1 at peak (112.0 GiB at start), and each other node after it. A run that runs out of host memory still reports the figures sampled before it ended.

  • google/gemma-4-26B-A4B-it trains under TRL on one H200 and under verl on several, with sft, grpo and gspo. Previously, it was allowed for serving only. See Base models.

  • An endpoint, an evaluation and a grpo or gspo rollout use an adapter over google/gemma-4-12B-it or google/gemma-4-26B-A4B-it as it trained. Previously, they left out the part of the adapter that changes the attention values on the model’s full-attention layers, so a served or evaluated 12B adapter answered differently from the trained one, and a 12B reinforcement run sampled its rollouts from that different model.

  • Under advisory envelopes, the default, a catalog admits a model that no training or serving envelope holds. A run, an endpoint, an evaluation or a distillation over it starts with a warning that it may run out of device memory, and keeps it. A serving envelope’s device, model size and context warn in the same way rather than refuse. A model no serving envelope holds is served at the deployment’s context. Set trainer.base-model-catalog.strict-envelopes = true to keep refusing them. Previously, a catalog refused a model that no envelope held, and an endpoint, evaluation or distillation teacher outside a serving envelope was refused.

  • A grpo or gspo run under verl that sets no save interval keeps its adapter. Previously, it trained and then failed with "verl wrote no adapter".

  • akka commands that follow progress, such as akka training endpoints start and akka training runs wait, print one plain line per change unless stdout and stderr are both terminals. NO_COLOR, --no-color and TERM=dumb do the same on a terminal. A carriage return or an escape sequence in a service’s text is taken out of the line. Previously, a command whose stderr was a terminal redrew a spinner with escape codes and carriage returns even when its output was captured, and NO_COLOR and --no-color did not stop the spinner on a terminal.

  • akka says what a 503 no healthy upstream from a proxy in front of a service can mean, for example "no healthy upstream: the optimize-training service is not running (paused or not started), or is not passing its health checks". Previously, it printed only no healthy upstream.

  • akka names the likely cause of a 500 Unexpected error [<id>] on a request that carried a token, for example "the optimize-training service may not be set up to check tokens; that is a problem with the deployment, so tell whoever runs it". Previously, it printed only Unexpected error [<id>].

Breaking changes

  • akka models reads the registry. akka models list, get, deprecate and retire read and move model versions in the registry, and no longer reach the optimize service. get, deprecate and retire take a registry reference, NS/NAME:vN, instead of an optimize model id. get also takes an alias, latest or a digest.

  • akka models deprecate and akka models retire require --reason.

  • The -o json output of akka models list and akka models get has a new shape. list prints models, unregistered and unavailable, and get prints model, training, serving, routing and price. Update a script that reads it.

  • akka models list no longer takes --state, --risk-tier, --needs-review, --alerting or --group-by. Use --lifecycle in place of --state. akka models get no longer takes --usage, --history, --reports or --lineage. It shows what routes to a version and what produced it without a flag.

  • akka models apply, conditions, promote, attestations, signoff, waive, strike, actions and resolve are removed. Register a model version with akka registry models register. A version is active once it is registered, and akka registry models alias set points an alias such as serving at the one to use. Nothing replaces the governance conditions, attestations, sign-offs, waivers and decisions.

  • akka routing-policies and akka incidents are removed, with the optimize service and its /v1/optimize API. Nothing replaces them. A routing policy was never applied to traffic. Route traffic with akka rulesets.

  • The --url flag and the OPTIMIZE_URL variable are removed, and akka status no longer lists optimize. The CLI no longer sends the x-akka-user header, so AKKA_USER has no effect.

  • A dry run, akka training runs start --dry-run or akka training pipelines start --dry-run, shows Would be named only when the plan states a submissionId, and its -o json output carries runId or pipelineId only then. A script that read runId from a dry run gets no value. Previously, a dry run showed a name that a later start of the same plan did not get, because each start generates its own submission id. State a submissionId in the plan to keep the name across a dry run and a start.