> ## Documentation Index
> Fetch the complete documentation index at: https://bifrost-backport-semantic-cache-scope.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Values Reference

> Complete reference for Bifrost Helm chart values - key parameters, how to supply them, and links to example files

This page covers every top-level parameter group in the Bifrost Helm chart's `values.yaml`, how to supply values via `--set` vs `-f`, and where to find ready-made example files.

<Note>
  The full values schema is available at [https://getbifrost.ai/schema](https://getbifrost.ai/schema). All `values.yaml` fields map directly to `config.json` fields generated by the chart.
</Note>

## Supplying Values

### One-liner with `--set`

Good for a single field or quick experiments:

```bash theme={null}
helm install bifrost bifrost/bifrost \
  --set image.tag=v1.4.11 \
  --set replicaCount=3 \
  --set bifrost.client.initialPoolSize=500
```

### Values file with `-f`

Recommended for anything beyond a couple of fields:

```bash theme={null}
# Create your values file
cat > my-values.yaml <<'EOF'
image:
  tag: "v1.4.11"

replicaCount: 2

bifrost:
  encryptionKey: "your-32-byte-encryption-key-here"
  client:
    initialPoolSize: 500
    enableLogging: true
EOF

# Install
helm install bifrost bifrost/bifrost -f my-values.yaml

# Upgrade later
helm upgrade bifrost bifrost/bifrost -f my-values.yaml

# Upgrade and reuse all previously set values, overriding only one field
helm upgrade bifrost bifrost/bifrost \
  --reuse-values \
  --set replicaCount=5
```

### Multiple values files

Later files override earlier ones - useful for a base + environment-specific overlay:

```bash theme={null}
helm install bifrost bifrost/bifrost \
  -f base-values.yaml \
  -f production-overrides.yaml
```

***

## Key Parameters Reference

### Image

| Parameter | Description | Default |
| - | - | - |
| `image.repository` | Container image repository | `docker.io/maximhq/bifrost` |
| `image.tag` | **Required.** Image version (e.g. `v1.4.11`) | `""` |
| `image.pullPolicy` | Image pull policy | `IfNotPresent` |
| `imagePullSecrets` | List of pull secret names for private registries | `[]` |

```bash theme={null}
# Always specify the tag - the chart will not start without it
helm install bifrost bifrost/bifrost --set image.tag=v1.4.11
```

### Replicas & Autoscaling

| Parameter | Description | Default |
| - | - | - |
| `replicaCount` | Static replica count (ignored when HPA is enabled) | `1` |
| `autoscaling.enabled` | Enable Horizontal Pod Autoscaler | `false` |
| `autoscaling.minReplicas` | Minimum replicas | `1` |
| `autoscaling.maxReplicas` | Maximum replicas | `10` |
| `autoscaling.targetCPUUtilizationPercentage` | CPU target for scaling | `80` |
| `autoscaling.targetMemoryUtilizationPercentage` | Memory target for scaling | `80` |
| `autoscaling.behavior.scaleDown.stabilizationWindowSeconds` | Cooldown before scale-down (important for SSE streams) | `300` |
| `autoscaling.behavior.scaleDown.policies[0].value` | Max pods removed per period | `1` |

### Resources

| Parameter | Description | Default |
| - | - | - |
| `resources.requests.cpu` | CPU request | `500m` |
| `resources.requests.memory` | Memory request | `512Mi` |
| `resources.limits.cpu` | CPU limit | `2000m` |
| `resources.limits.memory` | Memory limit | `2Gi` |

### Service

| Parameter | Description | Default |
| - | - | - |
| `service.type` | `ClusterIP`, `LoadBalancer`, or `NodePort` | `ClusterIP` |
| `service.port` | Service port | `8080` |

### Ingress

| Parameter | Description | Default |
| - | - | - |
| `ingress.enabled` | Enable ingress | `false` |
| `ingress.className` | Ingress class (e.g. `nginx`, `traefik`) | `""` |
| `ingress.annotations` | Ingress annotations | `{}` |
| `ingress.hosts` | Host rules | see values.yaml |
| `ingress.tls` | TLS configuration | `[]` |

```yaml theme={null}
ingress:
  enabled: true
  className: nginx
  annotations:
    cert-manager.io/cluster-issuer: letsencrypt-prod
    nginx.ingress.kubernetes.io/proxy-body-size: "100m"
  hosts:
    - host: bifrost.yourdomain.com
      paths:
        - path: /
          pathType: Prefix
  tls:
    - secretName: bifrost-tls
      hosts:
        - bifrost.yourdomain.com
```

### Probes

| Parameter | Description | Default |
| - | - | - |
| `livenessProbe.initialDelaySeconds` | Seconds before first liveness check | `30` |
| `livenessProbe.periodSeconds` | Liveness check interval | `30` |
| `readinessProbe.initialDelaySeconds` | Seconds before first readiness check | `10` |
| `readinessProbe.periodSeconds` | Readiness check interval | `10` |

Both probes hit `GET /health`.

### Graceful Shutdown

Bifrost supports long-lived SSE streaming connections. The default `preStop` hook and termination grace period let in-flight streams finish before the pod is killed:

| Parameter | Description | Default |
| - | - | - |
| `terminationGracePeriodSeconds` | Total grace period | `60` |
| `lifecycle.preStop.exec.command` | Sleep before SIGTERM so load balancer drains | `["sh", "-c", "sleep 15"]` |

Increase `terminationGracePeriodSeconds` if your typical stream responses take longer than 45 seconds.

### Service Account

| Parameter | Description | Default |
| - | - | - |
| `serviceAccount.create` | Create a dedicated service account | `true` |
| `serviceAccount.annotations` | Annotations (e.g. for IRSA, Workload Identity) | `{}` |
| `serviceAccount.name` | Override the generated name | `""` |

### Pod Scheduling

```yaml theme={null}
# Spread replicas across nodes
affinity:
  podAntiAffinity:
    requiredDuringSchedulingIgnoredDuringExecution:
      - labelSelector:
          matchLabels:
            app.kubernetes.io/name: bifrost
        topologyKey: kubernetes.io/hostname

# Pin to specific node pool
nodeSelector:
  node-type: ai-workload

# Tolerate GPU taints
tolerations:
  - key: "gpu"
    operator: "Equal"
    value: "true"
    effect: "NoSchedule"
```

### Extra Environment Variables

Three ways to inject env vars:

```yaml theme={null}
# Inline key/value pairs
env:
  - name: HTTP_PROXY
    value: "http://proxy.corp.example.com:3128"

# Map syntax (appended after env)
extraEnv:
  NO_PROXY: "169.254.169.254,10.0.0.0/8"

# Bulk-load from existing Secrets or ConfigMaps
envFrom:
  - secretRef:
      name: my-corp-secrets
  - configMapRef:
      name: my-app-config
```

### Init Containers

```yaml theme={null}
initContainers:
  - name: wait-for-db
    image: busybox:1.35
    command: ["sh", "-c", "until nc -z postgres-svc 5432; do sleep 2; done"]
```

***

## Values Examples

The chart ships ready-made example files under [`helm-charts/bifrost/values-examples/`](https://github.com/maximhq/bifrost/tree/main/helm-charts/bifrost/values-examples):

| File | Use case |
| - | - |
| `sqlite-only.yaml` | Minimal local/dev setup |
| `postgres-only.yaml` | Single-store Postgres |
| `production-ha.yaml` | HA: 3 replicas, Postgres, Weaviate, HPA, Ingress |
| `providers-and-virtual-keys.yaml` | All 23 providers + 7 virtual key patterns |
| `secrets-from-k8s.yaml` | All sensitive values from Kubernetes Secrets |
| `external-postgres.yaml` | Point at an existing Postgres instance |
| `postgres-redis.yaml` | Postgres + Redis vector store |
| `postgres-weaviate.yaml` | Postgres + Weaviate vector store |
| `postgres-qdrant.yaml` | Postgres + Qdrant vector store |
| `semantic-cache-secret-example.yaml` | Semantic cache with secret injection |
| `mixed-backend.yaml` | Config store = postgres, logs store = sqlite |

Install from an example file directly:

```bash theme={null}
helm install bifrost bifrost/bifrost \
  -f https://raw.githubusercontent.com/maximhq/bifrost/main/helm-charts/bifrost/values-examples/production-ha.yaml \
  --set image.tag=v1.4.11
```

***

## Helm Operations

### View current values

```bash theme={null}
helm get values bifrost
```

### Diff before upgrading (requires helm-diff plugin)

```bash theme={null}
helm diff upgrade bifrost bifrost/bifrost -f my-values.yaml
```

### Rollback

```bash theme={null}
helm history bifrost
helm rollback bifrost       # to previous revision
helm rollback bifrost 2     # to revision 2
```

### Uninstall

```bash theme={null}
helm uninstall bifrost

# Also remove PVCs (deletes all data)
kubectl delete pvc -l app.kubernetes.io/instance=bifrost
```

***

## All Key Parameters

A quick-reference table of the most commonly used top-level parameters:

| Parameter | Description | Default |
| - | - | - |
| `image.tag` | **Required.** Bifrost image version (e.g., `v1.4.11`) | `""` |
| `replicaCount` | Number of replicas | `1` |
| `storage.mode` | Storage backend (`sqlite` or `postgres`) | `sqlite` |
| `storage.persistence.size` | PVC size for SQLite | `10Gi` |
| `postgresql.enabled` | Deploy embedded PostgreSQL | `false` |
| `vectorStore.enabled` | Enable vector store | `false` |
| `vectorStore.type` | Vector store type (`weaviate`, `redis`, `qdrant`) | `none` |
| `bifrost.encryptionKey` | Optional encryption key (use `encryptionKeySecret` in production). If omitted, data is stored in plaintext. | `""` |
| `ingress.enabled` | Enable ingress | `false` |
| `autoscaling.enabled` | Enable HPA | `false` |

### Secret Reference Parameters

Use existing Kubernetes Secrets instead of plain-text values. Every sensitive field in the chart has a corresponding `existingSecret` / `secretRef` alternative:

| Parameter | Description | Default |
| - | - | - |
| `bifrost.encryptionKeySecret.name` | Secret name for encryption key | `""` |
| `bifrost.encryptionKeySecret.key` | Key within the secret | `"encryption-key"` |
| `postgresql.external.existingSecret` | Secret name for PostgreSQL password | `""` |
| `postgresql.external.passwordKey` | Key within the secret | `"password"` |
| `vectorStore.redis.external.existingSecret` | Secret name for Redis password | `""` |
| `vectorStore.redis.external.passwordKey` | Key within the secret | `"password"` |
| `vectorStore.weaviate.external.existingSecret` | Secret name for Weaviate API key | `""` |
| `vectorStore.weaviate.external.apiKeyKey` | Key within the secret | `"api-key"` |
| `vectorStore.qdrant.external.existingSecret` | Secret name for Qdrant API key | `""` |
| `vectorStore.qdrant.external.apiKeyKey` | Key within the secret | `"api-key"` |
| `bifrost.plugins.maxim.secretRef.name` | Secret name for Maxim API key | `""` |
| `bifrost.plugins.maxim.secretRef.key` | Key within the secret | `"api-key"` |
| `bifrost.providerSecrets.<provider>.existingSecret` | Secret name for provider API key | `""` |
| `bifrost.providerSecrets.<provider>.key` | Key within the secret | `"api-key"` |
| `bifrost.providerSecrets.<provider>.envVar` | Environment variable name to inject | `""` |

***

## Advanced Configuration

### Comprehensive Example

A production-ready values file combining the most common settings:

```yaml theme={null}
# my-values.yaml
image:
  tag: "v1.4.11"

replicaCount: 3

storage:
  mode: postgres

postgresql:
  enabled: true
  auth:
    password: "secure-password"   # use existingSecret in production

autoscaling:
  enabled: true
  minReplicas: 3
  maxReplicas: 10

ingress:
  enabled: true
  className: nginx
  hosts:
    - host: bifrost.example.com
      paths:
        - path: /
          pathType: Prefix

bifrost:
  encryptionKeySecret:
    name: "bifrost-encryption"
    key: "key"
  providers:
    openai:
      keys:
        - name: "primary"
          value: "env.OPENAI_API_KEY"
          weight: 1
  providerSecrets:
    openai:
      existingSecret: "provider-api-keys"
      key: "openai-api-key"
      envVar: "OPENAI_API_KEY"
```

```bash theme={null}
helm install bifrost bifrost/bifrost -f my-values.yaml
```

### Node Affinity & Scheduling

Deploy to specific nodes and spread replicas across hosts:

```yaml theme={null}
nodeSelector:
  node-type: ai-workload

affinity:
  podAntiAffinity:
    requiredDuringSchedulingIgnoredDuringExecution:
      - labelSelector:
          matchLabels:
            app.kubernetes.io/name: bifrost
        topologyKey: kubernetes.io/hostname

tolerations:
  - key: "gpu"
    operator: "Equal"
    value: "true"
    effect: "NoSchedule"
```

### Deployment & Pod Annotations

Useful for tooling like [Keel](https://keel.sh) for automatic image updates or Datadog APM injection:

```yaml theme={null}
deploymentAnnotations:
  keel.sh/policy: force
  keel.sh/trigger: poll

podAnnotations:
  ad.datadoghq.com/bifrost.logs: '[{"source":"bifrost","service":"bifrost"}]'
```

***

## Common Patterns

Ready-made values files for the most common deployment scenarios. Each pattern builds on the [quickstart](/deployment-guides/helm).

<Tabs>
  <Tab title="Development">
    Simple setup for local testing. SQLite, single replica, no autoscaling.

    ```bash theme={null}
    helm install bifrost bifrost/bifrost \
      --set image.tag=v1.4.11 \
      --set 'bifrost.providers.openai.keys[0].name=dev-key' \
      --set 'bifrost.providers.openai.keys[0].value=sk-your-key' \
      --set 'bifrost.providers.openai.keys[0].weight=1'
    ```

    ```bash theme={null}
    # Access
    kubectl port-forward svc/bifrost 8080:8080
    ```
  </Tab>

  <Tab title="Multi-Provider">
    Multiple LLM providers with weighted load balancing.

    ```bash theme={null}
    kubectl create secret generic provider-keys \
      --from-literal=openai-api-key='sk-...' \
      --from-literal=anthropic-api-key='sk-ant-...' \
      --from-literal=gemini-api-key='your-gemini-key'
    ```

    ```yaml theme={null}
    # multi-provider.yaml
    image:
      tag: "v1.4.11"

    bifrost:
      encryptionKey: "your-encryption-key"

      client:
        enableLogging: true

      providers:
        openai:
          keys:
            - name: "openai-primary"
              value: "env.OPENAI_API_KEY"
              weight: 2    # 50% of traffic
        anthropic:
          keys:
            - name: "anthropic-primary"
              value: "env.ANTHROPIC_API_KEY"
              weight: 1    # 25%
        gemini:
          keys:
            - name: "gemini-primary"
              value: "env.GEMINI_API_KEY"
              weight: 1    # 25%

      providerSecrets:
        openai:
          existingSecret: "provider-keys"
          key: "openai-api-key"
          envVar: "OPENAI_API_KEY"
        anthropic:
          existingSecret: "provider-keys"
          key: "anthropic-api-key"
          envVar: "ANTHROPIC_API_KEY"
        gemini:
          existingSecret: "provider-keys"
          key: "gemini-api-key"
          envVar: "GEMINI_API_KEY"

      plugins:
        telemetry:
          enabled: true
        logging:
          enabled: true
    ```

    ```bash theme={null}
    helm install bifrost bifrost/bifrost -f multi-provider.yaml
    ```
  </Tab>

  <Tab title="External Database">
    Use an existing PostgreSQL instance - RDS, Cloud SQL, Azure Database, or self-managed.

    ```bash theme={null}
    kubectl create secret generic postgres-credentials \
      --from-literal=password='your-external-postgres-password'
    ```

    ```yaml theme={null}
    # external-db.yaml
    image:
      tag: "v1.4.11"

    storage:
      mode: postgres

    postgresql:
      enabled: false
      external:
        enabled: true
        host: "your-rds-endpoint.us-east-1.rds.amazonaws.com"
        port: 5432
        user: "bifrost"
        database: "bifrost"
        sslMode: "require"
        existingSecret: "postgres-credentials"
        passwordKey: "password"

    bifrost:
      encryptionKey: "your-encryption-key"

      providers:
        openai:
          keys:
            - name: "openai-primary"
              value: "sk-..."
              weight: 1
    ```

    ```bash theme={null}
    helm install bifrost bifrost/bifrost -f external-db.yaml
    ```
  </Tab>

  <Tab title="AI Workloads">
    Semantic response caching for high-volume AI inference.

    ```bash theme={null}
    kubectl create secret generic bifrost-encryption \
      --from-literal=key='your-32-byte-encryption-key'

    kubectl create secret generic provider-keys \
      --from-literal=openai-api-key='sk-your-key'
    ```

    ```yaml theme={null}
    # ai-workload.yaml
    image:
      tag: "v1.4.11"

    storage:
      mode: postgres

    postgresql:
      enabled: true
      auth:
        password: "secure-password"
      primary:
        persistence:
          size: 50Gi

    vectorStore:
      enabled: true
      type: weaviate
      weaviate:
        enabled: true
        persistence:
          size: 50Gi

    bifrost:
      encryptionKeySecret:
        name: "bifrost-encryption"
        key: "key"

      providers:
        openai:
          keys:
            - name: "openai-primary"
              value: "env.OPENAI_API_KEY"
              weight: 1

      providerSecrets:
        openai:
          existingSecret: "provider-keys"
          key: "openai-api-key"
          envVar: "OPENAI_API_KEY"

      plugins:
        semanticCache:
          enabled: true
          config:
            provider: "openai"
            keys:
              - value: "env.OPENAI_API_KEY"
                weight: 1
            embedding_model: "text-embedding-3-small"
            dimension: 1536
            threshold: 0.85
            ttl: "1h"
            cache_by_model: true
            cache_by_provider: true
    ```

    ```bash theme={null}
    helm install bifrost bifrost/bifrost -f ai-workload.yaml
    ```
  </Tab>

  <Tab title="Kubernetes Secrets Only">
    Zero credentials in values files - all sensitive data in Kubernetes Secrets.

    ```bash theme={null}
    kubectl create secret generic postgres-credentials \
      --from-literal=password='your-postgres-password'

    kubectl create secret generic bifrost-encryption \
      --from-literal=key='your-encryption-key'

    kubectl create secret generic provider-keys \
      --from-literal=openai-api-key='sk-...' \
      --from-literal=anthropic-api-key='sk-ant-...'

    kubectl create secret generic qdrant-credentials \
      --from-literal=api-key='your-qdrant-api-key'
    ```

    ```yaml theme={null}
    # secrets-only.yaml
    image:
      tag: "v1.4.11"

    storage:
      mode: postgres

    postgresql:
      enabled: false
      external:
        enabled: true
        host: "postgres.example.com"
        port: 5432
        user: "bifrost"
        database: "bifrost"
        sslMode: "require"
        existingSecret: "postgres-credentials"
        passwordKey: "password"

    vectorStore:
      enabled: true
      type: qdrant
      qdrant:
        enabled: false
        external:
          enabled: true
          host: "qdrant.example.com"
          port: 6334
          existingSecret: "qdrant-credentials"
          apiKeyKey: "api-key"

    bifrost:
      encryptionKeySecret:
        name: "bifrost-encryption"
        key: "key"

      providers:
        openai:
          keys:
            - name: "openai-primary"
              value: "env.OPENAI_API_KEY"
              weight: 1
        anthropic:
          keys:
            - name: "anthropic-primary"
              value: "env.ANTHROPIC_API_KEY"
              weight: 1

      providerSecrets:
        openai:
          existingSecret: "provider-keys"
          key: "openai-api-key"
          envVar: "OPENAI_API_KEY"
        anthropic:
          existingSecret: "provider-keys"
          key: "anthropic-api-key"
          envVar: "ANTHROPIC_API_KEY"
    ```

    ```bash theme={null}
    helm install bifrost bifrost/bifrost -f secrets-only.yaml
    ```
  </Tab>
</Tabs>


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.