--- # Generated by hack/genref/generate.sh from the Go types in pkg/apis/ome/v1beta1 # of ome-projects/ome. Don't edit this file. Edit the doc comments on the types, # or the templates in hack/genref, and run the script. title: OME API description: Look up the fields of every type in the ome.io/v1beta1 API, such as InferenceService, BaseModel and ClusterServingRuntime, in this generated reference. generated: true --- Every resource on this page has `apiVersion: ome.io/v1beta1`. The page is generated from the Go types in [`pkg/apis/ome/v1beta1`](https://github.com/ome-projects/ome/tree/main/pkg/apis/ome/v1beta1), the same types the CRDs are generated from. Fields marked **Required** must be set when you create an object. OME writes `status`, so status fields aren't marked. ## `AcceleratorClass` {#ome-io-v1beta1-AcceleratorClass} AcceleratorClass defines a class of accelerators with similar capabilities
FieldTypeDescription
apiVersion Required string `ome.io/v1beta1`
kind Required string `AcceleratorClass`
metadata ObjectMeta Standard object metadata, such as `name` and `labels`.
spec AcceleratorClassSpec The desired state of the `AcceleratorClass`.
status AcceleratorClassStatus The observed state of the `AcceleratorClass`.
## `AcceleratorQuota` {#ome-io-v1beta1-AcceleratorQuota since=v1.3} AcceleratorQuota is one node of the fleet quota tree. Cluster-scoped: it is fleet-level capacity policy, not a namespaced workload. Validation: an AcceleratorQuota name may not exceed 63 characters; it is copied into a label value on every Kueue object the node materializes.
FieldTypeDescription
apiVersion Required string `ome.io/v1beta1`
kind Required string `AcceleratorQuota`
metadata ObjectMeta Standard object metadata, such as `name` and `labels`.
spec AcceleratorQuotaSpec The desired state of the `AcceleratorQuota`.
status AcceleratorQuotaStatus The observed state of the `AcceleratorQuota`.
## `AutoscalerPolicy` {#ome-io-v1beta1-AutoscalerPolicy since=v1.3} AutoscalerPolicy is a reusable, parameterized autoscaler template. Components attach individually via spec.<component>.autoscalerPolicyRef on the InferenceService; the referenced template is rendered per component at reconcile time into a verbatim ComponentAutoscaler and fed to the existing autoscaler dispatch. Creating a policy actuates nothing by itself: the per-component ref is the only attachment mechanism. Alpha. The API may change without notice. AutoscalerPolicy is off by default. To turn it on, set `ome.autoscalerPolicy.enabled` to true on both the ome-crd and ome-resources Helm charts, which install the CRD and its validating webhook. The manager looks for the CRD only when it starts.
FieldTypeDescription
apiVersion Required string `ome.io/v1beta1`
kind Required string `AutoscalerPolicy`
metadata ObjectMeta Standard object metadata, such as `name` and `labels`.
spec AutoscalerPolicySpec The desired state of the `AutoscalerPolicy`.
status AutoscalerPolicyStatus The observed state of the `AutoscalerPolicy`.
## `BaseModel` {#ome-io-v1beta1-BaseModel} BaseModel describes a model in one namespace: where its weights live, which nodes keep a copy, and what the model is, such as its architecture, size and capabilities.
FieldTypeDescription
apiVersion Required string `ome.io/v1beta1`
kind Required string `BaseModel`
metadata ObjectMeta Standard object metadata, such as `name` and `labels`.
spec BaseModelSpec The desired state of the `BaseModel`.
status ModelStatusSpec The observed state of the `BaseModel`.
## `BenchmarkJob` {#ome-io-v1beta1-BenchmarkJob} BenchmarkJob runs genai-bench against an InferenceService or a URL and stores the results in the output location you choose.
FieldTypeDescription
apiVersion Required string `ome.io/v1beta1`
kind Required string `BenchmarkJob`
metadata ObjectMeta Standard object metadata, such as `name` and `labels`.
spec BenchmarkJobSpec The desired state of the `BenchmarkJob`.
status BenchmarkJobStatus The observed state of the `BenchmarkJob`.
## `ClusterBaseModel` {#ome-io-v1beta1-ClusterBaseModel} ClusterBaseModel describes a model for the whole cluster: it has the same spec as a BaseModel, but it's cluster-scoped rather than namespaced.
FieldTypeDescription
apiVersion Required string `ome.io/v1beta1`
kind Required string `ClusterBaseModel`
metadata ObjectMeta Standard object metadata, such as `name` and `labels`.
spec BaseModelSpec The desired state of the `ClusterBaseModel`.
status ModelStatusSpec The observed state of the `ClusterBaseModel`.
## `ClusterServingRuntime` {#ome-io-v1beta1-ClusterServingRuntime} ClusterServingRuntime defines serving pods for the whole cluster: it has the same spec as a ServingRuntime, but it's cluster-scoped rather than namespaced.
FieldTypeDescription
apiVersion Required string `ome.io/v1beta1`
kind Required string `ClusterServingRuntime`
metadata ObjectMeta Standard object metadata, such as `name` and `labels`.
spec ServingRuntimeSpec The desired state of the `ClusterServingRuntime`.
status ServingRuntimeStatus The observed state of the `ClusterServingRuntime`.
## `FineTunedWeight` {#ome-io-v1beta1-FineTunedWeight} FineTunedWeight describes cluster-scoped weights trained from a base model, such as a LoRA adapter, that an InferenceService serves on top of that model.
FieldTypeDescription
apiVersion Required string `ome.io/v1beta1`
kind Required string `FineTunedWeight`
metadata ObjectMeta Standard object metadata, such as `name` and `labels`.
spec FineTunedWeightSpec The desired state of the `FineTunedWeight`.
status ModelStatusSpec The observed state of the `FineTunedWeight`.
## `InferenceReplica` {#ome-io-v1beta1-InferenceReplica since=v1.3} InferenceReplica is one pod set: N Instances of the same rendered pod templates with one revision history and one rollout. A projected replica exists per (InferenceService, Component) tuple and is named <inferenceservice>-<component>; a standalone replica is named by its creator. The scale subresource lets HPA/KEDA target the InferenceReplica directly.
FieldTypeDescription
apiVersion Required string `ome.io/v1beta1`
kind Required string `InferenceReplica`
metadata ObjectMeta Standard object metadata, such as `name` and `labels`.
spec InferenceReplicaSpec The desired state of the `InferenceReplica`.
status InferenceReplicaStatus The observed state of the `InferenceReplica`.
## `InferenceService` {#ome-io-v1beta1-InferenceService} InferenceService ties a model to a serving runtime and declares the engine, decoder and router components that OME turns into workloads.
FieldTypeDescription
apiVersion Required string `ome.io/v1beta1`
kind Required string `InferenceService`
metadata ObjectMeta Standard object metadata, such as `name` and `labels`.
spec InferenceServiceSpec The desired state of the `InferenceService`.
status InferenceServiceStatus The observed state of the `InferenceService`.
## `RolloutPolicy` {#ome-io-v1beta1-RolloutPolicy since=v1.3} RolloutPolicy is a namespaced, reusable rollout progression consumed by InferenceService rollout groups via RolloutGroup.PolicyRef. Alpha. The API may change without notice. RolloutPolicy is off by default. To turn it on, set `ome.rolloutPolicy.enabled` to true on both the ome-crd and ome-resources Helm charts, which install the CRD and its validating webhook. The manager looks for the CRD only when it starts.
FieldTypeDescription
apiVersion Required string `ome.io/v1beta1`
kind Required string `RolloutPolicy`
metadata ObjectMeta Standard object metadata, such as `name` and `labels`.
spec RolloutPolicySpec The desired state of the `RolloutPolicy`.
status RolloutPolicyStatus The observed state of the `RolloutPolicy`.
## `ServingRuntime` {#ome-io-v1beta1-ServingRuntime} ServingRuntime defines, within one namespace, the pods that serve a model and the model formats and sizes it supports, so OME can select it automatically.
FieldTypeDescription
apiVersion Required string `ome.io/v1beta1`
kind Required string `ServingRuntime`
metadata ObjectMeta Standard object metadata, such as `name` and `labels`.
spec ServingRuntimeSpec The desired state of the `ServingRuntime`.
status ServingRuntimeStatus The observed state of the `ServingRuntime`.
## `TrafficMap` {#ome-io-v1beta1-TrafficMap since=v1.3} TrafficMap is the capacity-aware routing projection of one multi-cluster InferenceService: the per-home traffic split a gateway consumes. Placement decides WHERE an ISVC's replicas run and quota decides HOW MUCH each home may run; TrafficMap decides the WEIGHTS. It is generated by a control-plane routing controller from status.placement plus accelerator-quota allocation, never hand-edited, and consumed by a gateway-neutral publisher. Alpha. The API may change without notice. One TrafficMap exists per routed ISVC, named after it and owned by it (so it is garbage-collected with the ISVC), for as long as that ISVC is routed -- including while no home is routable, when the table is empty or all-zero and the Routable condition says why. The routing controller owns spec, SourceUID, and the Routable, CapacityFallback, and OverrideActive conditions; the publisher owns the rest of status, including Published and PublicationFallback.
FieldTypeDescription
apiVersion Required string `ome.io/v1beta1`
kind Required string `TrafficMap`
metadata ObjectMeta Standard object metadata, such as `name` and `labels`.
spec TrafficMapSpec The desired state of the `TrafficMap`.
status TrafficMapStatus The observed state of the `TrafficMap`.
## `WorkloadCluster` {#ome-io-v1beta1-WorkloadCluster since=v1.3} WorkloadCluster registers a workload cluster, typically a GPU cluster, that OME can place workloads onto. Cluster-scoped: it is fleet-level infrastructure, not a namespaced workload. Alpha. The API may change without notice.
FieldTypeDescription
apiVersion Required string `ome.io/v1beta1`
kind Required string `WorkloadCluster`
metadata ObjectMeta Standard object metadata, such as `name` and `labels`.
spec WorkloadClusterSpec The desired state of the `WorkloadCluster`.
status WorkloadClusterStatus The observed state of the `WorkloadCluster`.
## Removed in v1.3 {#removed-in-v1-3} v1.3 removes these fields. Each item says what to use instead. - `spec.kedaConfig` on an InferenceService, and `kedaConfig` on a component. Use `autoscaler` on each component, with `class: KEDA` and a `prometheus` trigger in `keda.triggers`. - `scaleMetric` on a component. Use `autoscaler.hpa.metrics[0].resource.name`, with `class: HPA` in `autoscaler`. - `scaleTarget` on a component. Use `autoscaler.hpa.metrics[0].resource.target.averageUtilization`. - `spec.workers` on a ServingRuntime or ClusterServingRuntime. Use `spec.engineConfig.leader` and `spec.engineConfig.worker`, or the same fields on `spec.decoderConfig`. - `status.components..latestCreatedRevision` on an InferenceService. Nothing replaces it. OMENative components report `latestReadyRevision` and `latestRolledoutRevision`. A component is `engine`, `decoder` or `router` on an InferenceService, and `engineConfig`, `decoderConfig` or `routerConfig` on a ServingRuntime or ClusterServingRuntime. ## Supporting types The resources above use these types in their fields. ### `AcceleratorBudget` {#ome-io-v1beta1-AcceleratorBudget} Used by [`AcceleratorQuotaSpec`](#ome-io-v1beta1-AcceleratorQuotaSpec). AcceleratorBudget is one node's allowance of one resource on one ResourceFlavor. Kueue quota is keyed by that pair, so both halves are needed: a flavor names a hardware class by node labels and says nothing about which resource the count applies to. Accelerators are the only budgeted dimension: cpu and memory are covered on the materialized ClusterQueue so Kueue admission never blocks on them, but they are not authored here.
FieldTypeDescription
resourceName Required string ResourceName is the Kubernetes resource this allowance counts, such as nvidia.com/gpu or google.com/tpu. It becomes the resource entry in the materialized ClusterQueue's resourceGroup. Which names are budgetable is operator config; the API accepts any qualified resource name. Maximum length: `253`. Pattern: `^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*(/[A-Za-z0-9]([-A-Za-z0-9_.]*[A-Za-z0-9])?)?$`.
resourceFlavor Required string ResourceFlavor names an existing Kueue ResourceFlavor. OME references flavors and does not own node labeling; a flavor missing on a target cluster makes that cluster's ClusterQueue inactive, so the budget is not materialized there. Maximum length: `253`. Pattern: `^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$`.
policy AcceleratorQuotaDistributionPolicy Policy overrides the node's default split for this flavor only, so a leaf can be Explicit on a reserved flavor and Proportional on a fungible one. Leaves only.
nominal Required Quantity Nominal is the allowance for this flavor, in the plane's own terms: the fleet-wide total where the tree is authored, this cluster's resolved share on a projected copy. It becomes the ClusterQueue's nominalQuota.
borrowingLimit Quantity BorrowingLimit is how far above its share this leaf may burst by borrowing idle sibling capacity, passed through to Kueue. Unset, this leaf does not borrow: nominal is its ceiling, and the materialized queue carries an explicit limit of zero to say so, because the enforcement backend reads an absent limit as unbounded. Borrowing is cluster-local, so setting it turns nominal from a ceiling into a floor plus overage, and the relaxed ceiling is reported in status. WARNING: overage is not currently reclaimable. This plane sets no preemption policy, so a borrower holds what it took until its own work finishes -- a leaf that bursts can leave a sibling waiting for the share that sibling was guaranteed. Leaves only.
lendingLimit Quantity LendingLimit is how much of this leaf's share siblings may borrow while it is idle, passed through to Kueue. It MUST NOT exceed the share Kueue sees. Leaves only.
perCluster []AcceleratorClusterShare PerCluster is the admin-authored split, required when the effective policy is Explicit and rejected otherwise. Entries MUST sum to Nominal. It is absent on a projected copy, which carries one already-resolved share rather than a fleet split.
### `AcceleratorBudgetStatus` {#ome-io-v1beta1-AcceleratorBudgetStatus} Used by [`AcceleratorQuotaStatus`](#ome-io-v1beta1-AcceleratorQuotaStatus). AcceleratorBudgetStatus is one (resource, flavor) pair's resolved allowance and observed use.
FieldTypeDescription
resourceName string ResourceName is the resource these numbers describe.
resourceFlavor string ResourceFlavor is the flavor these numbers describe.
nominal Quantity Nominal is the resolved allowance for this plane: the fleet total where the tree is authored, this cluster's share on a projection.
admitted Quantity Admitted is the quantity of this flavor currently admitted against the materialized queues, including anything borrowed.
reserved Quantity Reserved is the quantity held by workloads carrying a quota reservation, admitted or not. It is never below Admitted, and the gap between them is work that owns the chips but has not started — a tenant sitting at its ceiling with Admitted low reads as idle unless this is read too.
borrowed Quantity Borrowed is the admitted quantity above the nominal share, taken from idle siblings and reclaimable on contention.
perCluster []AcceleratorClusterBudgetStatus PerCluster breaks the numbers above down by cluster. Populated where the tree is authored; empty on a projected copy, which knows only itself.
### `AcceleratorCapabilities` {#ome-io-v1beta1-AcceleratorCapabilities} Used by [`AcceleratorClassSpec`](#ome-io-v1beta1-AcceleratorClassSpec).
FieldTypeDescription
memoryGB Quantity Memory capacity in GB
computeCapability string Compute capability (NVIDIA) or equivalent
levelZeroVersion string Level Zero version (for Intel accelerators)
clockSpeedMHz int32 Clock speeds
memoryBandwidthGBps Quantity Memory bandwidth
features []string Features supported by this accelerator
performance AcceleratorPerformance Performance metrics
### `AcceleratorCapacityAttribution` {#ome-io-v1beta1-AcceleratorCapacityAttribution} Used by [`AcceleratorCapacityStatus`](#ome-io-v1beta1-AcceleratorCapacityStatus), [`AcceleratorClusterCapacityStatus`](#ome-io-v1beta1-AcceleratorClusterCapacityStatus), [`PlacementCapacityPool`](#ome-io-v1beta1-PlacementCapacityPool). AcceleratorCapacityAttribution describes how nodes were assigned to a flavor.
FieldTypeDescription
flavorUID UID FlavorUID identifies the observed ResourceFlavor object.
nodeLabels map[string]string NodeLabels is the flavor's node selector at observation time.
flavorSetHash string FlavorSetHash identifies all flavor definitions and configured resource names used by the attribution rule, including more specific selectors.
complete bool Complete means every observed node advertising this resource was unambiguously attributed and every flavor had a verifiable identity.
### `AcceleratorCapacityStatus` {#ome-io-v1beta1-AcceleratorCapacityStatus} Used by [`AcceleratorQuotaStatus`](#ome-io-v1beta1-AcceleratorQuotaStatus). AcceleratorCapacityStatus is the observed physical capacity of one flavor, the denominator an admin reads a budget against. It is derived, never authored.
FieldTypeDescription
resourceName string ResourceName is the resource these numbers describe.
resourceFlavor string ResourceFlavor is the flavor these numbers describe.
allocatable Quantity Allocatable is the currently schedulable quantity: the flavor's resource summed over Ready, uncordoned nodes matching the flavor's node labels. Nodes that are NotReady or cordoned remain physical inventory but contribute no schedulable capacity.
highWaterMark Quantity HighWaterMark is the greatest Allocatable observed for this flavor. Budget checks compare against it rather than the instantaneous value, so capacity that shrinks — a drain, a cordon, a device-plugin restart — never marks a node Degraded. It is lowered only once the observed value stays below it by more than the configured hysteresis band.
observedAt Time ObservedAt is when Allocatable was last sampled.
perCluster []AcceleratorClusterCapacityStatus PerCluster breaks capacity down by cluster on a management plane. Empty on a workload cluster, whose root reports only its own capacity.
attribution AcceleratorCapacityAttribution Attribution identifies the hardware mapping used for this observation. Omission cannot establish whether an observed zero is a complete sample.
### `AcceleratorClassSpec` {#ome-io-v1beta1-AcceleratorClassSpec} Used by [`AcceleratorClass`](#ome-io-v1beta1-AcceleratorClass).
FieldTypeDescription
vendor string Vendor of the accelerator (nvidia, amd, intel, etc.)
family string Family of the accelerator (ampere, hopper, cdna2, etc.)
model string Model name (a100, h100, mi250x, etc.)
discovery Required AcceleratorDiscovery Discovery patterns to identify nodes with this accelerator
capabilities Required AcceleratorCapabilities Capabilities of this accelerator class
resources []AcceleratorResource Resources exposed by this accelerator
integration AcceleratorIntegration Integration with external systems
cost AcceleratorCost Cost information for optimization decisions
### `AcceleratorClassStatus` {#ome-io-v1beta1-AcceleratorClassStatus} Used by [`AcceleratorClass`](#ome-io-v1beta1-AcceleratorClass).
FieldTypeDescription
nodes []string Nodes that have this accelerator
totalAccelerators int32 Total number of accelerators in the cluster
availableAccelerators int32 Available accelerators (not allocated)
lastUpdated Time Last update time
conditions []Condition Conditions represent the latest available observations
availableNodes int32 AvailableNodes is the number of nodes that have this accelerator available
### `AcceleratorClusterBudgetStatus` {#ome-io-v1beta1-AcceleratorClusterBudgetStatus} Used by [`AcceleratorBudgetStatus`](#ome-io-v1beta1-AcceleratorBudgetStatus). AcceleratorClusterBudgetStatus is one cluster's slice of a flavor's status.
FieldTypeDescription
cluster string Cluster is the WorkloadCluster's name.
nominal Quantity Nominal is the share assigned to this cluster.
admitted Quantity Admitted is the quantity admitted on this cluster, including borrowed.
reserved Quantity Reserved is the quantity reserved on this cluster, admitted or not.
borrowed Quantity Borrowed is the admitted quantity above this cluster's share.
### `AcceleratorClusterCapacityStatus` {#ome-io-v1beta1-AcceleratorClusterCapacityStatus} Used by [`AcceleratorCapacityStatus`](#ome-io-v1beta1-AcceleratorCapacityStatus). AcceleratorClusterCapacityStatus is one cluster's contribution to a flavor's observed capacity.
FieldTypeDescription
cluster string Cluster is the WorkloadCluster's name.
clusterUID UID ClusterUID identifies the registration through which the report was read. Omission cannot establish that a same-name cluster owns this sample.
reportUID UID ReportUID identifies the member's root AcceleratorQuota.
reportResourceVersion string ReportResourceVersion identifies the source object read for this sample.
reportAvailable bool ReportAvailable means the most recent collection verified the source object and registration. It does not imply that ObservedAt is fresh.
allocatable Quantity Allocatable is that cluster's schedulable quantity of the flavor.
highWaterMark Quantity HighWaterMark is the greatest Allocatable observed on this cluster.
observedAt Time ObservedAt is when this cluster's value was last sampled. A stale stamp distinguishes "capacity dropped" from "the cluster stopped reporting".
attribution AcceleratorCapacityAttribution Attribution is the member's hardware mapping at observation time.
### `AcceleratorClusterShare` {#ome-io-v1beta1-AcceleratorClusterShare} Used by [`AcceleratorBudget`](#ome-io-v1beta1-AcceleratorBudget). AcceleratorClusterShare is one cluster's slice of a flavor's budget.
FieldTypeDescription
cluster Required string Cluster is the WorkloadCluster's name. Maximum length: `253`.
nominal Required Quantity Nominal is that cluster's share, and becomes the nominalQuota of the ClusterQueue materialized there.
### `AcceleratorConstraints` {#ome-io-v1beta1-AcceleratorConstraints} Used by [`AcceleratorSelector`](#ome-io-v1beta1-AcceleratorSelector). AcceleratorConstraints defines requirements for accelerator selection
FieldTypeDescription
minMemory int64 MinMemory in GB
maxMemory int64 MaxMemory in GB (useful for cost control)
minComputePerformanceTFLOPS int64 MinComputePerformanceTFLOPS in TFLOPS
minArchitectureVersion string MinArchitectureVersion Compute capability (NVIDIA) or equivalent
requiredFeatures []string RequiredFeatures that must be present
excludedClasses []string ExcludedClasses lists AcceleratorClasses to avoid
architectureFamilies []string ArchitectureFamilies limits selection to specific families. Examples: ["nvidia-hopper", "nvidia-ampere"].
preferredPrecisions []string PreferredPrecisions lists numeric precisions in order of preference. Examples: ["fp8", "fp16", "fp32"].
### `AcceleratorCost` {#ome-io-v1beta1-AcceleratorCost} Used by [`AcceleratorClassSpec`](#ome-io-v1beta1-AcceleratorClassSpec).
FieldTypeDescription
perHour Quantity Cost per hour in dollars
perMillionTokens Quantity Cost per million tokens (for usage-based pricing)
spotPerHour Quantity Spot instance pricing if available
tier string Cost tier for simplified selection (low, medium, high)
### `AcceleratorDiscovery` {#ome-io-v1beta1-AcceleratorDiscovery} Used by [`AcceleratorClassSpec`](#ome-io-v1beta1-AcceleratorClassSpec).
FieldTypeDescription
nodeSelector map[string]string NodeSelector to identify nodes with this accelerator
affinity Affinity Affinity for more complex node selection
pciVendorID string PCIVendorID for device discovery (e.g., "10de" for NVIDIA)
deviceIDs []string DeviceIDs list of PCI device IDs
### `AcceleratorIntegration` {#ome-io-v1beta1-AcceleratorIntegration} Used by [`AcceleratorClassSpec`](#ome-io-v1beta1-AcceleratorClassSpec).
FieldTypeDescription
kueueResourceFlavor string KueueResourceFlavor name to sync with
volcanoGPUType string VolcanoGPUType for Volcano integration
### `AcceleratorLatency` {#ome-io-v1beta1-AcceleratorLatency} Used by [`AcceleratorPerformance`](#ome-io-v1beta1-AcceleratorPerformance).
FieldTypeDescription
averageMillis int64 Average latency in milliseconds
maximumMillis int64 Maximum latency in milliseconds
### `AcceleratorModelConfig` {#ome-io-v1beta1-AcceleratorModelConfig} AcceleratorModelConfig provides accelerator-specific overrides for this model format
FieldTypeDescription
minMemoryPerBillionParams int64 MinMemoryPerBillionParams specifies memory required per billion parameters. OME doesn't read it. Minimum: `0`.
tensorParallelismOverride TensorParallelismConfig TensorParallelismOverride overrides the default tensor parallelism settings
runtimeArgsOverride []string RuntimeArgsOverride provides accelerator-specific runtime arguments
environmentOverride map[string]string EnvironmentOverride provides accelerator-specific environment variables
### `AcceleratorPerformance` {#ome-io-v1beta1-AcceleratorPerformance} Used by [`AcceleratorCapabilities`](#ome-io-v1beta1-AcceleratorCapabilities).
FieldTypeDescription
fp32Tflops int64 FP32 performance in TFLOPS
fp16Tflops int64 FP16 performance in TFLOPS
int8Tops int64 INT8 performance in TOPS
int4Tops int64 INT4 performance in TOPS
latency AcceleratorLatency Latency metrics
### `AcceleratorQuotaClusterStatus` {#ome-io-v1beta1-AcceleratorQuotaClusterStatus} Used by [`AcceleratorQuotaStatus`](#ome-io-v1beta1-AcceleratorQuotaStatus). AcceleratorQuotaClusterStatus is one workload cluster's projection state, reported where the tree is authored.
FieldTypeDescription
cluster string Cluster is the WorkloadCluster's name.
appliedGeneration int64 AppliedGeneration is the source generation this cluster's projection last carried. Behind metadata.generation means the update has not landed.
appliedTime Time AppliedTime is when the projection was last applied successfully.
materializedGeneration int64 MaterializedGeneration is the source generation this cluster has actually materialized, read back from the projection's status.sourceGeneration. Both it and AppliedGeneration count source revisions, so the pair is comparable: equal means caught up, lower means the remote controller has not yet rendered what was projected.
message string Message explains why this cluster is behind.
### `AcceleratorQuotaDistribution` {#ome-io-v1beta1-AcceleratorQuotaDistribution} Used by [`AcceleratorQuotaSpec`](#ome-io-v1beta1-AcceleratorQuotaSpec). AcceleratorQuotaDistribution holds a node's default split policy. A struct rather than a bare field so future policy inputs attach to the policy they configure.
FieldTypeDescription
policy AcceleratorQuotaDistributionPolicy Policy is the default split for every budget on this node that does not override it.
### `AcceleratorQuotaDistributionPolicy` {#ome-io-v1beta1-AcceleratorQuotaDistributionPolicy} Used by [`AcceleratorBudget`](#ome-io-v1beta1-AcceleratorBudget), [`AcceleratorQuotaDistribution`](#ome-io-v1beta1-AcceleratorQuotaDistribution). AcceleratorQuotaDistributionPolicy selects how a leaf's fleet-wide nominal is split into per-cluster shares. Underlying type: `string`. Allowed values: `Explicit`, `Proportional`. ### `AcceleratorQuotaMaterialization` {#ome-io-v1beta1-AcceleratorQuotaMaterialization} Used by [`AcceleratorQuotaStatus`](#ome-io-v1beta1-AcceleratorQuotaStatus). AcceleratorQuotaMaterialization is the freeze bookkeeping that makes last-good behavior durable across controller restarts.
FieldTypeDescription
frozen bool Frozen reports that output is held at its last-good state because a computed invariant is violated. While frozen the controller writes no new projections or Kueue objects for this node, and deletes none; only explicit deletion of the CR reaps them.
frozenAt Time FrozenAt is when the freeze began.
reason string Reason is the condition reason that caused the freeze, retained so the cause survives a later condition update.
lastAppliedGeneration int64 LastAppliedGeneration is the spec generation the frozen output was built from, which is the state a reader is currently looking at.
lastAppliedTime Time LastAppliedTime is when that output was written.
### `AcceleratorQuotaParentRef` {#ome-io-v1beta1-AcceleratorQuotaParentRef} Used by [`AcceleratorQuotaSpec`](#ome-io-v1beta1-AcceleratorQuotaSpec). AcceleratorQuotaParentRef names the parent node by CR name. Nodes are cluster-scoped, so the name is globally unique and needs no namespace.
FieldTypeDescription
name Required string Name is the parent AcceleratorQuota's metadata.name. Maximum length: `253`. Pattern: `^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$`.
### `AcceleratorQuotaRole` {#ome-io-v1beta1-AcceleratorQuotaRole} Used by [`AcceleratorQuotaSpec`](#ome-io-v1beta1-AcceleratorQuotaSpec). AcceleratorQuotaRole declares what a node is, rather than leaving it inferred from whether children happen to exist. A grouping created before its first child is still a Cohort, and adding a child can never silently convert a leaf. Underlying type: `string`. Allowed values: `Cohort`, `ClusterQueue`. ### `AcceleratorQuotaSpec` {#ome-io-v1beta1-AcceleratorQuotaSpec} Used by [`AcceleratorQuota`](#ome-io-v1beta1-AcceleratorQuota). AcceleratorQuotaSpec is one node's declared position in the tree and, for a leaf, its budget. The rules below are same-object shape checks only. Everything needing the rest of the tree — parent resolution, cycles, depth, containment, fleet-wide namespace uniqueness, role transitions — is enforced by the validating webhook at admission and re-checked by the controller at reconcile, which is the authority. Structural checks here are also stripped from the minimal CRD variant, so they are convenience, never the durable tier. Validation: a ClusterQueue node must set parentRef; only the reserved root node is parent-less. Validation: a Cohort node must not set priorityTier or distribution; no workload binds to a grouping. Validation: a Cohort node's budgets carry only resourceName, resourceFlavor, and nominal. Validation: a ClusterQueue node must carry at least one budget. Validation: a budget whose effective distribution policy is Explicit must set perCluster. Validation: a budget whose effective distribution policy is Proportional must not set perCluster; the split is computed.
FieldTypeDescription
role Required AcceleratorQuotaRole Role declares whether this node groups other nodes or is a leaf carrying the budget. A node is one or the other, never both. Changing it is admitted only under the drained-leaf / childless-grouping guard, because the change deletes the underlying Kueue object.
parentRef AcceleratorQuotaParentRef ParentRef is the edge to this node's parent. Every node sets it except the single reserved root. It is mutable: re-parenting updates the materialized ClusterQueue's cohort in place, so the queue, its LocalQueues, and its admitted workloads all survive.
priorityTier string PriorityTier names the WorkloadPriorityClass stamped on this leaf's workloads. It is a default, not a partition: a workload declaring its own priority keeps it, and the leaf's ClusterQueue admits mixed priorities. OME references the class and does not create it. Capped at AcceleratorQuotaMaxNameLength because it is stamped into a label value. Maximum length: `63`. Pattern: `^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$`.
distribution AcceleratorQuotaDistribution Distribution is this leaf's default split policy, overridable per budget entry. Unset means the operator-level default from the quota config applies; absent that too, the node reports Degraded rather than guessing.
budgets []AcceleratorBudget Budgets is the per-flavor allowance, one entry per ResourceFlavor. On a leaf this is the budget: the fleet-wide allowance where the tree is authored, that cluster's resolved share on a projected copy. On a Cohort node it is an authoring guardrail only — the parent number that parent >= sum(children) is checked against. A grouping materializes as a Kueue Cohort with no resourceGroups, so a Cohort budget is never quota anyone can consume. Capped at the number of entries one Kueue resourceGroup accepts. Maximum items: `16`.
### `AcceleratorQuotaStatus` {#ome-io-v1beta1-AcceleratorQuotaStatus} Used by [`AcceleratorQuota`](#ome-io-v1beta1-AcceleratorQuota). AcceleratorQuotaStatus is the observed state of one node. The quota controller owning the plane is its sole writer.
FieldTypeDescription
observedGeneration int64 ObservedGeneration is the metadata.generation the most recent status flush reflects.
parent string Parent echoes the resolved parent's name, so a node's edge is readable from status alone once the controller has confirmed it resolves.
sourceGeneration int64 SourceGeneration is the source CR's generation this node's materialization reflects, echoed from the projection annotation once the local controller has materialized it. Set only on a projected copy: it is what lets the management plane compare remote progress against what it projected, which object-local generations cannot express.
budgets []AcceleratorBudgetStatus Budgets reports, per resource and flavor, the resolved allowance and the usage rolled up from the materialized ClusterQueues.
capacity []AcceleratorCapacityStatus Capacity is the observed accelerator capacity behind this tree, reported on the root node only. On a management plane it is the fleet view broken down per cluster; on a workload cluster it is that cluster's own derived capacity, which is the only thing the local controller writes on its root.
clusters []AcceleratorQuotaClusterStatus Clusters reports per-cluster projection state on a management plane: which generation each workload cluster has, and why one is behind. Empty on a workload cluster, which projects nothing.
materialization AcceleratorQuotaMaterialization Materialization records what this node last wrote successfully and whether that output is currently frozen. A frozen node keeps serving its last-good materialization; nothing is deleted while an invariant is violated.
conditions []Condition Conditions reports Ready, Degraded, and Materialized.
### `AcceleratorRequirements` {#ome-io-v1beta1-AcceleratorRequirements} Used by [`ServingRuntimeSpec`](#ome-io-v1beta1-ServingRuntimeSpec). AcceleratorRequirements specifies the accelerator requirements for this runtime
FieldTypeDescription
acceleratorClasses []string AcceleratorClasses lists the names of AcceleratorClasses this runtime supports
minMemory int64 MinMemory specifies minimum GPU memory required in GB Minimum: `0`.
minComputePerformanceTFLOPS int64 MinComputePerformanceTFLOPS specifies minimum compute capability in TFLOPS Minimum: `0`.
minArchitectureVersion string MinArchitectureVersion Compute capability (NVIDIA) or equivalent
requiredFeatures []string RequiredFeatures lists hardware features that must be present. Examples: ["tensor-cores", "fp8", "nvlink"].
preferredPrecisions []string PreferredPrecisions lists numeric precisions in order of preference. Examples: ["fp8", "fp16", "fp32"].
### `AcceleratorResource` {#ome-io-v1beta1-AcceleratorResource} Used by [`AcceleratorClassSpec`](#ome-io-v1beta1-AcceleratorClassSpec).
FieldTypeDescription
name Required string Name of the resource (e.g., nvidia.com/gpu)
quantity Quantity Quantity per accelerator Default: `"1"`.
divisible bool Divisible indicates if the resource can be subdivided
### `AcceleratorSelection` {#ome-io-v1beta1-AcceleratorSelection} Used by [`ComponentStatusSpec`](#ome-io-v1beta1-ComponentStatusSpec). AcceleratorSelection shows what accelerator was selected and why
FieldTypeDescription
acceleratorClass string AcceleratorClass that was selected
reason string Reason explains why this accelerator was selected
nodeSelector map[string]string NodeSelector that was applied to pods
resourceRequests map[string]string ResourceRequests that were applied to pods
### `AcceleratorSelectionPolicy` {#ome-io-v1beta1-AcceleratorSelectionPolicy} Used by [`AcceleratorSelector`](#ome-io-v1beta1-AcceleratorSelector). AcceleratorSelectionPolicy defines how to select among matching accelerators Underlying type: `string`. ### `AcceleratorSelector` {#ome-io-v1beta1-AcceleratorSelector} Used by [`DecoderSpec`](#ome-io-v1beta1-DecoderSpec), [`EngineSpec`](#ome-io-v1beta1-EngineSpec), [`InferenceServiceSpec`](#ome-io-v1beta1-InferenceServiceSpec). AcceleratorSelector defines how to select accelerators for the InferenceService
FieldTypeDescription
acceleratorClass string AcceleratorClass explicitly selects a specific AcceleratorClass. Takes precedence over other selectors.
constraints AcceleratorConstraints Constraints defines requirements that accelerators must meet
policy AcceleratorSelectionPolicy Policy defines the selection policy when multiple accelerators match Allowed values: `BestFit`, `Cheapest`, `MostCapable`, `FirstAvailable`.
### `AnalysisMetric` {#ome-io-v1beta1-AnalysisMetric} Used by [`RolloutAnalysis`](#ome-io-v1beta1-RolloutAnalysis). AnalysisMetric is one success condition: a PromQL query whose scalar result is compared against Threshold with Operator. A multi-series result is reduced to the worst series for the operator before comparison — the maximum for LT/LTE, the minimum for GT/GTE — so the metric passes only when every series passes.
FieldTypeDescription
name Required string Name identifies the metric in status and events; unique within Metrics.
query Required string Query is a PromQL expression, templated with the rollout's revision context before execution. Available variables: {{.Namespace}}, {{.ISVCName}}, {{.Component}}, {{.CanaryService}}, {{.StableService}}, {{.CanaryRevision}}, {{.StableRevision}}. A result with multiple series is reduced to the worst series for Operator before comparison.
operator Required ComparisonOperator Operator is the comparison applied as "result <Operator> Threshold" to decide whether this metric passes. Allowed values: `LT`, `LTE`, `GT`, `GTE`.
threshold Required string Threshold is the bound the query result is compared against. Parsed as a float (e.g. "0.05", "200", "1.5"); admission rejects a non-numeric value.
### `AnalysisMetricResult` {#ome-io-v1beta1-AnalysisMetricResult} Used by [`CanaryStatus`](#ome-io-v1beta1-CanaryStatus). AnalysisMetricResult is the last observed evaluation of one AnalysisMetric. Value is a string (not a float) because the Kubernetes API convention avoids floating-point fields; it is for display only.
FieldTypeDescription
name string Name matches the AnalysisMetric.Name this result is for.
value string Value is the query result at the last sample, formatted for display (e.g. "0.012"). Empty when the sample was inconclusive.
threshold string Threshold echoes the bound that was applied, so the result is self-describing in status.
operator ComparisonOperator Operator echoes the comparison that was applied.
passed bool Passed is whether this metric satisfied its condition at the last sample.
message string Message carries the reason when a metric did not pass or could not be evaluated (e.g. "no data", a query error).
time Time Time is when this result was recorded.
### `AnalysisPrometheus` {#ome-io-v1beta1-AnalysisPrometheus} Used by [`GroupCanary`](#ome-io-v1beta1-GroupCanary). AnalysisPrometheus locates and authenticates to the Prometheus the analysis queries. Validation: at most one of providerRef and serverAddress may be set.
FieldTypeDescription
providerRef MetricProviderRef ProviderRef names a logical metric provider bound per cluster in the operator's metricProviders configuration (shared with AutoscalerPolicy triggers), which supplies the server address, auth secret, and default headers. In a RolloutPolicy body this is the ONLY admitted spelling — a raw cluster-local URL inside a fleet-portable object defeats portability and is an SSRF surface. An unbound name is a deterministic config error: the rollout parks at run open rather than starting a roll whose gate cannot sample.
serverAddress string ServerAddress is the base URL of the Prometheus HTTP API (e.g. http://prometheus.monitoring.svc:9090). Optional: when empty (and no ProviderRef is set), the operator-configured default source (canaryAnalysis.bundledPrometheusAddress) is used; if that is also unset the analysis has no source and its samples read inconclusive. Admission does not check the source — an unreachable or missing source surfaces controller-side as an inconclusive sample, not a rejection.
authRef SecretKeySelector AuthRef points at a Secret key (in the InferenceService's namespace) holding a bearer token sent as "Authorization: Bearer <token>". Omit for an unauthenticated Prometheus (the bundled one). TLS/mTLS is not supported.
headers map[string]string Headers are extra HTTP headers sent on every Prometheus query — e.g. "X-Scope-OrgID" for a multi-tenant Cortex/Thanos/Mimir front-end that scopes queries by tenant. Without the tenant header such a backend returns no data, which the gate reads as a permanent stall. Plaintext (not secret); use AuthRef for the bearer token.
### `AutoscalerClass` {#ome-io-v1beta1-AutoscalerClass} Used by [`AutoscalerPolicySpec`](#ome-io-v1beta1-AutoscalerPolicySpec), [`ComponentAutoscaler`](#ome-io-v1beta1-ComponentAutoscaler), [`ComponentAutoscalerStatus`](#ome-io-v1beta1-ComponentAutoscalerStatus). AutoscalerClass identifies the autoscaler implementation for a Component. Alpha. The API may change without notice. Underlying type: `string`. Allowed values: `HPA`, `KEDA`, `External`, `None`. ### `AutoscalerManagedBy` {#ome-io-v1beta1-AutoscalerManagedBy} Used by [`ComponentAutoscalerStatus`](#ome-io-v1beta1-ComponentAutoscalerStatus). AutoscalerManagedBy identifies who owns the active autoscaler for a Component. Mirrored onto status.components.<comp>.autoscaler.managedBy by the ISVC status writer so operators can tell whether OME is reconciling the HPA / ScaledObject themselves or whether an external operator is driving scale via the published scaleTargetRef. none and external are STATUS-FIELD TWINS — they share the same dispatch branch (delete any OME-managed HPA / SO and stay out) and are distinguished ONLY here in the ManagedBy field. The status writer inspects the resolved Class to emit "external" when the user opted into a non-OME scaler vs "none" when scaling is disabled entirely. Underlying type: `string`. Allowed values: `ome`, `external`, `none`. ### `AutoscalerPolicyProvenance` {#ome-io-v1beta1-AutoscalerPolicyProvenance} Used by [`ComponentAutoscalerStatus`](#ome-io-v1beta1-ComponentAutoscalerStatus). AutoscalerPolicyProvenance reports, on the consuming InferenceService, which policy produced a component's live autoscaler.
FieldTypeDescription
name string Name of the AutoscalerPolicy in the InferenceService's namespace.
observedGeneration int64 ObservedGeneration is the policy generation the rendered block came from.
portableDigest string PortableDigest is the policy's canonical spec digest — equal across clusters iff the policy specs match.
resolvedDigest string ResolvedDigest is a digest of the rendered ComponentAutoscaler plus the effective bounds and bound provider endpoint. It differs per cluster by design; its job is per-home provenance ("did my policy edit land here?").
### `AutoscalerPolicyRef` {#ome-io-v1beta1-AutoscalerPolicyRef} Used by [`ComponentExtensionSpec`](#ome-io-v1beta1-ComponentExtensionSpec). AutoscalerPolicyRef names a same-namespace AutoscalerPolicy that renders this component's autoscaler. Deliberately a sibling of the inline Autoscaler block, not a field inside it: ref and inline block may coexist — the inline block wins — and that coexistence is the preview/rollback mechanism.
FieldTypeDescription
name Required string Name of an AutoscalerPolicy in the InferenceService's namespace. Minimum length: `1`.
kind string Kind of the referenced policy. "ClusterAutoscalerPolicy" is a reserved shape: admission rejects it until the cluster-scoped twin ships. Allowed values: `AutoscalerPolicy`, `ClusterAutoscalerPolicy`. Default: `AutoscalerPolicy`.
### `AutoscalerPolicySpec` {#ome-io-v1beta1-AutoscalerPolicySpec} Used by [`AutoscalerPolicy`](#ome-io-v1beta1-AutoscalerPolicy). AutoscalerPolicySpec carries exactly one parameterized autoscaler template. A policy that needs different behavior for different components is two policies; components compose by each choosing a ref. Validation: class KEDA requires keda and forbids hpa; class HPA forbids keda.
FieldTypeDescription
enforcement PolicyEnforcement Enforcement tier. v1 admits only "Default"; "Required" is a reserved shape rejected at admission. Allowed values: `Default`, `Required`. Default: `Default`.
class Required AutoscalerClass Class selects the template. External and None are inline-only: "someone else scales this component" is a per-service statement, not a reusable behavior. Allowed values: `HPA`, `KEDA`.
keda KedaPolicyTemplate Keda holds the parameterized KEDA template. Required when Class=KEDA.
hpa HPAAutoscaler HPA holds HorizontalPodAutoscaler configuration, verbatim (no templating). Optional when Class=HPA; if absent the rendered block gets the default CPU=80% metric downstream, exactly like an inline block with a nil HPA field.
### `AutoscalerPolicyStatus` {#ome-io-v1beta1-AutoscalerPolicyStatus} Used by [`AutoscalerPolicy`](#ome-io-v1beta1-AutoscalerPolicy). AutoscalerPolicyStatus is bounded: counts and digests, never consumer name lists — per-consumer truth lives on each InferenceService's own status.
FieldTypeDescription
observedGeneration int64 ObservedGeneration is the spec generation this status reflects.
portableDigest string PortableDigest is a digest of the spec after API defaulting, in a canonical encoding. Equal across clusters iff the specs are semantically identical; the multi-cluster preflight compares it against the control plane's copy.
attachedComponents int32 AttachedComponents counts the components in this namespace that currently reference the policy.
conditions []Condition
### `BackendPolicyRef` {#ome-io-v1beta1-BackendPolicyRef} Used by [`TrafficStatus`](#ome-io-v1beta1-TrafficStatus). BackendPolicyRef identifies the OME-emitted backend policy resource sibling to the InferenceService.
FieldTypeDescription
apiVersion string APIVersion of the resource (e.g. "gateway.envoyproxy.io/v1alpha1").
kind string Kind of the resource (e.g. "BackendTrafficPolicy").
name string Name of the resource, in the same namespace as the InferenceService.
### `BaseModelSpec` {#ome-io-v1beta1-BaseModelSpec} Used by [`BaseModel`](#ome-io-v1beta1-BaseModel), [`ClusterBaseModel`](#ome-io-v1beta1-ClusterBaseModel). BaseModelSpec defines the desired state of BaseModel
FieldTypeDescription
modelFormat ModelFormat
modelType string ModelType defines the architecture family of the model (e.g., "bert", "gpt2", "llama"). This value typically corresponds to the "model_type" field in a Hugging Face model's config.json. It is used to identify the transformer architecture and inform runtime selection and tokenizer behavior.
modelFramework ModelFrameworkSpec ModelFramework specifies the underlying framework used by the model, such as "ONNX", "TensorFlow", "PyTorch", "Transformer", or "TensorRTLLM". This value helps determine the appropriate runtime for model serving.
modelArchitecture string ModelArchitecture specifies the concrete model implementation or head, such as "LlamaForCausalLM", "GemmaForCausalLM", or "MixtralForCausalLM". This is often derived from the "architectures" field in Hugging Face config.json.
quantization ModelQuantization Quantization defines the quantization scheme applied to the model weights, such as "fp8", "fbgemm_fp8", "int4", "nvfp4", or "mxfp4". This influences runtime compatibility and performance.
modelParameterSize string ModelParameterSize indicates the total number of parameters in the model, expressed in human-readable form such as "7B", "13B", or "175B". This can be used for scheduling or runtime selection.
modelCapabilities []string ModelCapabilities of the model, e.g., "TEXT_GENERATION", "TEXT_SUMMARIZATION", "TEXT_EMBEDDINGS"
apiCapabilities []string API capabilities supported by the model, e.g., "OPENAI_V1_CHAT_COMPLETIONS"
modelConfiguration RawExtension Configuration of the model, stored as generic JSON for flexibility.
storage Required StorageSpec Storage configuration for the model
distribution Distribution Since v1.3. Distribution selects how the model's weights are laid out across the cluster. PerNode, the default, puts a full copy on each selected node. Sharded is for loading the model through an external cache that holds it in chunks across the cluster. Sharded is in development: OME has no way to configure such a cache yet, so a Sharded model can't be served. pvc:// models can't use Sharded.
Embedded ModelExtensionSpec ModelExtension is the common extension of the model The fields of `ModelExtensionSpec` appear directly in this object.
servingMode []string ServingMode of the model, e.g., ["On-demand", "Dedicated"]
maxTokens int32 MaxTokens is the maximum number of tokens that can be processed by the model
diffusionPipeline DiffusionPipelineSpec DiffusionPipeline captures pipeline-specific metadata for diffusion models (from model_index.json).
additionalMetadata map[string]string Additional metadata for the model
### `BenchmarkJobSpec` {#ome-io-v1beta1-BenchmarkJobSpec} Used by [`BenchmarkJob`](#ome-io-v1beta1-BenchmarkJob). BenchmarkJobSpec defines the specification for a benchmark job. All fields within this specification collectively represent the desired state and configuration of a BenchmarkJob.
FieldTypeDescription
huggingFaceSecretReference HuggingFaceSecretReference HuggingFaceSecretReference is a reference to a Kubernetes Secret containing the Hugging Face API key. The referenced Secret must reside in the same namespace as the BenchmarkJob.
endpoint Required EndpointSpec Endpoint is the reference to the inference service to benchmark.
serviceMetadata ServiceMetadata ServiceMetadata records metadata about the backend model server or service being benchmarked. This includes details such as server engine, version, and GPU configuration for filtering experiments.
task Required string Task specifies the task to benchmark, pattern: <input-modality>-to-<output-modality> (e.g., "text-to-text", "image-to-text"). Allowed values: `text-to-text`, `image-to-text`, `text-to-embeddings`, `image-to-embeddings`.
trafficScenarios []string TrafficScenarios contains a list of traffic scenarios to simulate during the benchmark. If not provided, defaults will be assigned via genai-bench.
numConcurrency []int NumConcurrency defines a list of concurrency levels to test during the benchmark. If not provided, defaults will be assigned via genai-bench.
maxTimePerIteration Required int MaxTimePerIteration specifies the maximum time (in minutes) for a single iteration. Each iteration runs for a specific combination of TrafficScenarios and NumConcurrency.
maxRequestsPerIteration Required int MaxRequestsPerIteration specifies the maximum number of requests for a single iteration. Each iteration runs for a specific combination of TrafficScenarios and NumConcurrency.
additionalRequestParams map[string]string AdditionalRequestParams contains additional request parameters as a map.
dataset StorageSpec Dataset is the dataset used for benchmarking. It is optional and only required for tasks other than "text-to-<output-modality>".
outputLocation Required StorageSpec OutputLocation specifies where the benchmark results will be stored (e.g., object storage).
resultFolderName string ResultFolderName specifies the name of the folder that stores the benchmark result. A default name will be assigned if not specified.
podOverride PodOverride PodOverride customizes the benchmark pod. OME merges it into the pod it builds by default, so fields you leave unset keep their defaults.
### `BenchmarkJobStatus` {#ome-io-v1beta1-BenchmarkJobStatus} Used by [`BenchmarkJob`](#ome-io-v1beta1-BenchmarkJob). BenchmarkJobStatus reflects the state and results of the benchmark job. It will be set and updated by the controller.
FieldTypeDescription
state string State represents the current state of the benchmark job: "Pending", "Running", "Completed", "Failed". Allowed values: `Pending`, `Running`, `Completed`, `Failed`.
startTime Time StartTime is the timestamp for when the benchmark job started.
completionTime Time CompletionTime is the timestamp for when the benchmark job completed, either successfully or unsuccessfully.
lastReconcileTime Time LastReconcileTime is the timestamp for the last time the job was reconciled by the controller.
failureMessage string FailureMessage contains any error messages if the benchmark job failed.
details string Details provide additional information or metadata about the benchmark job.
### `CanaryFailure` {#ome-io-v1beta1-CanaryFailure} Used by [`CanaryStatus`](#ome-io-v1beta1-CanaryStatus). CanaryFailure is why and when a canary parked.
FieldTypeDescription
reason CanaryFailureReason Reason names the gate that gave up. Allowed values: `CapacityTimeout`, `AnalysisStalled`, `StableRevisionMissing`.
time Time Time is when the canary parked.
### `CanaryFailureReason` {#ome-io-v1beta1-CanaryFailureReason} Used by [`CanaryFailure`](#ome-io-v1beta1-CanaryFailure). CanaryFailureReason enumerates why a canary parked Failed. Underlying type: `string`. ### `CanaryStatus` {#ome-io-v1beta1-CanaryStatus} Used by [`ComponentStatusSpec`](#ome-io-v1beta1-ComponentStatusSpec), [`InferenceServiceStatus`](#ome-io-v1beta1-InferenceServiceStatus). CanaryStatus is the canary executor's persistent state machine for one unit's spec.rollout.groups[].canary run: which step is active, when it was entered (Auto promotion measures Pause.Duration from here), and which revisions are the canary and the stable. It is written when a canary arms and replaced in place when a new target re-arms the unit; it is never cleared, so it also records how the last run ended. A completed run keeps CurrentStep equal to the number of steps with ObservedTrafficWeight 100 and StableRevisionHash empty; a rollback keeps RolledBackRevisionHash; a park keeps Failed. Absent only until the unit's first canary arms.
FieldTypeDescription
targetID string TargetID identifies the canary group's pinned Component target set. A new target set re-arms the canary even when the externally routed Component's revision did not change. It is scoped to the canary group rather than the whole rollout run, so unrelated groups cannot reset canary progress.
canaryRevisionHash string CanaryRevisionHash is the revision hash being rolled out.
stableRevisionHash string StableRevisionHash is the revision hash that was serving as stable when the canary began — the rollback target. It is preserved across mid-canary retargets so a rollback always returns to the pre-canary stable revision, never to a partially-rolled intermediate. Cleared when the canary completes (the canary revision becomes the new stable).
currentStep int32 CurrentStep is the zero-based index into spec.rollout.groups[i].canary.steps; equal to the number of steps once the canary has completed.
stepEnteredTime Time StepEnteredTime is when CurrentStep was entered. Auto promotion measures Pause.Duration from this timestamp.
observedTrafficWeight int32 ObservedTrafficWeight is the external traffic weight currently programmed for the canary revision (mirrors the active step's TrafficWeight once applied).
promotedThrough string PromotedThrough is the ome.io/rollout-promote value the most recent step advance applied. It is stamped in the same status write as the advance — the durable record of the promotion, since metadata (the annotation) and status cannot be written atomically. While set, a lingering annotation with this value is inert (already applied; removal is retried best-effort). While the rollout is in progress it clears once the annotation is observed removed, re-arming manual promotion for later steps.
preStepHold bool PreStepHold holds the canary's traffic at its currently-programmed weight after a repin whose clamped step would raise exposure: a repin may only hold or tighten, so the raise waits for an explicit ome.io/rollout-promote (value = the canary revision hash). Capacity may still converge to the clamped step — capacity ahead of traffic is the supported warm-up pattern; only traffic and step advance hold.
rolledBackRevisionHash string RolledBackRevisionHash is set when a rollback (ome.io/rollout-rollback) abandons a canary: it records the primary Component's rejected revision hash. While set, the group is held on its stable revisions and the rejected target set is NOT retried — even after the annotation is cleared. The rollout re-arms only when a different target set appears.
analysisFailedChecks int32 AnalysisFailedChecks counts failing analysis samples in the CURRENT step (reset to zero on each advance). Auto-rollback fires when it reaches Analysis.FailureLimit. Set only under Promotion=Analysis.
lastEvaluationTime Time LastEvaluationTime is when the analysis metrics were last sampled. The controller throttles sampling to at most once per Analysis.Interval using this timestamp, so a burst of unrelated reconciles cannot over-count failures. Set only under Promotion=Analysis.
lastConclusiveEvaluationTime Time LastConclusiveEvaluationTime is when analysis last produced a conclusive sample (pass or fail — i.e. Prometheus answered). The stall timeout is measured from here: a long run of inconclusive samples escalates to Failed. Set only under Promotion=Analysis.
metricResults []AnalysisMetricResult MetricResults is the most recent per-metric evaluation, for observability (kubectl get isvc shows why a step held or rolled back). Set only under Promotion=Analysis.
capacityWaitSince Time CapacityWaitSince is when the current step's capacity gate became unmet. The ready timeout is measured from here and never from the step's soak anchor, so a long soak cannot spend the capacity budget and a capacity dip cannot restart the soak. Cleared once the step's capacity is met.
failed CanaryFailure Failed records that the canary is parked at CurrentStep: the capacity gate stayed unmet past the ready timeout, analysis stayed inconclusive past the stall timeout, or a rollback found no stable revision to return to. While set the step machine does not run, the phase reads Failed and the stable revision keeps serving. A re-arm toward a new target clears any park. A rollback request clears a capacity-timeout or analysis park and drains the rejected revision; a park for a missing stable revision refuses the request and removes it, since the revert it asks for is the one that could not run.
### `CandidateAllocationStatus` {#ome-io-v1beta1-CandidateAllocationStatus} Used by [`CandidatePlacement`](#ome-io-v1beta1-CandidatePlacement). CandidateAllocationStatus separates original, currently authorized, and desired floors. A zero current floor does not authorize deletion before traffic drains.
FieldTypeDescription
clusterUID UID
inventoryPending bool InventoryPending prevents unknown standing resources from becoming free migration capacity. It is cleared only by an identified member inventory.
homeInputsPending bool HomeInputsPending holds movement when current full-policy inputs cannot be verified, while retaining the last accepted desired floors.
raceCandidate bool RaceCandidate authorizes cleanup of a Single race copy after another candidate wins. A retained winner does not carry this permission.
replacementStartedAt MicroTime ReplacementStartedAt persists the start of an authorized bounded probe. The configured replacement timeout is evaluated against this instant.
matched bool Matched distinguishes a desired full-policy home from an outgoing home, including an affinity that matches every registration without terms.
currentHome PlacementHomePolicy CurrentHome retains the full policy authorized at a home through draining.
desiredHome PlacementHomePolicy DesiredHome is present for every intended full-policy home.
matchingTerms []int32 MatchingTerms contains zero-based indexes into the source's affinity terms.
weight int64 Weight is the effective static allocation weight, when applicable. Minimum: `0`.
componentMatches []ComponentAffinityMatch ComponentMatches records, under the ComponentAffinity policy, how each component other than the primary one matched this cluster. MatchingTerms and Weight hold the primary component's match. The accepted plan keeps them so that member floors never follow unaccepted label changes. Maximum items: `2`.
capacity PlacementCapacitySample Capacity is the accepted hardware sample, when capacity determines weight.
originalReplicas int32 Minimum: `0`.
currentReplicas int32 Minimum: `0`.
desiredReplicas int32 Minimum: `0`.
drainRequested bool DrainRequested withdraws this home from routing before physical removal.
### `CandidateAutoscalingStatus` {#ome-io-v1beta1-CandidateAutoscalingStatus} Used by [`CandidatePlacement`](#ome-io-v1beta1-CandidatePlacement). CandidateAutoscalingStatus is the per-home AutoscalerPolicy digest state the watch-funnel lifts off a derived InferenceService.
FieldTypeDescription
policies []CandidatePolicyDigest Policies reports the portable digest of each policy as observed on this home. Every entry must match the control plane's copy; a mismatch is distribution skew.
components map[ComponentType]CandidateComponentAutoscaling Components maps each policy-consuming component to its per-home resolved digest ("did my policy edit land here?").
ready bool Ready is true when every policy-consuming component on this home reports specSource=policy with a resolved digest.
### `CandidateComponentAutoscaling` {#ome-io-v1beta1-CandidateComponentAutoscaling} Used by [`CandidateAutoscalingStatus`](#ome-io-v1beta1-CandidateAutoscalingStatus). CandidateComponentAutoscaling is one component's rendered-autoscaler state on one home.
FieldTypeDescription
resolvedDigest string
ready bool
### `CandidatePlacement` {#ome-io-v1beta1-CandidatePlacement} Used by [`PlacementStatus`](#ome-io-v1beta1-PlacementStatus). CandidatePlacement is the per-cluster state of a fan-out candidate.
FieldTypeDescription
allocation CandidateAllocationStatus Allocation is the persisted floor and identity of this member.
appliedPlanID string AppliedPlanID identifies the allocation acknowledged by this member.
observationKnown bool ObservationKnown distinguishes a current observation from retained evidence.
observationFailingSince Time Since v1.3. ObservationFailingSince is when the control plane's reads of this home started failing. It is unset while reads succeed. While the configured observation grace lasts from this time, the home keeps the ready count from its last successful read.
cluster string Cluster is the WorkloadCluster name.
phase CandidatePlacementPhase Phase is the candidate's state.
endpoint URL Endpoint is this candidate's own externally-addressable URL, mirrored from its derived InferenceService's status.url once admitted AND addressable. In Single mode only the winner carries one and the top-level PlacementStatus.Endpoint is authoritative; in All/Split mode every serving home carries its own, and this list is the source of truth an external LB/DNS consumes to route across homes. Empty until the home is addressable.
admittedReplicas int32 AdmittedReplicas is how many replicas this home's Kueue has admitted. In Split it also drives global accounting: the control plane sums it across homes to decide whether the desired count is met.
readyReplicas int32 ReadyReplicas is how many of this home's replicas are serving traffic. It is the live count basis and health gate for routing across homes.
autoscaling CandidateAutoscalingStatus Autoscaling mirrors this home's AutoscalerPolicy state so digest skew between homes is visible from the source InferenceService. Set only when the source references at least one policy.
rollout CandidateRolloutStatus Rollout mirrors this home's rollout-run provenance (run identity plus per-group plan digests, never the plan bodies) so plan drift between homes is visible from the source InferenceService. Set only when the source's rollout groups reference a RolloutPolicy.
### `CandidatePlacementPhase` {#ome-io-v1beta1-CandidatePlacementPhase} Used by [`CandidatePlacement`](#ome-io-v1beta1-CandidatePlacement). CandidatePlacementPhase is the per-cluster state of a fan-out candidate. Underlying type: `string`. Allowed values: `Admitting`, `Placed`, `Admitted`. ### `CandidatePolicyDigest` {#ome-io-v1beta1-CandidatePolicyDigest} Used by [`CandidateAutoscalingStatus`](#ome-io-v1beta1-CandidateAutoscalingStatus). CandidatePolicyDigest pairs a policy name with the portable digest this home observed for it.
FieldTypeDescription
name string
portableDigest string
### `CandidateRolloutGroup` {#ome-io-v1beta1-CandidateRolloutGroup} Used by [`CandidateRolloutStatus`](#ome-io-v1beta1-CandidateRolloutStatus). CandidateRolloutGroup is one pinned group's provenance as observed on a home.
FieldTypeDescription
source RolloutPlanSource Source is where the group's progression came from (Inline or Policy).
policyName string PolicyName names the RolloutPolicy when Source is Policy.
portableDigest string PortableDigest is the pinned progression body's portable digest.
### `CandidateRolloutLastRun` {#ome-io-v1beta1-CandidateRolloutLastRun} Used by [`CandidateRolloutStatus`](#ome-io-v1beta1-CandidateRolloutStatus). CandidateRolloutLastRun is the bounded outcome of a home's last closed run.
FieldTypeDescription
outcome RolloutRunOutcome Outcome is how the run ended.
digest string Digest folds the closed run's per-group portable digests into one order-sensitive comparable value.
### `CandidateRolloutStatus` {#ome-io-v1beta1-CandidateRolloutStatus} Used by [`CandidatePlacement`](#ome-io-v1beta1-CandidatePlacement). CandidateRolloutStatus is the bounded per-home rollout-run state the watch funnel lifts off a derived InferenceService: run identity and per-group provenance digests, never the pinned plan bodies (fleet-drift dashboards compare digests; plan content lives in the policy's git history).
FieldTypeDescription
activeRunID string ActiveRunID is the home's open rollout run, empty when none is open.
activeGroups []CandidateRolloutGroup ActiveGroups is the active run's per-group provenance in pinned-plan order: which source each group pinned and under which digest.
lastRun CandidateRolloutLastRun LastRun is the bounded record of the home's most recently closed run.
### `CapacitySource` {#ome-io-v1beta1-CapacitySource} Used by [`TrafficMapCapacity`](#ome-io-v1beta1-TrafficMapCapacity). CapacitySource names which input produced an entry's Allocated count. Underlying type: `string`. Allowed values: `ControlPlane`, `Endpoint`. ### `ClusterAffinityTerm` {#ome-io-v1beta1-ClusterAffinityTerm} Used by [`ComponentClusterAffinity`](#ome-io-v1beta1-ComponentClusterAffinity), [`PlacementSpec`](#ome-io-v1beta1-PlacementSpec). ClusterAffinityTerm selects WorkloadClusters by ANDing its requirements. Multiple terms form a union; a weight assigns replica shares to each match. Validation: a cluster affinity term must contain a requirement.
FieldTypeDescription
weight int32 Weight is permitted only for static Split. If any term has an explicit weight, matching term weights add and omitted weights contribute one. Omission must be preserved to distinguish unweighted overlapping terms. Weights are replica ratios, so they have no upper bound. Minimum: `1`.
matchExpressions []ClusterSelectorRequirement MatchExpressions selects the WorkloadCluster's actual labels. Maximum items: `64`.
matchFields []ClusterSelectorRequirement MatchFields selects the real metadata.name using In or NotIn. Multiple names are allowed; a label named metadata.name does not affect this match. Maximum items: `64`.
### `ClusterConnectionSource` {#ome-io-v1beta1-ClusterConnectionSource} Used by [`WorkloadClusterSpec`](#ome-io-v1beta1-WorkloadClusterSpec). ClusterConnectionSource is a pluggable connection (modeled on Kueue's MultiKueueCluster.ClusterSource): exactly one of an in-cluster kubeconfig Secret or a SIG-Multicluster ClusterProfile reference. Validation: exactly one of kubeConfig or clusterProfileRef must be set.
FieldTypeDescription
kubeConfig KubeConfigSource
clusterProfileRef ClusterProfileRef
### `ClusterProfileRef` {#ome-io-v1beta1-ClusterProfileRef} Used by [`ClusterConnectionSource`](#ome-io-v1beta1-ClusterConnectionSource). ClusterProfileRef references a SIG-Multicluster cluster-inventory-api ClusterProfile. The reference is recorded but not resolved.
FieldTypeDescription
name Required string
### `ClusterSelectorRequirement` {#ome-io-v1beta1-ClusterSelectorRequirement} Used by [`ClusterAffinityTerm`](#ome-io-v1beta1-ClusterAffinityTerm). ClusterSelectorRequirement tests one label or supported object field.
FieldTypeDescription
key Required string Key is a label key, or metadata.name for a field requirement. Minimum length: `1`.
operator Required NodeSelectorOperator Operator follows Kubernetes node-selector semantics for labels. Allowed values: `In`, `NotIn`, `Exists`, `DoesNotExist`, `Gt`, `Lt`.
values []string Values is nonempty for In/NotIn, empty for Exists/DoesNotExist, and a single integer for Gt/Lt. Maximum items: `64`.
### `ComparisonOperator` {#ome-io-v1beta1-ComparisonOperator} Used by [`AnalysisMetric`](#ome-io-v1beta1-AnalysisMetric), [`AnalysisMetricResult`](#ome-io-v1beta1-AnalysisMetricResult). ComparisonOperator is how an AnalysisMetric result is compared to its Threshold. "result <op> threshold" being true means the metric is healthy. Underlying type: `string`. ### `ComponentAffinityMatch` {#ome-io-v1beta1-ComponentAffinityMatch} Used by [`CandidateAllocationStatus`](#ome-io-v1beta1-CandidateAllocationStatus). ComponentAffinityMatch records how one component's own affinity terms matched a cluster.
FieldTypeDescription
component ComponentType Allowed values: `engine`, `decoder`, `router`.
matchingTerms []int32 MatchingTerms contains zero-based indexes into the component's terms.
weight int64 Weight is the component's effective static weight, when applicable. Minimum: `0`.
### `ComponentAutoscaler` {#ome-io-v1beta1-ComponentAutoscaler} Used by [`ComponentExtensionSpec`](#ome-io-v1beta1-ComponentExtensionSpec), [`InferenceReplicaSpec`](#ome-io-v1beta1-InferenceReplicaSpec). ComponentAutoscaler configures the autoscaler for a single Component (engine / decoder / router). Takes priority over the legacy ome.io/autoscalerClass annotation for this Component, and is the only way to configure per-Component autoscaling on an InferenceService. Alpha. The API may change without notice.
FieldTypeDescription
class Required AutoscalerClass Class selects the autoscaler implementation. Allowed values: `HPA`, `KEDA`, `External`, `None`.
keda KedaAutoscaler Keda holds KEDA-specific configuration. Required when Class == "KEDA".
hpa HPAAutoscaler HPA holds HorizontalPodAutoscaler-specific configuration. Optional when Class == "HPA"; if absent the controller emits a default CPU=80% HPA.
### `ComponentAutoscalerStatus` {#ome-io-v1beta1-ComponentAutoscalerStatus} Used by [`ComponentStatusSpec`](#ome-io-v1beta1-ComponentStatusSpec). ComponentAutoscalerStatus reports per-Component autoscaler state on the InferenceService. Mirrors the resolved ComponentAutoscaler block plus the live HPA / ScaledObject metrics so an operator can read the authoritative scaler shape, who owns it, and what it's currently doing — all from the parent ISVC without chasing IRs and scalers separately. Populated by the ISVC status writer for RawDeployment- and OMENative-managed Components. The writer degrades gracefully when a Component has no live scaler — ManagedBy reports "none" and counters stay zero without crashing. Alpha. The shape may change without notice.
FieldTypeDescription
class AutoscalerClass Class echoes the resolved autoscaler class as picked by the Component's deployment-mode resolver. One of HPA | KEDA | External | None. Mirrors the input that drove dispatch so the operator can confirm the inheritance chain landed on the expected class.
managedBy AutoscalerManagedBy ManagedBy reports who owns the underlying scaler object. Distinguished from Class because none and external are dispatch-equivalent (both => delete any OME-managed HPA / SO); the surface-level distinction lives here. - "ome": OME emitted the HPA / ScaledObject; conditions and replica counters below mirror its live status. - "external": operator-owned scaler; OME publishes scaleTargetRef and stays out. Conditions empty. - "none": no OME-managed scaler is active. Conditions empty; counters zero. Allowed values: `ome`, `external`, `none`.
specSource string SpecSource reports which layer of the ISVC -> policy -> runtime -> legacy -> default inheritance chain produced the resolved Autoscaler block. One of "isvc" | "policy" | "runtime" | "legacy" | "default". Mirrors autoscaler.SpecSource so the operator can debug which layer is contributing the live config.
policy AutoscalerPolicyProvenance Policy identifies the AutoscalerPolicy that rendered the live block. Set only when SpecSource is "policy".
shadowedPolicyRef ShadowedAutoscalerPolicy ShadowedPolicyRef reports a policy ref outranked by an inline block (SpecSource "isvc" with spec.<component>.autoscalerPolicyRef set). Its wouldRenderDigest is the in-cluster preview of what the policy would produce if the inline block were removed.
currentReplicas int32 CurrentReplicas is mirrored from the HPA / ScaledObject status. Zero when ManagedBy != "ome" or when the scaler has not yet reported.
desiredReplicas int32 DesiredReplicas is mirrored from the HPA / ScaledObject status. Zero when ManagedBy != "ome" or when the scaler has not yet reported.
lastScaleTime Time LastScaleTime mirrors the HPA / ScaledObject's last scale event. Nil when ManagedBy != "ome", when the scaler has not yet reported, or when no scaling has occurred since the scaler was created.
conditions []Condition Conditions mirrors the HPA's or ScaledObject's conditions verbatim (HPA: ScalingActive / AbleToScale / ScalingLimited; ScaledObject: Ready / Active / Fallback / Paused). Empty when ManagedBy != "ome" — operator-owned scalers are surfaced via scaleTargetRef instead.
### `ComponentBoundsField` {#ome-io-v1beta1-ComponentBoundsField} Used by [`ReplicaValueSource`](#ome-io-v1beta1-ReplicaValueSource). ComponentBoundsField names a replica bound on the consuming component's ComponentExtensionSpec that a ReplicaValueSource resolves against. Underlying type: `string`. Allowed values: `MaxReplicas`, `MinReplicas`. ### `ComponentClusterAffinity` {#ome-io-v1beta1-ComponentClusterAffinity} Used by [`PlacementSpec`](#ome-io-v1beta1-PlacementSpec). ComponentClusterAffinity holds one affinity term list per component. Every listed component must match the same clusters. In Split, each list's weights set that component's shares; in Single and All the lists only select.
FieldTypeDescription
engine []ClusterAffinityTerm Engine selects clusters for the engine and, in Split, weights its shares. It is required when the service declares an engine. Minimum items: `1`. Maximum items: `64`.
decoder []ClusterAffinityTerm Decoder selects clusters for the decoder and, in Split, weights its shares over the clusters that hold engine replicas. It is required when the service declares a decoder. Minimum items: `1`. Maximum items: `64`.
router []ClusterAffinityTerm Router selects clusters for the router. In Split, it divides router.minReplicas across the clusters that hold engine replicas; without it, each such cluster runs the full router policy. Minimum items: `1`. Maximum items: `64`.
### `ComponentExtensionSpec` {#ome-io-v1beta1-ComponentExtensionSpec} Used by [`DecoderSpec`](#ome-io-v1beta1-DecoderSpec), [`EngineSpec`](#ome-io-v1beta1-EngineSpec), [`RouterSpec`](#ome-io-v1beta1-RouterSpec). ComponentExtensionSpec defines the deployment configuration for a given InferenceService component
FieldTypeDescription
minReplicas int Minimum number of replicas, defaults to 1 but can be set to 0 to enable scale-to-zero.
maxReplicas int Maximum number of replicas for autoscaling.
timeoutSeconds int64 TimeoutSeconds specifies the number of seconds to wait before timing out a request to the component.
labels map[string]string Labels that will be added to the component pod. More info: http://kubernetes.io/docs/user-guide/labels
annotations map[string]string Annotations that will be added to the component pod. More info: http://kubernetes.io/docs/user-guide/annotations
servicePortAppProtocols map[string]string Since v1.3. ServicePortAppProtocols maps generated Service port names to their Kubernetes appProtocol values. Declared ports use their container port name.
minAvailable IntOrString MinAvailable specifies how many component pods must still be available after the eviction
maxUnavailable IntOrString MaxUnavailable specifies how many component pods can be unavailable
deploymentStrategy DeploymentStrategy The deployment strategy to use to replace existing pods with new ones. Only applicable for raw deployment mode.
lifecycle LifecycleSpec Since v1.3. Lifecycle groups OMENative-specific lifecycle policies for this Component. Applies only when the Component resolves to deploymentMode OMENative (spec.deploymentMode or the per-Component ome.io/deploymentMode annotation); ignored otherwise. A field left unset here inherits the ServingRuntime's value for the Component; the controller fills what neither sets from cluster configuration and fixed fallbacks and never writes them back. The status counterpart is status.components.<component>.lifecycle.
autoscaler ComponentAutoscaler Since v1.3. Autoscaler configures the per-Component autoscaler dispatch and the underlying KEDA / HPA configuration. Takes priority over the legacy ome.io/autoscalerClass annotation for this Component, and is the only way to configure per-Component autoscaling: scale metrics live here (Autoscaler.HPA.Metrics), alongside MinReplicas / MaxReplicas above. Alpha. The API may change without notice.
autoscalerPolicyRef AutoscalerPolicyRef Since v1.3. AutoscalerPolicyRef names a same-namespace AutoscalerPolicy whose template renders this Component's autoscaler. An inline Autoscaler block above always outranks the ref; the two may coexist, which is the documented preview/rollback mechanism. Alpha. The API may change without notice.
### `ComponentStatusSpec` {#ome-io-v1beta1-ComponentStatusSpec} Used by [`InferenceServiceStatus`](#ome-io-v1beta1-InferenceServiceStatus). ComponentStatusSpec describes the state of the component
FieldTypeDescription
url URL URL holds the primary url for this component. It generally has the form http[s]://{name}.{namespace}.{cluster-level-suffix}
restURL URL REST endpoint of the component if available.
address Addressable Addressable endpoint for the InferenceService
selectedAccelerator AcceleratorSelection SelectedAccelerator shows which AcceleratorClass was selected
lifecycle LifecycleStatus Since v1.3. Lifecycle reports OMENative-managed lifecycle state for this Component when the Component resolves to deploymentMode OMENative (spec.deploymentMode or the per-Component ome.io/deploymentMode annotation). Counterpart of the LifecycleSpec sub-block on ComponentExtensionSpec. Nil otherwise.
rolloutPhase RolloutPhase Since v1.3. RolloutPhase is the canary step machine's state for this Component when a spec.rollout canary group governs it. One of Stable, Canarying, Pending, Paused, Promoting, RollingBack, RolledBack, Failed. Written on the Component the step machine drives (the unit's entrypoint) and never cleared: it reads Stable between runs, a completed canary included. Empty for Components no canary group governs (blueGreen/rollingUpdate groups report under status.rolloutCoordination) and on deployment modes without the rollout contract — e.g. RawDeployment. Allowed values: `Stable`, `Canarying`, `Pending`, `Paused`, `Promoting`, `RollingBack`, `RolledBack`, `Failed`.
latestReadyRevision string LatestReadyRevision is the per-revision Service name (`--rev-`) fronting the most recent revision whose pods reached Ready. Equal to LatestRolledoutRevision once the rollout completes; set ahead of it during in-flight rollouts.
latestRolledoutRevision string Since v1.3. LatestRolledoutRevision is the per-revision Service name (`--rev-`) of the most recent revision that fully owns this Component's traffic (i.e., the rollout has completed). Drives the consumer-side HTTPRoute backendRef.
previousRolledoutRevision string Since v1.3. PreviousRolledoutRevision is the per-revision Service name (`--rev-`) of the revision that fully owned this Component's traffic immediately before LatestRolledoutRevision; recorded when LatestRolledoutRevision advances. Retained for diagnosis and traffic reference during partial rollbacks.
traffic []ComponentTrafficTarget Since v1.3. Traffic reports per-revision traffic weights for this Component. Each entry corresponds to one revision currently receiving traffic. The HTTPRoute builder reads this to emit weighted backendRefs.
canary CanaryStatus Since v1.3. Canary tracks the canary step machine for the unit this Component belongs to — the router alone, or engine+decoder together. It is written on the unit's entrypoint Component (the router, or the engine) and is absent on a secondary, so a reader never sees two copies of one run. Absent until the unit's first canary arms; afterwards it carries the unit's most recent run, a finished one included (see CanaryStatus). Units advance independently, which is why the state cannot live in the single InferenceServiceStatus.Canary: two runs would overwrite each other's step counter and revision pair. That field is retained as an alias for the entrypoint unit's run so existing readers keep working.
autoscaler ComponentAutoscalerStatus Since v1.3. Autoscaler reports the per-Component autoscaler state — resolved Class / ManagedBy / SpecSource and (when ManagedBy == "ome") live CurrentReplicas / DesiredReplicas / LastScaleTime / Conditions mirrored from the underlying HPA or ScaledObject. Populated by the ISVC status writer for RawDeployment- and OMENative-managed Components. See ComponentAutoscalerStatus for the full field semantics.
scaleTargetRef ScaleTargetRef Since v1.3. ScaleTargetRef is the canonical scale target for this Component. For OMENative-managed Components this points at the InferenceReplica's /scale subresource; for RawDeployment-managed Components it points at the underlying Deployment. Published so external scalers (when Autoscaler.ManagedBy == "external") know the GroupKind they should target. Populated whenever the Component has a defined scale target — independent of whether an OME-managed HPA / SO is active.
### `ComponentTrafficTarget` {#ome-io-v1beta1-ComponentTrafficTarget} Used by [`ComponentStatusSpec`](#ome-io-v1beta1-ComponentStatusSpec), [`InferenceReplicaStatus`](#ome-io-v1beta1-InferenceReplicaStatus). ComponentTrafficTarget describes the percentage of traffic routed to one revision of one Component. RevisionName is the per-revision Service name produced by OMENative's coordination layer (e.g. `llama-engine-rev-abc123`), which the HTTPRoute builder consumes directly as a backend reference.
FieldTypeDescription
revisionName string RevisionName is the per-revision Service name for this target.
percent int32 Percent is the percentage of traffic the consumer should route to RevisionName. Sum across all entries for one Component is 100. Minimum: `0`. Maximum: `100`.
tag string Tag is an optional short identifier for the target (e.g. "latest", "prev"). Cosmetic; not used by the consumer.
latestRevision bool LatestRevision is true when this entry corresponds to the LatestRolledoutRevision for the Component.
pairingProtocol string PairingProtocol is the engine↔decoder wire-compatibility token the target's revision was minted under (spec.rollout.pairingProtocol at mint time). Consumers MUST only pair engine and decoder targets whose PairingProtocol values are equal; an empty value pairs with anything.
### `ComponentType` {#ome-io-v1beta1-ComponentType} Used by [`ComponentAffinityMatch`](#ome-io-v1beta1-ComponentAffinityMatch), [`InferenceReplicaSpec`](#ome-io-v1beta1-InferenceReplicaSpec), [`MigrationHistoryEntry`](#ome-io-v1beta1-MigrationHistoryEntry), [`PlacementComponentDemand`](#ome-io-v1beta1-PlacementComponentDemand), [`PlacementComponentFloor`](#ome-io-v1beta1-PlacementComponentFloor), [`ProportionalPolicy`](#ome-io-v1beta1-ProportionalPolicy), [`RolloutCoordinationGroupStatus`](#ome-io-v1beta1-RolloutCoordinationGroupStatus), [`RolloutGroup`](#ome-io-v1beta1-RolloutGroup), [`RolloutRunTarget`](#ome-io-v1beta1-RolloutRunTarget). ComponentType contains the different types of components of the service Underlying type: `string`. ### `ConsistentHashSpec` {#ome-io-v1beta1-ConsistentHashSpec} Used by [`TrafficSpec`](#ome-io-v1beta1-TrafficSpec). ConsistentHashSpec selects what request attribute to hash on when LoadBalancingType=ConsistentHash. Exactly one of Headers or Cookie must be set when Type is Header or Cookie respectively; both forbidden when Type is SourceIP.
FieldTypeDescription
type Required HashType Type selects the hash source. Allowed values: `Header`, `Cookie`, `SourceIP`.
headers []HashHeader Headers to hash on. Required when Type=Header (one or more). Translators that support multi-header hashing concatenate the headers before hashing; when the active translator supports only single-header hashing, multi-header specs are rejected at admission. Forbidden when Type is not Header.
cookie HashCookie Cookie configuration. Required when Type=Cookie. Forbidden when Type is not Cookie.
### `CoordinationPhase` {#ome-io-v1beta1-CoordinationPhase} Used by [`RolloutCoordinationGroupStatus`](#ome-io-v1beta1-RolloutCoordinationGroupStatus). CoordinationPhase is the metric-stable enum for a coordination group's base reconcile phase. Underlying type: `string`. Allowed values: `Idle`, `Surging`, `Waiting`, `Shifting`, `Draining`, `ScalingDown`, `Staged`, `Failed`, `RollingBack`, `Paused`. ### `CoordinationPolicy` {#ome-io-v1beta1-CoordinationPolicy} Used by [`RolloutCoordinationGroupStatus`](#ome-io-v1beta1-RolloutCoordinationGroupStatus). CoordinationPolicy selects the cross-Component coordination semantic applied to a RolloutCoordinationGroup. Underlying type: `string`. Allowed values: `BlueGreen`, `RollingUpdate`, `Independent`, `Sequential`. ### `DecoderSpec` {#ome-io-v1beta1-DecoderSpec} Used by [`InferenceServiceSpec`](#ome-io-v1beta1-InferenceServiceSpec), [`ServingRuntimeSpec`](#ome-io-v1beta1-ServingRuntimeSpec). DecoderSpec defines the configuration for the Decoder component (token generation in PD-disaggregated deployment). Used specifically for prefill-decode disaggregated deployments to handle the token generation phase. Similar to EngineSpec in structure, it allows for detailed pod and container configuration, but is specifically used for the decode phase when separating prefill and decode processes.
FieldTypeDescription
Embedded PodSpec This spec provides a full PodSpec for the decoder component. Allows complete customization of the Kubernetes Pod configuration including containers, volumes, security contexts, affinity rules, and other pod settings. The fields of `PodSpec` appear directly in this object.
Embedded ComponentExtensionSpec ComponentExtensionSpec defines deployment configuration like min/max replicas, scaling metrics, etc. Controls scaling behavior and resource allocation for the decoder component. The fields of `ComponentExtensionSpec` appear directly in this object.
runner RunnerSpec Runner container override for customizing the main container. This is essentially a container spec that can override the default container. Defines the main decoder container configuration, including image, resource requests/limits, environment variables, and command.
leader LeaderSpec Leader node configuration (only used for multi-node deployment). Defines the pod and container spec for the leader node that coordinates distributed token generation in multi-node deployments.
worker WorkerSpec Worker nodes configuration (only used for multi-node deployment). Defines the pod and container spec for worker nodes that perform distributed token generation tasks as directed by the leader.
topologyKey string Since v1.3. TopologyKey is the node-label key (e.g. an NVLink/RDMA fabric-domain label) used to co-locate all pods of one multi-node (leader+worker) gang into a single network / NVLink topology domain. When set on a multi-node component, OME auto-generates the per-instance worker→leader podAffinity that anchors every worker to its gang's leader on a node sharing this label value — so users need not hand-write that affinity. Only meaningful for multi-node components; ignored for single-pod (no leader to anchor to). Unset means no auto-generated gang affinity.
topologySpread TopologySpreadPolicy Since v1.3. TopologySpread spreads this component's instances across fault domains so losing one domain (rack / fabric slice / cube) cannot take out every instance at once. Rendered as a standard topologySpreadConstraint (maxSkew 1) on each instance's anchor pod (the leader, or the sole pod of a single-pod instance); workers follow their leader, so gangs stay whole. Required renders as DoNotSchedule — balanced spreading enforced by any scheduler that keeps PodTopologySpread's Filter, including the OME gang scheduler's packing profile. Preferred renders as ScheduleAnyway — advisory only, and currently without effect under the OME gang scheduler (its profile disables the spreading Score and pre-narrows gang candidates to one domain). Not part of the revision hash: changing it shapes future placements without rolling a healthy fleet. Unset keeps pure bin-packing. Allowed values: `Preferred`, `Required`.
topologySpreadKey string Since v1.3. TopologySpreadKey is the node-label key naming the fault domains TopologySpread spreads across. Defaults to TopologyKey — right for fabrics where the co-location domain IS the failure zone (an NVLink rack). Set it to a coarser label when the failure zone contains many gang domains: e.g. co-locate by the TPU partition label while spreading across cloud.google.com/gce-topology-subblock. Single-pod components have no co-location key, so spreading them requires setting this explicitly. Ignored unless TopologySpread is set.
acceleratorOverride AcceleratorSelector AcceleratorOverride allows overriding the global accelerator selection for this component
### `DiffusionComponentSpec` {#ome-io-v1beta1-DiffusionComponentSpec} Used by [`DiffusionPipelineSpec`](#ome-io-v1beta1-DiffusionPipelineSpec). DiffusionComponentSpec captures an individual component used by a diffusion pipeline. The fields map directly to entries in a diffusers model_index.json file.
FieldTypeDescription
library string Library providing the component implementation, e.g., "diffusers" or "transformers".
type string Type is the fully qualified class name for the component, e.g., "FlowMatchEulerDiscreteScheduler".
### `DiffusionPipelineSpec` {#ome-io-v1beta1-DiffusionPipelineSpec} Used by [`BaseModelSpec`](#ome-io-v1beta1-BaseModelSpec), [`SupportedModelFormat`](#ome-io-v1beta1-SupportedModelFormat). DiffusionPipelineSpec describes a diffusers pipeline so that runtimes can validate compatibility. When set, these fields should mirror the content of the model's model_index.json file.
FieldTypeDescription
className string ClassName is the pipeline implementation, e.g., "StableDiffusionXLPipeline" or "QwenImagePipeline".
scheduler DiffusionComponentSpec Scheduler component used by the pipeline.
textEncoder DiffusionComponentSpec TextEncoder component used by the pipeline.
tokenizer DiffusionComponentSpec Tokenizer component used by the pipeline.
transformer DiffusionComponentSpec Transformer (UNet/DiT) component used by the pipeline.
vae DiffusionComponentSpec VAE component used by the pipeline.
additionalComponents map[string]DiffusionComponentSpec AdditionalComponents captures any other pipeline parts keyed by their model_index.json entry.
### `Distribution` {#ome-io-v1beta1-Distribution} Used by [`BaseModelSpec`](#ome-io-v1beta1-BaseModelSpec). Distribution selects how a BaseModel's weights are laid out across the cluster. Sharded is in development, and OME can't serve a Sharded model yet. Underlying type: `string`. Allowed values: `PerNode`, `Sharded`. ### `DownloadPolicy` {#ome-io-v1beta1-DownloadPolicy} Used by [`StorageSpec`](#ome-io-v1beta1-StorageSpec). DownloadPolicy decides whether a node keeps a separate copy of a model's files. AlwaysDownload, the default, keeps one per model. ReuseIfExists lets the model agent reuse Hugging Face files that another model already downloaded to the node. Underlying type: `string`. Allowed values: `AlwaysDownload`, `ReuseIfExists`. ### `Endpoint` {#ome-io-v1beta1-Endpoint} Used by [`EndpointSpec`](#ome-io-v1beta1-EndpointSpec). Endpoint defines a direct URL-based inference service with additional API configuration.
FieldTypeDescription
url Required string URL represents the endpoint URL for the inference service. Pattern: `^(http|https)://`.
apiFormat Required string APIFormat specifies the type of API, such as "openai" or "oci-cohere". Allowed values: `openai`, `oci-cohere`, `cohere`.
modelName string ModelName specifies the name of the model being served at the endpoint. Useful for endpoints that require model-specific configuration. For instance, for openai API, this is a required field in the payload
### `EndpointOverrideSpec` {#ome-io-v1beta1-EndpointOverrideSpec} Used by [`TrafficSpec`](#ome-io-v1beta1-TrafficSpec). EndpointOverrideSpec configures Envoy Gateway's loadBalancer endpoint-override feature. When a request carries an endpoint reference (typically a header), the gateway routes the request to that exact endpoint if healthy, otherwise falls back to the configured LoadBalancer Algorithm.
FieldTypeDescription
type Required EndpointOverrideType Type selects where to read the endpoint override from. Allowed values: `Header`, `Metadata`.
headers []HashHeader Headers to read the endpoint reference from. Required when Type=Header. Each header value must be "<host>:<port>" or "<ip>:<port>".
### `EndpointOverrideType` {#ome-io-v1beta1-EndpointOverrideType} Used by [`EndpointOverrideSpec`](#ome-io-v1beta1-EndpointOverrideSpec). EndpointOverrideType selects how the override endpoint reference is extracted from the request. Underlying type: `string`. ### `EndpointSpec` {#ome-io-v1beta1-EndpointSpec} Used by [`BenchmarkJobSpec`](#ome-io-v1beta1-BenchmarkJobSpec). EndpointSpec defines a reference to an inference service. It supports either a Kubernetes-style reference (InferenceService) or an Endpoint struct for a direct URL. Cross-namespace references are supported for InferenceService but require appropriate RBAC permissions to access resources in the target namespace.
FieldTypeDescription
inferenceService InferenceServiceReference InferenceService holds a Kubernetes reference to an internal inference service.
endpoint Endpoint Endpoint holds the details of a direct endpoint for an external inference service, including URL and API details.
### `EngineSpec` {#ome-io-v1beta1-EngineSpec} Used by [`InferenceServiceSpec`](#ome-io-v1beta1-InferenceServiceSpec), [`ServingRuntimeSpec`](#ome-io-v1beta1-ServingRuntimeSpec). EngineSpec defines the configuration for the Engine component (can be used for both single-node and multi-node deployments). Provides a comprehensive specification for deploying model serving containers and pods. It allows for complete Kubernetes pod configuration including main containers, init containers, sidecars, volumes, and other pod-level settings. For distributed deployments, it supports leader-worker architecture configuration.
FieldTypeDescription
Embedded PodSpec This spec provides a full PodSpec for the engine component. Allows complete customization of the Kubernetes Pod configuration including containers, volumes, security contexts, affinity rules, and other pod settings. The fields of `PodSpec` appear directly in this object.
Embedded ComponentExtensionSpec ComponentExtensionSpec defines deployment configuration like min/max replicas, scaling metrics, etc. Controls scaling behavior and resource allocation for the engine component. The fields of `ComponentExtensionSpec` appear directly in this object.
runner RunnerSpec Runner container override for customizing the engine container. This is essentially a container spec that can override the default container. Defines the main model runner container configuration, including image, resource requests/limits, environment variables, and command.
leader LeaderSpec Leader node configuration (only used for multi-node deployment). Defines the pod and container spec for the leader node that coordinates distributed inference in multi-node deployments.
worker WorkerSpec Worker nodes configuration (only used for multi-node deployment). Defines the pod and container spec for worker nodes that perform distributed processing tasks as directed by the leader.
topologyKey string Since v1.3. TopologyKey is the node-label key (e.g. an NVLink/RDMA fabric-domain label) used to co-locate all pods of one multi-node (leader+worker) gang into a single network / NVLink topology domain. When set on a multi-node component, OME auto-generates the per-instance worker→leader podAffinity that anchors every worker to its gang's leader on a node sharing this label value — so users need not hand-write that affinity. Only meaningful for multi-node components; ignored for single-pod (no leader to anchor to). Unset means no auto-generated gang affinity.
topologySpread TopologySpreadPolicy Since v1.3. TopologySpread spreads this component's instances across fault domains so losing one domain (rack / fabric slice / cube) cannot take out every instance at once. Rendered as a standard topologySpreadConstraint (maxSkew 1) on each instance's anchor pod (the leader, or the sole pod of a single-pod instance); workers follow their leader, so gangs stay whole. Required renders as DoNotSchedule — balanced spreading enforced by any scheduler that keeps PodTopologySpread's Filter, including the OME gang scheduler's packing profile. Preferred renders as ScheduleAnyway — advisory only, and currently without effect under the OME gang scheduler (its profile disables the spreading Score and pre-narrows gang candidates to one domain). Not part of the revision hash: changing it shapes future placements without rolling a healthy fleet. Unset keeps pure bin-packing. Allowed values: `Preferred`, `Required`.
topologySpreadKey string Since v1.3. TopologySpreadKey is the node-label key naming the fault domains TopologySpread spreads across. Defaults to TopologyKey — right for fabrics where the co-location domain IS the failure zone (an NVLink rack). Set it to a coarser label when the failure zone contains many gang domains: e.g. co-locate by the TPU partition label while spreading across cloud.google.com/gce-topology-subblock. Single-pod components have no co-location key, so spreading them requires setting this explicitly. Ignored unless TopologySpread is set.
acceleratorOverride AcceleratorSelector AcceleratorOverride allows overriding the global accelerator selection for this component
### `FailureInfo` {#ome-io-v1beta1-FailureInfo} Used by [`ModelStatus`](#ome-io-v1beta1-ModelStatus).
FieldTypeDescription
location string Name of component to which the failure relates (usually Pod name)
reason FailureReason High level class of failure
message string Detailed error message
modelRevisionName string Internal Revision/ID of model, tied to specific Spec contents
time Time Time failure occurred or was discovered
exitCode int32 Exit status from the last termination of the container
### `FailureReason` {#ome-io-v1beta1-FailureReason} Used by [`FailureInfo`](#ome-io-v1beta1-FailureInfo). FailureReason enum Underlying type: `string`. Allowed values: `BaseModelNotReady`, `BaseModelNotFound`, `ModelLoadFailed`, `RuntimeUnhealthy`, `RuntimeDisabled`, `NoSupportingRuntime`, `RuntimeNotRecognized`. ### `FallbackTemplate` {#ome-io-v1beta1-FallbackTemplate} Used by [`KedaPolicyTemplate`](#ome-io-v1beta1-KedaPolicyTemplate). FallbackTemplate renders a kedav1.Fallback with the replica count derived per consuming component instead of authored as a literal.
FieldTypeDescription
failureThreshold Required int32 FailureThreshold is the number of consecutive failed metric evaluations after which KEDA serves the fallback (it trips on the threshold+1-th consecutive failure). Minimum: `1`.
replicas Required ReplicaValueSource Replicas is the fallback replica count.
### `FineTunedWeightSpec` {#ome-io-v1beta1-FineTunedWeightSpec} Used by [`FineTunedWeight`](#ome-io-v1beta1-FineTunedWeight). FineTunedWeightSpec defines the desired state of FineTunedWeight
FieldTypeDescription
baseModelRef Required ObjectReference Reference to the base model that this weight is fine-tuned from
modelType Required string ModelType of the fine-tuned weight, e.g., "Distillation", "Adapter", "Tfew"
hyperParameters Required RawExtension HyperParameters used for fine-tuning, stored as generic JSON for flexibility
Embedded ModelExtensionSpec ModelExtension is the common extension of the model The fields of `ModelExtensionSpec` appear directly in this object.
configuration RawExtension Configuration of the fine-tuned weight, stored as generic JSON for flexibility
storage Required StorageSpec Storage configuration for the fine-tuned weight
trainingJobRef ObjectReference TrainingJobRef references the training job that produced this weight
### `GroupBlueGreen` {#ome-io-v1beta1-GroupBlueGreen} Used by [`RolloutGroup`](#ome-io-v1beta1-RolloutGroup), [`RolloutPolicySpec`](#ome-io-v1beta1-RolloutPolicySpec). GroupBlueGreen surges the full new set alongside the old, waits for Ready, then flips traffic atomically. It is also the default progression a group falls back to when none of canary/blueGreen/rollingUpdate is set. It carries no traffic steps (the flip is all-or-nothing); surge sequencing across Components is the group-level Order field, not a blue-green-specific knob. Empty; reserved for blue-green-specific options (e.g. a pre-flip verification window). ### `GroupCanary` {#ome-io-v1beta1-GroupCanary} Used by [`RolloutGroup`](#ome-io-v1beta1-RolloutGroup), [`RolloutPolicySpec`](#ome-io-v1beta1-RolloutPolicySpec). GroupCanary is the stepped progression: bring up new-revision capacity and shift service-level traffic through an ordered list of steps. How the canary advances is a PER-STEP property (see RolloutGroupStep): each step is metric-gated (analysis), timed, manual, or immediate. Prometheus here is the shared metrics SOURCE every analysis step queries — declared once, not on each step.
FieldTypeDescription
steps []RolloutGroupStep Steps is the ordered progression of capacity + service-level traffic. The final step must reach 100% traffic for the rollout to complete. Maximum items: `20`.
prometheus AnalysisPrometheus Prometheus is the metrics source (connection) shared by every analysis step in this canary: where to query and how to authenticate. When omitted (or when its serverAddress is empty), the operator-configured default source (canaryAnalysis.bundledPrometheusAddress) is used; if that is also unset the analysis has no source and its samples read inconclusive. It is only the source — WHAT to check is each step's analysis — and it gates nothing by itself.
scaleDownDelaySeconds int32 ScaleDownDelaySeconds is the wait between shifting traffic off the old revision and scaling its pods down, to drain in-flight requests.
readyTimeout Duration ReadyTimeout bounds how long a step's capacity gate may stay unsatisfied before the canary is marked Failed (stable keeps serving — no traffic has shifted). Unset falls back to the operator-configured default (the rollout block of the operator's ConfigMap); the ome.io/rollout-ready-timeout annotation still overrides both.
### `GroupRollingUpdate` {#ome-io-v1beta1-GroupRollingUpdate} Used by [`RolloutGroup`](#ome-io-v1beta1-RolloutGroup), [`RolloutPolicySpec`](#ome-io-v1beta1-RolloutPolicySpec). GroupRollingUpdate replaces pods gradually, paced by the surge/unavailable budget. Mixed revisions are tolerated during the window.
FieldTypeDescription
maxSurge IntOrString MaxSurge is the maximum pods (fraction or absolute) above desired during the roll. Default 25%.
maxUnavailable IntOrString MaxUnavailable is the maximum pods (fraction or absolute) that may be not-Ready at once during the roll. Default 25% (matches the Kubernetes Deployment convention; a default of 0 would deadlock single-replica rolls).
### `HPAAutoscaler` {#ome-io-v1beta1-HPAAutoscaler} Used by [`AutoscalerPolicySpec`](#ome-io-v1beta1-AutoscalerPolicySpec), [`ComponentAutoscaler`](#ome-io-v1beta1-ComponentAutoscaler). HPAAutoscaler holds HorizontalPodAutoscaler configuration passed through verbatim. Alpha. The API may change without notice.
FieldTypeDescription
metrics []MetricSpec Metrics are passed through verbatim to autoscalingv2.HorizontalPodAutoscalerSpec.Metrics. Supports Resource, ContainerResource, Pods, Object, and External metric sources. If empty, the controller defaults to a single CPU=80% Resource metric.
behavior HorizontalPodAutoscalerBehavior Behavior controls scaling stabilization windows and per-direction policies.
### `HashCookie` {#ome-io-v1beta1-HashCookie} Used by [`ConsistentHashSpec`](#ome-io-v1beta1-ConsistentHashSpec). HashCookie names a cookie and an optional TTL for auto-issuance.
FieldTypeDescription
name Required string Name is the cookie name. Minimum length: `1`.
ttlSeconds int64 TTLSeconds, when greater than zero, makes the gateway auto-issue the cookie if absent on the request. When zero or unset, the client is responsible for sending the cookie. Minimum: `0`.
### `HashHeader` {#ome-io-v1beta1-HashHeader} Used by [`ConsistentHashSpec`](#ome-io-v1beta1-ConsistentHashSpec), [`EndpointOverrideSpec`](#ome-io-v1beta1-EndpointOverrideSpec). HashHeader names a single request header to include in the consistent-hash input.
FieldTypeDescription
name Required string Name is the header name (case-insensitive per HTTP). Minimum length: `1`.
### `HashType` {#ome-io-v1beta1-HashType} Used by [`ConsistentHashSpec`](#ome-io-v1beta1-ConsistentHashSpec). HashType selects what request attribute is hashed for ConsistentHash load balancing. Underlying type: `string`. ### `HuggingFaceSecretReference` {#ome-io-v1beta1-HuggingFaceSecretReference} Used by [`BenchmarkJobSpec`](#ome-io-v1beta1-BenchmarkJobSpec). HuggingFaceSecretReference defines a reference to a Kubernetes Secret containing the Hugging Face API key. This secret must reside in the same namespace as the BenchmarkJob. Cross-namespace references are not allowed for security and simplicity.
FieldTypeDescription
name Required string Name of the secret containing the Hugging Face API key. The secret must reside in the same namespace as the BenchmarkJob.
### `InPlaceUpdateStrategy` {#ome-io-v1beta1-InPlaceUpdateStrategy} Used by [`UpdateStrategy`](#ome-io-v1beta1-UpdateStrategy). InPlaceUpdateStrategy tunes the per-pod in-place update sequence.
FieldTypeDescription
gracePeriodSeconds int32 GracePeriodSeconds is accepted so manifests that set it keep validating and has no effect on the roll: a drained pod is deleted as soon as it leaves rotation, and its own terminationGracePeriodSeconds and preStop hooks cover the in-flight work it still owes. Minimum: `0`.
markNotReadyDuringLifecycle bool MarkNotReadyDuringLifecycle, when true, flips ome.io/serving=False on the pod before the in-place mutation so EndpointSlice drains traffic first. Unset inherits the ServingRuntime's value, then true.
### `InferenceReplicaPacing` {#ome-io-v1beta1-InferenceReplicaPacing} Used by [`InferenceReplicaSpec`](#ome-io-v1beta1-InferenceReplicaSpec). InferenceReplicaPacing is the rollout control written onto one replica: the partition that holds Instances back, a reserved disruption budget, and the revision to roll back to.
FieldTypeDescription
partition int32 Partition holds back updates: the Partition lowest-indexed Instances not yet on the target revision, skipping any already updating to it, keep their current revision. When set it takes precedence over lifecycle.updateStrategy.rollingUpdate.partition; nil defers to it. Minimum: `0`.
maxUnavailable IntOrString MaxUnavailable is reserved; setting it has no effect. Disruption during a rollout is paced by lifecycle.updateStrategy.rollingUpdate.maxUnavailable.
rollbackToRevision string RollbackToRevision, when set, names a ControllerRevision the replica rolls every Instance back to: that revision's stored pod template becomes the update target while UpdateRevision keeps reporting the spec's own revision. The InferenceService controller sets it during a canary rollback; empty in steady state. If the named revision does not exist, the replica rolls to its spec. A revision this replica does not control is ignored and reported with a Warning event.
### `InferenceReplicaSpec` {#ome-io-v1beta1-InferenceReplicaSpec} Used by [`InferenceReplica`](#ome-io-v1beta1-InferenceReplica). InferenceReplicaSpec is the desired state of one pod set. Its fields fall into three groups: - User fields describe the pod set itself: component, set at create and immutable; the template source (runners, modelRef and runtimeRef), replicas, minReadySeconds, topologyKey, topologySpread, topologySpreadKey, lifecycle, revisionHistoryLimit and autoscaler. The owner of the replica writes them: the InferenceService controller for a projected replica, the creating user for a standalone one. Exactly one template source: runners, or modelRef and/or runtimeRef; the validating webhook enforces it. - Rollout-control fields steer a rollout across pod sets: pacing, paused, pauseMode and pairingProtocol. The InferenceService controller writes them on the replicas it orchestrates; on a standalone replica its owner sets them. - Controller-only fields carry state only the InferenceService controller can know: parentRef, placementExecution and placementReplicaLimit.
FieldTypeDescription
placementExecution PlacementExecutionPolicy PlacementExecution is allocation authority projected from a derived service. Its generation must be observed before the control plane uses member evidence. Controller-only.
placementReplicaLimit int32 PlacementReplicaLimit reserves the largest replica count this component may request while placement pauses growth. Only a raised placement floor can increase this limit; autoscaler requests remain in Replicas. Controller-only. Minimum: `1`.
parentRef ParentReference ParentRef names the InferenceService that projects this replica. The InferenceService controller sets it at create time and it is immutable thereafter; a standalone replica omits it. Pod, Service and ControllerRevision names derive from the parent name when set and from the replica's own name otherwise. Controller-only.
component Required ComponentType Component is the role this pod set fills: engine | decoder | router. Immutable; moving a workload between roles requires recreating the InferenceReplica.
modelRef ModelRef ModelRef names the BaseModel (in the replica's namespace) or ClusterBaseModel this replica serves. With it set the controller renders the pods from the model and the runtime: the runtime named by RuntimeRef, or the runtime selected for the model when RuntimeRef is absent. Fine-tuned weights and overlays render as they do on an InferenceService. Exclusive with Runners. User field.
runtimeRef ServingRuntimeRef RuntimeRef names the ServingRuntime (in the replica's namespace) or ClusterServingRuntime whose piece for Component this replica renders. The runtime must declare that piece. Without ModelRef the piece renders as-is, with no model mounted. The runtime's pod spec places the pods (node selector, affinity, resources); a second accelerator pool is a second runtime. A pin (autoSync=false, revision) is not honored: the live runtime renders, and the validating webhook rejects a pinned reference. Exclusive with Runners. User field.
replicas int32 Replicas is the desired Instance count; nil or 0 runs one Instance. Whatever targets the scale subresource (HPA, KEDA or an external scaler) writes this field. On a projected replica the InferenceService controller writes the component's minReplicas (at least 1) at create, and thereafter while no autoscaler owns the count or the stored count is nil or 0. Minimum: `0`.
minReadySeconds int32 MinReadySeconds is the minimum time a newly Ready pod must stay Ready before it counts as Available. The workload engine paces rollout drains and promotions on Available pods and counts only Available pods in availableReplicas; 0 means Available as soon as Ready. On a projected replica the InferenceService controller copies the component's effective lifecycle.minReadySeconds: the InferenceService's value, else the runtime's, else the operator's deploy default. Minimum: `0`.
topologyKey string TopologyKey is the gang co-location node-label key for this Component. When set on a multi-node Component, the InferenceReplica controller auto-generates the per-Instance worker→leader podAffinity that co-locates every worker onto its gang's leader on a node sharing this label value. Nil means no auto-generated gang affinity. On a projected replica the value is the effective InferenceService or runtime component setting.
topologySpread TopologySpreadPolicy TopologySpread is the spreading policy for this Component. The InferenceReplica controller renders it as a topologySpreadConstraint on each Instance's anchor pod; nil keeps pure bin-packing. On a projected replica the value is the effective InferenceService or runtime component setting. Allowed values: `Preferred`, `Required`.
topologySpreadKey string TopologySpreadKey is the fault-domain node-label key TopologySpread spreads across; nil defaults to TopologyKey. On a projected replica the value is the effective InferenceService or runtime component setting.
pairingProtocol string PairingProtocol is the engine/decoder wire-compatibility token. It is folded into the revision hash (a change mints a new revision) and stamped as the ome.io/pairing-protocol label on rendered pods; nil pairs with anything. Only engine and decoder replicas pair on it; a change on any replica still mints a new revision. On a projected replica the InferenceService controller copies spec.rollout.pairingProtocol onto the engine and decoder replicas and never onto the router, which must not re-roll on a protocol change. Maximum length: `63`. Pattern: `^[A-Za-z0-9]([-A-Za-z0-9_.]*[A-Za-z0-9])?$`.
runners []Runner Runners is the fully-rendered set of pod templates per Instance. A single-pod Instance has one Runner named "default" with Size=1; a multi-node Instance has "leader" (Size=1) and "worker" (Size=N). Required unless ModelRef or RuntimeRef is set, in which case it must be absent: the controller renders the runners from the refs and never stores them. The controller treats each Runner.Template as opaque input. User field.
lifecycle LifecycleSpec Lifecycle holds the OMENative lifecycle policies (RestartPolicy, UpdateStrategy, ReadyPolicy, InstanceReadyTimeout, MigrationPolicy). An unset policy takes the fixed fallback its LifecycleSpec field names; an unset or zero instanceReadyTimeout falls back to the operator's lifecycle.instanceReadyTimeout on every replica, and with neither set operations open with no deadline. The operator's deploy defaults are applied only to a projected replica, before the copy. lifecycle.minReadySeconds is not read on a replica and is rejected on a standalone one; set spec.minReadySeconds. On a projected replica this is the component's effective lifecycle: the InferenceService's value, else the runtime's, with unset fields filled from the operator's deploy defaults.
pacing InferenceReplicaPacing Pacing is rollout control written onto this replica: the canary partition, the rollback target and a reserved disruption budget. The InferenceService controller writes it on the replicas it orchestrates; on a standalone replica its owner sets it. Nil means the replica rolls independently.
autoscaler ComponentAutoscaler Autoscaler is the autoscaler configuration downstream scalers (HPA / KEDA / External) target. Only the InferenceService controller creates a scaler from it, so on a standalone replica the HPA and KEDA classes are rejected and an External scaler targets the scale subresource directly. On a projected replica the InferenceService controller writes the resolved per-Component autoscaler, replacing the whole block, whenever that autoscaler resolves; while an autoscaler policy fails to render, the stored block is kept as the last known good one.
paused bool Paused, when true, stops the InferenceReplica controller from initiating fleet changes: Update, Create, and Migration operations are neither started nor advanced. The component's RestartPolicy keeps repairing existing Instances at their current revision unless PauseMode is Freeze. In-flight operations resume on unpause.
pauseMode PauseMode PauseMode selects how much of the lifecycle Paused suspends. Only meaningful while Paused is true. - "Recover" (default when empty): fleet changes are suspended; the RestartPolicy continues to repair existing Instances at the revision they already run. - "Freeze": every lifecycle operation is suspended, including Instance repair. Only kubelet-level container restarts and deliberate replica reduction (scale-down) remain active. Status stays truthful in every depth: a Ready Instance whose pods are all gone (and whose RestartPolicy will not repair it) is demoted to Pending without running any recovery operation. Allowed values: `Recover`, `Freeze`.
revisionHistoryLimit int32 RevisionHistoryLimit caps how many non-live ControllerRevisions the InferenceReplica controller retains. Live revisions (CurrentRevision / UpdateRevision and every per-Instance running/target revision) are never deleted regardless of the limit. Nil falls back to the operator-level lifecycle.revisionHistoryLimit config; when that is also absent, no revisions are pruned. On a projected replica the InferenceService controller copies the parent's ome.io/revision-history-limit annotation. Minimum: `1`.
### `InferenceReplicaStatus` {#ome-io-v1beta1-InferenceReplicaStatus} Used by [`InferenceReplica`](#ome-io-v1beta1-InferenceReplica). InferenceReplicaStatus is the observed state of one InferenceReplica. The InferenceReplica controller is the sole writer. Fields mirror the LifecycleStatus shape so the ISVC's aggregated per-Component status is a verbatim projection of this block. The per-Instance rows have exactly one representation on a committed object. Without instanceStatusEncoding the rows are the DenseV1 list in instanceStatuses; with instanceStatusEncoding: ColumnarV2 the same rows live in instanceStatusColumns and instanceStatuses is absent. The rules below reject every mixed spelling of that union. Validation: instanceStatusColumns requires instanceStatusEncoding; an unmarked status carries only instanceStatuses. Validation: instanceStatusEncoding: ColumnarV2 requires instanceStatusColumns and forbids instanceStatuses.
FieldTypeDescription
observedGeneration int64 ObservedGeneration is the InferenceReplica.metadata.generation the most recent status flush reflects.
placementObservedGeneration int64 PlacementObservedGeneration identifies the generation reconciled with placement rollout and replica-growth guards. The control plane requires this acknowledgement before sharing surge allowance with the member. Minimum: `1`.
replicas int32 Replicas is the total Instance count (any phase).
readyReplicas int32 ReadyReplicas is the number of Instances whose every pod is Ready.
servingReplicas int32 ServingReplicas is the number of Instances whose every pod is both ContainersReady AND has serving=True on the controller-managed readiness gate (i.e., actually in the load balancer rotation). MaxUnavailable budgets are computed against this count, not ReadyReplicas, so "missing from traffic" reflects reality during in-place updates.
availableReplicas int32 AvailableReplicas is the number of Instances whose desired pod count is Available: in rotation on the Component's headless Service and, when spec.minReadySeconds is set, Ready for at least that long.
updatedReplicas int32 UpdatedReplicas is the number of Instances on UpdateRevision.
updatedReadyReplicas int32 UpdatedReadyReplicas is the number of Instances on UpdateRevision that are fully Ready. UpdatedReadyReplicas / Replicas drives MaxUnavailable rollout pacing.
currentRevision string CurrentRevision names the ControllerRevision currently serving traffic. Set by the InferenceReplica controller.
updateRevision string UpdateRevision names the ControllerRevision being rolled out.
collisionCount int32 CollisionCount is the salt folded into ControllerRevision hash input after a name collision is observed, so retries produce a different revision name. Same pattern as StatefulSet.
labelSelector string LabelSelector identifies pods of this InferenceReplica for the HPA scale subresource. Uses the same selector formula as the Component's pod labels, so HPAs targeting either the ISVC or the InferenceReplica resolve to the same pod set.
instanceStatuses []OMENativeInstanceStatus InstanceStatuses is the DenseV1 representation of the per-Instance status, one row per Instance. Absent when instanceStatusEncoding is ColumnarV2, in which case instanceStatusColumns carries the same rows.
instanceStatusEncoding InstanceStatusEncoding InstanceStatusEncoding names the representation that carries the per-Instance rows. Absent means DenseV1 (instanceStatuses). The only accepted value is ColumnarV2, which requires instanceStatusColumns and forbids instanceStatuses.
instanceStatusColumns InstanceStatusColumns InstanceStatusColumns is the ColumnarV2 representation of the per-Instance rows. Present exactly when instanceStatusEncoding is ColumnarV2; it decodes to the same rows, in the same order, that instanceStatuses would carry.
retryBlocks []RetryBlock RetryBlocks records per-target-revision retry authority for update attempts. Revision-scoped: one block per failed target revision, shared by every Instance attempting it — allocating a new Instance cannot evade the block.
migrations []MigrationStatus Migrations is the authoritative set of migration records for this InferenceReplica — one entry per request UUID. Manual entries are resumable processes born Accepted; Auto entries are born-terminal Relocated records. Executors select on non-terminal phase only — terminal entries are records, never work. Non-terminal entries are never trimmed; terminal entries are pruned once older than the migration-capacity rate window, so the list stays bounded. Full history remains in the audit ledger and events.
conditions []Condition Conditions reports InferenceReplica-level conditions. Defined types include Available, Progressing, FailedScale, FailedUpdate, GangSchedulingUnavailable, OperationStuck.
traffic []ComponentTrafficTarget Traffic reports per-revision traffic weights for this InferenceReplica. Each entry corresponds to one revision currently receiving traffic. The ISVC controller mirrors this onto ISVC.status.components[c].traffic[] for the HTTPRoute builder.
coordinationGroupRef string CoordinationGroupRef back-references the RolloutCoordinationGroup this replica is currently bound into (if any). Lets operators find the owning coord group from the child without parsing the ISVC spec.
rolloutHold RolloutHold RolloutHold records the most recent reason a per-Instance Update was denied for this Component — cross-Component coordination (Ratio, Sequential), a surge/unavailability budget, or a same-target retry hold (RetryBlock, Held). Nil while the Component is progressing or has no rollout in flight. See RolloutHold for the field semantics.
### `InferenceServiceReference` {#ome-io-v1beta1-InferenceServiceReference} Used by [`EndpointSpec`](#ome-io-v1beta1-EndpointSpec). InferenceServiceReference defines the reference to a Kubernetes inference service.
FieldTypeDescription
name Required string Name specifies the name of the inference service to benchmark.
namespace Required string Namespace specifies the Kubernetes namespace where the inference service is deployed. Cross-namespace references are allowed but require appropriate RBAC permissions.
### `InferenceServiceSpec` {#ome-io-v1beta1-InferenceServiceSpec} Used by [`InferenceService`](#ome-io-v1beta1-InferenceService). InferenceServiceSpec is the desired state of an InferenceService. Validation: the placement policy cannot be removed; drain and recreate the service to change placement ownership. Validation: componentAffinity needs an entry for each declared engine and decoder, and none for undeclared ones. Validation: componentAffinity.router requires a declared router.
FieldTypeDescription
deploymentMode DeploymentModeType Since v1.3. DeploymentMode selects the dispatch backend that drives every Component on this InferenceService. When set, it propagates to the Engine, Decoder, and Router resolver at read-time without mutating per-Component annotations — `kubectl get -o yaml` stays clean. A per-Component `ome.io/deploymentMode` annotation still wins as an explicit override (the escape hatch is preserved for backward compat and mixed-mode experiments). Valid values: - "OMENative" — Native lifecycle-managed pods (also handles multi-node serving when Leader/Worker are present) - "RawDeployment" — Kubernetes Deployment/HPA-backed dispatch MultiNode (LeaderWorkerSet-backed multi-node serving) is selected via the ome.io/deploymentMode annotation or the operator-level default, never via this field. PDDisaggregated is a shape descriptor derived from engine+decoder pairing, and VirtualDeployment is legacy; neither is accepted here. Allowed values: `OMENative`, `RawDeployment`.
engine EngineSpec Engine defines the serving engine spec. This provides detailed container and pod specifications for model serving. It allows defining the model runner (container spec), as well as complete pod specifications including init containers, sidecar containers, and other pod-level configurations. Engine can also be configured for multi-node deployments using leader and worker specifications.
decoder DecoderSpec Decoder defines the decoder spec. This is specifically used for PD (Prefill-Decode) disaggregated serving deployments. Similar to Engine in structure, it allows for container and pod specifications, but is only utilized when implementing the disaggregated serving pattern to separate the prefill and decode phases of inference.
model ModelRef Model defines the model to be used for inference, referencing either a BaseModel or a custom model. This allows models to be managed independently of the serving configuration.
runtime ServingRuntimeRef Runtime defines the serving runtime environment that will be used to execute the model. It is an inference service spec template that determines how the service should be deployed. Runtime is optional - if not defined, the operator will automatically select the best runtime based on the model's size, architecture, format, quantization, and framework.
router RouterSpec Router defines the router spec
replicaRefs ReplicaRefs ReplicaRefs names, per role, the standalone InferenceReplicas this service fronts instead of rendering the role itself. The service creates the role's stable Service (<name>-engine, -decoder, -router) and the route in front of their pods and writes nothing on the replicas: their specs, rollouts and scaling stay with their owner. A service references either all of its roles this way or none, so spec.engine, spec.decoder and spec.router are unset with it, as are spec.model and spec.runtime (the replicas carry their own); engine is required. Fixed at create. A replica that needs a peer's address (an engine its decoder, a router its engine and decoder) is configured by its owner with the stable Service names, which exist once the service does.
acceleratorSelector AcceleratorSelector AcceleratorSelector specifies accelerator selection preferences
traffic TrafficSpec Since v1.3. Traffic configures the load-balancing policy applied to all HTTPRoutes OME emits for this InferenceService. See the TrafficSpec doc for details.
rollout RolloutSpec Since v1.3. Rollout is the single home for rollout configuration on this InferenceService: an ordered list of rollout groups, each polymorphic in its progression (canary | blueGreen | rollingUpdate). Sequencing is the group list order; a group's Components roll together.
scalingPolicy ScalingPolicy Since v1.3. ScalingPolicy coordinates replica counts across Components when more than one autoscaler would otherwise drift (e.g., engine + decoder in a PD-disaggregated service that requires 1:1 sharding). When nil, every Component autoscales independently. Alpha. The API may change without notice.
placement PlacementSpec Since v1.3. Placement declares how the multi-cluster control plane selects workload clusters and allocates replicas. An absent block declares no placement intent. Derived member services carry allocation authority in metadata.
routing RoutingSpec Since v1.3. Routing configures cross-cluster traffic distribution for this InferenceService. Unset fields inherit the operator-level routing configuration. Only consulted on the control-plane cluster; ignored in single-cluster deployments. Alpha; the API may change without notice.
ttlSecondsAfterCreation int64 Since v1.3. TTLSecondsAfterCreation limits how long this InferenceService lives. Once that many seconds have passed since its creationTimestamp, the controller deletes it, and garbage collection removes everything it owns. Unset means it lives until deleted. The deadline is computed from creationTimestamp on every reconcile, so changing or clearing the field moves or cancels it. Placement member copies ignore it; the source InferenceService's TTL governs them. Minimum: `1`.
### `InferenceServiceStatus` {#ome-io-v1beta1-InferenceServiceStatus} Used by [`InferenceService`](#ome-io-v1beta1-InferenceService). InferenceServiceStatus defines the observed state of InferenceService
FieldTypeDescription
Embedded Status Conditions for the InferenceService: - EngineReady: engine readiness condition. - DecoderReady: decoder readiness condition. - RouterReady: router readiness condition. - IngressReady: ingress resource readiness. - Ready: component aggregate on workload clusters, or placement serving readiness on a multi-cluster control-plane source. The fields of `Status` appear directly in this object.
address Addressable Addressable endpoint for the InferenceService
url URL URL holds the url that will distribute traffic over the provided traffic targets. It generally has the form http[s]://{route-name}.{route-namespace}.{cluster-level-suffix}
addresses []Addressable Since v1.3. Addresses lists every reachable endpoint for this service — one per gateway its route attaches to, plus the cluster-local address. Each entry's Name carries the operator-declared class (see IngressGatewaySpec.Class): "internal", "external", "cluster-local", or any config-defined value. Derived from the same builder that produces the HTTPRoutes, so it never drifts from the actual routing. status.url is the primary gateway entry and status.address is the "cluster-local" entry — both projections of this list.
components map[ComponentType]ComponentStatusSpec Statuses for the components of the InferenceService
modelStatus ModelStatus Model related statuses
migrationHistory []MigrationHistoryEntry Since v1.3. MigrationHistory is a rolling window of OMENative migration requests processed against this InferenceService. Bounded to the most recent entries; older entries are dropped (and optionally archived to a controller-owned ConfigMap).
mountedOverlays []MountedOverlay Since v1.3. MountedOverlays lists overlays the controller attached to the pod spec. Skipped overlays (disabled, NotReady, NotFound) surface via the OverlaysReady condition.
traffic TrafficStatus Since v1.3. Traffic reflects the resolved backend traffic policy and the emitted policy resource. Populated only when traffic intent is declared via spec.traffic or any ome.io/* traffic annotation; otherwise nil so older clients see nothing.
canary CanaryStatus Since v1.3. Canary mirrors the canary run of the unit that owns the ISVC entrypoint (the router's when it has one, else the engine's); the per-unit copy on ComponentStatusSpec.Canary is authoritative. Absent until a canary first arms; afterwards it carries that unit's most recent run, a finished one included (see CanaryStatus).
placement PlacementStatus Since v1.3. Placement reports multi-cluster placement of this ISVC, set by the control-plane fan-out controller. Empty on workload clusters and on single-cluster deployments.
pinnedRevisionName string PinnedRevisionName is the ControllerRevision (OME ns) driving pod specs. Empty when autoSync is true.
lastRuntimeSyncToken string LastRuntimeSyncToken is the ome.io/runtime-sync annotation value at last pin advance; the controller advances the pin when the live annotation differs from this.
rollout RolloutStatus Since v1.3. Rollout is the run-model surface: the pinned active-run plan the executors consume, the previous run's bounded record, and the always-current per-group source resolution (including shadowed-policy previews).
rolloutCoordination RolloutCoordinationStatus Since v1.3. RolloutCoordination reports per-group cross-Component coordination state for the InferenceService. Populated only when spec.rollout declares blueGreen/rollingUpdate groups (canary groups report under status.canary instead).
### `InstanceOperation` {#ome-io-v1beta1-InstanceOperation} Used by [`InstanceStatusEntry`](#ome-io-v1beta1-InstanceStatusEntry), [`OMENativeInstanceStatus`](#ome-io-v1beta1-OMENativeInstanceStatus). InstanceOperation is the recovery anchor written before any destructive action against an Instance and cleared on completion.
FieldTypeDescription
id string ID is the idempotency key for this operation. Retries with the same ID are a no-op.
type InstanceOperationType Type identifies the operation kind: Create, Update, Restart, Migrate, Delete. Allowed values: `Create`, `Update`, `Restart`, `Migrate`, `Delete`.
step string Step is the fine-grained resume point within the operation (e.g., Drain, DeletePods, WaitZero, Recreate, WaitReady).
startedAt Time StartedAt is when this operation began.
lastProgressAt Time LastProgressAt is when the operation last advanced. Used for stall detection.
deadline Time Deadline is the hard timeout for the current Step. Zero (null) means the step clock is parked (e.g. while the instance's pods are admission-gated); optional + nullable so the parked null is accepted by the apiserver.
retryCount int32 RetryCount is the per-step escalation counter.
targetRevision string TargetRevision is the ControllerRevision the operation is converging toward.
reason string Reason is a short cause string for the operation. Set once, when the operation starts, by whichever state machine owns it (the restart trigger, the revision-roll cause): it names WHY the operation exists and must survive for the operation's lifetime.
waiting string Waiting is a short token naming an EXTERNAL condition currently holding the operation back — e.g. "QuotaExceeded" when admission refuses the operation's pods for lack of quota. Distinct from Reason, which names why the operation exists: Waiting comes and goes while the operation runs, so overloading Reason would erase the operation's cause. Empty means nothing external is blocking. A token only: the blocking authority's own message is volatile (an exceeded-quota message moves as other workloads come and go) and belongs in the Event, not in status.
capacityRefusedAt Time CapacityRefusedAt is when admission last refused one of the operation's pod creates for lack of quota. The refusal is an apiserver answer to a call the create pass made, so it cannot be read off the cluster on a later pass: it is recorded here, and the hold pass converts it into the Waiting token and the deadline park on every pass it stands. Cleared by a create that completes with no refusal. Empty means the last create was not refused for capacity.
strategy string Strategy is the update strategy the operation runs under, pinned when the operation opens. UpdateStrategy is not part of the revision payload, so editing it retargets nothing: an attempt keeps the mechanism it started with — a patch already under way is not re-dispatched as a recreate, a surge already spent is not unwound — and the edit reaches the Instance at its next admitted attempt. Set only when Type=Update.
surgeIndex int32 SurgeIndex is the Instance index allocated for a surge replacement. Set only when Type=Migrate.
fromNode string FromNode is the node the migrating Instance is being moved off. Set only when Type=Migrate.
hintTargetNodes []string HintTargetNodes is the caller-supplied preferred-node list for a migration. Set only when Type=Migrate.
requestUUID string RequestUUID is the migration request UUID. Set only when Type=Migrate.
### `InstanceOperationType` {#ome-io-v1beta1-InstanceOperationType} Used by [`InstanceOperation`](#ome-io-v1beta1-InstanceOperation). InstanceOperationType is the kind of destructive action recorded in InstanceOperation. Underlying type: `string`. ### `InstanceReadyPolicy` {#ome-io-v1beta1-InstanceReadyPolicy} Used by [`LifecycleSpec`](#ome-io-v1beta1-LifecycleSpec). InstanceReadyPolicy controls how Instance-level readiness is aggregated from the underlying pods. Underlying type: `string`. Allowed values: `AllPodReady`, `None`. ### `InstanceRestartPolicy` {#ome-io-v1beta1-InstanceRestartPolicy} Used by [`LifecycleSpec`](#ome-io-v1beta1-LifecycleSpec). InstanceRestartPolicy controls what OMENative does when a managed pod fails. Applies only when the Component is annotated ome.io/deploymentMode=OMENative. Underlying type: `string`. Allowed values: `None`, `RecreateInstanceOnPodRestart`. ### `InstanceStatusColumns` {#ome-io-v1beta1-InstanceStatusColumns} Used by [`InferenceReplicaStatus`](#ome-io-v1beta1-InferenceReplicaStatus). InstanceStatusColumns is the ColumnarV2 representation of the per-Instance rows. A value shared by many Instances is stored once against the index set of the Instances that carry it; records that are rare or unique per Instance stay keyed by index in entries. An index set is a string of comma-separated decimal terms, each a single index or a closed "first-last" range, for example "0-8,10-114,116". The canonical form is the only accepted one: terms are strictly ascending, disjoint, and nonadjacent (adjacent terms are merged), a range has first < last, indices are nonnegative int32 values without leading zeros, and there is no whitespace, sign, empty term, or trailing comma. Members is the complete row set; every other index set is a subset of it. Within one column the group index sets are pairwise disjoint and the groups are in canonical value order: bytewise for phases and revisions, signed numeric for incarnations and counts. A member absent from every group of an optional column takes that column's documented default.
FieldTypeDescription
members string Members is the index set of every Instance that has a row. Minimum length: `1`. Pattern: `^(0|[1-9][0-9]*)(-(0|[1-9][0-9]*))?(,(0|[1-9][0-9]*)(-(0|[1-9][0-9]*))?)*$`.
rowOrder []int32 RowOrder is the dense row order when it is not the ascending Members order: every member exactly once, in the order the DenseV1 list would carry. Absent means ascending Members order. Minimum items: `1`. Minimum per item: `0`.
phases []InstanceStatusPhaseGroup Phases groups Instances by lifecycle phase. Every member appears in exactly one group; there is no default phase. Minimum items: `1`.
runningRevisions []InstanceStatusRevisionGroup RunningRevisions groups Instances by nonempty running revision. A member absent from every group has an empty running revision. Minimum items: `1`.
targetRevisions []InstanceStatusRevisionGroup TargetRevisions groups Instances by nonempty target revision. A member absent from every group has an empty target revision. Minimum items: `1`.
incarnations []InstanceStatusIncarnationGroup Incarnations groups Instances by nonzero incarnation. A member absent from every group has incarnation 0. Minimum items: `1`.
podCounts []InstanceStatusCountGroup PodCounts groups Instances by positive podCount. A member absent from every group has podCount 0. Minimum items: `1`.
servingPodCounts []InstanceStatusCountGroup ServingPodCounts groups Instances by positive servingPodCount. A member absent from every group has servingPodCount 0. Minimum items: `1`.
availablePodCounts []InstanceStatusCountGroup AvailablePodCounts groups Instances by positive availablePodCount. A member absent from every group has availablePodCount 0. Minimum items: `1`.
admitted string Admitted is the index set of Instances whose admitted is true. Absent means no Instance is admitted. Minimum length: `1`. Pattern: `^(0|[1-9][0-9]*)(-(0|[1-9][0-9]*))?(,(0|[1-9][0-9]*)(-(0|[1-9][0-9]*))?)*$`.
activeOrdinalOne string ActiveOrdinalOne is the index set of Instances whose activeOrdinal is 1. Absent means every activeOrdinal is 0. Minimum length: `1`. Pattern: `^(0|[1-9][0-9]*)(-(0|[1-9][0-9]*))?(,(0|[1-9][0-9]*)(-(0|[1-9][0-9]*))?)*$`.
entries []InstanceStatusEntry Entries carries the per-Instance records that are not grouped: conditions, readySince, operation, and lastFailure. At most one entry per member, in ascending index order, each carrying at least one of those records. A member without an entry has none of them. Minimum items: `1`.
### `InstanceStatusCountGroup` {#ome-io-v1beta1-InstanceStatusCountGroup} Used by [`InstanceStatusColumns`](#ome-io-v1beta1-InstanceStatusColumns). InstanceStatusCountGroup is one positive pod count and the Instances that carry it. Zero is the absent default and is never grouped.
FieldTypeDescription
value int32 Value is the shared positive count. Minimum: `1`.
indexes string Indexes is the canonical index set of the Instances with this value. Minimum length: `1`. Pattern: `^(0|[1-9][0-9]*)(-(0|[1-9][0-9]*))?(,(0|[1-9][0-9]*)(-(0|[1-9][0-9]*))?)*$`.
### `InstanceStatusEncoding` {#ome-io-v1beta1-InstanceStatusEncoding} Used by [`InferenceReplicaStatus`](#ome-io-v1beta1-InferenceReplicaStatus). InstanceStatusEncoding names a stored representation of the per-Instance rows. The wire carries only ColumnarV2; an absent marker means DenseV1. Underlying type: `string`. Allowed values: `ColumnarV2`. ### `InstanceStatusEntry` {#ome-io-v1beta1-InstanceStatusEntry} Used by [`InstanceStatusColumns`](#ome-io-v1beta1-InstanceStatusColumns). InstanceStatusEntry carries the records of one Instance that are not grouped into columns. Each record is the dense row's value, unchanged. Validation: an entry must carry at least one of conditions, readySince, operation, lastFailure, or announced.
FieldTypeDescription
index int32 Index is the Instance this entry belongs to; it is a member. Minimum: `0`.
conditions []Condition Conditions is the Instance's conditions. Minimum items: `1`.
readySince Time ReadySince is the Instance's readySince.
operation InstanceOperation Operation is the Instance's in-flight operation record.
lastFailure InstanceTermination LastFailure is the Instance's preserved failure diagnostics.
announced []string Announced is the Instance's record of once-only messages already delivered. Minimum items: `1`.
### `InstanceStatusIncarnationGroup` {#ome-io-v1beta1-InstanceStatusIncarnationGroup} Used by [`InstanceStatusColumns`](#ome-io-v1beta1-InstanceStatusColumns). InstanceStatusIncarnationGroup is one incarnation and the Instances that carry it. The value keeps the int64 domain of the dense row, including negative values; zero is the absent default and is never grouped. Validation: an incarnation group value must be nonzero; zero is the absent default.
FieldTypeDescription
value int64 Value is the shared nonzero incarnation.
indexes string Indexes is the canonical index set of the Instances with this value. Minimum length: `1`. Pattern: `^(0|[1-9][0-9]*)(-(0|[1-9][0-9]*))?(,(0|[1-9][0-9]*)(-(0|[1-9][0-9]*))?)*$`.
### `InstanceStatusPhaseGroup` {#ome-io-v1beta1-InstanceStatusPhaseGroup} Used by [`InstanceStatusColumns`](#ome-io-v1beta1-InstanceStatusColumns). InstanceStatusPhaseGroup is one phase and the Instances that carry it.
FieldTypeDescription
value OMENativeInstancePhase Value is the shared lifecycle phase.
indexes string Indexes is the canonical index set of the Instances with this value. Minimum length: `1`. Pattern: `^(0|[1-9][0-9]*)(-(0|[1-9][0-9]*))?(,(0|[1-9][0-9]*)(-(0|[1-9][0-9]*))?)*$`.
### `InstanceStatusRevisionGroup` {#ome-io-v1beta1-InstanceStatusRevisionGroup} Used by [`InstanceStatusColumns`](#ome-io-v1beta1-InstanceStatusColumns). InstanceStatusRevisionGroup is one full ControllerRevision name and the Instances that carry it.
FieldTypeDescription
value string Value is the shared revision name; the empty revision is never grouped. Minimum length: `1`.
indexes string Indexes is the canonical index set of the Instances with this value. Minimum length: `1`. Pattern: `^(0|[1-9][0-9]*)(-(0|[1-9][0-9]*))?(,(0|[1-9][0-9]*)(-(0|[1-9][0-9]*))?)*$`.
### `InstanceTermination` {#ome-io-v1beta1-InstanceTermination} Used by [`InstanceStatusEntry`](#ome-io-v1beta1-InstanceStatusEntry), [`OMENativeInstanceStatus`](#ome-io-v1beta1-OMENativeInstanceStatus). InstanceTermination captures the container-termination diagnostics of a pod that failed or was escalated, preserved on OMENativeInstanceStatus so the trace survives the recreate that deletes the pod.
FieldTypeDescription
podName string PodName is the name of the pod that failed or was escalated.
containerName string ContainerName is the container the diagnostics were read from. Empty when the signal is pod-level (e.g. a pod-phase Failed with no per-container terminated state available).
reason string Reason is the kubelet reason for the termination or wedge — a terminated-state reason (OOMKilled, Error, ContainerCannotRun) or a terminal waiting-state reason (CrashLoopBackOff, ImagePullBackOff, CreateContainerError). Falls back to "PodFailed" when only the pod phase is available.
exitCode int32 ExitCode is the container's exit code when the diagnostics came from a terminated state. Nil when the pod was stuck in a waiting state (no process ever ran to produce an exit code).
message string Message is the kubelet-supplied detail message, if any.
time Time Time is when OMENative recorded this termination (reconcile time, not the kubelet transition time, which isn't always exposed).
### `KedaAutoscaler` {#ome-io-v1beta1-KedaAutoscaler} Used by [`ComponentAutoscaler`](#ome-io-v1beta1-ComponentAutoscaler). KedaAutoscaler holds KEDA ScaledObject configuration passed through verbatim. Alpha. The API may change without notice.
FieldTypeDescription
triggers Required []ScaleTriggers Triggers are passed through verbatim to kedav1.ScaledObjectSpec.Triggers. The full KEDA trigger surface (prometheus, cron, external, kafka, ...) is supported. Minimum items: `1`.
advanced AdvancedConfig Advanced ScaledObject configuration — horizontalPodAutoscalerConfig, restoreToOriginalReplicaCount.
pollingInterval int32 PollingInterval is the interval, in seconds, at which KEDA checks each trigger. Defaults to the KEDA-side default when unset.
cooldownPeriod int32 CooldownPeriod is the time, in seconds, KEDA waits before scaling down after the last trigger fires. Defaults to the KEDA-side default when unset.
idleReplicaCount int32 IdleReplicaCount enables scaling to a fixed count when no triggers fire (commonly 0 for scale-to-zero). Must be strictly less than the effective MinReplicaCount.
fallback Fallback Fallback policy applied when the metric source becomes unavailable.
### `KedaPolicyTemplate` {#ome-io-v1beta1-KedaPolicyTemplate} Used by [`AutoscalerPolicySpec`](#ome-io-v1beta1-AutoscalerPolicySpec). KedaPolicyTemplate is the parameterized counterpart of KedaAutoscaler. Everything except trigger metadata templates and the typed fallback replicas is passed through verbatim to the rendered block.
FieldTypeDescription
triggers Required []KedaTriggerTemplate Minimum items: `1`.
advanced AdvancedConfig Advanced ScaledObject configuration, verbatim.
pollingInterval int32
cooldownPeriod int32
idleReplicaCount int32
fallback FallbackTemplate
### `KedaTriggerTemplate` {#ome-io-v1beta1-KedaTriggerTemplate} Used by [`KedaPolicyTemplate`](#ome-io-v1beta1-KedaPolicyTemplate). KedaTriggerTemplate is a parameterized KEDA trigger. Metadata string values may contain {{ .Var }} templates over a closed, controller-derived variable set (Namespace, ISVCName, Component, MinReplicas, MaxReplicas, TargetName).
FieldTypeDescription
type Required string Type is the KEDA trigger type ("prometheus" in v1). Admission requires ProviderRef for network-endpoint trigger types. Minimum length: `1`.
providerRef MetricProviderRef ProviderRef binds the trigger's endpoint by logical provider name.
metricType MetricTargetType MetricType is forwarded to the rendered trigger. Allowed values: `AverageValue`, `Value`.
queryReturnsDesiredReplicas bool QueryReturnsDesiredReplicas declares that the trigger's query already computes the desired replica count. When true, admission requires MetricType=AverageValue: the HPA's Value math is ceil((metric/threshold) x readyPods), which breaks desired-count queries.
metadata Required map[string]string Metadata is the KEDA trigger metadata. Admission rejects the keys "serverAddress" and "authModes" (the provider binding owns them), and requires "ignoreNullValues" to be explicit on prometheus triggers.
### `KubeConfigSource` {#ome-io-v1beta1-KubeConfigSource} Used by [`ClusterConnectionSource`](#ome-io-v1beta1-ClusterConnectionSource). KubeConfigSource points at a Secret holding a kubeconfig for the cluster.
FieldTypeDescription
secretRef Required SecretReference SecretRef is the Secret holding the kubeconfig.
key string Key is the Secret data key holding the kubeconfig. Defaults to "kubeconfig". Default: `kubeconfig`.
### `LeaderSpec` {#ome-io-v1beta1-LeaderSpec} Used by [`DecoderSpec`](#ome-io-v1beta1-DecoderSpec), [`EngineSpec`](#ome-io-v1beta1-EngineSpec). LeaderSpec defines the configuration for a leader node in a multi-node component. The leader node coordinates the activities of worker nodes in distributed inference or token generation setups, handling task distribution and result aggregation.
FieldTypeDescription
Embedded PodSpec Pod specification for the leader node. This overrides the main PodSpec when specified. Allows customization of the Kubernetes Pod configuration specifically for the leader node. The fields of `PodSpec` appear directly in this object.
runner RunnerSpec Runner container override for customizing the main container. This is essentially a container spec that can override the default container. Provides fine-grained control over the container that executes the leader node's coordination logic.
### `LifeCycleState` {#ome-io-v1beta1-LifeCycleState} Used by [`ModelStatusSpec`](#ome-io-v1beta1-ModelStatusSpec). LifeCycleState enum Underlying type: `string`. Allowed values: `Creating`, `Importing`, `In_Transit`, `In_Training`, `Ready`, `Failed`. ### `LifecycleSpec` {#ome-io-v1beta1-LifecycleSpec} Used by [`ComponentExtensionSpec`](#ome-io-v1beta1-ComponentExtensionSpec), [`InferenceReplicaSpec`](#ome-io-v1beta1-InferenceReplicaSpec). LifecycleSpec groups OMENative-specific lifecycle policies on a Component. Embedded via ComponentExtensionSpec.Lifecycle; all fields are no-ops unless the Component is annotated ome.io/deploymentMode=OMENative. Nested under `lifecycle:` so the fields don't collide with corev1.PodSpec fields (notably restartPolicy) that are also inlined into EngineSpec / DecoderSpec / RouterSpec.
FieldTypeDescription
restartPolicy InstanceRestartPolicy RestartPolicy controls what OMENative does when a managed pod fails. Distinct from the inlined corev1.PodSpec.RestartPolicy: that one tells kubelet whether to restart a container in-place; this one tells the OMENative controller whether to recreate the whole Instance. Unset inherits the ServingRuntime's value; when neither sets it, multi-pod Instances use RecreateInstanceOnPodRestart and single-pod Instances use None.
updateStrategy UpdateStrategy UpdateStrategy controls how OMENative rolls template changes across the Component's Instances.
readyPolicy InstanceReadyPolicy ReadyPolicy controls how Instance-level readiness is aggregated from the underlying pods. None is accepted only for single-pod Instances, where it is equivalent to AllPodReady; admission rejects None on multi-pod OMENative Components because per-pod readiness reporting is not supported. Unset inherits the ServingRuntime's value; when neither sets it, multi-pod Instances use AllPodReady and single-pod Instances use None.
instanceReadyTimeout Duration InstanceReadyTimeout is OMENative's upper bound for waiting on a newly-created Instance to become Ready (during migration, rollout, or initial creation).
minReadySeconds int32 MinReadySeconds is the minimum time a newly Ready pod must stay Ready before OMENative treats it as Available. A pod is Available when its PodReady condition is True and that condition's lastTransitionTime plus MinReadySeconds is not after the current time, evaluated per pod (the Deployment.spec.minReadySeconds rule). Ready remains the health signal; Available is the pacing signal: a rollout drains or promotes an Instance only once its new pods are Available, so the maxSurge / maxUnavailable budgets stay held for the whole window, and availableReplicas / availablePodCount count only Available pods. Unset or 0 means Available as soon as Ready. A value authored on the InferenceService wins; an unset value inherits the ServingRuntime's; when neither sets it, the cluster default from the inferenceservice-config ConfigMap applies. Minimum: `0`.
migrationPolicy MigrationPolicy MigrationPolicy controls whether and how OMENative honors a migration request annotation for this Component.
### `LifecycleStatus` {#ome-io-v1beta1-LifecycleStatus} Used by [`ComponentStatusSpec`](#ome-io-v1beta1-ComponentStatusSpec). LifecycleStatus reports OMENative-managed lifecycle state for one Component. Nil when the Component does not use OMENative. Counterpart of the LifecycleSpec sub-block on ComponentExtensionSpec.
FieldTypeDescription
observedGeneration int64 ObservedGeneration is the InferenceService.metadata.generation reflected by this block.
currentRevision string CurrentRevision names the ControllerRevision currently serving traffic.
updateRevision string UpdateRevision names the ControllerRevision being rolled out.
collisionCount int32 CollisionCount is the salt folded into ControllerRevision hash input after a name collision is observed, so retries produce a different revision name. Same pattern as StatefulSet.
labelSelector string LabelSelector identifies pods of this Component for HPA-style consumers.
replicas int32 Replicas is the total Instance count (any phase).
readyReplicas int32 ReadyReplicas is the number of Instances whose every pod is Ready.
servingReplicas int32 ServingReplicas is the number of Instances whose every pod is BOTH ContainersReady AND has serving=True on the controller-managed readiness gate — i.e., the pod is actually in the load balancer's rotation. This is the count operators care about for traffic availability, and the count MaxUnavailable budgets gate against. Diverges from ReadyReplicas during in-place updates and any other scenario where the controller flips the serving gate to False while containers remain technically Ready.
availableReplicas int32 AvailableReplicas is the number of Instances whose desired pod count is Available: in rotation on the Component's headless Service and, when lifecycle.minReadySeconds is set, Ready for at least that long.
updatedReplicas int32 UpdatedReplicas is the number of Instances on UpdateRevision.
updatedReadyReplicas int32 UpdatedReadyReplicas is the number of Instances on UpdateRevision and fully Ready. UpdatedReadyReplicas / Replicas drives maxUnavailable rollout pacing.
conditions []Condition Conditions reports Component-level conditions. Defined types include Available, Progressing, FailedScale, FailedUpdate, GangSchedulingUnavailable, OperationStuck.
rolloutHold RolloutHold RolloutHold reports the most recent reason this Component's rollout did not advance, mirrored verbatim from the owning InferenceReplica's status. Nil while the Component is progressing or has no rollout in flight.
### `LoadBalancingType` {#ome-io-v1beta1-LoadBalancingType} Used by [`TrafficSpec`](#ome-io-v1beta1-TrafficSpec). LoadBalancingType selects the load-balancing algorithm applied to a Component's backend Service(s). Underlying type: `string`. ### `MaintainRatio` {#ome-io-v1beta1-MaintainRatio} Used by [`RolloutGroup`](#ome-io-v1beta1-RolloutGroup). MaintainRatio bounds how far a multi-Component group may drift from the cross-Component replica ratio observed at rollout start (e.g. prefill:decode).
FieldTypeDescription
tolerance int32 Tolerance is the maximum percentage drift from the starting ratio. A roll step that would exceed it is paused until the pools rebalance. An explicit 0 means zero drift. When omitted, the operator-configured default (the coordination block of the operator's ConfigMap) applies; if the operator configures no default either, the group rolls with no drift bound. Minimum: `0`. Maximum: `100`.
### `MetricProviderRef` {#ome-io-v1beta1-MetricProviderRef} Used by [`AnalysisPrometheus`](#ome-io-v1beta1-AnalysisPrometheus), [`KedaTriggerTemplate`](#ome-io-v1beta1-KedaTriggerTemplate). MetricProviderRef names a logical metric provider. The name is bound to a cluster-local endpoint (and optional credentials) by the operator's autoscalerPolicy configuration block; endpoints are not representable in the policy itself, so one policy object serves every cluster and a policy author can never point a scaler at an arbitrary endpoint.
FieldTypeDescription
name Required string Minimum length: `1`.
### `MigrationEvent` {#ome-io-v1beta1-MigrationEvent} Used by [`MigrationHistoryEntry`](#ome-io-v1beta1-MigrationHistoryEntry). MigrationEvent is one observation logged during a migration.
FieldTypeDescription
at Time At is the time the event was recorded.
message string Message describes the observation.
### `MigrationHistoryEntry` {#ome-io-v1beta1-MigrationHistoryEntry} Used by [`InferenceServiceStatus`](#ome-io-v1beta1-InferenceServiceStatus). MigrationHistoryEntry is one entry of the rolling MigrationHistory window recorded on InferenceServiceStatus.
FieldTypeDescription
id string ID is the request UUID supplied by the caller.
component ComponentType Component identifies which Component was migrated.
instance int32 Instance is the original Instance index that was migrated away from.
replacementInstance int32 ReplacementInstance is the Instance index allocated for the surge replacement. Nil when the migration was rejected before allocation. Distinct from index 0, which is a valid replacement index after sparse migration.
mode MigrationMode Mode is the migration mechanism. Surge is the only defined mode.
phase MigrationPhase Phase is the current lifecycle phase.
requestedAt Time RequestedAt is the time the request annotation was first observed.
startedAt Time StartedAt is the time the controller began executing the migration.
completedAt Time CompletedAt is the time the migration reached a terminal phase.
reason string Reason is the caller-supplied reason (e.g., "fragmentation").
requestedBy string RequestedBy identifies the caller that wrote the request annotation.
events []MigrationEvent Events records observations made during the migration.
outcomeReason string OutcomeReason is a short machine-readable reason describing why the migration ended in its terminal phase (e.g., "InstanceReadyTimeout").
### `MigrationMode` {#ome-io-v1beta1-MigrationMode} Used by [`MigrationHistoryEntry`](#ome-io-v1beta1-MigrationHistoryEntry). MigrationMode is the migration mechanism selected. Underlying type: `string`. Allowed values: `Surge`. ### `MigrationPhase` {#ome-io-v1beta1-MigrationPhase} Used by [`MigrationHistoryEntry`](#ome-io-v1beta1-MigrationHistoryEntry), [`MigrationStatus`](#ome-io-v1beta1-MigrationStatus). MigrationPhase is the lifecycle phase of a migration. Manual migrations walk Accepted -> SurgePending -> SurgeReady -> Draining -> Completed | Failed. Auto relocations are born terminal (Relocated). Terminal phases are Completed, Failed, and Relocated — executors select work on non-terminal phase only; terminal entries are records, never work. Pending and InProgress are legacy values used only by the ISVC status migrationHistory window. Underlying type: `string`. Allowed values: `Accepted`, `SurgePending`, `SurgeReady`, `Draining`, `Completed`, `Failed`, `Relocated`, `Pending`, `InProgress`. ### `MigrationPolicy` {#ome-io-v1beta1-MigrationPolicy} Used by [`LifecycleSpec`](#ome-io-v1beta1-LifecycleSpec). MigrationPolicy controls whether and how OMENative honors migration requests (both automatic deadline-disposition relocation and explicit annotation-triggered migration).
FieldTypeDescription
mode MigrationPolicyMode Mode gates migration: Auto enables both deadline-disposition relocation and explicit migration requests; Never disables both. Unset inherits the ServingRuntime's value, then Auto.
### `MigrationPolicyMode` {#ome-io-v1beta1-MigrationPolicyMode} Used by [`MigrationPolicy`](#ome-io-v1beta1-MigrationPolicy). MigrationPolicyMode gates migration mechanisms for a Component. Underlying type: `string`. Allowed values: `Auto`, `Surge`, `Never`. ### `MigrationStatus` {#ome-io-v1beta1-MigrationStatus} Used by [`InferenceReplicaStatus`](#ome-io-v1beta1-InferenceReplicaStatus). MigrationStatus is one migration request's authoritative record on the InferenceReplica. status.migrations is the single source of truth for migration work: executors resume from non-terminal entries; the audit ledger and events are history, not work. Lifecycle contract: - Manual entries (Trigger=Manual) are resumable processes: born Accepted, they walk Accepted -> SurgePending -> SurgeReady -> Draining -> Completed | Failed. - Auto entries (Trigger=Auto) are born-terminal Relocated records mirroring a relocation directive; Succeeded is stamped post-hoc when the relocated Instance next reaches Ready. - Executors select on non-terminal phase only — terminal entries are records, never work.
FieldTypeDescription
requestUUID string RequestUUID uniquely identifies the migration request. Manual: supplied by the requester. Auto: generated by the controller.
trigger MigrationTrigger Trigger records who initiated the migration.
sourceInstance int32 SourceInstance is the Instance index being migrated away from.
surgeInstance int32 SurgeInstance is the Instance index allocated for the surge replacement. Manual only; nil until allocated. Distinct from index 0, which is a valid surge index.
allocatedAt Time AllocatedAt is when the surge Instance index was allocated — the start of execution. Nil while the entry is queued (Accepted but not yet picked up by the executor). The capacity gate counts execution from this stamp, never queued intent.
fromNode string FromNode is the node the source is being moved off. Auto: the excluded node.
hintTargetNodes []string HintTargetNodes are requester-supplied preferred placement targets for the surge replacement. Rendered as preferred (soft) node affinity; the scheduler may pick other nodes.
phase MigrationPhase Phase is the migration lifecycle phase. See MigrationPhase for the Manual chain, the Auto born-terminal rule, and the terminal set.
attempt int32 Attempt is the relocation attempt ordinal. Auto: N of autoMigrate.maxAttempts.
reason string Reason is the requester-supplied reason (Manual) or the disposition branch that produced the entry (Auto).
message string Message describes the current blocker (non-terminal) or the terminal outcome.
startedAt Time StartedAt is when the entry was created.
deadline Time Deadline is when a non-terminal entry expires. Manual: accept time plus InstanceReadyTimeout.
completedAt Time CompletedAt is when the entry reached a terminal phase.
succeeded bool Succeeded reports the post-hoc outcome. Auto: stamped true when the relocated Instance next reaches Ready.
### `MigrationTrigger` {#ome-io-v1beta1-MigrationTrigger} Used by [`MigrationStatus`](#ome-io-v1beta1-MigrationStatus). MigrationTrigger identifies who initiated a migration entry. Underlying type: `string`. Allowed values: `Manual`, `Auto`. ### `ModelCacheProvider` {#ome-io-v1beta1-ModelCacheProvider} Used by [`SupportedModelFormat`](#ome-io-v1beta1-SupportedModelFormat). ModelCacheProvider names an external model cache that a runtime can load Sharded models from. Sharded distribution is in development. Underlying type: `string`. ### `ModelCacheStatus` {#ome-io-v1beta1-ModelCacheStatus} Used by [`ModelStatusSpec`](#ome-io-v1beta1-ModelStatusSpec). ModelCacheStatus identifies the external cache that holds a Sharded model. Sharded distribution is in development, and OME doesn't set this yet.
FieldTypeDescription
backend string Backend identifies the configured cache provider.
sourceUri string SourceUri is the model source URI being cached.
### `ModelCopies` {#ome-io-v1beta1-ModelCopies} Used by [`ModelStatus`](#ome-io-v1beta1-ModelStatus).
FieldTypeDescription
failedCopies int How many copies of the model failed to load recently. Default: `0`.
totalCopies int How many copies of the model are loaded.
### `ModelExtensionSpec` {#ome-io-v1beta1-ModelExtensionSpec} Used by [`BaseModelSpec`](#ome-io-v1beta1-BaseModelSpec), [`FineTunedWeightSpec`](#ome-io-v1beta1-FineTunedWeightSpec).
FieldTypeDescription
displayName string DisplayName is the user-friendly name of the model
version string
disabled bool Whether the model is enabled or not
vendor string Vendor of the model, e.g., "NVIDIA", "Meta", "HuggingFace"
compartmentID string CompartmentID is the compartment ID of the model
### `ModelFormat` {#ome-io-v1beta1-ModelFormat} Used by [`BaseModelSpec`](#ome-io-v1beta1-BaseModelSpec), [`SupportedModelFormat`](#ome-io-v1beta1-SupportedModelFormat).
FieldTypeDescription
name Required string Name of the format in which the model is stored, e.g., "ONNX", "TensorFlow SavedModel", "PyTorch", "SafeTensors"
version string Version of the model format. Runtime selection uses it to check that a runtime supports the model. It can be "major", "major.minor" or "major.minor.patch".
operator RuntimeSelectorOperator Operator for the selector with supported values: "Equal", "GreaterThan" This is used to select the serving runtime based on the modelFormat version Default: `Equal`.
weight int64 Weight of the model format in the runtime selector, used to prioritize modelFormat Default: `1`.
### `ModelFrameworkSpec` {#ome-io-v1beta1-ModelFrameworkSpec} Used by [`BaseModelSpec`](#ome-io-v1beta1-BaseModelSpec), [`SupportedModelFormat`](#ome-io-v1beta1-SupportedModelFormat).
FieldTypeDescription
name Required string Name of the library in which the model is stored, e.g., "ONNXRuntime", "TensorFlow", "PyTorch", "Transformer", "TensorRTLLM"
version string Version of the library. Runtime selection uses it to check that a runtime supports the model. It can be "major", "major.minor" or "major.minor.patch".
operator RuntimeSelectorOperator Operator for the selector with supported values: "Equal", "GreaterThan" This is used to select the serving runtime based on the modelFramework version Default: `Equal`.
weight int64 Weight of the framework in the runtime selector, used to prioritize modelFramework Default: `1`.
### `ModelOverlayRef` {#ome-io-v1beta1-ModelOverlayRef} Used by [`ModelRef`](#ome-io-v1beta1-ModelRef). ModelOverlayRef references a BaseModel attached as an overlay. Narrower than ModelRef on purpose: no nested Overlays (type-system forbids recursion) and no FineTunedWeights (weight composition lives on the primary).
FieldTypeDescription
name Required string
kind string Default: `ClusterBaseModel`.
apiGroup string Default: `ome.io`.
### `ModelQuantization` {#ome-io-v1beta1-ModelQuantization} Used by [`BaseModelSpec`](#ome-io-v1beta1-BaseModelSpec), [`SupportedModelFormat`](#ome-io-v1beta1-SupportedModelFormat). Underlying type: `string`. ### `ModelRef` {#ome-io-v1beta1-ModelRef} Used by [`InferenceReplicaSpec`](#ome-io-v1beta1-InferenceReplicaSpec), [`InferenceServiceSpec`](#ome-io-v1beta1-InferenceServiceSpec).
FieldTypeDescription
name Required string Name of the model being referenced. Identifies the specific model to be used for inference.
kind string Kind of the model being referenced. Specifies the Kubernetes resource kind of the referenced model. Default: `ClusterBaseModel`.
apiGroup string APIGroup of the resource being referenced. Specifies the Kubernetes API group of the referenced model. Default: `ome.io`.
fineTunedWeights []string FineTunedWeights names the FineTunedWeight resources to apply to the base model.
overlays []ModelOverlayRef Since v1.3. Overlays declares additional BaseModels attached to every serving pod alongside the primary. Each overlay is mounted (PVC/PerNode) or env-addressable (Sharded) at /opt/ml/model-overlays/<name> and exposed via OVERLAY_<UPPERCASED_NAME>_MODEL_PATH. Runner selects at request time; OME does not detect failures or auto-swap. Disabled or NotReady overlays are silently omitted.
### `ModelRevisionStates` {#ome-io-v1beta1-ModelRevisionStates} Used by [`ModelStatus`](#ome-io-v1beta1-ModelStatus).
FieldTypeDescription
activeModelState ModelState High level state string: Pending, Standby, Loading, Loaded, FailedToLoad Default: `Pending`.
targetModelState ModelState Default: `""`.
### `ModelSizeRangeSpec` {#ome-io-v1beta1-ModelSizeRangeSpec} Used by [`ServingRuntimeSpec`](#ome-io-v1beta1-ServingRuntimeSpec). ModelSizeRangeSpec defines the range of model sizes supported by this runtime
FieldTypeDescription
min string Minimum model parameter count supported by this runtime, given as a string with an optional suffix M (million), B (billion), or T (trillion), e.g. "1B", "7B", "70B", "1T". It is compared against the model's parameter size during runtime auto-selection. A value not in the <number>[M|B|T] form is treated as 0.
max string Maximum model parameter count supported by this runtime, given as a string with an optional suffix M (million), B (billion), or T (trillion), e.g. "1B", "7B", "70B", "1T". It is compared against the model's parameter size during runtime auto-selection. A value not in the <number>[M|B|T] form is treated as 0.
### `ModelState` {#ome-io-v1beta1-ModelState} Used by [`ModelRevisionStates`](#ome-io-v1beta1-ModelRevisionStates). ModelState enum Underlying type: `string`. Allowed values: `""`, `Pending`, `Standby`, `Loading`, `Loaded`, `FailedToLoad`. ### `ModelStatus` {#ome-io-v1beta1-ModelStatus} Used by [`InferenceServiceStatus`](#ome-io-v1beta1-InferenceServiceStatus).
FieldTypeDescription
transitionStatus TransitionStatus Whether the pods serving the model reflect the current spec or are in transition. Empty when the InferenceService is "lean" (no spec.model is declared) and no model-loading lifecycle applies; the controller leaves this field unset in that case. Populated as "InProgress" → "UpToDate" (or "BlockedByFailedLoad"/"InvalidSpec") by the controller once a model is referenced.
modelRevisionStates ModelRevisionStates The model's load state in the pods that serve it.
lastFailureInfo FailureInfo Details of last failure, when load of target model is failed or blocked.
modelCopies ModelCopies How many copies of the model are loaded, and how many failed.
### `ModelStatusSpec` {#ome-io-v1beta1-ModelStatusSpec} Used by [`BaseModel`](#ome-io-v1beta1-BaseModel), [`ClusterBaseModel`](#ome-io-v1beta1-ClusterBaseModel), [`FineTunedWeight`](#ome-io-v1beta1-FineTunedWeight). ModelStatusSpec defines the observed state of Model weight
FieldTypeDescription
lifecycle string LifeCycle is the model's lifecycle stage, such as Deprecated, Experiment, Public or Internal. The API server doesn't check the value, and OME doesn't set it.
state LifeCycleState Status of the model weight
observedGeneration int64 ObservedGeneration is the .metadata.generation the controller last reconciled against. If this lags behind .metadata.generation, the controller has not yet observed the latest spec edit.
lastReconcileTime Time LastReconcileTime is the wall-clock timestamp of the controller's most recent reconcile pass for this object. Liveness signal — if it falls behind by more than the reconcile period, the controller is wedged or not scheduled. Distinct from Condition.lastTransitionTime, which only advances on actual status flips.
nodesReady []string
nodesFailed []string
conditions []Condition Conditions describe cluster-wide model readiness. OME sets them only for pvc:// models, which report SourceReachable and Ready. Other models report per-node state through NodesReady and NodesFailed.
cache ModelCacheStatus Since v1.3. Cache identifies the external cache behind Sharded distribution, which is in development. OME doesn't set it yet.
### `MountedOverlay` {#ome-io-v1beta1-MountedOverlay} Used by [`InferenceServiceStatus`](#ome-io-v1beta1-InferenceServiceStatus). MountedOverlay records one overlay the controller wired into the current pod spec.
FieldTypeDescription
name string
envVar string
mountPath string MountPath is empty for Sharded overlays (fetched at runtime).
distribution string
### `OMENativeInstancePhase` {#ome-io-v1beta1-OMENativeInstancePhase} Used by [`InstanceStatusPhaseGroup`](#ome-io-v1beta1-InstanceStatusPhaseGroup), [`OMENativeInstanceStatus`](#ome-io-v1beta1-OMENativeInstanceStatus). OMENativeInstancePhase is the lifecycle phase of an OMENative Instance. Underlying type: `string`. Allowed values: `Pending`, `Creating`, `Ready`, `Updating`, `Restarting`, `Migrating`, `Failed`, `Deleting`. ### `OMENativeInstanceStatus` {#ome-io-v1beta1-OMENativeInstanceStatus} Used by [`InferenceReplicaStatus`](#ome-io-v1beta1-InferenceReplicaStatus). OMENativeInstanceStatus reports state for one OMENative Instance.
FieldTypeDescription
index int32 Index is the stable Instance ordinal. Values may be sparse after surge migration.
incarnation int64 Incarnation increments each time the Instance is recreated (full recreate update, restart-on-loss). In-place updates do not increment. Stamped on pods via the `ome.io/instance-incarnation` label.
phase OMENativeInstancePhase Phase is the lifecycle phase of the Instance.
runningRevision string RunningRevision is the ControllerRevision the live pods are running.
targetRevision string TargetRevision is the ControllerRevision the live pods are converging toward.
podCount int32 PodCount is the total number of pods owned by this Instance.
readyPodCount int32 ReadyPodCount is retained for API compatibility. OMENative derives readiness from Pods and does not persist this field.
servingPodCount int32 ServingPodCount is the number of pods that are BOTH ContainersReady AND have serving=True on the controller-managed readiness gate — i.e., pods actually in the load balancer rotation. Diverges from ReadyPodCount whenever the controller flips the serving gate (in-place updates, drain steps, etc.). MaxUnavailable budgets are computed against the serving count, not the ready count, so that "missing from traffic" reflects reality.
availablePodCount int32 AvailablePodCount is the number of pods that are Available: in rotation on the Component's headless Service and, when lifecycle.minReadySeconds is set, Ready for at least that long.
scheduledPodCount int32 ScheduledPodCount is retained for API compatibility. OMENative derives scheduling state from Pods and does not persist this field.
admitted bool Admitted is true when this Instance's pods have left the Kueue admission scheduling gate (quota granted): the Instance has pods and none are admission-gated. False while gated/queued or before pods exist. Used by the control plane to decide the fan-out race winner.
nodesOccupied []string NodesOccupied is retained for API compatibility. OMENative reads current placement from Pods and does not persist this field.
conditions []Condition Conditions reports Instance-level conditions. Defined types include AllPodsScheduled, AllPodsReady, AllPodsAvailable, Drained, Failed, ProgressDeadlineExceeded.
readySince Time ReadySince is when the Instance last entered Ready. Anchors post-Ready failure detection: container restarts that finished before this time belong to boot and never trigger a recreate.
operation InstanceOperation Operation is the durable record of an in-flight destructive action against this Instance. Set before the action starts, cleared after it completes. Lets a crashed controller resume work without diffing pod state.
activeOrdinal int32 ActiveOrdinal identifies which of two pod-naming slots (0 or 1) currently holds the canonical pod for this single-pod Instance. SurgeThenDrain alternates between slots: the surge creates a new pod at `1 - ActiveOrdinal`, waits Ready, drains the old pod, then advances ActiveOrdinal to the new slot. Stays 0 for InPlace and Recreate strategies (those reuse the same pod name). Defaults to 0 on initial create. Minimum: `0`. Maximum: `1`.
lastFailure InstanceTermination LastFailure preserves the diagnostics of the pod whose failure (or stuck-pod escalation) last triggered a recreate of this Instance. OMENative drains and deletes every gang pod on recreate, so the failing pod and its container termination state vanish from the cluster — this field is the surviving trace operators read when a multi-node Instance keeps recreating. Set on the first pass of a failure-driven Restart and on stuck-pod escalation; left untouched by revision-roll recreates (those carry their cause in Operation.Reason instead) so the most recent genuine failure isn't overwritten by a clean rollout.
announced []string Announced records the once-only messages this Instance has already emitted, one entry per message: the event reason it was emitted under and the episode it was emitted in, joined by "@". A warning an operator needs to see once — the gang has no co-location term, the PodGroup was rebuilt, a repair is held, a drain is past its deadline — is emitted only when its entry is absent, and is stamped in the same write that emits it. Recording it on the Instance rather than in controller memory is what makes the once-only property hold per workload rather than per process, and survive a controller restart. The episode is the in-flight operation, or the incarnation when there is none: a new attempt or a rebuilt Instance has its own messages to deliver, and the entries of the episode it replaced no longer match.
### `ObjectReference` {#ome-io-v1beta1-ObjectReference} Used by [`FineTunedWeightSpec`](#ome-io-v1beta1-FineTunedWeightSpec). ObjectReference contains enough information to let you inspect or modify the referred object.
FieldTypeDescription
name Required string Name of the referenced object
namespace string Namespace of the referenced object
### `OnInconclusive` {#ome-io-v1beta1-OnInconclusive} Used by [`RolloutAnalysis`](#ome-io-v1beta1-RolloutAnalysis). OnInconclusive selects the behavior when analysis cannot read health past the stall timeout (NOT a metric breach). Underlying type: `string`. ### `ParentReference` {#ome-io-v1beta1-ParentReference} Used by [`InferenceReplicaSpec`](#ome-io-v1beta1-InferenceReplicaSpec). ParentReference holds the InferenceService owner reference info. Distinct from the OwnerReference list because the InferenceReplica controller composes the parent's name into per-IR label and Service names without re-reading the metadata field.
FieldTypeDescription
name Required string Name is the name of the parent InferenceService. Minimum length: `1`.
### `PauseMode` {#ome-io-v1beta1-PauseMode} Used by [`InferenceReplicaSpec`](#ome-io-v1beta1-InferenceReplicaSpec). PauseMode is the enum of pause depths for InferenceReplicaSpec.Paused. Underlying type: `string`. ### `PlacementCapacityPool` {#ome-io-v1beta1-PlacementCapacityPool} Used by [`PlacementCapacitySample`](#ome-io-v1beta1-PlacementCapacitySample). PlacementCapacityPool is the evidence for one resource/flavor ratio.
FieldTypeDescription
resourceName string
resourceFlavor string
demand int64 Minimum: `1`.
allocatable int64 Minimum: `0`.
observedAt Time
reportUID UID
reportResourceVersion string
attribution AcceleratorCapacityAttribution
### `PlacementCapacitySample` {#ome-io-v1beta1-PlacementCapacitySample} Used by [`CandidateAllocationStatus`](#ome-io-v1beta1-CandidateAllocationStatus). PlacementCapacitySample records the identified hardware and resolved demand used to normalize one member into nominal whole-replica capacity.
FieldTypeDescription
demandFingerprint string
demandContract PlacementDemandContract DemandContract binds normalization to the member rendering authorized by this allocation. Its fingerprint must equal DemandFingerprint.
replicas int64 Minimum: `0`.
pools []PlacementCapacityPool
### `PlacementComponentDemand` {#ome-io-v1beta1-PlacementComponentDemand} Used by [`PlacementDemandContract`](#ome-io-v1beta1-PlacementDemandContract). PlacementComponentDemand identifies one component's rendered replica shape.
FieldTypeDescription
component Required ComponentType Allowed values: `engine`, `decoder`.
renderingHash Required string RenderingHash includes pod shapes, worker count, mode and RuntimeClasses. Pattern: `^[a-f0-9]{64}$`.
### `PlacementComponentFloor` {#ome-io-v1beta1-PlacementComponentFloor} Used by [`PlacementExecutionPolicy`](#ome-io-v1beta1-PlacementExecutionPolicy), [`PlacementHomePolicy`](#ome-io-v1beta1-PlacementHomePolicy). PlacementComponentFloor records a resolved component's guaranteed count. Engine and Decoder use equal whole-replica floors; Router is independent. Zero permits steady scale-to-zero; movement requires positive floors.
FieldTypeDescription
component Required ComponentType Allowed values: `engine`, `decoder`, `router`.
replicas Required int32 Minimum: `0`.
### `PlacementDemandContract` {#ome-io-v1beta1-PlacementDemandContract} Used by [`PlacementCapacitySample`](#ome-io-v1beta1-PlacementCapacitySample), [`PlacementExecutionPolicy`](#ome-io-v1beta1-PlacementExecutionPolicy). PlacementDemandContract binds component rendering to normalized unit demand. Router is excluded because its replicas follow a per-home policy.
FieldTypeDescription
fingerprint Required string Fingerprint identifies the complete resolved resource/flavor demand. Pattern: `^[a-f0-9]{64}$`.
components Required []PlacementComponentDemand Components includes exactly the declared Engine/Decoder components. Minimum items: `1`. Maximum items: `2`.
### `PlacementExecutionPolicy` {#ome-io-v1beta1-PlacementExecutionPolicy} Used by [`InferenceReplicaSpec`](#ome-io-v1beta1-InferenceReplicaSpec). PlacementExecutionPolicy carries source allocation authority to a member's component reconciler. It is absent for locally managed services.
FieldTypeDescription
planID Required string
revision Required int64 Minimum: `1`.
sourceUID Required UID
clusterUID Required UID
pauseSurge Required bool PauseSurge prevents new surplus-producing operations while existing operations retain their reservations and may finish cleanup.
demand PlacementDemandContract Demand requires member rendering to match the accepted normalization inputs before a component can project workloads. Absent for static plans.
replicaFloors []PlacementComponentFloor ReplicaFloors binds the full per-home policy to the floors accepted by placement. Runtime changes cannot expand a paused placement reservation. Minimum items: `1`. Maximum items: `3`.
### `PlacementHomePolicy` {#ome-io-v1beta1-PlacementHomePolicy} Used by [`CandidateAllocationStatus`](#ome-io-v1beta1-CandidateAllocationStatus). PlacementHomePolicy records the full component floors of one retained home.
FieldTypeDescription
inputDigest string InputDigest binds these resolved floors to the accepted source intent.
replicaFloors []PlacementComponentFloor Minimum items: `1`. Maximum items: `3`.
### `PlacementMode` {#ome-io-v1beta1-PlacementMode} Used by [`PlacementPlanStatus`](#ome-io-v1beta1-PlacementPlanStatus), [`PlacementSpec`](#ome-io-v1beta1-PlacementSpec), [`TrafficMapSpec`](#ome-io-v1beta1-TrafficMapSpec). PlacementMode is the cardinality of a multi-cluster placement: how many workload clusters end up serving the InferenceService. Underlying type: `string`. Allowed values: `Single`, `All`, `Split`, `SplitByCapacity`. ### `PlacementPhase` {#ome-io-v1beta1-PlacementPhase} Used by [`PlacementStatus`](#ome-io-v1beta1-PlacementStatus). PlacementPhase is the coarse state of an InferenceService's multi-cluster placement. Underlying type: `string`. Allowed values: `Pending`, `Admitting`, `Racing`, `Placed`, `Failed`. ### `PlacementPlanStatus` {#ome-io-v1beta1-PlacementPlanStatus} Used by [`PlacementStatus`](#ome-io-v1beta1-PlacementStatus). PlacementPlanStatus identifies the allocation persisted before member writes. Original assignments remain fixed throughout a transition, including retargets.
FieldTypeDescription
id string
mode PlacementMode Mode identifies the execution semantics of this accepted plan. Allowed values: `Single`, `All`, `Split`, `SplitByCapacity`.
winner string Winner commits the admitted Single home before race losers are removed. Empty means the persisted Single admission race has not selected a home.
singleMove PlacementSingleMoveStatus SingleMove retains bounded replacement-race state until the old home and losing probes have been removed. Winner remains the serving home.
adoptionDigest string AdoptionDigest fixes the initial intent while standing homes are being inventoried. A changed intent cannot expand an incomplete inventory.
revision int64 Revision increases for every accepted allocation or drain instruction. Minimum: `1`.
sourceUID UID
observedGeneration int64 Minimum: `1`.
inputDigest string InputDigest identifies resolved source intent and accepted allocation inputs. Heartbeat timestamps and report resource versions do not change this digest.
pauseSurge bool PauseSurge keeps new member rollout reservations stopped while placement owns the shared transition allowance. Releasing it creates a new revision.
requestedReplicas int64 RequestedReplicas includes the assigned and unassigned desired floor. Minimum: `0`.
assignedReplicas int64 Minimum: `0`.
unassignedReplicas int32 Minimum: `0`.
originalUnassignedReplicas int32 OriginalUnassignedReplicas retains the unassigned part of the original floor. Minimum: `0`.
### `PlacementPolicy` {#ome-io-v1beta1-PlacementPolicy} Used by [`PlacementSpec`](#ome-io-v1beta1-PlacementSpec). PlacementPolicy selects the matching and allocation contract. Underlying type: `string`. Allowed values: `ClusterAffinity`, `ComponentAffinity`. ### `PlacementSingleMoveStatus` {#ome-io-v1beta1-PlacementSingleMoveStatus} Used by [`PlacementPlanStatus`](#ome-io-v1beta1-PlacementPlanStatus). PlacementSingleMoveStatus separates replacement admission from serving handoff.
FieldTypeDescription
selected string Selected records the admitted replacement while it becomes ready and routable.
cursor string Cursor identifies the last nominated replacement for fair bounded retries.
### `PlacementSpec` {#ome-io-v1beta1-PlacementSpec} Used by [`InferenceServiceSpec`](#ome-io-v1beta1-InferenceServiceSpec). PlacementSpec declares explicit multi-cluster matching and allocation intent. Validation: replacementTimeout requires Single placement. Validation: componentAffinity is required by, and only valid with, the ComponentAffinity policy. Validation: the ComponentAffinity policy reads componentAffinity, not clusterAffinity.
FieldTypeDescription
policy Required PlacementPolicy Policy selects affinity matching and persisted allocation plans. ComponentAffinity reads per-component terms from componentAffinity.
mode Required PlacementMode Mode selects the placement cardinality and replica allocation strategy.
clusterAffinity []ClusterAffinityTerm ClusterAffinity ORs terms whose requirements are ANDed, for every component. Requires the ClusterAffinity policy; omission then matches every registration. An explicit empty or null list is invalid. Minimum items: `1`. Maximum items: `64`.
componentAffinity ComponentClusterAffinity ComponentAffinity holds one affinity term list per component and requires the ComponentAffinity policy. Every component must match the same clusters; in Split, each component's weights set its own shares. An explicit null is invalid.
maxSurge int32 Deprecated: MaxSurge is ignored. A placement move may hold one extra full copy of the desired allocation; admission warns when this is set. Minimum: `0`.
replacementTimeout Duration ReplacementTimeout bounds a non-admitting probe during a healthy Single move. Omission retains pending probes; a positive duration allows rotation. Validation: replacementTimeout must be a positive duration.
split SplitSpec Split provides the requested floor and optional per-home ceiling for Split and SplitByCapacity. ClusterAffinity rejects it in other modes.
### `PlacementStatus` {#ome-io-v1beta1-PlacementStatus} Used by [`InferenceServiceStatus`](#ome-io-v1beta1-InferenceServiceStatus). PlacementStatus is the multi-cluster placement status: its coarse phase and the candidate clusters participating in placement.
FieldTypeDescription
plan PlacementPlanStatus Plan is the durable authority for member allocation writes.
cluster string Cluster is the winning WorkloadCluster in Single mode. It is empty before admission and in All/Split modes, where Candidates is authoritative.
phase PlacementPhase Phase is a coarse placement state.
endpoint URL Endpoint is the externally-addressable URL of the winning cluster in Single mode, mirrored from the derived InferenceService's status.url once it is admitted AND addressable. It is empty before the winner reports a URL and in All/Split modes, where per-candidate endpoints are authoritative.
candidates []CandidatePlacement Candidates are the clusters this ISVC has been fanned out to during placement. Populated by the control plane.
### `PodOverride` {#ome-io-v1beta1-PodOverride} Used by [`BenchmarkJobSpec`](#ome-io-v1beta1-BenchmarkJobSpec).
FieldTypeDescription
image string Image specifies the container image to use for the benchmark job.
env []EnvVar List of environment variables to set in the container.
envFrom []EnvFromSource List of sources to populate environment variables in the container.
volumeMounts []VolumeMount Pod volumes to mount into the container's filesystem.
resources ResourceRequirements Compute Resources required by this container. Cannot be updated. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
tolerations []Toleration If specified, the pod's tolerations.
nodeSelector map[string]string NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node's labels for the pod to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/
affinity Affinity If specified, the pod's scheduling constraints
volumes []Volume List of volumes that can be mounted by containers belonging to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes
### `PodSpec` {#ome-io-v1beta1-PodSpec} Used by [`DecoderSpec`](#ome-io-v1beta1-DecoderSpec), [`EngineSpec`](#ome-io-v1beta1-EngineSpec), [`LeaderSpec`](#ome-io-v1beta1-LeaderSpec), [`RouterSpec`](#ome-io-v1beta1-RouterSpec), [`WorkerSpec`](#ome-io-v1beta1-WorkerSpec). PodSpec is a description of a pod.
FieldTypeDescription
volumes []Volume List of volumes that can be mounted by containers belonging to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes
initContainers []Container List of initialization containers belonging to the pod. Init containers are executed in order prior to containers being started. If any init container fails, the pod is considered to have failed and is handled according to its restartPolicy. The name for an init container or normal container must be unique among all containers. Init containers may not have Lifecycle actions, Readiness probes, Liveness probes, or Startup probes. The resourceRequirements of an init container are taken into account during scheduling by finding the highest request/limit for each resource type, and then using the max of of that value or the sum of the normal containers. Limits are applied to init containers in a similar fashion. Init containers cannot currently be added or removed. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/
containers []Container List of containers belonging to the pod. Containers cannot currently be added or removed. There must be at least one container in a Pod. Cannot be updated.
ephemeralContainers []EphemeralContainer List of ephemeral containers run in this pod. Ephemeral containers may be run in an existing pod to perform user-initiated actions such as debugging. This list cannot be specified when creating a pod, and it cannot be modified by updating the pod spec. In order to add an ephemeral container to an existing pod, use the pod's ephemeralcontainers subresource. Don't set it here: Kubernetes doesn't allow ephemeral containers in the pod templates OME creates, and the InferenceService CRD drops the field from spec.engine, spec.decoder and spec.router.
restartPolicy RestartPolicy Restart policy for all containers within the pod. One of Always, OnFailure, Never. In some contexts, only a subset of those values may be permitted. Default to Always. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#restart-policy
terminationGracePeriodSeconds int64 Optional duration in seconds the pod needs to terminate gracefully. May be decreased in delete request. Value must be non-negative integer. The value zero indicates stop immediately via the kill signal (no opportunity to shut down). If this value is nil, the default grace period will be used instead. The grace period is the duration in seconds after the processes running in the pod are sent a termination signal and the time when the processes are forcibly halted with a kill signal. Set this value longer than the expected cleanup time for your process. Defaults to 30 seconds.
activeDeadlineSeconds int64 Optional duration in seconds the pod may be active on the node relative to StartTime before the system will actively try to mark it failed and kill associated containers. Value must be a positive integer.
dnsPolicy DNSPolicy Set DNS policy for the pod. Defaults to "ClusterFirst". Valid values are 'ClusterFirstWithHostNet', 'ClusterFirst', 'Default' or 'None'. DNS parameters given in DNSConfig will be merged with the policy selected with DNSPolicy. To have DNS options set along with hostNetwork, you have to specify DNS policy explicitly to 'ClusterFirstWithHostNet'.
nodeSelector map[string]string NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node's labels for the pod to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/
serviceAccountName string ServiceAccountName is the name of the ServiceAccount to use to run this pod. More info: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/
serviceAccount string DeprecatedServiceAccount is a deprecated alias for ServiceAccountName. Deprecated: Use serviceAccountName instead.
automountServiceAccountToken bool AutomountServiceAccountToken indicates whether a service account token should be automatically mounted.
nodeName string NodeName indicates in which node this pod is scheduled. If empty, this pod is a candidate for scheduling by the scheduler defined in schedulerName. Once this field is set, the kubelet for this node becomes responsible for the lifecycle of this pod. This field should not be used to express a desire for the pod to be scheduled on a specific node. https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#nodename
hostNetwork bool Host networking requested for this pod. Use the host's network namespace. If this option is set, the ports that will be used must be specified. Default to false.
hostPID bool Use the host's pid namespace. Optional: Default to false.
hostIPC bool Use the host's ipc namespace. Optional: Default to false.
shareProcessNamespace bool Share a single process namespace between all of the containers in a pod. When this is set containers will be able to view and signal processes from other containers in the same pod, and the first process in each container will not be assigned PID 1. HostPID and ShareProcessNamespace cannot both be set. Optional: Default to false.
securityContext PodSecurityContext SecurityContext holds pod-level security attributes and common container settings. Optional: Defaults to empty. See type description for default values of each field.
imagePullSecrets []LocalObjectReference ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. If specified, these secrets will be passed to individual puller implementations for them to use. More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod
hostname string Specifies the hostname of the Pod. If not specified, the pod's hostname will be set to a system-defined value.
subdomain string If specified, the fully qualified Pod hostname will be "<hostname>.<subdomain>.<pod namespace>.svc.<cluster domain>". If not specified, the pod will not have a domainname at all.
affinity Affinity If specified, the pod's scheduling constraints
schedulerName string If specified, the pod will be dispatched by specified scheduler. If not specified, the pod will be dispatched by default scheduler.
tolerations []Toleration If specified, the pod's tolerations.
hostAliases []HostAlias HostAliases is an optional list of hosts and IPs that will be injected into the pod's hosts file if specified.
priorityClassName string If specified, indicates the pod's priority. "system-node-critical" and "system-cluster-critical" are two special keywords which indicate the highest priorities with the former being the highest priority. Any other name must be defined by creating a PriorityClass object with that name. If not specified, the pod priority will be default or zero if there is no default.
priority int32 The priority value. Various system components use this field to find the priority of the pod. When Priority Admission Controller is enabled, it prevents users from setting this field. The admission controller populates this field from PriorityClassName. The higher the value, the higher the priority.
dnsConfig PodDNSConfig Specifies the DNS parameters of a pod. Parameters specified here will be merged to the generated DNS configuration based on DNSPolicy.
readinessGates []PodReadinessGate If specified, all readiness gates will be evaluated for pod readiness. A pod is ready when all its containers are ready AND all conditions specified in the readiness gates have status equal to "True" More info: https://git.k8s.io/enhancements/keps/sig-network/580-pod-readiness-gates
runtimeClassName string RuntimeClassName refers to a RuntimeClass object in the node.k8s.io group, which should be used to run this pod. If no RuntimeClass resource matches the named class, the pod will not be run. If unset or empty, the "legacy" RuntimeClass will be used, which is an implicit class with an empty definition that uses the default runtime handler. More info: https://git.k8s.io/enhancements/keps/sig-node/585-runtime-class
enableServiceLinks bool EnableServiceLinks indicates whether information about services should be injected into pod's environment variables, matching the syntax of Docker links. Optional: Defaults to true.
preemptionPolicy PreemptionPolicy PreemptionPolicy is the Policy for preempting pods with lower priority. One of Never, PreemptLowerPriority. Defaults to PreemptLowerPriority if unset.
overhead ResourceList Overhead represents the resource overhead associated with running a pod for a given RuntimeClass. This field will be autopopulated at admission time by the RuntimeClass admission controller. If the RuntimeClass admission controller is enabled, overhead must not be set in Pod create requests. The RuntimeClass admission controller will reject Pod create requests which have the overhead already set. If RuntimeClass is configured and selected in the PodSpec, Overhead will be set to the value defined in the corresponding RuntimeClass, otherwise it will remain unset and treated as zero. More info: https://git.k8s.io/enhancements/keps/sig-node/688-pod-overhead/README.md
topologySpreadConstraints []TopologySpreadConstraint TopologySpreadConstraints describes how a group of pods ought to spread across topology domains. Scheduler will schedule pods in a way which abides by the constraints. All topologySpreadConstraints are ANDed.
setHostnameAsFQDN bool If true the pod's hostname will be configured as the pod's FQDN, rather than the leaf name (the default). In Linux containers, this means setting the FQDN in the hostname field of the kernel (the nodename field of struct utsname). In Windows containers, this means setting the registry value of hostname for the registry key HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Parameters to FQDN. If a pod does not have FQDN, this has no effect. Default to false.
os PodOS Specifies the OS of the containers in the pod. Some pod and container fields are restricted if this is set. If the OS field is set to linux, the following fields must be unset: -securityContext.windowsOptions If the OS field is set to windows, following fields must be unset: - spec.hostPID - spec.hostIPC - spec.hostUsers - spec.securityContext.appArmorProfile - spec.securityContext.seLinuxOptions - spec.securityContext.seccompProfile - spec.securityContext.fsGroup - spec.securityContext.fsGroupChangePolicy - spec.securityContext.sysctls - spec.shareProcessNamespace - spec.securityContext.runAsUser - spec.securityContext.runAsGroup - spec.securityContext.supplementalGroups - spec.securityContext.supplementalGroupsPolicy - spec.containers[*].securityContext.appArmorProfile - spec.containers[*].securityContext.seLinuxOptions - spec.containers[*].securityContext.seccompProfile - spec.containers[*].securityContext.capabilities - spec.containers[*].securityContext.readOnlyRootFilesystem - spec.containers[*].securityContext.privileged - spec.containers[*].securityContext.allowPrivilegeEscalation - spec.containers[*].securityContext.procMount - spec.containers[*].securityContext.runAsUser - spec.containers[*].securityContext.runAsGroup
hostUsers bool Use the host's user namespace. Optional: Default to true. If set to true or not present, the pod will be run in the host user namespace, useful for when the pod needs a feature only available to the host user namespace, such as loading a kernel module with CAP_SYS_MODULE. When set to false, a new userns is created for the pod. Setting false is useful for mitigating container breakout vulnerabilities even allowing users to run their containers as root without actually having root privileges on the host. This field is alpha-level and is only honored by servers that enable the UserNamespacesSupport feature.
schedulingGates []PodSchedulingGate SchedulingGates is an opaque list of values that if specified will block scheduling the pod. If schedulingGates is not empty, the pod will stay in the SchedulingGated state and the scheduler will not attempt to schedule the pod. SchedulingGates can only be set at pod creation time, and be removed only afterwards.
resourceClaims []PodResourceClaim ResourceClaims defines which ResourceClaims must be allocated and reserved before the Pod is allowed to start. The resources will be made available to those containers which consume them by name. This is an alpha field and requires enabling the DynamicResourceAllocation feature gate. This field is immutable.
### `PolicyEnforcement` {#ome-io-v1beta1-PolicyEnforcement} Used by [`AutoscalerPolicySpec`](#ome-io-v1beta1-AutoscalerPolicySpec). PolicyEnforcement is the enforcement tier of an AutoscalerPolicy. Alpha. The API may change without notice. Underlying type: `string`. Allowed values: `Default`, `Required`. ### `ProbeResult` {#ome-io-v1beta1-ProbeResult} Used by [`TrafficMapProbe`](#ome-io-v1beta1-TrafficMapProbe). ProbeResult is the outcome of the most recent end-to-end health probe. Underlying type: `string`. Allowed values: `Passing`, `Failing`, `Unknown`. ### `ProportionalPolicy` {#ome-io-v1beta1-ProportionalPolicy} Used by [`ScalingPolicy`](#ome-io-v1beta1-ScalingPolicy). ProportionalPolicy specifies the anchor Component and per-follower replica ratios for ScalingProportional. Alpha. The API may change without notice.
FieldTypeDescription
anchor ComponentType Anchor is the Component whose replica count drives followers. Allowed values: `engine`, `decoder`, `router`. Default: `engine`.
ratios map[ComponentType]Quantity Ratios maps each follower Component to its replica ratio relative to the anchor. A ratio of 1.0 means parity; 0.25 means one follower per four anchor replicas (rounded up). Components not listed scale independently.
### `ReplicaRefs` {#ome-io-v1beta1-ReplicaRefs} Used by [`InferenceServiceSpec`](#ome-io-v1beta1-InferenceServiceSpec). ReplicaRefs names the standalone InferenceReplicas an InferenceService fronts, per role. Each list names one replica of that component in the service's namespace.
FieldTypeDescription
engine []string Engine names the replicas that serve the engine role.
decoder []string Decoder names the replicas that serve the decoder role.
router []string Router names the replicas that serve the router role.
### `ReplicaValueSource` {#ome-io-v1beta1-ReplicaValueSource} Used by [`FallbackTemplate`](#ome-io-v1beta1-FallbackTemplate). ReplicaValueSource derives an int32 replica count for a rendered scaler field. Exactly one of Value / FromComponent is set. kedav1.Fallback.Replicas is an int32; a typed source avoids round-tripping numbers through string templates, which would add a parse failure mode for no expressiveness. Validation: exactly one of value or fromComponent must be set.
FieldTypeDescription
value int32 Value is a fixed replica count. Minimum: `0`.
fromComponent ComponentBoundsField FromComponent resolves against the consuming component's effective replica bounds — after defaulting and, on a placement-derived InferenceService, after the per-home bounds rewrite.
### `RetryBlock` {#ome-io-v1beta1-RetryBlock} Used by [`InferenceReplicaStatus`](#ome-io-v1beta1-InferenceReplicaStatus). RetryBlock is the persisted per-revision retry authority. The subject is the owning IR plus TargetRevision.
FieldTypeDescription
targetRevision string TargetRevision is the ControllerRevision name this block scopes.
state RetryBlockState
attemptsStarted int32 AttemptsStarted counts lifecycle attempts at this revision. Kubelet container restarts are diagnostic and not counted here.
nextRetryAt Time NextRetryAt is the persisted resume time while State=Backoff. Never recomputed from process-local history (restart-safe).
firstFailureAt Time
lastFailureAt Time
reason string Reason is the operator-facing last-failure summary.
### `RetryBlockState` {#ome-io-v1beta1-RetryBlockState} Used by [`RetryBlock`](#ome-io-v1beta1-RetryBlock). RetryBlockState is the retry authority state for one target revision. Underlying type: `string`. Allowed values: `Backoff`, `Held`, `RetryInProgress`. ### `RollingUpdate` {#ome-io-v1beta1-RollingUpdate} Used by [`UpdateStrategy`](#ome-io-v1beta1-UpdateStrategy). RollingUpdate paces rollout across Instances of one Component.
FieldTypeDescription
partition int32 Partition holds back updates for Instances whose index is < Partition. 0 (the default) updates all Instances. Used for canary holds. Minimum: `0`.
maxUnavailable IntOrString MaxUnavailable is the maximum number of Instances (or fraction) allowed to be in a non-Ready state during the rollout. Accepts either an absolute integer count (e.g. 2) or a percent string (e.g. "25%"). Percent values resolve to ceil(replicas * percent / 100) at reconcile time so the budget scales with the Component's replica count. Unset inherits the ServingRuntime's value; when neither sets it and the strategy is not SurgeThenDrain, the cluster default applies, and without one this layer sets no cap.
maxSurge IntOrString MaxSurge is the maximum number of extra Instances (or fraction) the rollout may create above the Component's desired replica count during a rolling update. Accepts either an absolute integer count (e.g. 1) or a percent string (e.g. "25%"). Percent values resolve to ceil(replicas * percent / 100) at reconcile time. Mirrors the semantics of upstream appsv1.Deployment.Strategy.RollingUpdate.MaxSurge — extra capacity is created and brought to Ready before old Instances are drained, enabling zero-capacity-dip rollouts. When the Component participates in a RolloutCoordinationGroup with a non-zero CoordinationPacing.MaxSurge, the group-wide ceiling caps the per-Component MaxSurge. Unset inherits the ServingRuntime's value; when neither sets it and the strategy is SurgeThenDrain, the cluster default applies, and without one this layer sets no cap.
### `RolloutAnalysis` {#ome-io-v1beta1-RolloutAnalysis} Used by [`RolloutGroupStep`](#ome-io-v1beta1-RolloutGroupStep). RolloutAnalysis is a step's metric gate: the checks (metrics) and policy (interval, failureLimit, onInconclusive, initialDelay) that decide advance, hold, or rollback for the step it is set on. It does NOT carry the metrics source — that is GroupCanary.Prometheus, shared by all analysis steps.
FieldTypeDescription
interval Required Duration Interval is the sampling cadence — how often the controller re-evaluates the metrics while a step bakes. It also bounds the requeue while holding.
initialDelay Duration InitialDelay is a warm-up after a step's pods become Ready and traffic is applied, before the first sample. New pods need a moment before their metrics mean anything; sampling immediately would read cold-start noise.
failureLimit Required int32 FailureLimit is the number of failing samples, counted PER STEP (reset on advance), that triggers auto-rollback. FailureLimit=1 rolls back on the first bad sample. Minimum: `1`.
onInconclusive OnInconclusive OnInconclusive selects what to do when a sample cannot be completed (Prometheus unreachable, query error, or empty result) past the stall timeout — distinct from a metric breach. - Hold (default): keep traffic at the current step and escalate to Failed for an operator decision. A monitoring outage is not evidence the canary is bad. - Rollback: fail-safe — treat "can't tell" as "assume bad" and roll back on the first inconclusive sample, without waiting out the stall timeout. - RollbackOnStall: ride out transient gaps like Hold, but roll back instead of parking once the stall timeout expires. Allowed values: `Hold`, `Rollback`, `RollbackOnStall`.
metrics Required []AnalysisMetric Metrics are the success conditions. A sample passes only when EVERY metric passes (AND). At least one is required; an analysis with no metrics could never fail and would gate nothing. Minimum items: `1`. Maximum items: `10`.
### `RolloutCoordinationGroupStatus` {#ome-io-v1beta1-RolloutCoordinationGroupStatus} Used by [`RolloutCoordinationStatus`](#ome-io-v1beta1-RolloutCoordinationStatus). RolloutCoordinationGroupStatus reports the observed state of one coordination group.
FieldTypeDescription
name string Name uniquely identifies the group within the RolloutCoordinationStatus. Auto-derived from the group index (stringified) on first observation.
components []ComponentType Components mirrors spec.rollout.groups[i].components for operator readability.
policy CoordinationPolicy Policy mirrors the spec policy.
order []ComponentType Order mirrors the spec order (Sequential / BlueGreen-ordered).
phase CoordinationPhase Phase reports the base coordination phase. Metric-stable enum.
compositePhase string CompositePhase is a human-readable composite of Phase plus the active Component for Sequential / per-Component-aware policies (e.g. "decoder.Surging", "Sequential.AwaitingNextComponent"). Operator-facing; metrics use Phase, not CompositePhase.
currentComponent ComponentType CurrentComponent names the Component the group is actively reconciling (Sequential policy). Empty otherwise.
previousComponent ComponentType PreviousComponent names the most recently completed Component in a Sequential group's order. Empty when no Component has yet reached Idle on the new revision.
observedSurge IntOrString ObservedSurge is the IntOrString surge target applied during the current Surging / Waiting phase. Empty when the group is Idle.
observedRatio RolloutCoordinationRatio ObservedRatio reports cross-Component ratio snapshots when the group uses RatioBalanced pacing. Nil for PerComponent pacing.
lastTransitionTime Time LastTransitionTime is when Phase last changed.
message string Message is a short operator-facing explanation of the current Phase. Set on Failed / RollingBack / Paused phases.
### `RolloutCoordinationRatio` {#ome-io-v1beta1-RolloutCoordinationRatio} Used by [`RolloutCoordinationGroupStatus`](#ome-io-v1beta1-RolloutCoordinationGroupStatus). RolloutCoordinationRatio is the cross-Component ratio snapshot used by RatioBalanced pacing.
FieldTypeDescription
original map[ComponentType]int32 Original is the snapshot of desired replica counts per Component at rollout start. The keys are ComponentType strings.
current map[ComponentType]int32 Current reports the live replica counts per Component.
newPods map[ComponentType]int32 NewPods reports the new-revision pod counts per Component.
### `RolloutCoordinationStatus` {#ome-io-v1beta1-RolloutCoordinationStatus} Used by [`InferenceServiceStatus`](#ome-io-v1beta1-InferenceServiceStatus). RolloutCoordinationStatus reports per-group coordination state for the InferenceService.
FieldTypeDescription
groups []RolloutCoordinationGroupStatus Groups reports the observed state of each declared rollout group, indexed by position in spec.rollout.groups[].
### `RolloutGroup` {#ome-io-v1beta1-RolloutGroup} Used by [`RolloutRunGroup`](#ome-io-v1beta1-RolloutRunGroup), [`RolloutSpec`](#ome-io-v1beta1-RolloutSpec). RolloutGroup is a set of Components that roll together, advancing through at most one progression. The progression is a presence-based one-of: set Canary, BlueGreen, or RollingUpdate — or none, which defaults to BlueGreen. Omitting it is the ergonomic spelling for "just roll this group" and for a single-Component group in a sequence (`components: [decoder]` then `components: [engine]`), where the empty `blueGreen: {}` selector would be pure ceremony. Failure mode if mis-set: two progressions is ambiguous (which one drives traffic?) and is rejected by the rule below. Validation: at most one of canary, blueGreen, or rollingUpdate may be set on a rollout group. Validation: order must reference only Components listed in this group.
FieldTypeDescription
components Required []ComponentType Components lists the Component names in this group (they roll together). Valid values: "router", "engine", "decoder". Minimum items: `1`. Maximum items: `3`.
order []ComponentType Order optionally pins the sequence in which this group's Components roll. No progression applies it — the Components in a group advance together — so admission rejects a non-empty order (on create and on any update that changes spec.rollout) rather than accept a sequence the engine does not enforce. To roll Components one at a time, declare one single-Component blueGreen group per Component, in the desired list order. Must reference only Components in this group. Maximum items: `3`.
canary GroupCanary Canary advances the group through explicit capacity + service-level-traffic steps with optional gates. One-of progression.
blueGreen GroupBlueGreen BlueGreen surges the full new set, then flips traffic atomically. One-of progression.
rollingUpdate GroupRollingUpdate RollingUpdate replaces pods gradually within the surge/unavailable budget, tolerating mixed revisions during the window. One-of progression.
policyRef RolloutPolicyRef PolicyRef names a same-namespace RolloutPolicy that supplies this group's progression. A sibling of the progression one-of, not an arm of it: the ref may coexist with one inline progression, and the inline block wins (the preview/rollback mechanism) — the shadowed policy's would-pin digest is published in status.rollout.groups[]. A group whose only progression is an unresolvable ref PARKS at run open (fail-closed); it never falls back to the default blueGreen, because silently removing a declared gate is the failure this API exists to prevent.
soak Duration Soak is the wait AFTER this group completes, before the next group begins. It is honored only when the rollout is a sequence of single-Component blueGreen groups (the run that collapses to the internal Sequential state machine); ignored on the last group. Admission rejects a soak the engine would silently drop — on a canary, multi-Component, or rollingUpdate group, or on a rollout that does not collapse to that sequence.
maintainRatio MaintainRatio MaintainRatio guards the cross-Component replica ratio while this group rolls. Meaningful only on multi-Component blueGreen/rollingUpdate groups (e.g. a PD engine+decoder pair); ignored on single-Component groups and rejected by admission on canary groups (the canary engine does not enforce it).
### `RolloutGroupOrdering` {#ome-io-v1beta1-RolloutGroupOrdering} Used by [`RolloutSpec`](#ome-io-v1beta1-RolloutSpec). RolloutGroupOrdering declares what, if anything, groups[] list order promises. Underlying type: `string`. Allowed values: `Sequential`, `Concurrent`. ### `RolloutGroupResolution` {#ome-io-v1beta1-RolloutGroupResolution} Used by [`RolloutStatus`](#ome-io-v1beta1-RolloutStatus). RolloutGroupResolution is the always-current resolution view for one spec group: which source would pin now, and the shadowed-policy preview when an inline progression outranks a ref.
FieldTypeDescription
index int32 Index is the group's position in spec.rollout.groups[].
source RolloutPlanSource Source is the source a run opened now would pin for this group.
policyRef RolloutPolicyRef
observedDigest string ObservedDigest is the portable digest of the progression body Source resolves to right now (live render — compare against the active run's pinned digest to see drift).
shadowedPolicyRef ShadowedRolloutPolicyRef ShadowedPolicyRef is set when an inline progression outranks a ref: the preview surface an operator diffs before deleting the inline block.
### `RolloutGroupStep` {#ome-io-v1beta1-RolloutGroupStep} Used by [`GroupCanary`](#ome-io-v1beta1-GroupCanary). RolloutGroupStep is one stage of a canary progression. Capacity and traffic are INDEPENDENT: capacity is the per-Component new-revision pod count; traffic is the service-level percentage of requests on the new revision. The independence allows "capacity ahead of traffic" (run 50% pods, send 10% traffic) for warm-up. How the step advances (its gate) is resolved in order: - Analysis set → metric-gated (queries GroupCanary.Prometheus); Pause.Duration, if any, is the minimum bake before a passing sample advances. - else Pause with Duration → timed: advance once Duration elapses. - else Pause → manual: hold for the ome.io/rollout-promote annotation. - else → advance as soon as capacity + traffic converge.
FieldTypeDescription
capacity Required IntOrString Capacity is the fraction of desired replicas to run on the new revision at this step. Percentage ("25%") or absolute ("3"). Per-Component.
traffic Required int32 Traffic is the service-level percentage of requests routed to the new revision at this step (0-100). Not per-Component. Minimum: `0`. Maximum: `100`.
pause RolloutPause Pause holds the step: with a Duration it is a timed advance (or, when Analysis is set, the bake window); without one it is a manual hold for the ome.io/rollout-promote annotation. Absent (and no Analysis) advances immediately.
analysis RolloutAnalysis Analysis opts this step into metric-gated promotion: it carries the checks (metrics) and policy (interval, failureLimit, onInconclusive) for THIS step. The metrics source is GroupCanary.Prometheus, shared by all analysis steps. Absent leaves the step manual/timed/immediate per Pause.
### `RolloutHold` {#ome-io-v1beta1-RolloutHold} Used by [`InferenceReplicaStatus`](#ome-io-v1beta1-InferenceReplicaStatus), [`LifecycleStatus`](#ome-io-v1beta1-LifecycleStatus). RolloutHold records the most recent reason a per-Instance Update was denied for a Component — the detail behind "why has this rollout not moved". Overwritten whenever a reconcile observes a fresh denial; cleared once the Component's rollout advances (an Update is admitted) or completes (CurrentRevision == UpdateRevision, or no rollout is in flight). Since is preserved across reconciles that keep reporting the same Gate and Target, so it anchors "held since" rather than "last observed at".
FieldTypeDescription
gate RolloutHoldGate Gate names the layer that produced Reason.
reason string Reason is the operator-facing denial string from the gate that produced it (e.g. "Sequential waiting on decoder").
target string Target is the ControllerRevision name the held Update was aimed at.
since Time Since is when this Gate+Target combination was first observed without interruption. A change in Gate or Target restarts the clock; a change in Reason text alone does not (mirrors how apimeta.SetStatusCondition preserves LastTransitionTime while a condition's Status is unchanged).
### `RolloutHoldGate` {#ome-io-v1beta1-RolloutHoldGate} Used by [`RolloutHold`](#ome-io-v1beta1-RolloutHold). RolloutHoldGate names the layer that most recently denied a per-Instance Update for a Component. Underlying type: `string`. Allowed values: `Pairing`, `Ratio`, `Sequential`, `Budget`, `RetryBlock`, `Held`, `Plan`. ### `RolloutPause` {#ome-io-v1beta1-RolloutPause} Used by [`RolloutGroupStep`](#ome-io-v1beta1-RolloutGroupStep). RolloutPause holds a rollout at a step boundary; its meaning depends on the step's gate (see RolloutGroupStep): - manual step (Pause, no Duration): wait for the ome.io/rollout-promote annotation. - timed step (Pause with Duration, no Analysis): advance after Duration. - analysis step (Analysis set): Duration is the minimum bake time before a passing sample may advance.
FieldTypeDescription
duration Duration Duration to pause at this step; see the type doc for how each gate uses it.
### `RolloutPhase` {#ome-io-v1beta1-RolloutPhase} Used by [`ComponentStatusSpec`](#ome-io-v1beta1-ComponentStatusSpec). RolloutPhase is the canary step machine's projected state for a Component that a spec.rollout canary group governs. The canary executor writes it on the Component it drives (the unit's entrypoint) and nothing clears it, so it persists between runs. Lives on ComponentStatusSpec.RolloutPhase. Components that blueGreen/rollingUpdate groups drive carry no phase; their state is under status.rolloutCoordination. Underlying type: `string`. ### `RolloutPlanSource` {#ome-io-v1beta1-RolloutPlanSource} Used by [`CandidateRolloutGroup`](#ome-io-v1beta1-CandidateRolloutGroup), [`RolloutGroupResolution`](#ome-io-v1beta1-RolloutGroupResolution), [`RolloutRunGroup`](#ome-io-v1beta1-RolloutRunGroup), [`RolloutRunProvenance`](#ome-io-v1beta1-RolloutRunProvenance). RolloutPlanSource records where a pinned group's progression came from. Underlying type: `string`. Allowed values: `Inline`, `Policy`. ### `RolloutPolicyRef` {#ome-io-v1beta1-RolloutPolicyRef} Used by [`RolloutGroup`](#ome-io-v1beta1-RolloutGroup), [`RolloutGroupResolution`](#ome-io-v1beta1-RolloutGroupResolution), [`RolloutRunGroup`](#ome-io-v1beta1-RolloutRunGroup), [`RolloutRunProvenance`](#ome-io-v1beta1-RolloutRunProvenance). RolloutPolicyRef names a same-namespace RolloutPolicy that supplies a rollout group's progression. Deliberately a sibling of the inline progression one-of, not an arm of it: a ref and one inline progression may coexist, and the inline block wins — the preview/rollback mechanism.
FieldTypeDescription
name Required string Name of the RolloutPolicy in the InferenceService's namespace. Minimum length: `1`.
progression Required RolloutProgressionKind Progression declares the referenced policy's kind so shape-dependent admission rules evaluate without dereferencing the policy. A mismatch with the policy's actual body parks the rollout at run open (ProgressionMismatch); it cannot mis-execute.
kind string Kind is reserved: v1 admission accepts only "RolloutPolicy"; "ClusterRolloutPolicy" is the reserved cluster-scoped twin. Default: `RolloutPolicy`.
### `RolloutPolicySpec` {#ome-io-v1beta1-RolloutPolicySpec} Used by [`RolloutPolicy`](#ome-io-v1beta1-RolloutPolicy). RolloutPolicySpec carries exactly one progression body, reusing the spec.rollout group progression types verbatim so a composed plan is a literal RolloutGroup fragment and run-open re-validation can run the same checks ISVC admission runs. Policy-only restrictions (percent-only capacities, providerRef-only metrics source) are admission rules on this kind, not type differences. Validation: exactly one of canary, blueGreen, or rollingUpdate must be set.
FieldTypeDescription
canary GroupCanary Canary is a stepped capacity+traffic progression with optional analysis gates. One-of.
blueGreen GroupBlueGreen BlueGreen surges the full new set, then flips traffic atomically. One-of.
rollingUpdate GroupRollingUpdate RollingUpdate replaces pods gradually within the surge/unavailable budget. One-of.
### `RolloutPolicyStatus` {#ome-io-v1beta1-RolloutPolicyStatus} Used by [`RolloutPolicy`](#ome-io-v1beta1-RolloutPolicy). RolloutPolicyStatus is deliberately bounded: counts and digests, never consumer name lists (a popular policy would otherwise grow status with its fleet).
FieldTypeDescription
observedGeneration int64 ObservedGeneration is the spec generation this status reflects.
portableDigest string PortableDigest is the hash of the defaulted, canonicalized spec ("rp1:..."): equal across clusters iff the specs match, so fleet drift is one field-compare away.
attachedGroups int32 AttachedGroups counts rollout groups currently referencing this policy across the namespace.
conditions []Condition
### `RolloutProgressionKind` {#ome-io-v1beta1-RolloutProgressionKind} Used by [`RolloutPolicyRef`](#ome-io-v1beta1-RolloutPolicyRef). RolloutProgressionKind names which progression a RolloutPolicy carries. A RolloutPolicyRef declares it so ISVC admission can validate every shape-dependent rollout rule (entrypoint, collapse, soak arity) without dereferencing the policy; a declaration the policy body contradicts parks the rollout at run open instead of mis-executing. Underlying type: `string`. Allowed values: `canary`, `blueGreen`, `rollingUpdate`. ### `RolloutRun` {#ome-io-v1beta1-RolloutRun} Used by [`RolloutStatus`](#ome-io-v1beta1-RolloutStatus). RolloutRun is one open rollout run: identity, targets, and the pinned plan.
FieldTypeDescription
runID string RunID uniquely names this run (stable for its lifetime; a retarget closes the run and opens a new one with a new ID).
openedAt Time OpenedAt is when the run was pinned.
pinnedAt Time PinnedAt advances on every plan pin — the open, and each applied repin. It is the run state's monotonic clock: concurrent status writers keep whichever side is newer, so a reconcile working from a stale cache can never roll a pinned plan back to a predecessor (a repin is one-shot — its verb is consumed — so a rolled-back pin would be unrecoverable, unlike every self-healing status field).
targetRevisions []RolloutRunTarget TargetRevisions records, per grouped Component, the revision hash this run is rolling toward and the stable hash it can roll back to. A Component's target changing mid-run is a retarget: the run closes (Superseded) and a fresh run opens with a fresh render.
plan RolloutRunPlan Plan is the effective groups list, frozen for this run. Executors index it — never the live spec — while the run is open.
### `RolloutRunGroup` {#ome-io-v1beta1-RolloutRunGroup} Used by [`RolloutRunPlan`](#ome-io-v1beta1-RolloutRunPlan). RolloutRunGroup is one pinned group: the resolved RolloutGroup the executors consume, plus the provenance of where its progression came from.
FieldTypeDescription
source RolloutPlanSource Source is where this group's progression came from.
policyRef RolloutPolicyRef PolicyRef identifies the policy when Source is Policy. On derived ISVCs (multi-cluster inflation) it is recovered from the derive-time provenance annotation so members report the same identity a locally-resolved ref would.
policyGeneration int64 PolicyGeneration is the referenced policy's generation at pin time.
portableDigest string PortableDigest is the pinned policy body's portable digest ("rp1:..."), or — for inline groups — the digest of the inline progression body, so drift detection works for both sources.
group RolloutGroup Group is the resolved group: components plus exactly one inline progression (a pinned group never carries a PolicyRef — the ref was resolved at pin time).
### `RolloutRunOutcome` {#ome-io-v1beta1-RolloutRunOutcome} Used by [`CandidateRolloutLastRun`](#ome-io-v1beta1-CandidateRolloutLastRun), [`RolloutRunRecord`](#ome-io-v1beta1-RolloutRunRecord). RolloutRunOutcome is how a closed run ended. Underlying type: `string`. Allowed values: `Completed`, `RolledBack`, `Superseded`. ### `RolloutRunPlan` {#ome-io-v1beta1-RolloutRunPlan} Used by [`RolloutRun`](#ome-io-v1beta1-RolloutRun). RolloutRunPlan is the frozen effective plan: the resolved groups in their pinned order. Group list-index identity (which keys the coordination engine's sticky state) indexes THIS list for the whole run, so mid-run group reorders in the spec cannot re-key ratio anchors or soak clocks.
FieldTypeDescription
groups []RolloutRunGroup
### `RolloutRunProvenance` {#ome-io-v1beta1-RolloutRunProvenance} Used by [`RolloutRunRecord`](#ome-io-v1beta1-RolloutRunRecord). RolloutRunProvenance is the provenance subset of a pinned group, kept after the run closes.
FieldTypeDescription
source RolloutPlanSource
policyRef RolloutPolicyRef
portableDigest string
### `RolloutRunRecord` {#ome-io-v1beta1-RolloutRunRecord} Used by [`RolloutStatus`](#ome-io-v1beta1-RolloutStatus). RolloutRunRecord is the bounded record of a closed run.
FieldTypeDescription
outcome RolloutRunOutcome
openedAt Time
closedAt Time
targetRevisions []RolloutRunTarget TargetRevisions retains each Component's target and stable revision so a rolled-back hold has an exact per-Component identity after ActiveRun is dropped.
groups []RolloutRunProvenance Groups carries per-group provenance (groups may reference different policies, so one digest per run would be lossy).
### `RolloutRunTarget` {#ome-io-v1beta1-RolloutRunTarget} Used by [`RolloutRun`](#ome-io-v1beta1-RolloutRun), [`RolloutRunRecord`](#ome-io-v1beta1-RolloutRunRecord). RolloutRunTarget is one grouped Component's pinned target revision.
FieldTypeDescription
component ComponentType
revision string Revision is the Component's target revision hash at run open.
stableRevision string StableRevision is the Component's last promoted revision hash at run open. It is preserved across retargets and is the exact rollback target.
### `RolloutSpec` {#ome-io-v1beta1-RolloutSpec} Used by [`InferenceServiceSpec`](#ome-io-v1beta1-InferenceServiceSpec). RolloutSpec is the single rollout surface for an InferenceService: a list of rollout groups. There is no coordination-vs-canary fork — canary is one progression a group may choose, and whether list order sequences the groups is GroupOrdering.
FieldTypeDescription
groups []RolloutGroup Groups is the ORDERED list of rollout groups. Sequence is the list position: group N reaches completion before group N+1 begins. Components listed together in one group roll together (a coupled unit); Components not listed in any group roll independently (the default). To roll Components one-at-a-time, put each in its own group, in order — a group needs only its components; the progression may be omitted and defaults to blueGreen. Cross-group sequencing is enforced only for a run of single-Component blueGreen groups (the classic one-at-a-time shape). Under the default groupOrdering: Sequential, admission rejects any other multi-group list — a rollingUpdate, canary, or multi-Component group in an ordered list would run concurrently, and an ordering the engine does not enforce is rejected rather than accepted. The rejection applies on create and on any update that changes spec.rollout, so stored objects keep reconciling until their rollout is next edited. Set groupOrdering: Concurrent to declare that the groups are independent and the list order promises nothing. Only meaningful for OMENative-managed Components. Maximum items: `3`.
groupOrdering RolloutGroupOrdering GroupOrdering declares what groups[] list order means. Sequential (the default) promises group N completes before group N+1 begins, and is admitted only for the shape that actually enforces it. Concurrent declares the groups independent: they roll at the same time on their disjoint Components, each with its own progression, gates, and rollback. Concurrent is what lets one InferenceService run, say, a router canary and an engine canary as unrelated rollouts. Changing this does not change how the engine executes a list it could not sequence — that was always concurrent. It changes whether such a list is an error or a declaration of intent.
pairingProtocol string PairingProtocol declares the engine↔decoder wire-compatibility contract for prefill-decode pairing (e.g. a KV-transfer protocol generation, such as "nixl-v2"). It is an opaque, operator-owned token compared only for equality; bump it ONLY when the engine↔decoder wire contract breaks. The value rides each engine and decoder revision: changing it mints new revisions for both Components (a rollout), stamps ome.io/pairing-protocol on their pods and per-revision Services, and is published on each traffic target so routing pairs only engine and decoder revisions whose values are equal. Empty or unset pairs with anything, so setting or clearing the token is upgrade-neutral. Changing it between two non-empty values requires engine and decoder to roll as one blueGreen or canary group. Maximum length: `63`. Pattern: `^[A-Za-z0-9]([-A-Za-z0-9_.]*[A-Za-z0-9])?$`.
### `RolloutStatus` {#ome-io-v1beta1-RolloutStatus} Used by [`InferenceServiceStatus`](#ome-io-v1beta1-InferenceServiceStatus). RolloutStatus is the run-model surface under status.rollout: the pinned active run, a bounded record of the previous run, and the always-current per-group resolution view (what WOULD pin now — the preview surface).
FieldTypeDescription
activeRun RolloutRun ActiveRun is the pinned plan the executors are consuming. Present iff a run is open.
lastRun RolloutRunRecord LastRun is the bounded record of the most recently closed run (digests and outcome, never the full plan — post-close plan history is the policy's git history).
groups []RolloutGroupResolution Groups is the always-current resolution view, written every reconcile independent of runs: per group, which source would pin now and — when an inline progression shadows a ref — what the shadowed policy would pin.
### `RouterSpec` {#ome-io-v1beta1-RouterSpec} Used by [`InferenceServiceSpec`](#ome-io-v1beta1-InferenceServiceSpec), [`ServingRuntimeSpec`](#ome-io-v1beta1-ServingRuntimeSpec). RouterSpec defines the configuration for the Router component, which handles request routing
FieldTypeDescription
Embedded PodSpec PodSpec defines the container configuration for the router The fields of `PodSpec` appear directly in this object.
Embedded ComponentExtensionSpec ComponentExtensionSpec defines deployment configuration like min/max replicas, scaling metrics, etc. The fields of `ComponentExtensionSpec` appear directly in this object.
runner RunnerSpec This is essentially a container spec that can override the default container
config map[string]string Additional configuration parameters for the runner. This can include framework-specific settings.
### `RoutingAllFailedPolicy` {#ome-io-v1beta1-RoutingAllFailedPolicy} Used by [`RoutingProbeSpec`](#ome-io-v1beta1-RoutingProbeSpec). RoutingAllFailedPolicy controls whether a complete, conclusive probe failure may remove every route arm. Underlying type: `string`. Allowed values: `PreserveTraffic`, `Drain`. ### `RoutingCapacitySpec` {#ome-io-v1beta1-RoutingCapacitySpec} Used by [`RoutingSpec`](#ome-io-v1beta1-RoutingSpec). RoutingCapacitySpec configures polling each serving home for its current servable capacity. Validation: disabled must not be combined with capacity configuration fields. Validation: an enabled capacity poll must specify path, method, format, period, timeout, samples, quorum, and maxAge. Validation: period must be positive. Validation: timeout must be positive. Validation: timeout must be shorter than period. Validation: maxAge must be at least period. Validation: quorum must not exceed samples.
FieldTypeDescription
disabled bool Disabled explicitly disables capacity polling. No other field may be set when true.
path string Path is appended to each serving home's endpoint and must start with "/". Minimum length: `1`. Pattern: `^/`.
method string Method is the HTTP method used by the capacity request. Allowed values: `GET`, `HEAD`, `POST`.
format string Format names the response shape returned by the capacity endpoint. Minimum length: `1`.
options map[string]string Options contains format-specific settings interpreted by the configured capacity format.
period Duration Period is how often each serving home is polled.
timeout Duration Timeout bounds one capacity request and must be shorter than Period.
samples int32 Samples is the number of recent readings in the capacity window. Minimum: `1`.
quorum int32 Quorum is the number of readings required to corroborate a lower capacity. Minimum: `1`.
maxAge Duration MaxAge is the maximum accepted age of a capacity report.
### `RoutingProbeSpec` {#ome-io-v1beta1-RoutingProbeSpec} Used by [`RoutingSpec`](#ome-io-v1beta1-RoutingSpec). RoutingProbeSpec configures an active end-to-end health probe for each serving home's externally addressable endpoint. Validation: disabled must not be combined with probe configuration fields. Validation: an enabled probe must specify path, method, acceptStatuses, gateStatuses, period, timeout, failureThreshold, successThreshold, and allFailedPolicy. Validation: period must be positive. Validation: timeout must be positive. Validation: timeout must be shorter than period. Validation: gateStatuses must not contain 401, 403, or 429.
FieldTypeDescription
disabled bool Disabled explicitly disables probing. No other field may be set when true.
path string Path is appended to each serving home's endpoint and must start with "/". Minimum length: `1`. Pattern: `^/`.
method string Method is the HTTP method used by the probe. Allowed values: `GET`, `HEAD`, `POST`.
acceptStatuses []int32 AcceptStatuses are response codes counted as a successful probe. Minimum items: `1`. Minimum per item: `100`. Maximum per item: `599`.
gateStatuses []int32 GateStatuses are response codes counted as a failed probe. A code in neither status list is inconclusive. Minimum items: `1`. Maximum items: `500`. Minimum per item: `100`. Maximum per item: `599`.
period Duration Period is how often each serving home is probed.
timeout Duration Timeout bounds one probe request and must be shorter than Period.
failureThreshold int32 FailureThreshold is the number of consecutive failures required to gate a serving home. Minimum: `1`.
successThreshold int32 SuccessThreshold is the number of consecutive successes required to restore a gated serving home. Minimum: `1`.
allFailedPolicy RoutingAllFailedPolicy AllFailedPolicy controls the result when every serving home has crossed the failure threshold.
### `RoutingPublisherSpec` {#ome-io-v1beta1-RoutingPublisherSpec} Used by [`RoutingSpec`](#ome-io-v1beta1-RoutingSpec). RoutingPublisherSpec provides per-InferenceService behavior options to the single publisher selected by the operator.
FieldTypeDescription
options map[string]string Options are interpreted and validated by the operator-selected publisher. Maximum keys: `32`. Validation: publisher option keys must contain 1-128 characters and values must contain 1-4096 characters.
### `RoutingSpec` {#ome-io-v1beta1-RoutingSpec} Used by [`InferenceServiceSpec`](#ome-io-v1beta1-InferenceServiceSpec). RoutingSpec configures cross-cluster traffic distribution for an InferenceService. Fields that are unset inherit the operator-level routing configuration.
FieldTypeDescription
enabled bool Enabled overrides routing for this InferenceService. Nil inherits the operator-level setting; false opts this InferenceService out. True opts in only when routing is enabled for the installation and cannot bypass a disabled installation gate.
capacityFactors map[string]Quantity CapacityFactors overrides the per-replica relative serving capacity of named workload clusters. Every quantity must be greater than zero. A cluster absent from the map uses the identity factor 1.
probe RoutingProbeSpec Probe overrides the operator-level endpoint health probe. The block is a complete replacement; set disabled to explicitly turn probing off.
capacity RoutingCapacitySpec Capacity overrides the operator-level endpoint capacity poll. The block is a complete replacement; set disabled to explicitly turn polling off.
publisher RoutingPublisherSpec Publisher supplies behavior options to the operator-selected publisher. Publisher identity, transport, and credentials remain operator-level configuration.
### `Runner` {#ome-io-v1beta1-Runner} Used by [`InferenceReplicaSpec`](#ome-io-v1beta1-InferenceReplicaSpec). Runner is one logical pod role within an Instance. Single-pod Instances declare one Runner named "default" with Size=1. Multi-node Instances declare "leader" (Size=1) + "worker" (Size>=1). The revision hash includes every Runner's Template; a worker-only image bump still triggers a coordinated rollout across the whole Instance because tensor-parallel weights require leader+workers to move together.
FieldTypeDescription
name Required RunnerName Name is the Runner role within the Instance.
size Required int32 Size is the pod count for this Runner per Instance. Constraints: - "default" Size MUST equal 1 - "leader" Size MUST equal 1 - "worker" Size MUST be >= 1 Minimum: `1`.
template Required PodTemplateSpec Template is the fully-rendered pod template for this Runner. Labels include ome.io/runner=<name>. The InferenceReplica controller stamps OME_RUNNER (leader|worker|default) and, for non-leader pods, OME_LEADER_ADDRESS (short-form DNS, matching LWS conventions) onto the rendered pod at create.
### `RunnerName` {#ome-io-v1beta1-RunnerName} Used by [`Runner`](#ome-io-v1beta1-Runner). RunnerName is the enum of recognized Runner roles within an Instance. Matches the established Runner vocabulary so existing ome.io/runner label semantics carry through. Underlying type: `string`. Allowed values: `default`, `leader`, `worker`. ### `RunnerSpec` {#ome-io-v1beta1-RunnerSpec} Used by [`DecoderSpec`](#ome-io-v1beta1-DecoderSpec), [`EngineSpec`](#ome-io-v1beta1-EngineSpec), [`LeaderSpec`](#ome-io-v1beta1-LeaderSpec), [`RouterSpec`](#ome-io-v1beta1-RouterSpec), [`WorkerSpec`](#ome-io-v1beta1-WorkerSpec). RunnerSpec defines container configuration plus additional config settings. The Runner is the primary container that executes the model serving or token generation logic.
FieldTypeDescription
Embedded Container Container spec for the runner. Provides complete Kubernetes container configuration for the primary execution container. The fields of `Container` appear directly in this object.
### `RuntimeSelectorOperator` {#ome-io-v1beta1-RuntimeSelectorOperator} Used by [`ModelFormat`](#ome-io-v1beta1-ModelFormat), [`ModelFrameworkSpec`](#ome-io-v1beta1-ModelFrameworkSpec). Underlying type: `string`. ### `ScaleTargetRef` {#ome-io-v1beta1-ScaleTargetRef} Used by [`ComponentStatusSpec`](#ome-io-v1beta1-ComponentStatusSpec). ScaleTargetRef is a stripped-down reference to the canonical scale target for a Component — the InferenceReplica (for OMENative) or the underlying Deployment (for RawDeployment). Published on status.components.<comp>.scaleTargetRef so an external scaler knows which object to point at (the same GroupKind the user would target with kubectl scale <kind>/<name>). Published for every reconciled RawDeployment or OMENative Component, including when no OME-managed scaler is active. Alpha. The shape may change without notice.
FieldTypeDescription
apiVersion string APIVersion of the scale target — e.g. "ome.io/v1beta1" for the IR-managed OMENative path; "apps/v1" for RawDeployment.
kind string Kind of the scale target — e.g. "InferenceReplica" for the IR-managed OMENative path; "Deployment" for RawDeployment.
name string Name of the scale target. Namespace is always the same as the owning ISVC.
### `ScalingMode` {#ome-io-v1beta1-ScalingMode} Used by [`ScalingPolicy`](#ome-io-v1beta1-ScalingPolicy). ScalingMode declares how Components of an InferenceService scale relative to each other. Alpha. The API may change without notice. Underlying type: `string`. Allowed values: `Independent`, `Proportional`, `Pinned`. ### `ScalingPolicy` {#ome-io-v1beta1-ScalingPolicy} Used by [`InferenceServiceSpec`](#ome-io-v1beta1-InferenceServiceSpec), [`ServingRuntimeSpec`](#ome-io-v1beta1-ServingRuntimeSpec). ScalingPolicy defines coordination between the Components of an InferenceService. Alpha. The API may change without notice.
FieldTypeDescription
mode ScalingMode Mode selects the coordination strategy. Allowed values: `Independent`, `Proportional`, `Pinned`. Default: `Independent`.
proportional ProportionalPolicy Proportional configuration; required when Mode == "Proportional".
### `ServiceMetadata` {#ome-io-v1beta1-ServiceMetadata} Used by [`BenchmarkJobSpec`](#ome-io-v1beta1-BenchmarkJobSpec). ServiceMetadata contains metadata fields for recording the backend model server's configuration and version details. This information helps track experiment context, enabling users to filter and query experiments based on server properties.
FieldTypeDescription
engine Required string Engine specifies the backend model server engine. Supported values: "vLLM", "SGLang", "TGI". Allowed values: `vLLM`, `SGLang`, `TGI`.
version Required string Version specifies the version of the model server (e.g., "0.5.3").
gpuType Required string GpuType specifies the type of GPU used by the model server. Supported values: "H100", "A100", "MI300", "A10". Allowed values: `H100`, `A100`, `MI300`, `A10`.
gpuCount Required int GpuCount indicates the number of GPU cards available on the model server.
### `ServingRuntimePodSpec` {#ome-io-v1beta1-ServingRuntimePodSpec} Used by [`ServingRuntimeSpec`](#ome-io-v1beta1-ServingRuntimeSpec).
FieldTypeDescription
containers []Container List of containers belonging to the pod. Containers cannot currently be added or removed. Cannot be updated.
volumes []Volume List of volumes that can be mounted by containers belonging to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes
nodeSelector map[string]string NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node's labels for the pod to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/
affinity Affinity If specified, the pod's scheduling constraints
tolerations []Toleration If specified, the pod's tolerations.
labels map[string]string Labels that will be added to the pod. More info: http://kubernetes.io/docs/user-guide/labels
annotations map[string]string Annotations that will be added to the pod. More info: http://kubernetes.io/docs/user-guide/annotations
imagePullSecrets []LocalObjectReference ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. If specified, these secrets will be passed to individual puller implementations for them to use. More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod
schedulerName string If specified, the pod will be dispatched by specified scheduler. If not specified, the pod will be dispatched by default scheduler.
hostIPC bool Use the host's ipc namespace. Optional: Default to false.
dnsPolicy DNSPolicy Set DNS policy for the pod. Defaults to "ClusterFirst". Valid values are 'ClusterFirstWithHostNet', 'ClusterFirst', 'Default' or 'None'. DNS parameters given in DNSConfig will be merged with the policy selected with DNSPolicy. To have DNS options set along with hostNetwork, you have to specify DNS policy explicitly to 'ClusterFirstWithHostNet'.
hostNetwork bool Host networking requested for this pod. Use the host's network namespace. If this option is set, the ports that will be used must be specified. Default to false.
### `ServingRuntimeRef` {#ome-io-v1beta1-ServingRuntimeRef} Used by [`InferenceReplicaSpec`](#ome-io-v1beta1-InferenceReplicaSpec), [`InferenceServiceSpec`](#ome-io-v1beta1-InferenceServiceSpec).
FieldTypeDescription
name Required string Name of the runtime being referenced. Identifies the specific runtime environment to be used for model execution.
kind string Kind of the runtime being referenced. Specifies the Kubernetes resource kind of the referenced runtime. ClusterServingRuntime is a cluster-wide runtime, while ServingRuntime is namespace-scoped. Default: `ClusterServingRuntime`.
apiGroup string APIGroup of the resource being referenced. Specifies the Kubernetes API group of the referenced runtime. Default: `ome.io`.
autoSync bool AutoSync (default true) re-renders pod specs from the live runtime every reconcile. When false, the ISVC pins to a ControllerRevision snapshot; bump ome.io/runtime-sync or set spec.runtime.revision to roll forward. Default: `true`.
revision string Revision pins to a named ControllerRevision in the OME namespace. Enables rollback; ignored when AutoSync is true.
### `ServingRuntimeSpec` {#ome-io-v1beta1-ServingRuntimeSpec} Used by [`ClusterServingRuntime`](#ome-io-v1beta1-ClusterServingRuntime), [`ServingRuntime`](#ome-io-v1beta1-ServingRuntime). ServingRuntimeSpec defines the desired state of ServingRuntime.
FieldTypeDescription
supportedModelFormats []SupportedModelFormat Model formats and version supported by this runtime
modelSizeRange ModelSizeRangeSpec ModelSizeRange is the range of model sizes supported by this runtime
disabled bool Set to true to disable use of this runtime
routerConfig RouterSpec Router configuration for this runtime
engineConfig EngineSpec Engine configuration for this runtime
decoderConfig DecoderSpec Decoder configuration for this runtime
protocolVersions []InferenceServiceProtocol ProtocolVersions lists the inference protocols the runtime serves: openAI, openInference-v1 or openInference-v2. Runtime selection doesn't read it.
Embedded ServingRuntimePodSpec PodSpec for the serving runtime The fields of `ServingRuntimePodSpec` appear directly in this object.
scalingPolicy ScalingPolicy Since v1.3. ScalingPolicy default for InferenceServices binding this runtime. Replaced wholesale by isvc.spec.scalingPolicy when set on the ISVC. Alpha. The API may change without notice.
acceleratorRequirements AcceleratorRequirements AcceleratorRequirements specifies the accelerator requirements for this runtime
### `ServingRuntimeStatus` {#ome-io-v1beta1-ServingRuntimeStatus} Used by [`ClusterServingRuntime`](#ome-io-v1beta1-ClusterServingRuntime), [`ServingRuntime`](#ome-io-v1beta1-ServingRuntime). ServingRuntimeStatus defines the observed state of ServingRuntime
FieldTypeDescription
inheritanceChain []string Since v1.3. InheritanceChain lists the runtime names walked when resolving the ome.io/inherit-from chain, in root-first order. Single-entry list ([self]) when no inheritance is declared. Operator-visible only — consumers re-walk the chain in-memory at use time rather than reading a pre-computed spec from status (avoids storing the fully-merged spec, which is large).
conditions []Condition Since v1.3. Conditions reflect the runtime controller's view of inheritance resolution. Currently only InheritanceReady (True/False) is surfaced. Informational — consumers can block on InheritanceReady=False if they want to gate on chain health.
### `ShadowedAutoscalerPolicy` {#ome-io-v1beta1-ShadowedAutoscalerPolicy} Used by [`ComponentAutoscalerStatus`](#ome-io-v1beta1-ComponentAutoscalerStatus). ShadowedAutoscalerPolicy reports a policy ref that is currently shadowed by an inline autoscaler block (inline outranks policy). The shadow render is the in-cluster preview surface: it shows what the policy would produce without changing behavior.
FieldTypeDescription
name string Name of the shadowed AutoscalerPolicy.
portableDigest string
wouldRenderDigest string WouldRenderDigest is the resolved digest the policy would produce for this component if the inline block were removed.
### `ShadowedRolloutPolicyRef` {#ome-io-v1beta1-ShadowedRolloutPolicyRef} Used by [`RolloutGroupResolution`](#ome-io-v1beta1-RolloutGroupResolution). ShadowedRolloutPolicyRef reports what an outranked policy ref would pin.
FieldTypeDescription
name string
wouldPinDigest string WouldPinDigest is the portable digest of the policy body that a run would pin if the inline progression were removed.
### `SplitSpec` {#ome-io-v1beta1-SplitSpec} Used by [`PlacementSpec`](#ome-io-v1beta1-PlacementSpec). SplitSpec declares the fleet floor and optional local ceiling. The floor falls back only to an explicitly declared positive engine.minReplicas.
FieldTypeDescription
replicas int32 Replicas is the fleet-wide desired replica count to distribute across homes. Unset falls back to the engine component's minReplicas (the guaranteed floor) — the count OME actually guarantees running and thus the one worth spreading. maxReplicas is deliberately NOT used (it is an autoscaling ceiling that stays a per-home local concern). Minimum: `1`.
maxReplicasPerCluster int32 MaxReplicasPerCluster is an optional local ceiling. Plans exceeding it are held; zero follows the assigned allocation without an extra ceiling. Minimum: `0`.
### `StorageSpec` {#ome-io-v1beta1-StorageSpec} Used by [`BaseModelSpec`](#ome-io-v1beta1-BaseModelSpec), [`BenchmarkJobSpec`](#ome-io-v1beta1-BenchmarkJobSpec), [`FineTunedWeightSpec`](#ome-io-v1beta1-FineTunedWeightSpec).
FieldTypeDescription
path string Path is the absolute path where the model will be downloaded and stored on the node.
schemaPath string SchemaPath is the path to the model schema or configuration file within the storage system. This can be used to validate the model or customize how it's loaded.
parameters map[string]string Parameters contain key-value pairs to override default storage credentials or configuration. These values are typically used to configure access to object storage or mount options.
key string Key is the name of a Secret that holds a Hugging Face token. The model agent reads it only for hf:// models, from the model's namespace, or from the ome namespace for a ClusterBaseModel. It takes the token from the Secret's token key, or from the key that parameters.secretKey names.
storageUri Required string StorageUri specifies the source URI of the model in a supported storage backend. Supported formats: - OCI Object Storage: oci://n/{namespace}/b/{bucket}/o/{object_path} - CNCF ModelPack: modelpack://{registry}/{repository}[:{tag}] - Persistent Volume: pvc://{pvc-name}/{sub-path} - Vendor-specific: vendor://{vendor-name}/{resource-type}/{resource-path} - Hugging Face: hf://{org}/{repo}[@{revision}] - Amazon S3: s3://{bucket}/{object_path} - Azure Blob Storage: az://{account}/{container}/{object_path} - Google Cloud Storage: gs://{bucket}/{object_path} - GitHub: github://{org}/{repo}[@{tag}] - Local filesystem: local://{path}
nodeSelector map[string]string NodeSelector defines a set of key-value label pairs that must be present on a node for the model to be scheduled and downloaded onto that node.
nodeAffinity NodeAffinity NodeAffinity describes the node affinity rules that further constrain which nodes are eligible to download and store this model, based on advanced scheduling policies.
downloadPolicy DownloadPolicy DownloadPolicy describes the policy of downloading model artifacts. Supported policies: - AlwaysDownload, the default: always download a copy of the model to its path. - ReuseIfExists: reuse Hugging Face files that another model already downloaded to the node.
### `SupportedModelFormat` {#ome-io-v1beta1-SupportedModelFormat} Used by [`ServingRuntimeSpec`](#ome-io-v1beta1-ServingRuntimeSpec).
FieldTypeDescription
name string Name of the model format this entry describes; matched against the model's format name during runtime selection. ModelFormat.Name is the preferred field for new runtimes.
modelFormat Required ModelFormat ModelFormat of the model, e.g., "PyTorch", "TensorFlow", "ONNX", "SafeTensors"
modelType string Deprecated: not consulted during runtime selection.
version string Version of the model format. Runtime selection doesn't read it: to match on a version, set modelFormat.version. It can be "major", "major.minor" or "major.minor.patch".
modelFramework Required ModelFrameworkSpec ModelFramework of the model, e.g., "PyTorch", "TensorFlow", "ONNX", "Transformers"
modelArchitecture string ModelArchitecture of the model, e.g., "LlamaForCausalLM", "GemmaForCausalLM", "MixtralForCausalLM"
quantization ModelQuantization Quantization of the model, e.g., "fp8", "fbgemm_fp8", "int4"
diffusionPipeline DiffusionPipelineSpec DiffusionPipeline supported by this runtime (used for diffusion models).
modelCacheProviders []ModelCacheProvider Since v1.3. ModelCacheProviders lists the external model caches this runtime can load a Sharded model from. Sharded distribution is in development: OME can't serve a Sharded model yet, so this list has no effect.
autoSelect bool Set to true to allow the ServingRuntime to be used for automatic model placement if this model format is specified with no explicit runtime.
priority int32 Priority of this serving runtime for auto selection. This is used to select the serving runtime if more than one serving runtime supports the same model format. The value should be greater than zero. The higher the value, the higher the priority. Priority is not considered if AutoSelect is either false or not specified. Priority can be overridden by specifying the runtime in the InferenceService. Minimum: `1`.
acceleratorConfig map[string]AcceleratorModelConfig AcceleratorConfig provides accelerator-specific overrides for this model format
### `TensorParallelismConfig` {#ome-io-v1beta1-TensorParallelismConfig} Used by [`AcceleratorModelConfig`](#ome-io-v1beta1-AcceleratorModelConfig). TensorParallelismConfig specifies tensor parallelism settings
FieldTypeDescription
tensorParallelSize int64 tensorParallelSize specifies the size of the tensor parallelism Minimum: `0`.
pipelineParallelSize int64 pipelineParallelSize specifies the size of the pipeline parallelism Minimum: `0`.
dataParallelSize int64 dataParallelSize specifies the size of the data parallelism Minimum: `0`.
### `TopologySpreadPolicy` {#ome-io-v1beta1-TopologySpreadPolicy} Used by [`DecoderSpec`](#ome-io-v1beta1-DecoderSpec), [`EngineSpec`](#ome-io-v1beta1-EngineSpec), [`InferenceReplicaSpec`](#ome-io-v1beta1-InferenceReplicaSpec). TopologySpreadPolicy selects how a component's instances spread across fault domains, expressed through a rendered topologySpreadConstraint on each instance's anchor pod. Underlying type: `string`. ### `TrafficMapCapacity` {#ome-io-v1beta1-TrafficMapCapacity} Used by [`TrafficMapEntry`](#ome-io-v1beta1-TrafficMapEntry). TrafficMapCapacity records why an entry's weight is what it is.
FieldTypeDescription
allocated int32 Allocated is the effective allocation ceiling for this home: the control-plane-admitted count, optionally lowered by a capacity report. Ready independently caps it when computing Weight.
ready int32 Ready is the home's live ready-replica count. It caps Allocated when computing Weight; zero health-gates the entry to weight 0.
factor Quantity Factor is the per-replica relative serving capacity of this home's accelerator (baseline "1", higher = faster), so heterogeneous hardware is weighted by capacity rather than raw replica count: weight is proportional to min(allocated, ready) * factor. Defaults to "1" (homogeneous) when unset — the multiplicative identity, i.e. no scaling. It is operator-supplied config, never derived from raw hardware FLOPS.
source CapacitySource Source names which input produced Allocated. FallbackReason separately distinguishes an intentionally control-plane-only allocation from a configured endpoint source that could not supply a usable ceiling. Default: `ControlPlane`.
reported int32 Reported is the home's own servable-capacity figure, recorded whenever the endpoint source answered — including when it was at or above the plan and therefore did not lower Allocated. Keeping it visible in that case is what makes the ceiling auditable: Allocated alone cannot show that a report was received and found non-binding. Minimum: `0`.
fallbackReason string FallbackReason explains why a configured endpoint capacity source did not produce an applied ceiling and the control-plane allocation was retained. Empty means capacity polling is disabled or its latest result was usable.
### `TrafficMapEntry` {#ome-io-v1beta1-TrafficMapEntry} Used by [`TrafficMapSpec`](#ome-io-v1beta1-TrafficMapSpec). TrafficMapEntry is one serving home's routing target and the provenance of its weight.
FieldTypeDescription
cluster Required string Cluster is the WorkloadCluster serving this home.
endpoint URL Endpoint is the home's externally-addressable URL, taken from status.placement.candidates[].endpoint.
weight int32 Weight is the home's final, normalized, capacity-planned, health-gated traffic share as a relative integer from 0 through 1,000,000. The upper bound matches the Gateway API backendRef weight limit, so a publisher can apply it verbatim; another consumer may divide by the sum of weights for a percentage. Unready and zero-capacity homes always have weight 0. When every probe conclusively fails, PreserveTraffic may retain capacity-derived weights for ready homes; Drain writes an authoritative all-zero table. Manual DrainRefs can force any arm to zero after these automatic inputs. Minimum: `0`. Maximum: `1000000`.
healthy bool Healthy is the readiness-plus-probe result for this home. An unready home is always weighted 0; a probe-unhealthy home may retain a positive weight only under a fleet-wide PreserveTraffic fallback. A manual DrainRefs override can set a healthy home to zero without changing its health evidence.
capacity TrafficMapCapacity Capacity is the provenance of Weight: weight is proportional to min(allocated, ready) * factor, then gated by the active probe.
probe TrafficMapProbe Probe is the active end-to-end health probe's contribution to Healthy, present only when probing is configured. Healthy alone does not say whether readiness or reachability failed, and those are different faults with different owners: readiness is the workload's, reachability is the path's (ingress, DNS, certificate, route).
drainRefs []string DrainRefs names the independent override IDs in the source InferenceService's ome.io/traffic-drain annotation that force this entry's weight to zero. Empty means no manual override contributed.
### `TrafficMapGatewayRef` {#ome-io-v1beta1-TrafficMapGatewayRef} Used by [`TrafficMapStatus`](#ome-io-v1beta1-TrafficMapStatus). TrafficMapGatewayRef points at the data plane object a publisher created to realize a TrafficMap.
FieldTypeDescription
group string Group is the API group of the realizing object (e.g. "gateway.networking.k8s.io"). Empty means the core group.
kind string Kind is the object kind (e.g. "HTTPRoute").
name string Name is the object name.
namespace string Namespace is the object namespace. Empty means the TrafficMap's namespace.
### `TrafficMapProbe` {#ome-io-v1beta1-TrafficMapProbe} Used by [`TrafficMapEntry`](#ome-io-v1beta1-TrafficMapEntry). TrafficMapProbe records what the active end-to-end probe observed for one home. The probe targets the entry's Endpoint — the URL a client uses — so it covers the whole serving path rather than pod readiness inside the home.
FieldTypeDescription
policyDigest string PolicyDigest identifies the effective probe policy that produced this observation. A controller may restore hysteresis state after a restart only when this digest and the entry identity still match. Pattern: `^sha256:[0-9a-f]{64}$`.
result ProbeResult Result is the most recent probe attempt's verdict. Failing gates only after the configured threshold. Unknown does not change the previous gate.
gated bool Gated is the current hysteresis gate. It remains true through an Unknown attempt until enough consecutive passing attempts reopen the home.
lastProbeTime Time LastProbeTime is when the latest probe attempt completed, so a stalled prober is visible rather than being read as a steady pass.
consecutiveFailures int32 ConsecutiveFailures counts unbroken Failing verdicts. The weight is gated only once this reaches the configured failure threshold: a single dropped packet must not move a large traffic share, and the reprogramming churn from flapping would itself be the outage. Minimum: `0`.
message string Message explains the current Result — the observed status code, the transport error, or why the probe could not run.
### `TrafficMapPublisherLastPositive` {#ome-io-v1beta1-TrafficMapPublisherLastPositive} Used by [`TrafficMapPublisherStatus`](#ome-io-v1beta1-TrafficMapPublisherStatus). TrafficMapPublisherLastPositive is a complete post-transform publisher plan retained for restart-safe replay.
FieldTypeDescription
trafficMapGeneration int64 TrafficMapGeneration is the generation whose positive plan was applied. Minimum: `1`.
observedISVCGeneration int64 ObservedISVCGeneration is the source generation that produced the plan. Minimum: `1`.
planCompatibilityDigest string PlanCompatibilityDigest identifies the effective publisher options that affect target identity or weights. Pattern: `^sha256:[0-9a-f]{64}$`.
targets []TrafficMapPublisherTarget Targets is the complete canonical target-to-weight plan. Every claimed target appears exactly once, including inactive targets at weight zero. Minimum items: `1`. Maximum items: `128`.
### `TrafficMapPublisherStatus` {#ome-io-v1beta1-TrafficMapPublisherStatus} Used by [`TrafficMapStatus`](#ome-io-v1beta1-TrafficMapStatus). TrafficMapPublisherStatus is the durable cleanup and replay journal for one publisher. Claims are persisted before external mutation and retained until their targets have been cleaned up.
FieldTypeDescription
publisherName string PublisherName identifies the publisher implementation whose cleanup semantics apply. An implementation upgraded under the same name must remain able to clean target identifiers written by its prior versions. Minimum length: `1`. Maximum length: `128`.
claimedTargets []string ClaimedTargets are publisher-defined canonical identifiers owned by this map. The publisher records the complete claim set before mutating any target. Identifiers are status-visible and must not contain credentials or secrets. Minimum items: `1`. Maximum items: `128`. Minimum length per item: `1`. Maximum length per item: `512`.
observedOptionsDigest string ObservedOptionsDigest is the SHA-256 digest of the effective safe publisher options used by the most recent successful reconciliation. It is absent before the first successful reconciliation and does not determine target ownership. Pattern: `^sha256:[0-9a-f]{64}$`.
lastPositive TrafficMapPublisherLastPositive LastPositive is the latest complete positive publisher plan that was fully applied. It is absent when no compatible plan is available for replay.
### `TrafficMapPublisherTarget` {#ome-io-v1beta1-TrafficMapPublisherTarget} Used by [`TrafficMapPublisherLastPositive`](#ome-io-v1beta1-TrafficMapPublisherLastPositive). TrafficMapPublisherTarget is one canonical target and its exact applied integer weight in a retained publisher plan.
FieldTypeDescription
target string Target is a publisher-defined canonical identifier already covered by the enclosing publisher claim journal. Minimum length: `1`. Maximum length: `512`.
weight int64 Weight is the exact non-negative integer applied by the publisher. Publisher-specific bounds are validated before replay. Minimum: `0`.
### `TrafficMapSpec` {#ome-io-v1beta1-TrafficMapSpec} Used by [`TrafficMap`](#ome-io-v1beta1-TrafficMap). TrafficMapSpec is the computed routing table. It is a machine-written declarative artifact — the routing controller recomputes it whenever status.placement or the home's quota allocation changes; the publisher consumes it as desired state. A validating webhook may reject writes from non-controller users.
FieldTypeDescription
placementPlanID string PlacementPlanID identifies the accepted allocation behind this routing table. Publication must acknowledge this plan before a placement drains.
service Required string Service is the routed logical service — the InferenceService name. Equal to metadata.name in v1; a distinct field leaves room for a future many-ISVC-to-one-service map.
mode PlacementMode Mode mirrors the ISVC's spec.placement.mode (Single/All/Split) so a consumer can read the routing intent without reading the ISVC.
entries []TrafficMapEntry Entries is the routing table: one entry per serving home, each with its endpoint, final apply-verbatim weight, and the capacity/health provenance of that weight. Consumers apply the weights directly — no gating, fallback, or normalization is left for them to redo.
observedISVCGeneration int64 ObservedISVCGeneration is the InferenceService generation this table was computed from, so a consumer can detect staleness relative to the source.
### `TrafficMapStatus` {#ome-io-v1beta1-TrafficMapStatus} Used by [`TrafficMap`](#ome-io-v1beta1-TrafficMap). TrafficMapStatus reports whether the active publisher has realized this map onto a concrete data plane, and whether the map has anything to realize. Two writers share it: the publisher owns Published, GatewayRef, ObservedTrafficMapGeneration, Publisher, and the Published and PublicationFallback conditions; the routing controller owns SourceUID plus the Routable, CapacityFallback, and OverrideActive conditions. Conditions is keyed on type, so each writer must patch only its own fields and conditions.
FieldTypeDescription
sourceUID UID SourceUID is the UID of the InferenceService that generated this map. The routing controller writes it through its own status field manager before a publisher may create external effects. It remains available if orphan deletion propagation removes the owner reference.
published bool Published reports whether the active publisher has realized this map onto its data plane.
gatewayRef TrafficMapGatewayRef GatewayRef identifies the data plane object realizing this map (e.g. the HTTPRoute the Gateway API publisher created). Empty until published.
observedTrafficMapGeneration int64 ObservedTrafficMapGeneration is the spec generation the publisher last realized, so lag between generation and realization is observable.
publisher TrafficMapPublisherStatus Publisher records the durable target claims and optional replay state needed to recover or reverse data-plane mutations made while realizing this map.
conditions []Condition Conditions carry the routing controller's Routable, CapacityFallback, and OverrideActive conditions and the publisher's Published and PublicationFallback conditions.
### `TrafficSpec` {#ome-io-v1beta1-TrafficSpec} Used by [`InferenceServiceSpec`](#ome-io-v1beta1-InferenceServiceSpec). TrafficSpec configures the load-balancing policy applied to all HTTPRoutes OME emits for the InferenceService. The translated backend policy resource (e.g. Envoy Gateway BackendTrafficPolicy) targets every OME-managed HTTPRoute via targetRefs, so behavior is consistent whether clients address the top-level URL or a per-Component subdomain. For less-common settings (circuit breaker, retries, sub-second timeouts), see the ome.io/* annotation contract on the InferenceService metadata. For Component-specific routing (one Component needs a different LB algorithm), hand-author a separate BackendTrafficPolicy targeting only that Component's HTTPRoute — OME defers to the hand-authored policy.
FieldTypeDescription
algorithm LoadBalancingType Algorithm selects the load-balancing algorithm. Absent = the Gateway implementation's default (LeastRequest for Envoy Gateway). Allowed values: `RoundRobin`, `LeastRequest`, `Random`, `ConsistentHash`.
consistentHash ConsistentHashSpec ConsistentHash configures the hash key. Required when Algorithm=ConsistentHash; rejected otherwise (webhook).
endpointOverride EndpointOverrideSpec EndpointOverride routes requests to a specific pod when a request header (e.g. "X-Endpoint-HostPort: 10.0.0.5:30000") is present and the endpoint is healthy; falls back to the configured Algorithm when the endpoint is unhealthy or the header is absent. Envoy Gateway only in alpha (no Istio equivalent). Translators that do not support endpoint override surface this as an UnsupportedField condition on the InferenceService.
### `TrafficStatus` {#ome-io-v1beta1-TrafficStatus} Used by [`InferenceServiceStatus`](#ome-io-v1beta1-InferenceServiceStatus). TrafficStatus reflects the resolved backend traffic policy and the emitted policy resource (e.g. Envoy Gateway BackendTrafficPolicy) for an InferenceService. Lives at InferenceServiceStatus.Traffic. Populated only when traffic intent is declared via spec.traffic or any ome.io/* traffic annotation; otherwise nil so older clients see nothing.
FieldTypeDescription
algorithm string Algorithm reflects the resolved load-balancing algorithm. One of RoundRobin | LeastRequest | Random | ConsistentHash | Default. "Default" means no Algorithm was set on spec.traffic and the Gateway implementation default applies.
backendPolicyResource BackendPolicyRef BackendPolicyResource references the OME-emitted backend policy (typically a gateway.envoyproxy.io/v1alpha1.BackendTrafficPolicy). Empty when no policy was emitted (e.g. translator deferred to a conflicting hand-authored policy).
targetedHTTPRoutes []string TargetedHTTPRoutes lists the HTTPRoute names the emitted policy targets. Operators read this to understand which routes the policy applies to without inspecting the emitted resource. Empty when no policy was emitted.
conditions []Condition Conditions surface translation, conflict, and gateway-acceptance state. The well-known condition type is BackendPolicyReady.
### `TransitionStatus` {#ome-io-v1beta1-TransitionStatus} Used by [`ModelStatus`](#ome-io-v1beta1-ModelStatus). TransitionStatus enum Underlying type: `string`. Allowed values: `""`, `UpToDate`, `InProgress`, `BlockedByFailedLoad`, `InvalidSpec`. ### `UpdateStrategy` {#ome-io-v1beta1-UpdateStrategy} Used by [`LifecycleSpec`](#ome-io-v1beta1-LifecycleSpec). UpdateStrategy controls how OMENative rolls template changes across an Instance's pods.
FieldTypeDescription
type UpdateStrategyType Type selects the rollout mechanism. Unset inherits the ServingRuntime's value, then the cluster default from the inferenceservice-config ConfigMap, then SurgeThenDrain, which preserves serving capacity throughout the rollout.
rollingUpdate RollingUpdate RollingUpdate paces the rollout across Instances of the Component.
inPlaceUpdateStrategy InPlaceUpdateStrategy InPlaceUpdateStrategy tunes the per-pod in-place update sequence. Ignored when Type is RecreatePod.
### `UpdateStrategyType` {#ome-io-v1beta1-UpdateStrategyType} Used by [`UpdateStrategy`](#ome-io-v1beta1-UpdateStrategy). UpdateStrategyType selects the rollout mechanism. Underlying type: `string`. Allowed values: `SurgeThenDrain`, `RecreatePod`, `InPlaceIfPossible`, `InPlaceOnly`. ### `WorkerSpec` {#ome-io-v1beta1-WorkerSpec} Used by [`DecoderSpec`](#ome-io-v1beta1-DecoderSpec), [`EngineSpec`](#ome-io-v1beta1-EngineSpec). WorkerSpec defines the configuration for worker nodes in a multi-node component. Worker nodes perform the distributed processing tasks assigned by the leader node, enabling horizontal scaling for compute-intensive workloads.
FieldTypeDescription
Embedded PodSpec PodSpec for the worker. Allows customization of the Kubernetes Pod configuration specifically for worker nodes. The fields of `PodSpec` appear directly in this object.
size int Size of the worker, this is the number of pods in the worker. Controls how many worker pod instances will be deployed for horizontal scaling. Unset inherits the ServingRuntime's value; when neither sets it, a declared leader gets one worker.
runner RunnerSpec Runner container override for customizing the main container. This is essentially a container spec that can override the default container. Provides fine-grained control over the container that executes the worker node's processing logic.
### `WorkloadClusterSpec` {#ome-io-v1beta1-WorkloadClusterSpec} Used by [`WorkloadCluster`](#ome-io-v1beta1-WorkloadCluster).
FieldTypeDescription
clusterSource Required ClusterConnectionSource ClusterSource is how the control plane connects to this cluster.
### `WorkloadClusterStatus` {#ome-io-v1beta1-WorkloadClusterStatus} Used by [`WorkloadCluster`](#ome-io-v1beta1-WorkloadCluster).
FieldTypeDescription
conditions []Condition Conditions report connection health ONLY (the Ready condition). Never capacity, never Kueue/quota state.