How to Upgrade the AI Foundry chart
To upgrade the ai-foundry chart, update the chart version and run helm upgrade.
The chart follows semver: breaking changes are introduced only in major version bumps. Minor releases add new optional configuration; patch releases contain only fixes. Always review the changelog before upgrading across a major boundary.
Direct chart upgrade
If you installed the chart directly:
helm repo update
helm upgrade ai-foundry mia-platform/ai-foundry \
--namespace ai-foundry \
--values values.yaml \
--atomic \
--timeout 5m
Upgrade via the ai-foundry-deployment wrapper
If you use the ai-foundry-deployment wrapper repository, update the pinned chart version in Chart.yaml:
dependencies:
- name: ai-foundry
alias: aiFoundry
version: "~0.X" # ← bump to the new target version constraint
repository: "https://nexus.mia-platform.eu/repository/helm-internal/"
Then update and deploy:
helm dependency update
helm upgrade ai-foundry . \
--namespace ai-foundry \
--values values/<env>.yaml \
--atomic \
--timeout 5m
Version-specific upgrade notes
From 0.4.83-0 to 0.5.0-preview.4 (Mia-Platform v15.1.1 to v15.2.0)
This version moves the AI gateway (LiteLLM), the workflow engine (Temporal), document conversion (Docling) and the memory service to the new AI Services product, adds a credential store (secretStoreService) in front of OpenBao, and adds new services that are enabled by default. The chart validates the values at render time and refuses to render incomplete configurations.
-
Upgrade the Realm Management chart to
0.1.47withproducts.aiFoundry: trueandproducts.aiServices: true. -
Upgrade Homepage & RBAC to
0.4.6. AI Foundry requires its authorization API: make sureauthzUrlandauthzClientId: "authz-api"point to it. -
Install AI Services in its own namespace.
-
Point
adkBeApp.config.litellmProxyApiBaseat the LiteLLM gateway of AI Services, and setsecrets.adkBeAppKeys.litellmProxyApiKeyif your gateway needs one.adkBeApp.config.aiGatewayEnableddefaults totrue; to call the models directly, set it tofalse. RemoveadkBeApp.config.googleCloudProject,googleCloudLocation,googleGenaiUseVertexai,compactionSummarizerModelandsessionNamerModel: they are no longer read. Remove alsosecrets.adkBeAppKeys.googleApplicationCredentials: the key has been removed from the chart andhelm upgradefails while it is set.The models of the system playbooks (session namer, follow-ups, feedback summaries, compaction, memory extraction, Insights narration) are now set by the new top-level
systemAgentModel, which replacescompactionSummarizerModelandsessionNamerModel. When it is empty, the defaultclaude-haiku-5-5is used. The model must be served by the AI gateway: register it there, or setsystemAgentModelto a model the gateway already serves.The models of the built-in assistants (AI Foundry assistant, Catalog assistant, documentation assistant, resource generator) are set by the new top-level
assistantAgentModel. When it is empty, the defaultclaude-sonnet-5-5is used, which is seeded as a Model on PaaS only: on-premises, setassistantAgentModelto a model of every tenant served by the AI gateway. -
Provide the database credential of the new
ai-foundry-beservice: setsecrets.aiFoundryBeKeys.enabled: truewithpostgresConnectionString, or create anai-foundry-be-keysSecret. It must reach the same database assecrets.adkBeAppKeys.postgresConnectionString, written aspostgresql://without the+asyncpgdriver suffix thatadk-be-appneeds. SetaiFoundryBe.config.litellmBaseUrlto the LiteLLM gateway of AI Services (for examplehttps://<ai-services host>/ai-gateway/): without it the model providers, the model catalogue and the observability do not work. It needslitellmAdminKey(the LiteLLM master key of AI Services) andmcpConsentKeySecret(a random secret, kept stable over time) in the same Secret, and bothauthorizationServer.issuerandapiGateway.authorizationServer.audiencesset (the default audience isai-foundry-api).aiFoundryBffrequiresaiFoundryBe: the chart refuses to render withaiFoundryBffenabled andaiFoundryBedisabled. -
Configure Agentic Workflows (
aiFoundryWorkflows, enabled by default): setaiFoundryWorkflows.config.temporalAddressto the Temporal frontend of AI Services andaiFoundryWorkflows.config.temporalNamespaceto a namespace declared intemporal.namespacesof your AI Services values, then setsecrets.aiFoundryWorkflowsKeys.enabled: truewithpostgresConnectionString, or create anai-foundry-workflows-keysSecret. To skip the feature, setaiFoundryWorkflows.enabled: false. The chart refuses to render withaiFoundryWorkflows.config.httpAllowPrivate: true. If you setaiFoundryWorkflows.config.aiServicesBaseUrl, also setauthtoolBffUrlandaiServicesClientId, disableworkspaceServicein this release and pointaiFoundryWorkflows.config.workspaceBaseUrlto the workspace service you use; otherwise the chart refuses to render. -
Configure the new
secretStoreService(enabled by default): setsecretStoreService.config.storeAddrto your OpenBao. With the defaultapproleauthentication, setsecrets.secretStoreServiceKeys.enabled: truewithstoreRoleIdandstoreSecretId, or create asecret-store-service-keysSecret. WithsecretStoreService.config.auth.method: jwt, setsecretStoreService.config.auth.jwt.role. -
Provide the database credential of the new
workspaceService(enabled by default): setsecrets.workspaceServiceKeys.enabled: truewith apostgresConnectionStringto a database of its own, or create aworkspace-service-keysSecret. To skip the feature, setworkspaceService.enabled: false. If you setworkspaceService.config.runnerNamespaceto another namespace, create it first. -
Prepare or disable the
aiFoundryProvisionerhook Job, enabled in the default values. It runs after install and upgrade to migrate the existing agentic resources of every tenant, and the release fails if the Job fails. It needs theai-foundry-bedatabase credential and, when the top-levelcatalogUrlis set, theai-foundry-provisionerKeycloak client (created by Realm Management withproducts.aiFoundry: true) inaiFoundryProvisioner.clientId, its credential insecrets.aiFoundryProvisionerKeysor anai-foundry-provisioner-keysSecret,aiFoundryProvisioner.serve.enabled: true(key pair) oraiFoundryProvisioner.keyPublishedExternally: true, andauthzUrlandauthorizationServer.issuer. Run the first upgrade withaiFoundryProvisioner.dryRun: true. To migrate the tenants by hand, setaiFoundryProvisioner.enabled: false. -
Provide the credential of the new
exchangeAiServicesclient ofauthtool-bff, setaiServicesClientId: "ai-services-api"and make sureauthtoolBffUrlis set (for examplehttp://authtool-bff): without it no token exchange happens and AI Services refuses the caller's token. Withsecrets.authtoolBffKeys.enabled: true, setsecrets.authtoolBffKeys.exchangeAiServices.privateKey(orclientSecret); if you manage theauthtool-bff-keysSecret yourself, add theexchangeAiServices-key.pemkey. If you do not call AI Services, setauthtoolBff.config.clients.exchangeAiServices: null, otherwiseauthtool-bfffails at startup. -
Remove the
doclingServiceblock andserviceAccounts.doclingServicefrom your values: they have been removed from the chart andhelm upgradefails while they are set. Then setapiGateway.docling.urlto the Docling route of AI Services. With an empty URL the/api/docling/route is not served. -
Remove the Tempo settings:
adkBeApp.config.tempoBaseUrl,aiFoundryBff.config.tempoBaseUrl,aiFoundryBff.config.tempoAllowedServices,secrets.adkBeAppKeys.tempoAuthHeaderandsecrets.aiFoundryBffKeys.tempoAuthHeader. The twotempoAuthHeaderkeys have been removed from the chart andhelm upgradefails while they are set. The chart no longer creates theai-foundry-bff-keysSecret. -
If the chart creates your image pull Secret, set
global.imagePullSecret.nameand all ofglobal.imageCredentials.registry,username,passwordandemail: the Secret is now created only when all of them are set, whileglobal.imagePullSecret.enabledstill adds the reference to every pod.
Also note:
- To keep the AI gateway keys of the tenants in the central store of AI Services, set
aiServicesSecretStoreUrltogether withauthtoolBffUrlandaiServicesClientId. - Agent memory uses the memory service of AI Services: set
adkBeApp.config.agentMemoryBaseUrlandaiFoundryBff.config.memoryBaseUrl. - Trace and metric screens now read Langfuse and Prometheus through
aiFoundryBe.config.langfuseBaseUrlandprometheusBaseUrl, andadkBeApp.config.langfuseBaseUrlandprometheusBaseUrl. WithaiFoundryBe.config.langfuseBaseUrlset, also providesecrets.aiFoundryBeKeys.langfuseAuthHeader. - The chart now also deploys
ai-foundry-mcp-server(aiFoundryMcp) and a Redis instance (redis), both enabled by default with no required configuration. aiFoundryBff.config.marketplaceNamesets the name of the plugin marketplace served by the BFF (defaultai-foundry). Give a different name to each deployment that a person may add side by side in Claude Code, and leave the long-lived deployment on the default: changing it re-keys every plugin installed from it.aiFoundryWebsite.config.links.consoleHref,catalogHref,homepageHref,miaFlowHref,dataFabricHref,p4samdHref,claudeCodeHref,githubCopilotHrefandmiaDocsHrefare no longer read by the website: the links to the other products come from the product configuration of the organization, served by Homepage & RBAC.
Langfuse and OpenBao are installed with their official Helm charts on Kubernetes, or in any other way their official guides support: see Langfuse and OpenBao. Prometheus is an optional component of AI Services, together with the OpenTelemetry Collector that feeds it: see the prometheus values. To read it, set prometheusBaseUrl to http://prometheus.<ai-services-namespace>.svc.cluster.local, and send the metrics of AI Foundry to http://otel-collector.<ai-services-namespace>.svc.cluster.local:4318. Any other Prometheus-compatible store, such as Mimir, works as well.
From 0.4.79 to 0.4.83-0 (Mia-Platform v15.0.2 to v15.1.0)
No manual action required: install the new chart version.
Also note:
- The new optional
namespacePrefixvalue (default empty) adds a<namespacePrefix>-prefix to the names of all the resources the chart creates, including the image pull Secret and the TLS Secret set iningressRoute.tls.secretName. Secrets that you create yourself must then use the prefixed names. Setting it on an existing installation renames its resources. - The name of the Traefik IngressRoute can be set with
ingressRoute.name. The default isdefault-ingress, the previous name. aiFoundryWebsite.config.oauth.scopessets the OAuth scopes shown in the git-credential-oauth setup snippet of the AI Foundry website. When it is not set, the chart usesopenid offline_accesswithisPaaS: false.