Skip to main content
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.
The full values schema is available at https://getbifrost.ai/schema. All values.yaml fields map directly to config.json fields generated by the chart.

Supplying Values

One-liner with --set

Good for a single field or quick experiments:
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:
# 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:
helm install bifrost bifrost/bifrost \
  -f base-values.yaml \
  -f production-overrides.yaml

Key Parameters Reference

Image

ParameterDescriptionDefault
image.repositoryContainer image repositorydocker.io/maximhq/bifrost
image.tagRequired. Image version (e.g. v1.4.11)""
image.pullPolicyImage pull policyIfNotPresent
imagePullSecretsList of pull secret names for private registries[]
# Always specify the tag — the chart will not start without it
helm install bifrost bifrost/bifrost --set image.tag=v1.4.11

Replicas & Autoscaling

ParameterDescriptionDefault
replicaCountStatic replica count (ignored when HPA is enabled)1
autoscaling.enabledEnable Horizontal Pod Autoscalerfalse
autoscaling.minReplicasMinimum replicas1
autoscaling.maxReplicasMaximum replicas10
autoscaling.targetCPUUtilizationPercentageCPU target for scaling80
autoscaling.targetMemoryUtilizationPercentageMemory target for scaling80
autoscaling.behavior.scaleDown.stabilizationWindowSecondsCooldown before scale-down (important for SSE streams)300
autoscaling.behavior.scaleDown.policies[0].valueMax pods removed per period1

Resources

ParameterDescriptionDefault
resources.requests.cpuCPU request500m
resources.requests.memoryMemory request512Mi
resources.limits.cpuCPU limit2000m
resources.limits.memoryMemory limit2Gi

Service

ParameterDescriptionDefault
service.typeClusterIP, LoadBalancer, or NodePortClusterIP
service.portService port8080

Ingress

ParameterDescriptionDefault
ingress.enabledEnable ingressfalse
ingress.classNameIngress class (e.g. nginx, traefik)""
ingress.annotationsIngress annotations{}
ingress.hostsHost rulessee values.yaml
ingress.tlsTLS configuration[]
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

ParameterDescriptionDefault
livenessProbe.initialDelaySecondsSeconds before first liveness check30
livenessProbe.periodSecondsLiveness check interval30
readinessProbe.initialDelaySecondsSeconds before first readiness check10
readinessProbe.periodSecondsReadiness check interval10
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:
ParameterDescriptionDefault
terminationGracePeriodSecondsTotal grace period60
lifecycle.preStop.exec.commandSleep before SIGTERM so load balancer drains["sh", "-c", "sleep 15"]
Increase terminationGracePeriodSeconds if your typical stream responses take longer than 45 seconds.

Service Account

ParameterDescriptionDefault
serviceAccount.createCreate a dedicated service accounttrue
serviceAccount.annotationsAnnotations (e.g. for IRSA, Workload Identity){}
serviceAccount.nameOverride the generated name""

Pod Scheduling

# 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:
# 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

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/:
FileUse case
sqlite-only.yamlMinimal local/dev setup
postgres-only.yamlSingle-store Postgres
production-ha.yamlHA: 3 replicas, Postgres, Weaviate, HPA, Ingress
providers-and-virtual-keys.yamlAll 23 providers + 7 virtual key patterns
secrets-from-k8s.yamlAll sensitive values from Kubernetes Secrets
external-postgres.yamlPoint at an existing Postgres instance
postgres-redis.yamlPostgres + Redis vector store
postgres-weaviate.yamlPostgres + Weaviate vector store
postgres-qdrant.yamlPostgres + Qdrant vector store
semantic-cache-secret-example.yamlSemantic cache with secret injection
mixed-backend.yamlConfig store = postgres, logs store = sqlite
Install from an example file directly:
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

helm get values bifrost

Diff before upgrading (requires helm-diff plugin)

helm diff upgrade bifrost bifrost/bifrost -f my-values.yaml

Rollback

helm history bifrost
helm rollback bifrost       # to previous revision
helm rollback bifrost 2     # to revision 2

Uninstall

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:
ParameterDescriptionDefault
image.tagRequired. Bifrost image version (e.g., v1.4.11)""
replicaCountNumber of replicas1
storage.modeStorage backend (sqlite or postgres)sqlite
storage.persistence.sizePVC size for SQLite10Gi
postgresql.enabledDeploy embedded PostgreSQLfalse
vectorStore.enabledEnable vector storefalse
vectorStore.typeVector store type (weaviate, redis, qdrant)none
bifrost.encryptionKeyEncryption key (use encryptionKeySecret in production)""
ingress.enabledEnable ingressfalse
autoscaling.enabledEnable HPAfalse

Secret Reference Parameters

Use existing Kubernetes Secrets instead of plain-text values. Every sensitive field in the chart has a corresponding existingSecret / secretRef alternative:
ParameterDescriptionDefault
bifrost.encryptionKeySecret.nameSecret name for encryption key""
bifrost.encryptionKeySecret.keyKey within the secret"encryption-key"
postgresql.external.existingSecretSecret name for PostgreSQL password""
postgresql.external.passwordKeyKey within the secret"password"
vectorStore.redis.external.existingSecretSecret name for Redis password""
vectorStore.redis.external.passwordKeyKey within the secret"password"
vectorStore.weaviate.external.existingSecretSecret name for Weaviate API key""
vectorStore.weaviate.external.apiKeyKeyKey within the secret"api-key"
vectorStore.qdrant.external.existingSecretSecret name for Qdrant API key""
vectorStore.qdrant.external.apiKeyKeyKey within the secret"api-key"
bifrost.plugins.maxim.secretRef.nameSecret name for Maxim API key""
bifrost.plugins.maxim.secretRef.keyKey within the secret"api-key"
bifrost.providerSecrets.<provider>.existingSecretSecret name for provider API key""
bifrost.providerSecrets.<provider>.keyKey within the secret"api-key"
bifrost.providerSecrets.<provider>.envVarEnvironment variable name to inject""

Advanced Configuration

Comprehensive Example

A production-ready values file combining the most common settings:
# 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"
helm install bifrost bifrost/bifrost -f my-values.yaml

Node Affinity & Scheduling

Deploy to specific nodes and spread replicas across hosts:
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 for automatic image updates or Datadog APM injection:
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.
Simple setup for local testing. SQLite, single replica, no autoscaling.
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'
# Access
kubectl port-forward svc/bifrost 8080:8080