Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion .claude/skills/analyzing-snapshots/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -96,6 +96,8 @@ Key fields from `GPU.smi`:
| `gb300` | gb200 class (Blackwell NVL family) |
| `b200` | b200 |
| `h100` | h100 |
| `gh200` | unresolved — Grace Hopper Superchip, not the discrete H200 GPU (check before h200) |
| `h200` | h200 (discrete H200 GPU) |
| `a100` | a100 |
| `l40` | l40 |
| `rtx pro 6000` | rtx-pro-6000 |
Expand Down Expand Up @@ -272,7 +274,7 @@ aicr recipe \
| Criteria | Extracted From | Valid Values |
|----------|---------------|--------------|
| service | K8s.node.provider / K8s.server.version | eks, gke, aks, oke, kind, lke |
| accelerator | GPU.smi.gpu.model | h100, gb200, b200, a100, l40, rtx-pro-6000 |
| accelerator | GPU.smi.gpu.model | h100, h200, gb200, b200, a100, l40, rtx-pro-6000 |
| os | OS.release.ID | ubuntu, rhel, cos, amazonlinux |
| intent | User-specified | training, inference |
| platform | User-specified | dynamo, kubeflow, nim, runai, slurm |
4 changes: 2 additions & 2 deletions .github/ISSUE_TEMPLATE/bug_report.yml
Original file line number Diff line number Diff line change
Expand Up @@ -117,7 +117,7 @@ body:
- Kubernetes version:
- OS (ubuntu/cos/other) + version:
- Kernel version:
- GPU type (h100/gb200/b200/a100/l40/rtx-pro-6000/other):
- GPU type (h100/h200/gb200/b200/a100/l40/rtx-pro-6000/other):
- Workload intent (training/inference):
value: |
- AICR version (CLI `aicr version`, API image tag, or commit SHA):
Expand All @@ -126,7 +126,7 @@ body:
- Kubernetes version:
- OS (ubuntu/cos/other) + version:
- Kernel version:
- GPU type (h100/gb200/b200/a100/l40/rtx-pro-6000/other):
- GPU type (h100/h200/gb200/b200/a100/l40/rtx-pro-6000/other):
- Workload intent (training/inference):
validations:
required: true
Expand Down
10 changes: 5 additions & 5 deletions api/aicr/v1/server.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -120,15 +120,15 @@ paths:
description: GPU/accelerator type. If omitted, treated as "any" (wildcard).
schema:
type: string
enum: [h100, gb200, b200, a100, l40, rtx-pro-6000, any]
enum: [h100, h200, gb200, b200, a100, l40, rtx-pro-6000, any]
default: any
- name: gpu
in: query
required: false
description: Alias for accelerator parameter (backwards compatibility).
schema:
type: string
enum: [h100, gb200, b200, a100, l40, rtx-pro-6000, any]
enum: [h100, h200, gb200, b200, a100, l40, rtx-pro-6000, any]
default: any
- name: intent
in: query
Expand Down Expand Up @@ -487,15 +487,15 @@ paths:
description: GPU/accelerator type. If omitted, treated as "any" (wildcard).
schema:
type: string
enum: [h100, gb200, b200, a100, l40, rtx-pro-6000, any]
enum: [h100, h200, gb200, b200, a100, l40, rtx-pro-6000, any]
default: any
- name: gpu
in: query
required: false
description: Alias for accelerator parameter (backwards compatibility).
schema:
type: string
enum: [h100, gb200, b200, a100, l40, rtx-pro-6000, any]
enum: [h100, h200, gb200, b200, a100, l40, rtx-pro-6000, any]
default: any
- name: intent
in: query
Expand Down Expand Up @@ -1262,7 +1262,7 @@ components:
accelerator:
type: string
description: GPU/accelerator type
enum: [h100, gb200, b200, a100, l40, rtx-pro-6000, any]
enum: [h100, h200, gb200, b200, a100, l40, rtx-pro-6000, any]
example: h100
intent:
type: string
Expand Down
2 changes: 1 addition & 1 deletion docs/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ NVIDIA AI Cluster Runtime (AICR) is a suite of tooling designed to automate the
|------|-------------|
| **Snapshot** | A captured state of a system including OS, kernel, Kubernetes, GPU, and SystemD configuration. Created by `aicr snapshot` or the Kubernetes agent. |
| **Recipe** | A generated configuration recommendation containing component references, constraints, and deployment order. Created by `aicr recipe` based on criteria or snapshot analysis. |
| **Criteria** | Query parameters that define the target environment: `service` (eks/gke/aks/oke/kind/lke/bcm), `accelerator` (h100/gb200/b200/a100/l40/rtx-pro-6000), `intent` (training/inference), `os` (ubuntu/rhel/cos/amazonlinux/talos), `platform` (dynamo, kubeflow, nim, runai, slurm), and `nodes`. |
| **Criteria** | Query parameters that define the target environment: `service` (eks/gke/aks/oke/kind/lke/bcm), `accelerator` (h100/h200/gb200/b200/a100/l40/rtx-pro-6000), `intent` (training/inference), `os` (ubuntu/rhel/cos/amazonlinux/talos), `platform` (dynamo, kubeflow, nim, runai, slurm), and `nodes`. |
| **Overlay** | A recipe metadata file that extends the base recipe for specific environments. Overlays are matched against criteria using asymmetric matching. |
| **Mixin** | A composable recipe fragment (`kind: RecipeMixin`) that carries only `constraints` and `componentRefs`. Mixins live in `recipes/mixins/`, are excluded from overlay discovery, and are referenced by leaf overlays via `spec.mixins` to share orthogonal content (e.g., OS constraints, platform components) without duplication. See [ADR-005](design/005-overlay-refactoring.md). |
| **Bundle** | Deployment artifacts generated from a recipe: Helm values files, Kubernetes manifests, installation scripts, and checksums. |
Expand Down
2 changes: 1 addition & 1 deletion docs/contributor/api-server-extending.md
Original file line number Diff line number Diff line change
Expand Up @@ -1087,7 +1087,7 @@ var validate = validator.New()
type RecipeRequest struct {
OS string `validate:"required,oneof=ubuntu rhel cos"`
OSVersion string `validate:"omitempty,semver"`
GPU string `validate:"required,oneof=h100 gb200 b200 a100 l40 rtx-pro-6000"`
GPU string `validate:"required,oneof=h100 h200 gb200 b200 a100 l40 rtx-pro-6000"`
Service string `validate:"omitempty,oneof=eks gke aks oke kind lke bcm"`
}

Expand Down
2 changes: 1 addition & 1 deletion docs/contributor/api-server.md
Original file line number Diff line number Diff line change
Expand Up @@ -263,7 +263,7 @@ Supported content types:
| Parameter | Type | Validation | Example |
|-----------|------|------------|--------|
| `service` | ServiceType | Enum: eks, gke, aks, oke, kind, lke, bcm, any | `service=eks` |
| `accelerator` | AcceleratorType | Enum: h100, gb200, b200, a100, l40, rtx-pro-6000, any | `accelerator=h100` |
| `accelerator` | AcceleratorType | Enum: h100, h200, gb200, b200, a100, l40, rtx-pro-6000, any | `accelerator=h100` |
| `gpu` | AcceleratorType | Alias for accelerator | `gpu=h100` |
| `intent` | IntentType | Enum: training, inference, any | `intent=training` |
| `os` | OSType | Enum: ubuntu, rhel, cos, amazonlinux, talos, any | `os=ubuntu` |
Expand Down
2 changes: 1 addition & 1 deletion docs/contributor/cli.md
Original file line number Diff line number Diff line change
Expand Up @@ -1700,7 +1700,7 @@ OUTPUT_DIR="recipes"
mkdir -p "$OUTPUT_DIR"

# GPU types from NVIDIA product line
GPU_TYPES=("h100" "gb200" "b200" "a100" "l40" "rtx-pro-6000")
GPU_TYPES=("h100" "h200" "gb200" "b200" "a100" "l40" "rtx-pro-6000")

# Kubernetes services
K8S_SERVICES=("eks" "gke" "aks" "oke" "kind" "lke" "bcm")
Expand Down
4 changes: 2 additions & 2 deletions docs/contributor/data.md
Original file line number Diff line number Diff line change
Expand Up @@ -124,7 +124,7 @@ Criteria define when a recipe matches a user query:
| Field | Type | Description | Example Values |
|-------|------|-------------|----------------|
| `service` | String | Kubernetes platform | `eks`, `gke`, `aks`, `oke`, `kind`, `lke`, `bcm` |
| `accelerator` | String | GPU hardware type | `h100`, `gb200`, `b200`, `a100`, `l40`, `rtx-pro-6000` |
| `accelerator` | String | GPU hardware type | `h100`, `h200`, `gb200`, `b200`, `a100`, `l40`, `rtx-pro-6000` |
| `os` | String | Operating system | `ubuntu`, `rhel`, `cos`, `amazonlinux` |
| `intent` | String | Workload purpose | `training`, `inference` |
| `platform` | String | Platform/framework type | `dynamo`, `kubeflow`, `nim`, `runai`, `slurm` |
Expand Down Expand Up @@ -801,7 +801,7 @@ fingerprint:
value: eks # eks | gke | aks | oke | kind | lke | bcm
source: k8s.node.provider
accelerator:
value: h100 # h100 | gb200 | b200 | a100 | l40 | rtx-pro-6000
value: h100 # h100 | h200 | gb200 | b200 | a100 | l40 | rtx-pro-6000
source: gpu.smi.gpu.model
os:
value: ubuntu # ubuntu | rhel | cos | amazonlinux | talos
Expand Down
2 changes: 1 addition & 1 deletion docs/contributor/validations.md
Original file line number Diff line number Diff line change
Expand Up @@ -94,7 +94,7 @@ conditions:
**Supported Condition Keys:**
- `intent`: Workload intent (training, inference)
- `service`: Kubernetes service (eks, gke, aks, oke, kind, lke, bcm)
- `accelerator`: GPU type (h100, gb200, b200, a100, l40, rtx-pro-6000)
- `accelerator`: GPU type (h100, h200, gb200, b200, a100, l40, rtx-pro-6000)
- `os`: Operating system (ubuntu, rhel, cos, amazonlinux, talos)
- `platform`: Platform/framework (dynamo, kubeflow, nim, runai, slurm)

Expand Down
4 changes: 2 additions & 2 deletions docs/user/api-reference.md
Original file line number Diff line number Diff line change
Expand Up @@ -117,7 +117,7 @@ Generate an optimized configuration recipe based on environment parameters.
| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `service` | string | any | K8s service: `eks`, `gke`, `aks`, `oke`, `kind`, `lke`, `bcm`, `any` |
| `accelerator` | string | any | GPU type: `h100`, `gb200`, `b200`, `a100`, `l40`, `rtx-pro-6000`, `any` |
| `accelerator` | string | any | GPU type: `h100`, `h200`, `gb200`, `b200`, `a100`, `l40`, `rtx-pro-6000`, `any` |
| `gpu` | string | any | Alias for `accelerator` |
| `intent` | string | any | Workload: `training`, `inference`, `any` |
| `os` | string | any | Node OS: `ubuntu`, `rhel`, `cos`, `amazonlinux`, `talos`, `any` |
Expand Down Expand Up @@ -821,7 +821,7 @@ openapi-generator-cli generate -i openapi.yaml -g typescript-fetch -o ./ts-clien

**"Invalid accelerator type" error:**
```shell
# Use valid values: h100, gb200, b200, a100, l40, rtx-pro-6000, any
# Use valid values: h100, h200, gb200, b200, a100, l40, rtx-pro-6000, any
curl "http://localhost:8080/v1/recipe?accelerator=h100"
```

Expand Down
2 changes: 1 addition & 1 deletion docs/user/cli-reference.md
Original file line number Diff line number Diff line change
Expand Up @@ -379,7 +379,7 @@ Generate recipes using direct system parameters:
| Flag | Short | Type | Description |
|------|-------|------|-------------|
| `--service` | | string | K8s service: eks, gke, aks, oke, kind, lke, bcm |
| `--accelerator` | `--gpu` | string | Accelerator/GPU type: h100, gb200, b200, a100, l40, rtx-pro-6000 |
| `--accelerator` | `--gpu` | string | Accelerator/GPU type: h100, h200, gb200, b200, a100, l40, rtx-pro-6000 |
| `--intent` | | string | Workload intent: training, inference |
| `--os` | | string | OS family: ubuntu, rhel, cos, amazonlinux, talos |
| `--platform` | | string | Platform/framework type: dynamo, kubeflow, nim, runai, slurm |
Expand Down
2 changes: 1 addition & 1 deletion pkg/api/doc.go
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,7 @@
//
// The /v1/recipe endpoint accepts these query parameters for GET requests:
// - service: Kubernetes service (eks, gke, aks, oke, kind, lke, bcm, any)
// - accelerator: GPU type (h100, gb200, b200, a100, l40, rtx-pro-6000, any)
// - accelerator: GPU type (h100, h200, gb200, b200, a100, l40, rtx-pro-6000, any)
// - gpu: Alias for accelerator (back-compat)
// - intent: Workload intent (training, inference, any)
// - os: Operating system (ubuntu, rhel, cos, amazonlinux, talos, any)
Expand Down
2 changes: 1 addition & 1 deletion pkg/cli/recipe.go
Original file line number Diff line number Diff line change
Expand Up @@ -100,7 +100,7 @@ func recipeCmd() *cli.Command {
Usage: "Create optimized recipe for given intent and environment parameters.",
Description: `Generate configuration recipe based on specified environment parameters including:
- Kubernetes service type (e.g. eks, gke, aks, oke, kind, lke, bcm)
- Accelerator type (e.g. h100, gb200, b200, a100, l40, rtx-pro-6000)
- Accelerator type (e.g. h100, h200, gb200, b200, a100, l40, rtx-pro-6000)
- Workload intent (e.g. training, inference)
- GPU node operating system (e.g. ubuntu, rhel, cos, amazonlinux, talos)
- Number of GPU nodes in the cluster
Expand Down
2 changes: 1 addition & 1 deletion pkg/fingerprint/doc.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
//
// A Fingerprint records the cluster-identity dimensions used to bind
// a snapshot to a recipe — service (eks/gke/aks/oke/kind/lke/bcm),
// accelerator (h100/gb200/b200/a100/l40/rtx-pro-6000), OS
// accelerator (h100/h200/gb200/b200/a100/l40/rtx-pro-6000), OS
// (ubuntu/rhel/cos/amazonlinux/talos plus raw VERSION_ID), Kubernetes
// server version, region, total node count, and GPU node count. Each
// dimension records the resolved value plus an optional source string
Expand Down
7 changes: 7 additions & 0 deletions pkg/fingerprint/gpu_sku.go
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,13 @@ var gpuSKURegistry = []struct {
{"GB200", "gb200"},
{"B200", "b200"},
{"H100", "h100"},
// GH200 (Grace Hopper Superchip) contains the substring "H200" but is a
// distinct Grace-Hopper SKU, not the discrete H200 GPU. It has no
// first-class accelerator enum, so match it explicitly before the "H200"
// rule and leave it unresolved ("") rather than mislabeling it as h200 —
// same reason "GB200" precedes "B200" above.
{"GH200", ""},
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nice catch on the GH200 substring trap — Grace Hopper would otherwise silently mislabel as h200. The comment explicitly anchoring it to the existing GB200B200 precedent makes the ordering invariant clear to future contributors, and the negative test cases (NVIDIA GH200, NVIDIA GH200 480GB) lock it in.

{"H200", "h200"},
{"A100", "a100"},
{"RTX PRO 6000", "rtx-pro-6000"},
{"L40", "l40"},
Expand Down
4 changes: 4 additions & 0 deletions pkg/fingerprint/gpu_sku_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,10 @@ func TestParseGPUSKU(t *testing.T) {
}{
{"H100 80GB HBM3", "NVIDIA H100 80GB HBM3", "h100"},
{"H100 PCIe", "NVIDIA H100 PCIe", "h100"},
{"H200 NVL", "NVIDIA H200 NVL", "h200"},
{"H200 141GB HBM3e", "NVIDIA H200 141GB HBM3e", "h200"},
{"GH200 not matched as h200", "NVIDIA GH200 480GB", ""},
{"GH200 Grace Hopper", "NVIDIA GH200", ""},
{"GB200 NVL72", "NVIDIA GB200", "gb200"},
{"GB200 wins over B200 substring", "NVIDIA GB200 NVL72", "gb200"},
{"B200", "NVIDIA B200", "b200"},
Expand Down
2 changes: 1 addition & 1 deletion pkg/fingerprint/types.go
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@ type Fingerprint struct {
// k8s.node.provider (parsed from spec.providerID).
Service Dimension `json:"service" yaml:"service"`

// Accelerator is the GPU SKU (h100, gb200, b200, a100, l40,
// Accelerator is the GPU SKU (h100, h200, gb200, b200, a100, l40,
// rtx-pro-6000). Parsed from gpu.smi.gpu.model.
Accelerator Dimension `json:"accelerator" yaml:"accelerator"`

Expand Down
7 changes: 5 additions & 2 deletions pkg/recipe/criteria.go
Original file line number Diff line number Diff line change
Expand Up @@ -114,6 +114,7 @@ type CriteriaAcceleratorType string
const (
CriteriaAcceleratorAny CriteriaAcceleratorType = "any"
CriteriaAcceleratorH100 CriteriaAcceleratorType = "h100"
CriteriaAcceleratorH200 CriteriaAcceleratorType = "h200"
CriteriaAcceleratorGB200 CriteriaAcceleratorType = "gb200"
CriteriaAcceleratorB200 CriteriaAcceleratorType = "b200"
CriteriaAcceleratorA100 CriteriaAcceleratorType = "a100"
Expand All @@ -130,6 +131,8 @@ func ParseCriteriaAcceleratorType(s string) (CriteriaAcceleratorType, error) {
return CriteriaAcceleratorAny, nil
case "h100":
return CriteriaAcceleratorH100, nil
case "h200":
return CriteriaAcceleratorH200, nil
case "gb200":
return CriteriaAcceleratorGB200, nil
case "b200":
Expand All @@ -152,7 +155,7 @@ func ParseCriteriaAcceleratorType(s string) (CriteriaAcceleratorType, error) {
// types sorted alphabetically. For the union of static + registry, use
// AllCriteriaAcceleratorTypes.
func GetCriteriaAcceleratorTypes() []string {
return []string{"a100", "b200", "gb200", "h100", "l40", "rtx-pro-6000"}
return []string{"a100", "b200", "gb200", "h100", "h200", "l40", "rtx-pro-6000"}
}

// AllCriteriaAcceleratorTypes returns the union of the static OSS list
Expand Down Expand Up @@ -347,7 +350,7 @@ type Criteria struct {
// Service is the Kubernetes service type (eks, gke, aks, oke, kind, lke, bcm).
Service CriteriaServiceType `json:"service,omitempty" yaml:"service,omitempty"`

// Accelerator is the GPU/accelerator type (h100, gb200, b200, a100, l40, rtx-pro-6000).
// Accelerator is the GPU/accelerator type (h100, h200, gb200, b200, a100, l40, rtx-pro-6000).
Accelerator CriteriaAcceleratorType `json:"accelerator,omitempty" yaml:"accelerator,omitempty"`

// Intent is the workload intent (training, inference).
Expand Down
18 changes: 9 additions & 9 deletions pkg/recipe/criteria_registry_parse_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -102,16 +102,16 @@ func TestParseCriteriaServiceType_StrictAcceptsEmbedded(t *testing.T) {

func TestParseCriteriaAcceleratorType_RegistryFallback(t *testing.T) {
withRegistry(t, func() {
if _, err := ParseCriteriaAcceleratorType("h200"); err == nil {
if _, err := ParseCriteriaAcceleratorType("mi300x"); err == nil {
t.Fatal("expected error before registration")
}
DefaultRegistry().Register(FieldAccelerator, "h200", OriginExternal)
got, err := ParseCriteriaAcceleratorType("h200")
DefaultRegistry().Register(FieldAccelerator, "mi300x", OriginExternal)
got, err := ParseCriteriaAcceleratorType("mi300x")
if err != nil {
t.Fatalf("error = %v", err)
}
if got != CriteriaAcceleratorType("h200") {
t.Errorf("got = %q, want h200", got)
if got != CriteriaAcceleratorType("mi300x") {
t.Errorf("got = %q, want mi300x", got)
}
})
}
Expand Down Expand Up @@ -181,7 +181,7 @@ func TestAllCriteriaServiceTypes_UnionWithRegistry(t *testing.T) {

func TestAllCriteriaTypes_AllDimensions(t *testing.T) {
withRegistry(t, func() {
DefaultRegistry().Register(FieldAccelerator, "h200", OriginExternal)
DefaultRegistry().Register(FieldAccelerator, "mi300x", OriginExternal)
DefaultRegistry().Register(FieldIntent, "fine-tuning", OriginExternal)
DefaultRegistry().Register(FieldOS, "bottlerocket", OriginExternal)
DefaultRegistry().Register(FieldPlatform, "nvmesh", OriginExternal)
Expand All @@ -192,7 +192,7 @@ func TestAllCriteriaTypes_AllDimensions(t *testing.T) {
t.Errorf("AllCriteria%sTypes() missing %q; got %v", field, want, got)
}
}
assertContains("Accelerator", AllCriteriaAcceleratorTypes(), "h200")
assertContains("Accelerator", AllCriteriaAcceleratorTypes(), "mi300x")
assertContains("Intent", AllCriteriaIntentTypes(), "fine-tuning")
assertContains("OS", AllCriteriaOSTypes(), "bottlerocket")
assertContains("Platform", AllCriteriaPlatformTypes(), "nvmesh")
Expand All @@ -212,11 +212,11 @@ func TestMergeCriteriaTypes_NoMutationOfInput(t *testing.T) {
func TestCriteriaValidate_AdmitsRegisteredValues(t *testing.T) {
withRegistry(t, func() {
DefaultRegistry().Register(FieldService, "ncp-customer-x", OriginExternal)
DefaultRegistry().Register(FieldAccelerator, "h200", OriginExternal)
DefaultRegistry().Register(FieldAccelerator, "mi300x", OriginExternal)

c := &Criteria{
Service: "ncp-customer-x",
Accelerator: "h200",
Accelerator: "mi300x",
Intent: CriteriaIntentTraining,
OS: CriteriaOSUbuntu,
}
Expand Down
4 changes: 2 additions & 2 deletions pkg/recipe/criteria_registry_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -314,7 +314,7 @@ func TestSeedCriteriaRegistry(t *testing.T) {

c := &Criteria{
Service: "ncp-x",
Accelerator: "h200",
Accelerator: "mi300x",
Intent: "fine-tuning",
OS: "bottlerocket",
Platform: "nvmesh",
Expand All @@ -326,7 +326,7 @@ func TestSeedCriteriaRegistry(t *testing.T) {
value string
}{
{FieldService, "ncp-x"},
{FieldAccelerator, "h200"},
{FieldAccelerator, "mi300x"},
{FieldIntent, "fine-tuning"},
{FieldOS, "bottlerocket"},
{FieldPlatform, "nvmesh"},
Expand Down
4 changes: 3 additions & 1 deletion pkg/recipe/criteria_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,8 @@ func TestParseCriteriaAcceleratorType(t *testing.T) {
{"any", "any", CriteriaAcceleratorAny, false},
{"h100", "h100", CriteriaAcceleratorH100, false},
{"H100 uppercase", "H100", CriteriaAcceleratorH100, false},
{"h200", "h200", CriteriaAcceleratorH200, false},
{"H200 uppercase", "H200", CriteriaAcceleratorH200, false},
{"gb200", "gb200", CriteriaAcceleratorGB200, false},
{"b200", "b200", CriteriaAcceleratorB200, false},
{"a100", "a100", CriteriaAcceleratorA100, false},
Expand Down Expand Up @@ -725,7 +727,7 @@ func TestGetCriteriaAcceleratorTypes(t *testing.T) {
types := GetCriteriaAcceleratorTypes()

// Should return sorted list
expected := []string{"a100", "b200", "gb200", "h100", "l40", "rtx-pro-6000"}
expected := []string{"a100", "b200", "gb200", "h100", "h200", "l40", "rtx-pro-6000"}
if len(types) != len(expected) {
t.Errorf("GetCriteriaAcceleratorTypes() returned %d types, want %d", len(types), len(expected))
}
Expand Down
Loading
Loading