Skip to main content
Version: 15.2.0

Helm Values: ai-services chart

This page describes all configurable values for the ai-services chart. See values.yaml for defaults. The chart does not ship a values.schema.json: invalid combinations are rejected at render time by the chart's validation template.

URL and environment​

KeyTypeDefaultRequiredDescription
urlstring""✅Full public URL of AI Services (e.g. https://ai-services.your-domain.com). Used as the Envoy virtual host, as the IngressRoute host, as LiteLLM's base URL (<url><litellmProxy.basePath>), as the base of the Temporal UI callback URL and of the Memory MCP resource. Must match the AI Services URL configured in the Keycloak realm, which fetches <url>/.well-known/jwks.json.
isPaaSbooleanfalse❌Set to true for Mia Platform PaaS deployments. Adds the organization:* scope to the scopes advertised by the Memory MCP protected-resource metadata.
namespacePrefixstringnot set❌Optional prefix prepended as <namespacePrefix>-<name> to the names of the component resources (including their <component>-keys Secrets), to the image pull secret name, to the IngressRoute name and to ingressRoute.tls.secretName. Not present in the default values.yaml.
nameOverridestring""❌Overrides the chart name.
fullnameOverridestring""❌Overrides the fully qualified app name.

Authorization server and authorization service​

KeyTypeDefaultRequiredDescription
authorizationServer.enabledbooleanfalse✅Enables JWT validation (jwt_authn) on the API gateway. Must be true whenever accessControl, doclingService, memoryService or secretStoreService is enabled.
authorizationServer.issuerstring""✅Keycloak realm issuer URL (e.g. https://keycloak.your-domain.com/realms/my-realm). Used by the API gateway for JWT validation, by accessControl for its client authentication and, unless temporalUi.auth.providerUrl is set, by the Temporal UI login.
rbacAuthzServiceUrlstring""❌gRPC URL of the platform authorization service that accessControl resolves the caller's external context against. Takes precedence over authzUrl. One of the two is required when accessControl.config.externalContext.enabled is true.
authzUrlstring""❌HTTP URL of the same authorization service. Used when rbacAuthzServiceUrl is empty.

Telemetry​

KeyTypeDefaultDescription
telemetry.enabledbooleanfalseEnable OpenTelemetry export for the services that support it. When true, an OTLP endpoint must resolve for litellmProxy (see litellmProxy.telemetry.otlpEndpoint).
telemetry.apiGatewayTracingbooleanfalseLet Envoy open a span of its own for every request. Off by default even with telemetry.enabled: Envoy then forwards the caller's traceparent unchanged. Turn it on only where Envoy's spans reach a backend that keeps them.
telemetry.otelExporterOtlpEndpointstring""OTLP endpoint for all signals. Also the last fallback for LiteLLM Proxy's telemetry.
telemetry.otelExporterOtlpTracesEndpointstring""OTLP endpoint for traces only. Overrides the general endpoint for traces.
telemetry.otelExporterOtlpProtocolstring""OTLP protocol (OTEL_EXPORTER_OTLP_PROTOCOL). Also used to derive LiteLLM's exporter when litellmProxy.telemetry.otlpExporter is empty.

IngressRoute (Traefik)​

KeyTypeDefaultDescription
ingressRoute.enabledbooleanfalseCreate a Traefik IngressRoute that matches Host(<url hostname>) and points at the API gateway Service on port 8080.
ingressRoute.namestring"default-ingress"Name of the IngressRoute resource. Not present in the default values.yaml.
ingressRoute.entryPointsarray["websecure"]Traefik entry points to attach the route to.
ingressRoute.middlewaresarray[]Additional Traefik middleware references.
ingressRoute.tlsEnabledbooleanfalseAdd a tls block to the IngressRoute.
ingressRoute.tlsobject{}Content of the tls block. ingressRoute.tls.secretName is prefixed with namespacePrefix when set.
ingressRoute.hoststring""Not read by the chart templates: the host is always derived from url.

Secrets​

The chart can manage secret creation inline. When enabled: false (default), the Secret must exist in the namespace before install whenever the component that reads it is enabled; the chart checks for it at render time.

access-control keys​

Used when accessControl.enabled, accessControl.config.externalContext.enabled and accessControl.config.externalContext.authorization.enabled are true.

KeyTypeDefaultDescription
secrets.accessControlKeys.enabledbooleanfalseWhen true, the chart creates a Secret named access-control-keys.
secrets.accessControlKeys.privateKeystring""PEM private key of the accessControl OIDC client, stored as key.pem. Required when tokenAuthMethod is private_key_jwt.
secrets.accessControlKeys.clientSecretstring""Client secret of the accessControl OIDC client, stored as client-secret. Required when tokenAuthMethod is client_secret_post or client_secret_basic.

litellm-proxy keys​

Required when litellmProxy.enabled is true (default).

KeyTypeDefaultDescription
secrets.litellmProxyKeys.enabledbooleanfalseWhen true, the chart creates a Secret named litellm-proxy-keys.
secrets.litellmProxyKeys.postgresConnectionStringstring""Connection string of the external PostgreSQL database that holds LiteLLM's state (virtual keys, spend, models). Stored as postgresConnectionString.
secrets.litellmProxyKeys.masterKeystring""Admin key that mints every other virtual key. Stored as masterKey. The LiteLLM admin API is public on the API gateway, so this key is its only protection.
secrets.litellmProxyKeys.saltKeystring""Encrypts the provider credentials stored by LiteLLM. Stored as saltKey. Never rotate it once models are registered.
secrets.litellmProxyKeys.providerCredentialsobject{}Provider API keys, as <ENV_VAR_NAME>: <value>. Each entry is added to the Secret and injected as an environment variable of the LiteLLM pod, to be referenced from litellmProxy.config.model_list as os.environ/<ENV_VAR_NAME>. Injected only when the chart creates the Secret.

temporal keys​

Required when temporal.enabled is true (default). One external PostgreSQL server backs both the default and visibility stores.

KeyTypeDefaultDescription
secrets.temporalKeys.enabledbooleanfalseWhen true, the chart creates a Secret named temporal-keys (as a pre-install/pre-upgrade hook, so the schema Job can read it).
secrets.temporalKeys.postgresHoststring""PostgreSQL host. Stored as postgresHost.
secrets.temporalKeys.postgresPortstring"5432"PostgreSQL port. Stored as postgresPort.
secrets.temporalKeys.postgresUserstring""PostgreSQL user. Stored as postgresUser.
secrets.temporalKeys.postgresPasswordstring""PostgreSQL password. Stored as postgresPassword.

temporal-ui keys​

Required when temporalUi.auth.enabled is true.

KeyTypeDefaultDescription
secrets.temporalUiKeys.enabledbooleanfalseWhen true, the chart creates a Secret named temporal-ui-keys.
secrets.temporalUiKeys.authClientSecretstring""Client secret of the confidential client used by the Temporal UI login. Stored as authClientSecret.

memory-service keys​

Required when memoryService.enabled is true.

KeyTypeDefaultDescription
secrets.memoryServiceKeys.enabledbooleanfalseWhen true, the chart creates a Secret named memory-service-keys.
secrets.memoryServiceKeys.postgresConnectionStringstring""Connection string of a PostgreSQL database dedicated to the Memory service, with the vector extension available. Stored as postgresConnectionString.
secrets.memoryServiceKeys.litellmApiKeystring""LiteLLM virtual key, stored as litellmApiKey. Needed only when memoryService.config.aiGateway.enabled is true.

secret-store-service keys​

Used by a secretStoreService deployed by this chart that logs in to an external store with an AppRole.

KeyTypeDefaultDescription
secrets.secretStoreServiceKeys.enabledbooleanfalseWhen true and at least one of the two values is set, the chart creates a Secret named secret-store-service-keys.
secrets.secretStoreServiceKeys.storeRoleIdstring""AppRole role ID. Stored as storeRoleId.
secrets.secretStoreServiceKeys.storeSecretIdstring""AppRole secret ID. Stored as storeSecretId.

openbao keys​

Required when openbao.enabled is true.

KeyTypeDefaultDescription
secrets.openbaoKeys.enabledbooleanfalseWhen true, the chart creates a Secret named openbao-approle.
secrets.openbaoKeys.approle.roleIdstring""AppRole role ID pushed into OpenBao by the bootstrap sidecar. Stored as roleId. Any long random string (openssl rand -hex 32).
secrets.openbaoKeys.approle.secretIdstring""AppRole secret ID. Stored as secretId.

When openbao.enabled and secrets.openbaoKeys.enabled are both true, secretStoreService reads the pair from openbao-approle.

langfuse keys​

Required when langfuse.enabled is true. One Secret, langfuse-keys, for all five Langfuse workloads.

KeyTypeDefaultDescription
secrets.langfuseKeys.enabledbooleanfalseWhen true, the chart creates the langfuse-keys Secret.
secrets.langfuseKeys.postgresConnectionStringstring""Connection string of the external PostgreSQL database owned by Langfuse.
secrets.langfuseKeys.nextauthSecretstring""Session cookie secret (openssl rand -base64 32).
secrets.langfuseKeys.saltstring""Salt of the API key hashes. Changing it invalidates every project key issued.
secrets.langfuseKeys.encryptionKeystring""Exactly 64 hexadecimal characters (openssl rand -hex 32). Encrypts the provider credentials Langfuse stores. Never rotate it in place.
secrets.langfuseKeys.clickhousePasswordstring""ClickHouse password.
secrets.langfuseKeys.s3AccessKeyIdstring""S3 access key ID. Also MinIO's root user when MinIO is deployed by the chart.
secrets.langfuseKeys.s3SecretAccessKeystring""S3 secret access key. Also MinIO's root password when MinIO is deployed by the chart.
secrets.langfuseKeys.redisPasswordstring""Redis password.
secrets.langfuseKeys.initProjectPublicKeystring""Public key of the initial project (pk-lf-...).
secrets.langfuseKeys.initProjectSecretKeystring""Secret key of the initial project (sk-lf-...).
secrets.langfuseKeys.initUserPasswordstring""Password of the initial user. Required when langfuse.config.init.userEmail is set.

otel-collector keys​

KeyTypeDefaultDescription
secrets.otelCollectorKeys.enabledbooleanfalseUse langfuseOtlpBasic for the collector's Langfuse credential.
secrets.otelCollectorKeys.langfuseOtlpBasicstring""Base64 of publicKey:secretKey of a Langfuse project. When empty, it is derived from secrets.langfuseKeys.initProjectPublicKey and initProjectSecretKey. Stored in the otel-collector-keys Secret.

Global image settings​

KeyTypeDefaultDescription
global.labelsobject{}Additional labels added to all resources.
global.annotationsobject{}Additional annotations added to all resources.
global.imagePullPolicystring"IfNotPresent"Default image pull policy, used when a component's image.pullPolicy is empty.
global.imagePullSecret.enabledbooleanfalseWhen true, every pod references the image pull secret named global.imagePullSecret.name.
global.imagePullSecret.namestring""Name of the image pull secret. The chart creates a kubernetes.io/dockerconfigjson Secret with this name when global.imageCredentials.registry, .username, .password and .email are all set.
global.imageCredentials.registrystring""Container registry hostname. Also used as the fallback registry for any image that does not set its own image.registry.
global.imageCredentials.usernamestring""Registry username. Typically injected at deploy time via --set.
global.imageCredentials.passwordstring""Registry password or token. Typically injected at deploy time via --set.
global.imageCredentials.emailstring""Email associated with the registry credentials.
global.imageCredentials.namestring""Not read by the chart templates.

Service accounts​

Each component gets its own dedicated ServiceAccount, created by default. Applies to: accessControl, apiGateway, litellmProxy, temporalFrontend, temporalHistory, temporalMatching, temporalWorker, temporalAdminTools, temporalUi, temporalSchemaSetup, temporalNamespaceSetup, doclingService, memoryService, otelCollector, prometheus, secretStoreService.

KeyTypeDefaultDescription
serviceAccounts.<service>.enabledbooleantrueCreate a ServiceAccount for <service>. serviceAccounts.secretStoreService.enabled must stay true when secretStoreService.config.auth.method is jwt.

Common component fields​

The Deployment-based components (apiGateway, accessControl, litellmProxy, doclingService, memoryService, secretStoreService, otelCollector, temporalUi, and the Temporal roles temporalFrontend, temporalHistory, temporalMatching, temporalWorker) share the following fields. The Temporal roles take their image from temporal.image.

KeyTypeDescription
<service>.enabledbooleanEnable or disable the component. The Temporal roles follow temporal.enabled.
<service>.replicaCountintegerNumber of pod replicas.
<service>.logLevelstringLog level, where supported.
<service>.image.registrystringContainer registry.
<service>.image.repositorystringImage repository path.
<service>.image.tagstringImage tag.
<service>.image.pullPolicystringImage pull policy. Empty uses global.imagePullPolicy.
<service>.resources.requests.cpustringCPU request.
<service>.resources.requests.memorystringMemory request.
<service>.resources.limits.cpustringCPU limit.
<service>.resources.limits.memorystringMemory limit.
<service>.envarrayAdditional environment variables, as full Kubernetes env entries.
<service>.autoscaling.enabledbooleanEnable Horizontal Pod Autoscaler.
<service>.autoscaling.minReplicasintegerMinimum replicas for HPA.
<service>.autoscaling.maxReplicasintegerMaximum replicas for HPA.
<service>.autoscaling.targetCPUUtilizationPercentageintegerTarget CPU utilization for HPA scaling.

Component defaults​

ComponentenabledImage (registry/repository:tag)Requests (CPU / memory)Limits (CPU / memory)
apiGatewaytruenexus.mia-platform.eu/cache/envoyproxy/envoy:v1.36.250m / 64Mi500m / 256Mi
accessControlfalsenexus.mia-platform.eu/platform/auth/access-control/ext-authz:0.2.2-nocache100m / 128Mi500m / 256Mi
litellmProxytruedocker.litellm.ai/berriai/litellm:v1.103.1250m / 768Mi1000m / 2Gi
doclingServicetruequay.io/docling-project/docling-serve-cpu:v1.36.01 / 1Gi4 / 6Gi
memoryServicefalsenexus.mia-platform.eu/ai-services/memory-service:0.1.050m / 128Mi500m / 512Mi
secretStoreServicefalsenexus.mia-platform.eu/ai-resources/secret-store-service:0.1.150m / 64Mi500m / 256Mi
temporalFrontend, temporalHistory, temporalMatching, temporalWorkerfollows temporal.enabled (true)docker.io/temporalio/server:1.32.0150m / 256Mi500m / 512Mi
temporalUitruedocker.io/temporalio/ui:2.55.025m / 64Mi250m / 256Mi
temporalAdminToolstruedocker.io/temporalio/admin-tools:1.32.025m / 64Mi250m / 256Mi
otelCollectorfalsedocker.io/otel/opentelemetry-collector-contrib:0.139.0100m / 128Mi1 / 512Mi
prometheusfalsedocker.io/prom/prometheus:v3.6.0100m / 512Mi1 / 2Gi
openbaofalsenexus.mia-platform.eu/flow/openbao:0.1.050m / 64Mi500m / 256Mi

apiGateway​

The Envoy API gateway. Routes traffic to LiteLLM Proxy, the Temporal UI, Docling, Memory, the secret store and Langfuse, and applies jwt_authn and ext_authz on the gated routes.

KeyTypeDefaultDescription
apiGateway.logLevelstring"info"Envoy log level.
apiGateway.authorizationServer.audiencesarray[]JWT audiences accepted by jwt_authn. Must not be empty when authorizationServer.enabled is true and any of doclingService, memoryService, secretStoreService or prometheus is enabled. Set ["ai-services-api"] on a Mia-Platform installation.
apiGateway.configobject{}Advanced Envoy configuration. apiGateway.config.clusterOverrides.<cluster> overrides the address of an upstream cluster, intended for local development.
apiGateway.maxBodyBytesinteger10485760Maximum allowed request body size in bytes (default: 10 MiB).

accessControl​

OPA-based ext-authz service behind the API gateway's ext_authz filter. Loads the ai_services policy bundle shipped with the chart. Requires apiGateway.enabled, authorizationServer.enabled and authorizationServer.issuer.

KeyTypeDefaultDescription
accessControl.enabledbooleanfalseEnable Access Control. Required by doclingService, memoryService and secretStoreService.
accessControl.envarrayGOMAXPROCS=2, GOMEMLIMIT=230MiB, TOKIO_WORKER_THREADS=2Environment variables pinning the thread pools of the two runtimes in the container.
accessControl.config.externalContext.enabledbooleantrueResolve the caller's external context against the authorization service in rbacAuthzServiceUrl or authzUrl.
accessControl.config.externalContext.authorization.enabledbooleantrueAuthenticate to the authorization service as an OIDC client. Requires externalContext.enabled.
accessControl.config.externalContext.authorization.clientIdstring"ai-services-access-control"OIDC client ID registered in Keycloak for accessControl.
accessControl.config.externalContext.authorization.tokenAuthMethodstring"private_key_jwt"Token endpoint authentication method. Options: private_key_jwt, client_secret_post, client_secret_basic. With private_key_jwt the public key is published at <url>/.well-known/jwks.json.

litellmProxy​

LiteLLM Proxy, the AI gateway. Served under basePath on the API gateway, with every route public: LiteLLM authenticates calls with its own virtual keys. Requires the litellm-proxy-keys Secret.

KeyTypeDefaultDescription
litellmProxy.enabledbooleantrueEnable LiteLLM Proxy.
litellmProxy.basePathstring"/litellm"Path prefix on the API gateway. Must start with /.
litellmProxy.logLevelstring"info"LiteLLM log level.
litellmProxy.extraEnvobject{}Additional environment variables as a NAME: value map.
litellmProxy.configobjectsee belowRaw LiteLLM proxy configuration (LiteLLM docs).
litellmProxy.config.model_listarray[]Models declared in configuration. Provider credentials are referenced as os.environ/<ENV_VAR_NAME> (see secrets.litellmProxyKeys.providerCredentials).
litellmProxy.config.litellm_settings.drop_paramsbooleantrueLiteLLM drop_params setting.
litellmProxy.config.general_settings.store_model_in_dbbooleantrueLets holders of an admin or virtual key register models through the proxy's API, stored in LiteLLM's database.
litellmProxy.config.general_settings.forward_client_headers_to_llm_apibooleantrueForward the caller's headers to the upstream provider.
litellmProxy.config.general_settings.forward_llm_provider_auth_headersbooleantrueForward the caller's provider auth headers (the caller's provider key wins over the configured one).
litellmProxy.modelCostMap.enabledbooleantrueServe the curated model cost map shipped with the chart from an nginx sidecar. It sets both the model prices the proxy bills and the list of models offered by the AI Foundry model form. When false, the proxy uses LiteLLM's bundled prices.
litellmProxy.modelCostMap.shrinkRatiostring"0.11"Minimum ratio between the size of the curated map and LiteLLM's bundled one. Must be a fraction in (0, 1].
litellmProxy.modelCostMap.imageobjectdocker.io/nginxinc/nginx-unprivileged:1.31.3-alpineImage of the cost map sidecar.
litellmProxy.modelCostMap.resourcesobjectrequests 10m CPU / 16Mi memory, limits 100m CPU / 64Mi memoryResources of the cost map sidecar.
litellmProxy.telemetry.serviceNamestring"litellm"OTel service.name reported by the proxy. Must not be empty: downstream attribution rules match litellm.
litellmProxy.telemetry.otlpEndpointstring""OTLP endpoint of the proxy. When empty, the in-chart otelCollector is used if enabled, otherwise telemetry.otelExporterOtlpEndpoint.
litellmProxy.telemetry.otlpExporterstring""otlp_http or otlp_grpc. Empty derives it from the endpoint and telemetry.otelExporterOtlpProtocol.
litellmProxy.telemetry.otelV2booleantrueEnable LiteLLM's OTel v2 integration, which emits the gen_ai.* attributes and GenAI metrics.
litellmProxy.telemetry.captureMessageContentstring"span_only"Capture prompts and completions on spans. no_content disables it; span_and_event also emits them as span events.
litellmProxy.telemetry.environmentNamestring""Value of the deployment.environment.name resource attribute. Empty leaves it unset.

doclingService​

Document conversion service, reachable at /api/docling/ through the API gateway behind jwt_authn and ext_authz.

KeyTypeDefaultDescription
doclingService.enabledbooleantrueEnable Docling. Requires authorizationServer.enabled, accessControl.enabled and a non-empty apiGateway.authorizationServer.audiences.
doclingService.envarrayTORCHINDUCTOR_CACHE_DIR=/tmp/torchinductor_cacheAdditional environment variables.
doclingService.autoscaling.minReplicasinteger10 requires the HPAScaleToZero feature gate on the cluster.

memoryService​

Long-term memory owned by a person and shareable with named colleagues. When enabled, the API gateway adds the /api/memories and /memory/mcp routes behind jwt_authn and ext_authz, plus the public /.well-known/oauth-protected-resource/memory/mcp document. Requires the memory-service-keys Secret.

KeyTypeDefaultDescription
memoryService.enabledbooleanfalseEnable the Memory service.
memoryService.logLevelstring"INFO"Log level.
memoryService.config.databaseSchemastring""Put the tables in a named schema instead of public.
memoryService.config.embeddingModelstring""Embedding model. Empty leaves search on keyword ranking.
memoryService.config.embeddingDimensionsinteger1536Output width of the embedding model. Must match the model.
memoryService.config.aiGateway.enabledbooleanfalseCompute embeddings through an AI gateway. Requires secrets.memoryServiceKeys.litellmApiKey.
memoryService.config.aiGateway.baseUrlstring""AI gateway URL. Empty defaults to this chart's LiteLLM Proxy (http://litellm-proxy).
memoryService.config.aiGateway.modelPrefixstring"litellm_proxy"Model prefix used for calls through the gateway.
memoryService.config.mcpEnabledbooleantrueEnable the MCP endpoint, published at /memory/mcp.

secretStoreService​

Central store of the tenants' LiteLLM virtual keys (the gateway-keys collection). Reachable through the API gateway only at /api/secrets/gateway-keys/{key} and /api/secrets/gateway-keys/{key}/presence.

KeyTypeDefaultDescription
secretStoreService.enabledbooleanfalseEnable the secret store service. Requires the authentication chain and a store (config.storeAddr or openbao.enabled).
secretStoreService.config.modestring"both"read, write or both.
secretStoreService.config.storeAddrstring""OpenBao or Vault address. Empty defaults to the in-chart openbao when enabled.
secretStoreService.config.storeKvMountstring"kv"KV mount of the store.
secretStoreService.config.storeNamespacestring""X-Vault-Namespace sent on every call. Empty for a store without namespaces.
secretStoreService.config.auth.methodstring"approle"approle (role/secret pair) or jwt (the pod's own ServiceAccount token). jwt cannot be combined with openbao.enabled.
secretStoreService.config.auth.jwt.mountstring"jwt"JWT auth mount on the store. Required with auth.method: jwt.
secretStoreService.config.auth.jwt.rolestring""Role on the store. Required with auth.method: jwt.
secretStoreService.config.auth.jwt.audiencestring"openbao"Audience of the projected ServiceAccount token. Must match the role's bound audiences.
secretStoreService.config.auth.jwt.expirationSecondsinteger600Lifetime of the projected token.
secretStoreService.config.auth.jwt.mountPathstring"/var/run/secrets/openbao"Mount path of the projected token.

openbao​

OpenBao secret store, single replica with file storage and a bootstrap sidecar that initializes and unseals it. The unseal key is written to an openbao-keys Secret that Helm does not manage. Not routed by the API gateway. The image is amd64 only.

KeyTypeDefaultDescription
openbao.enabledbooleanfalseDeploy OpenBao. Requires secrets.openbaoKeys or an existing openbao-approle Secret.
openbao.service.portinteger80Service port. The container listens on 8200.
openbao.securityContextobjectrunAsUser: 100, runAsGroup: 1000, fsGroup: 1000Pod security context. Must match the image's user.
openbao.persistence.sizestring"1Gi"Volume size.
openbao.persistence.storageClassNamestring""StorageClass. Empty uses the cluster default.
openbao.config.uibooleantrueEnable the OpenBao UI.
openbao.config.auditToStdoutbooleantrueWrite an audit log of every request to the pod logs.
openbao.config.extraConfigstring""Appended verbatim to config.hcl.
openbao.bootstrap.tokenTtlstring"1h"TTL of the tokens issued by the AppRole.
openbao.bootstrap.tokenMaxTtlstring"24h"Maximum TTL of the tokens issued by the AppRole.
openbao.bootstrap.unsealIntervalinteger10Seconds between checks for a sealed server.
openbao.bootstrap.resourcesobjectrequests 10m CPU / 32Mi memory, limits 200m CPU / 128Mi memoryResources of the bootstrap sidecar.

langfuse​

Langfuse AI observability: web, worker, ClickHouse, MinIO and Redis. PostgreSQL is always external. The /langfuse/ route on the API gateway serves the REST API only; the Langfuse UI needs a host of its own, which this chart does not create.

KeyTypeDefaultDescription
langfuse.enabledbooleanfalseDeploy Langfuse. Requires secrets.langfuseKeys or an existing langfuse-keys Secret.
langfuse.imageobjectdocker.io/langfuse/langfuse:4.14.0Web image. Keep it on the same version as workerImage.
langfuse.workerImageobjectdocker.io/langfuse/langfuse-worker:4.14.0Worker image.
langfuse.web.*, langfuse.worker.*object1 replica, requests 100m / 512Mi, limits 1000m / 2GireplicaCount, resources, env, autoscaling of the web and worker Deployments. langfuse.worker.tmpSizeLimit defaults to "1Gi".
langfuse.config.nextauthUrlstring""Required when Langfuse is enabled. URL a browser reaches Langfuse at.
langfuse.config.logLevelstring"info"Log level.
langfuse.config.logFormatstring"text"Log format.
langfuse.config.telemetryEnabledbooleanfalseLangfuse usage telemetry.
langfuse.config.signUpDisabledbooleantrueDisable self sign-up.
langfuse.config.experimentalFeaturesbooleanfalseLangfuse experimental features.
langfuse.config.smtp.connectionUrlstring""SMTP connection URL. Requires fromAddress.
langfuse.config.smtp.fromAddressstring""Sender address.
langfuse.config.init.orgIdstring"mia-platform"Initial organization ID, applied on first start.
langfuse.config.init.orgNamestring"Mia-Platform"Initial organization name.
langfuse.config.init.projectIdstring"ai-foundry"Initial project ID.
langfuse.config.init.projectNamestring"AI Foundry"Initial project name.
langfuse.config.init.userEmailstring""Initial user email. Empty skips creating the user.
langfuse.config.init.userNamestring""Initial user name.
langfuse.config.clickhouse.deploybooleantrueDeploy a single-node ClickHouse. false requires clickhouse.host.
langfuse.config.clickhouse.imageobjectdocker.io/clickhouse/clickhouse-server:26.6ClickHouse image.
langfuse.config.clickhouse.hoststring""External ClickHouse host. Empty means the in-chart one.
langfuse.config.clickhouse.httpPortinteger8123HTTP port.
langfuse.config.clickhouse.nativePortinteger9000Native port.
langfuse.config.clickhouse.databasestring"default"Database.
langfuse.config.clickhouse.userstring"clickhouse"User.
langfuse.config.clickhouse.clusterEnabledbooleanfalseMust stay false with deploy: true. Set true only with a host naming a real ClickHouse cluster.
langfuse.config.clickhouse.autoMigratebooleantrueRun ClickHouse migrations automatically.
langfuse.config.clickhouse.persistence.sizestring"20Gi"Volume size.
langfuse.config.clickhouse.persistence.storageClassNamestring""StorageClass.
langfuse.config.clickhouse.logsSizeLimitstring"1Gi"Size limit of the logs volume.
langfuse.config.clickhouse.resourcesobjectrequests 250m / 1Gi, limits 2000m / 4GiResources.
langfuse.config.s3.deploybooleantrueDeploy MinIO. false requires s3.endpoint.
langfuse.config.s3.imageobjectdocker.io/minio/minio:RELEASE.2025-04-22T22-12-26ZMinIO image.
langfuse.config.s3.endpointstring""External S3-compatible endpoint. Empty means the in-chart MinIO.
langfuse.config.s3.bucketstring"langfuse"Bucket.
langfuse.config.s3.regionstring"auto"Region.
langfuse.config.s3.forcePathStylebooleantruePath-style addressing.
langfuse.config.s3.batchExportEnabledbooleanfalseLangfuse batch export.
langfuse.config.s3.persistence.sizestring"20Gi"Volume size.
langfuse.config.s3.persistence.storageClassNamestring""StorageClass.
langfuse.config.s3.resourcesobjectrequests 100m / 256Mi, limits 1000m / 1GiResources.
langfuse.config.redis.deploybooleantrueDeploy Redis (ingestion queue, maxmemory-policy noeviction). false requires redis.host.
langfuse.config.redis.imageobjectdocker.io/redis:8.4.0Redis image.
langfuse.config.redis.hoststring""External Redis host.
langfuse.config.redis.portinteger6379Redis port.
langfuse.config.redis.tlsEnabledbooleanfalseTLS to Redis.
langfuse.config.redis.maxMemorystring"512mb"Redis maxmemory. Size it for the queue depth to survive.
langfuse.config.redis.extraConfigstring""Additional Redis configuration.
langfuse.config.redis.persistence.sizestring"8Gi"Volume size.
langfuse.config.redis.persistence.storageClassNamestring""StorageClass.
langfuse.config.redis.resourcesobjectrequests 100m / 128Mi, limits 500m / 768MiResources.

otelCollector​

OpenTelemetry Collector that sends traces to Langfuse and metrics to Prometheus. Requires a Langfuse credential (secrets.otelCollectorKeys or the initial project keys of secrets.langfuseKeys), a traces destination and a metrics destination.

KeyTypeDefaultDescription
otelCollector.enabledbooleanfalseDeploy the collector.
otelCollector.logLevelstring"warn"Collector log level.
otelCollector.config.langfuse.tracesEndpointstring""Traces destination. Empty defaults to the in-chart Langfuse web service.
otelCollector.config.prometheus.metricsEndpointstring""Metrics destination (a Prometheus OTLP receiver). Empty defaults to the in-chart Prometheus.
otelCollector.configOverridestring""Replaces the collector configuration shipped with the chart.

prometheus​

Prometheus with the OTLP receiver enabled. Scrape-only on the cluster network: not routed by the API gateway.

KeyTypeDefaultDescription
prometheus.enabledbooleanfalseDeploy Prometheus. Requires otelCollector.enabled or config.extraScrapeConfigs.
prometheus.logLevelstring"warn"Log level.
prometheus.config.retentionTimestring"15d"TSDB retention.
prometheus.config.externalLabelsobjectstack: ai-servicesglobal.external_labels.
prometheus.config.promoteResourceAttributesarrayservice.name, service.namespace, service.instance.id, mia.playbook, mia.tenant, mia.organizationOTLP resource attributes promoted to labels.
prometheus.config.extraScrapeConfigsarray[]Additional scrape jobs.
prometheus.configOverridestring""Replaces the Prometheus configuration shipped with the chart.
prometheus.persistence.sizestring"20Gi"Volume size.
prometheus.persistence.storageClassNamestring""StorageClass.
prometheus.securityContextobjectrunAsUser: 65534, runAsGroup: 65534, fsGroup: 65534Pod security context.

temporal​

Settings shared by the Temporal server roles (temporalFrontend, temporalHistory, temporalMatching, temporalWorker) and by the schema and namespace setup Jobs. Requires the temporal-keys Secret.

KeyTypeDefaultDescription
temporal.enabledbooleantrueDeploy Temporal.
temporal.imageobjectdocker.io/temporalio/server:1.32.0Server image, shared by all four roles.
temporal.adminToolsImageobjectdocker.io/temporalio/admin-tools:1.32.0Image of the setup Jobs and of temporalAdminTools.
temporal.logLevelstring"info"Temporal log level.
temporal.numHistoryShardsinteger512Number of history shards. Fixed at cluster bootstrap: it cannot be changed afterwards.
temporal.persistence.databaseNamestring"temporal"Default store database.
temporal.persistence.visibilityDatabaseNamestring"temporal_visibility"Visibility store database (PostgreSQL visibility only).
temporal.persistence.sql.createDatabasebooleantrueCreate the two databases in the schema setup Job. Set false when they are provisioned beforehand by an admin user.
temporal.persistence.sql.tls.enabledbooleanfalseTLS to PostgreSQL.
temporal.persistence.sql.tls.hostVerificationEnabledbooleanfalseVerify the PostgreSQL host certificate.
temporal.persistence.sql.tls.serverNamestring""TLS server name.
temporal.dynamicConfigobject{}Temporal dynamic configuration.
temporal.namespacesarray[{name: default, retention: "72h"}]Temporal namespaces created by the temporal-namespace-setup Job after install and upgrade.

temporalAdminTools​

temporal CLI pod for operational tasks (kubectl exec). Not exposed by any Service or route.

KeyTypeDefaultDescription
temporalAdminTools.enabledbooleantrueDeploy the admin tools pod (only when temporal.enabled is true).

temporalUi​

Temporal Web UI, served under basePath on the API gateway. The route is public at the gateway; temporalUi.auth makes the UI run its own OIDC login.

KeyTypeDefaultDescription
temporalUi.enabledbooleantrueDeploy the Temporal UI. Requires temporal.enabled.
temporalUi.basePathstring"/temporal"Path prefix on the API gateway. Must start with /.
temporalUi.auth.enabledbooleanfalseRun the OIDC authorization-code flow in the UI. Requires auth.clientId, a realm (auth.providerUrl or authorizationServer.issuer) and the temporal-ui-keys Secret. Without it, the UI is open to anyone who can reach url.
temporalUi.auth.labelstring"Mia-Platform"Label of the UI's own login page.
temporalUi.auth.providerUrlstring""Realm used for OIDC discovery. Empty uses authorizationServer.issuer.
temporalUi.auth.issuerUrlstring""Override of the expected iss. Normally empty.
temporalUi.auth.clientIdstring""Confidential OIDC client of the UI.
temporalUi.auth.callbackUrlstring""Callback URL. Empty derives <url><basePath>/auth/sso/callback.
temporalUi.auth.scopesarray["openid", "profile", "email"]Requested scopes.
temporalUi.auth.redirectToProviderbooleantrueRedirect straight to the realm instead of showing the UI's provider picker.