# InferencePoolMember

{/* Generated by scripts/generate-manifest-reference.mjs from https://schemas.airdress.co/operator/InferencePoolMember/v1.json
    (operator version v0.1.30). Do not edit by hand — run
    `pnpm generate:manifest-reference` and commit the result. */}

A resource manifest applied to an Airdress operator.

**Canonical schema:** [`https://schemas.airdress.co/operator/InferencePoolMember/v1.json`](https://schemas.airdress.co/operator/InferencePoolMember/v1.json)

## Editor validation

Add this modeline to the top of your manifest to get validation and
completion in any editor with [yaml-language-server](https://github.com/redhat-developer/yaml-language-server)
support (VS Code with the YAML extension, for example):

```yaml
# yaml-language-server: $schema=https://schemas.airdress.co/operator/InferencePoolMember/v1.json
```

## Minimal example

Values marked `PLACEHOLDER-*` must be replaced with your own — they show
where a required value goes, not what it should be.

```yaml
# yaml-language-server: $schema=https://schemas.airdress.co/operator/InferencePoolMember/v1.json
apiVersion: airdress.co/v1alpha1
kind: InferencePoolMember
metadata:
  name: PLACEHOLDER-name
spec:
  backend: PLACEHOLDER-backend
  models:
    - name: PLACEHOLDER-name
```

## Top-level fields

| Field | Type | Required | Default | Description |
| ----- | ---- | -------- | ------- | ----------- |
| `apiVersion` | const `"airdress.co/v1alpha1"` | yes | — |  |
| `kind` | const `"InferencePoolMember"` | yes | — |  |
| `metadata` | object | yes | — | The `metadata` block of a manifest. |
| `spec` | object | yes | — | `spec` block of an `InferencePoolMember` manifest. |

### `metadata`

| Field | Type | Required | Default | Description |
| ----- | ---- | -------- | ------- | ----------- |
| `labels` | object | no | — |  |
| `name` | string | yes | — |  |
| `namespace` | string \| null | no | — | Accepted for k8s familiarity but ignored — every operator manages one airdress's resources (one namespace). |
| `resourceVersion` | string \| null | no | — | Optimistic concurrency token. When present, apply is rejected with 409 if the stored row's `resource_version` doesn't match. When absent, last-writer-wins. |

### `spec`

| Field | Type | Required | Default | Description |
| ----- | ---- | -------- | ------- | ----------- |
| `authSecretRef` | string | no | `""` | Secret-vault key holding the upstream bearer token. The operator resolves the reference on each reconcile; the manifest only carries the reference name, never the secret value. Omitted for echo, which has no upstream to authenticate to. |
| `backend` | string | yes | — | Backend identifier. "vllm-openai" (an OpenAI-API upstream) or "echo" (no upstream; answers with the text it was sent). Unknown values are rejected at apply time. |
| `caFileRef` | string \| null | no | — | Optional secret-vault key for a private-CA bundle. When set, the operator adds the bundle to the HTTPS client's root store before connecting to `url`. Use this for Tailscale-style private CAs and LE staging. |
| `computeOperatorRef` | string \| null | no | — | Name of the enrolled compute-role operator the homing operator should dispatch through. Required when transport is operator-signal; rejected when transport is http-direct. |
| `draining` | boolean | no | `false` | When `true`, the router stops sending new traffic. In-flight requests still complete. Toggling to `false` re-admits the member after a successful probe. Defaults to `false`. |
| `models` | array of object | yes | — | Models this member advertises. The reconciler probes `GET /v1/models` per tick; declared names not seen in the upstream response flip `ModelsAdvertised=False`. |
| `traits` | object \| null | no | — | Backend capability declarations. Omitting this block is equivalent to declaring every trait at its default. |
| `transport` | `"http-direct"` \| `"operator-signal"` \| null | no | — | Transport discriminator. Omitting the field defaults to http-direct, so existing manifests round trip without changes. |
| `url` | string | no | `""` | Upstream URL the operator probes and forwards inference to. HTTPS in production; http:// accepted for LAN or private-network development. Required for vllm-openai over http-direct; omitted for echo and for operator-signal members, which have nothing to dial. |

### `spec.models[]`

| Field | Type | Required | Default | Description |
| ----- | ---- | -------- | ------- | ----------- |
| `contextWindow` | integer \| null | no | — | Optional context-window hint. Operator-internal callers may use this to pre-reject oversized requests before forwarding. |
| `name` | string | yes | — | Model identifier the upstream returns from `GET /v1/models`. |

### `spec.traits`

| Field | Type | Required | Default | Description |
| ----- | ---- | -------- | ------- | ----------- |
| `supportsMultiConversation` | boolean | no | `true` | Whether this backend can serve more than one concurrent, independent conversation. Every OpenAI-compatible chat-completions backend is stateless per request and trivially satisfies this, as does echo; default true. Set false for a backend that is genuinely session-bound. |