Upgrade your self-hosted Braintrust deployment to the data plane v2 series
Data plane v2.0 introduced many new features, including trace-level scorers, sandboxes for agent evals, and log indexing and full-text search.The current recommended target for the v2.x cutover is data plane v2.1.1. The module and chart versions below deploy v2.1.1 images unless noted otherwise.This guide assumes a standard Braintrust deployment using the Braintrust Terraform modules or Helm chart to manage storage, identity, networking, and generated configuration. If your deployment customizes those layers, confirm the equivalent resources, permissions, network paths, and runtime environment are in place before applying the version upgrade. Braintrust components must be able to list, read, write, and delete the generated object-storage paths, including versioned deletes where object versioning is enabled.
Avoid bundling unrelated configuration or workload changes into the upgrade window. Validate the version upgrade first, then separately ramp new automations, scoring traffic, credential rotations, or storage and network policy changes.
AWS
GCP
Azure
This guide shows the process for upgrading the Braintrust data plane to v2.x in your AWS account.
Before upgrading to data plane v2.x, you need to reach Terraform module v4.5.0 (data plane v1.1.32) and enable the efficient WAL format. v1.1.32 is the required foundation for v2.x. It ensures all Brainstore configuration is in place and verified before the upgrade.
This upgrades the data plane from v1.1.25 to v1.1.27. There are no breaking changes.
module "braintrust-data-plane" { source = "github.com/braintrustdata/terraform-aws-braintrust-data-plane?ref=v3.1.3" # ... other configuration}
terraform apply
2
Upgrade to Terraform module v4.0.0
This step upgrades the AWS provider from v5 to v6. The Terraform state file changes made in this step are irreversible. Apply at this version explicitly before proceeding, so that if anything goes wrong, it is clear whether the provider upgrade or the subsequent data plane bump caused it.
module "braintrust-data-plane" { source = "github.com/braintrustdata/terraform-aws-braintrust-data-plane?ref=v4.0.0" # ... other configuration}
terraform apply
The data plane version does not change in this step.
For straightforward deployments, you can upgrade directly from v3.1.3 to v4.5.0, skipping the v4.0.0 stop. The intermediate stop is recommended for complex deployments to isolate the AWS provider migration. If something goes wrong in a single jump, it’s harder to identify the cause.
3
Upgrade to Terraform module v4.5.0
This upgrades the data plane to v1.1.32. v4.5.0 also introduces the skip_pg_for_brainstore_objects variable used in the Topics enablement step.
module "braintrust-data-plane" { source = "github.com/braintrustdata/terraform-aws-braintrust-data-plane?ref=v4.5.0" # ... other configuration}
This must be a separate terraform apply from the v4.5.0 upgrade. If you set brainstore_wal_footer_version in the same apply, Brainstore nodes that are still rolling out won’t be able to read the new WAL format. Wait until all nodes are confirmed running v1.1.32 before applying this step.
Add brainstore_wal_footer_version = "v1" to your module and apply:
After applying, go to Settings > Brainstore and, under Brainstore configuration, check the WAL footer version (BRAINSTORE_WAL_FOOTER_VERSION) row. On v1.1.32, it will show “Unable to verify setting. Please upgrade to configure.” The setting is active; Brainstore v1.1.32 does not report it back to the control plane. It will show correctly after upgrading to v2.x.
This step is strongly recommended but not mechanically enforced. Deployments running mixed WAL formats become increasingly difficult to tune at scale.
On v1.1.32, items like WAL footer version, response cache URI, and code bundle URI are not displayed. They appear only after upgrading to v2.x. The HTTP/2 check may show a warning on v1.1.32. This resolves after upgrading.
If any of the first ten rows are not green, resolve them before proceeding. Contact Braintrust support if you need help.
With preflight complete, upgrade to Terraform module v5.2.1, which ships the recommended data plane v2.1.1 images. The WAL footer also bumps to v3 in the same apply.
If you are already on Terraform module v5.2.1 with WAL footer version set to v3, skip to Enable no-PostgreSQL mode.
Update your module to v5.2.1 and bump the WAL footer to v3. You can do both in the same apply. As long as WAL footer is already on v1 from the previous step, all v2.x nodes will understand the v3 format on startup.Because the latest module defaults no-PostgreSQL mode on, explicitly disable it for the base upgrade. Enable it only in the next step.
Before enabling no-PostgreSQL mode, validate the workloads your team relies on. For example, trace one production-shaped request, run an eval suite you use regularly, and invoke or iterate on a prompt. If you use online scorers or automations, trigger one through its normal online path. For trace-level scorers, choose one that uses full trace context. If these workflows round-trip cleanly through the data plane and look right in the UI, continue to no-PostgreSQL mode.
No-PostgreSQL mode removes PostgreSQL from the Brainstore write path, delivering higher ingestion throughput. This step is a prerequisite for Topics but does not enable them.
The switch to no-PostgreSQL mode is one-way: Once Brainstore is writing data directly, rolling back requires downtime to drain and re-ingest. Enable it only when you are ready to commit.
Keep your module on v5.2.1 and set skip_pg_for_brainstore_objects = "all":
Repeat the same workload validation after enabling no-PostgreSQL mode. If the same representative workflows round-trip cleanly through the data plane and look right in the UI, proceed to the next environment.
Topics for self-hosted deployments has specific deployment, inference, billing, and maintenance requirements, and Braintrust must grant access to your organization. Completing the full v2.x upgrade and no-PostgreSQL mode migration is a prerequisite, and the following conditions must also be met before Topics can be enabled:
Standard deployment required. Topics is supported on standard Terraform/Helm deployments only. Custom Kubernetes clusters using the Helm chart on non-standard infrastructure are not supported.
Braintrust-hosted inference required. Topics runs LLM calls on models hosted by Braintrust with Zero Data Retention (ZDR). Bring-your-own-model is not supported. Currently US-only.
Built-in models must be enabled. Self-hosted organizations have built-in models disabled by default, so no trace data leaves your network boundary unless you opt in. Because Topics depends on built-in models, an admin must explicitly enable them before Topics can run.
Pricing is not included by default. Topics usage is not covered by standard contracts. Discuss pricing with your account team before proceeding.
Ongoing maintenance required. Self-hosted Topics deployments run on a frequent-release build track separate from the tagged data plane versions and will require regular upgrades to receive the latest fixes and improvements.
If you meet all of these requirements and want to proceed, contact your account team or Braintrust support. Until Braintrust enables Topics access for your organization, the Topics page and Topics automations remain blocked, even after the upgrade and no-PostgreSQL migration are complete.
WAL footer version (requires explicit configuration)
No-PostgreSQL mode (opt-in, post-upgrade)
Variable
How to set
Since
SKIP_PG_FOR_BRAINSTORE_OBJECTS
Set skip_pg_for_brainstore_objects in module
v4.5.0
BRAINSTORE_ASYNC_SCORING_OBJECTS
Auto-derived from skip_pg_for_brainstore_objects
v4.5.0
BRAINSTORE_LOG_AUTOMATIONS_OBJECTS
Auto-derived from skip_pg_for_brainstore_objects
v4.5.0
BRAINSTORE_WAL_USE_EFFICIENT_FORMAT
Auto-enabled when either brainstore_wal_footer_version or skip_pg_for_brainstore_objects is set
v4.5.0
Setting skip_pg_for_brainstore_objects = "all" is a prerequisite for enabling Topics. The module automatically fans this value out to BRAINSTORE_ASYNC_SCORING_OBJECTS and BRAINSTORE_LOG_AUTOMATIONS_OBJECTS.
This guide shows the process for upgrading the Braintrust data plane to v2.x in your GCP account.
Before upgrading to data plane v2.x, you need to reach Helm chart v5.0.1 (data plane v1.1.32) and enable the efficient WAL format. v1.1.32 is the required foundation for v2.x. It ensures all Brainstore configuration is in place and verified before the upgrade.
This step upgrades the data plane to v1.1.32 and introduces bidirectional communication between Brainstore and API pods. Brainstore now needs to reach the API pods. The chart auto-sets BRAINSTORE_AI_PROXY_URL to http://braintrust-api:8000.
If your cluster has network policies or security rules restricting traffic between pods, allow Brainstore pods to reach the API service on port 8000 before upgrading.
This step enables fast readers, isolated Brainstore nodes that handle common UI queries. Fast readers are enabled by default with 2 replicas and use the same node spec as standard readers, increasing your cluster node count by 2. You can upgrade directly to v5.0.1 from any v4.x version.
Before upgrading, account for 2 additional fast reader nodes in your cluster capacity. If you have customized brainstore.reader settings in values.yaml, mirror those customizations to the new brainstore.fastreader block. See Configure Brainstore fast readers for details.
This must be a separate helm upgrade after confirming all pods are running v1.1.32. Setting this during the same upgrade as the version bump risks Brainstore nodes still rolling out being unable to read the new WAL format.
Set brainstoreWalFooterVersion in your helm-values.yaml:
On chart v5.1.0+, pods will automatically restart after applying the upgrade.Once the pods have cycled, go to Settings > Brainstore and, under Brainstore configuration, check the WAL footer version (BRAINSTORE_WAL_FOOTER_VERSION) row. On v1.1.32, it will show “Unable to verify setting. Please upgrade to configure.” The setting is active; Brainstore v1.1.32 does not report it back to the control plane. It will show correctly after upgrading to v2.x.
This step is strongly recommended but not mechanically enforced. Deployments running mixed WAL formats become increasingly difficult to tune at scale.
On v1.1.32, items like WAL footer version, response cache URI, and code bundle URI are not displayed. They appear only after upgrading to v2.x. The HTTP/2 check may show a warning on v1.1.32. This resolves after upgrading.
If any of the first ten rows are not green, resolve them before proceeding. Contact Braintrust support if you need help.
Data plane v2.0 introduces API pod endpoints that access GCS directly. Prior versions only accessed GCS from Brainstore pods. The GCP IAM binding must be updated to grant the braintrust-api Kubernetes service account Workload Identity access before upgrading.
If using the Braintrust GCP Terraform module, update to v1.5.2 and run terraform apply before upgrading Helm to v6.2.1. The updated module includes the binding for both the brainstore and braintrust-api service accounts.
module "braintrust-data-plane" { source = "github.com/braintrustdata/terraform-google-braintrust-data-plane?ref=v1.5.2" # ... other configuration}
With preflight complete, upgrade to Helm chart v6.2.1, which ships the recommended data plane v2.1.1 images. The WAL footer also bumps to v3 in the same apply.
If you are already on Helm chart v6.2.1 with WAL footer version set to v3, skip to Enable no-PostgreSQL mode.
Update your helm-values.yaml to bump the WAL footer to v3. Because the latest chart defaults no-PostgreSQL mode on, explicitly disable it for the base upgrade. Enable it only in the next step.
Breaking change: Chart v6.2.1 disables code function execution by default. To preserve code-backed scorers, tools, or functions on a single-org deployment, add:
api: allowCodeFunctionExecution: true
If your deployment uses ORG_NAME=* or hosts multiple Braintrust organizations, contact Braintrust before enabling code function execution.
Before enabling no-PostgreSQL mode, validate the workloads your team relies on. For example, trace one production-shaped request, run an eval suite you use regularly, and invoke or iterate on a prompt. If you use online scorers or automations, trigger one through its normal online path. For trace-level scorers, choose one that uses full trace context. If these workflows round-trip cleanly through the data plane and look right in the UI, continue to no-PostgreSQL mode.
No-PostgreSQL mode removes PostgreSQL from the Brainstore write path, delivering higher ingestion throughput. This step is a prerequisite for Topics but does not enable them.
The switch to no-PostgreSQL mode is one-way: Once Brainstore is writing data directly, rolling back requires downtime to drain and re-ingest. Enable it only when you are ready to commit.
Set skipPgForBrainstoreObjects in your helm-values.yaml:
skipPgForBrainstoreObjects: "all"
Keep Helm chart v6.2.1 and apply the updated values:
Then repeat the same workload validation after enabling no-PostgreSQL mode. If the same representative workflows round-trip cleanly through the data plane and look right in the UI, proceed to the next environment.
Topics for self-hosted deployments has specific deployment, inference, billing, and maintenance requirements, and Braintrust must grant access to your organization. Completing the full v2.x upgrade and no-PostgreSQL mode migration is a prerequisite, and the following conditions must also be met before Topics can be enabled:
Standard deployment required. Topics is supported on standard Terraform/Helm deployments only. Custom Kubernetes clusters using the Helm chart on non-standard infrastructure are not supported.
Braintrust-hosted inference required. Topics runs LLM calls on models hosted by Braintrust with Zero Data Retention (ZDR). Bring-your-own-model is not supported. Currently US-only.
Built-in models must be enabled. Self-hosted organizations have built-in models disabled by default, so no trace data leaves your network boundary unless you opt in. Because Topics depends on built-in models, an admin must explicitly enable them before Topics can run.
Pricing is not included by default. Topics usage is not covered by standard contracts. Discuss pricing with your account team before proceeding.
Ongoing maintenance required. Self-hosted Topics deployments run on a frequent-release build track separate from the tagged data plane versions and will require regular upgrades to receive the latest fixes and improvements.
If you meet all of these requirements and want to proceed, contact your account team or Braintrust support. Until Braintrust enables Topics access for your organization, the Topics page and Topics automations remain blocked, even after the upgrade and no-PostgreSQL migration are complete.
WAL footer version (requires explicit configuration)
No-PostgreSQL mode (opt-in, post-upgrade)
Variable
How to set
Since
Pods
SKIP_PG_FOR_BRAINSTORE_OBJECTS
Set skipPgForBrainstoreObjects in helm-values.yaml
v5.1.0
API
BRAINSTORE_ASYNC_SCORING_OBJECTS
Auto-derived from skipPgForBrainstoreObjects
v5.1.0
reader, writer, fastreader
BRAINSTORE_LOG_AUTOMATIONS_OBJECTS
Auto-derived from skipPgForBrainstoreObjects
v5.1.0
reader, writer, fastreader
Setting skipPgForBrainstoreObjects: "all" is a prerequisite for enabling Topics. The chart automatically fans this value out to BRAINSTORE_ASYNC_SCORING_OBJECTS and BRAINSTORE_LOG_AUTOMATIONS_OBJECTS.
This guide shows the process for upgrading the Braintrust data plane to v2.x in your Azure account.
Before upgrading to data plane v2.x, you need to reach Helm chart v5.0.1 (data plane v1.1.32) and enable the efficient WAL format. v1.1.32 is the required foundation for v2.x. It ensures all Brainstore configuration is in place and verified before the upgrade.
This step upgrades the data plane to v1.1.32 and introduces bidirectional communication between Brainstore and API pods. Brainstore now needs to reach the API pods. The chart auto-sets BRAINSTORE_AI_PROXY_URL to http://braintrust-api:8000.
If your cluster has network policies or security rules restricting traffic between pods, allow Brainstore pods to reach the API service on port 8000 before upgrading.
This step enables fast readers, isolated Brainstore nodes that handle common UI queries. Fast readers are enabled by default with 2 replicas and use the same node spec as standard readers, increasing your cluster node count by 2. You can upgrade directly to v5.0.1 from any v4.x version.
Before upgrading, account for 2 additional fast reader nodes in your cluster capacity. If you have customized brainstore.reader settings in values.yaml, mirror those customizations to the new brainstore.fastreader block. See Configure Brainstore fast readers for details.
This must be a separate helm upgrade after confirming all pods are running v1.1.32. Setting this during the same upgrade as the version bump risks Brainstore nodes still rolling out being unable to read the new WAL format.
Set brainstoreWalFooterVersion in your helm-values.yaml:
On chart v5.1.0+, pods will automatically restart after applying the upgrade.Once the pods have cycled, go to Settings > Brainstore and, under Brainstore configuration, check the WAL footer version (BRAINSTORE_WAL_FOOTER_VERSION) row. On v1.1.32, it will show “Unable to verify setting. Please upgrade to configure.” The setting is active; Brainstore v1.1.32 does not report it back to the control plane. It will show correctly after upgrading to v2.x.
This step is strongly recommended but not mechanically enforced. Deployments running mixed WAL formats become increasingly difficult to tune at scale.
On v1.1.32, items like WAL footer version, response cache URI, and code bundle URI are not displayed. They appear only after upgrading to v2.x. The HTTP/2 check may show a warning on v1.1.32. This resolves after upgrading.
If any of the first ten rows are not green, resolve them before proceeding. Contact Braintrust support if you need help.
With preflight complete, upgrade to Helm chart v6.2.1, which ships the recommended data plane v2.1.1 images. The WAL footer also bumps to v3 in the same apply.
If you are already on Helm chart v6.2.1 with WAL footer version set to v3, skip to Enable no-PostgreSQL mode.
Update your helm-values.yaml to bump the WAL footer to v3. Because the latest chart defaults no-PostgreSQL mode on, explicitly disable it for the base upgrade. Enable it only in the next step.
Breaking change: Chart v6.2.1 disables code function execution by default. To preserve code-backed scorers, tools, or functions on a single-org deployment, add:
api: allowCodeFunctionExecution: true
If your deployment uses ORG_NAME=* or hosts multiple Braintrust organizations, contact Braintrust before enabling code function execution.
Before enabling no-PostgreSQL mode, validate the workloads your team relies on. For example, trace one production-shaped request, run an eval suite you use regularly, and invoke or iterate on a prompt. If you use online scorers or automations, trigger one through its normal online path. For trace-level scorers, choose one that uses full trace context. If these workflows round-trip cleanly through the data plane and look right in the UI, continue to no-PostgreSQL mode.
No-PostgreSQL mode removes PostgreSQL from the Brainstore write path, delivering higher ingestion throughput. This step is a prerequisite for Topics but does not enable them.
The switch to no-PostgreSQL mode is one-way: Once Brainstore is writing data directly, rolling back requires downtime to drain and re-ingest. Enable it only when you are ready to commit.
Set skipPgForBrainstoreObjects in your helm-values.yaml:
skipPgForBrainstoreObjects: "all"
Keep Helm chart v6.2.1 and apply the updated values:
Then repeat the same workload validation after enabling no-PostgreSQL mode. If the same representative workflows round-trip cleanly through the data plane and look right in the UI, proceed to the next environment.
Topics for self-hosted deployments has specific deployment, inference, billing, and maintenance requirements, and Braintrust must grant access to your organization. Completing the full v2.x upgrade and no-PostgreSQL mode migration is a prerequisite, and the following conditions must also be met before Topics can be enabled:
Standard deployment required. Topics is supported on standard Terraform/Helm deployments only. Custom Kubernetes clusters using the Helm chart on non-standard infrastructure are not supported.
Braintrust-hosted inference required. Topics runs LLM calls on models hosted by Braintrust with Zero Data Retention (ZDR). Bring-your-own-model is not supported. Currently US-only.
Built-in models must be enabled. Self-hosted organizations have built-in models disabled by default, so no trace data leaves your network boundary unless you opt in. Because Topics depends on built-in models, an admin must explicitly enable them before Topics can run.
Pricing is not included by default. Topics usage is not covered by standard contracts. Discuss pricing with your account team before proceeding.
Ongoing maintenance required. Self-hosted Topics deployments run on a frequent-release build track separate from the tagged data plane versions and will require regular upgrades to receive the latest fixes and improvements.
If you meet all of these requirements and want to proceed, contact your account team or Braintrust support. Until Braintrust enables Topics access for your organization, the Topics page and Topics automations remain blocked, even after the upgrade and no-PostgreSQL migration are complete.
WAL footer version (requires explicit configuration)
No-PostgreSQL mode (opt-in, post-upgrade)
Variable
How to set
Since
Pods
SKIP_PG_FOR_BRAINSTORE_OBJECTS
Set skipPgForBrainstoreObjects in helm-values.yaml
v5.1.0
API
BRAINSTORE_ASYNC_SCORING_OBJECTS
Auto-derived from skipPgForBrainstoreObjects
v5.1.0
reader, writer, fastreader
BRAINSTORE_LOG_AUTOMATIONS_OBJECTS
Auto-derived from skipPgForBrainstoreObjects
v5.1.0
reader, writer, fastreader
Setting skipPgForBrainstoreObjects: "all" is a prerequisite for enabling Topics. The chart automatically fans this value out to BRAINSTORE_ASYNC_SCORING_OBJECTS and BRAINSTORE_LOG_AUTOMATIONS_OBJECTS.
Self-hosting releases: release notes and infrastructure requirements for each data plane version
Configuration: telemetry, network access, rate limiting, and other options
Was this page helpful?
{"docsConfig":{"theme":"aspen","$schema":"https://mintlify.com/docs.json","name":"Braintrust","description":"Braintrust is the active observability platform for instrumenting, understanding, and improving agents. By actively applying intelligence to agent traces and automatically surfacing the most critical patterns, Braintrust gives teams the visibility to understand how agents behave in production and the tools to improve them.","colors":{"primary":"#3a4af8","light":"#3a4af8","dark":"#7e95fc"},"logo":{"light":"https://mintcdn.com/braintrust/u7i5gTV-ad3TRDYt/logo/logo-light.svg?fit=max\u0026auto=format\u0026n=u7i5gTV-ad3TRDYt\u0026q=85\u0026s=23878ca308aee393dcc8c89ed8705189","dark":"https://mintcdn.com/braintrust/u7i5gTV-ad3TRDYt/logo/logo-dark.svg?fit=max\u0026auto=format\u0026n=u7i5gTV-ad3TRDYt\u0026q=85\u0026s=affa9d0eafd44b6cd7fb22c80afee713"},"favicon":"https://mintcdn.com/braintrust/ybJBbXJUYqK_eUdX/images/favicon.ico?fit=max\u0026auto=format\u0026n=ybJBbXJUYqK_eUdX\u0026q=85\u0026s=c9925befa0cf9b6279fab604eff9aad0","api":{},"navbar":{"links":[{"href":"https://braintrust.dev/contact","label":"Request demo"}],"primary":{"type":"button","label":"Start building","href":"https://braintrust.dev/app"}},"footer":{"socials":{"github":"https://github.com/braintrustdata","x":"https://x.com/braintrust","discord":"https://discord.gg/6G8s47F44X","youtube":"https://www.youtube.com/@BraintrustData"},"links":[{"header":"Resources","items":[{"label":"Pricing","href":"https://www.braintrust.dev/pricing"},{"label":"Blog","href":"https://www.braintrust.dev/blog"},{"label":"Careers","href":"https://www.braintrust.dev/careers"},{"label":"Status","href":"https://status.braintrust.dev/"}]}]},"seo":{"metatags":{"og:type":"website","og:site_name":"Braintrust documentation, API reference, and changelog","canonical":"https://docs.braintrust.dev","og:image":"https://www.braintrust.dev/og?template=docs\u0026title=Get+started"},"indexing":"all"},"fonts":{"heading":{"family":"BraintrustDisplayV2-Regular","source":"https://mintlify-assets.b-cdn.net/fonts/bt-sans-regular.woff2","format":"woff2"},"body":{"family":"Inter"}},"icons":{"library":"lucide"},"styling":{"codeblocks":{"theme":{"light":"github-light","dark":"github-dark-dimmed"}},"latex":true},"integrations":{"segment":{"key":"1BTDVX4cF2K1jWOI5Qh91XXKwgJubQ2R"}},"contextual":{"options":["copy","view","assistant","chatgpt","claude","cursor","vscode","mcp","add-mcp","perplexity","grok","aistudio","devin","devin-mcp","windsurf","download-spec","download-pdf"],"display":"header"},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"braintrust","hasAudioNarration":false,"actualSubdomain":"braintrust","customDomains":["docs.braintrust.dev"],"gitSource":{"type":"github","owner":"braintrustdata","repo":"braintrust","deployBranch":"main","contentDirectory":"docs","isPrivate":true,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6ae4fcf7ed968a0e8f391474","collectionId":"93d39e66-db84-483f-a5c3-b55d9d43d5a4","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6ae4fcf7ed968a0e8f391474"},"feedback":{"thumbs":true},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"CONTEXTUAL_FEEDBACK":{"status":"ENABLED"},"CODE_SNIPPET_FEEDBACK":{"status":"ENABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6ae4ff3d822866cf7d003d86","clientVersion":"0.0.4043","searchFilterCounts":[{"language":"default","tag":"Reference","count":241},{"language":"default","tag":"API","count":173},{"language":"default","tag":"Resources","count":171},{"language":"default","tag":"SDKs","count":127},{"language":"default","tag":"Guides","count":125},{"language":"default","tag":"Integrations","count":97},{"language":"default","tag":"Cookbook","count":44},{"language":"default","tag":"Recipes","count":43},{"language":"default","tag":"Admin","count":38},{"language":"default","tag":"CLI","count":30}]},"assistantConfig":{"enableAskAiButton":true,"enableStarterQuestions":false,"enableAskAiSearchBar":false,"deflection":{"enabled":true,"email":"support@braintrust.dev","showHelpButton":true}},"basePath":"","hasChatPermissions":true,"hasWebMcpPermissions":true,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"use-workflow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"byok-sep-25","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-updated-9-15","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[{"filePath":"style.css","content":"#content-area h1,#content-area h2,#content-area h3,#content-area h4{letter-spacing:-.01em!important;font-weight:400!important}#content-area h1{font-size:2.3rem!important;line-height:1!important}#content-area h2{font-size:1.6rem!important}#content-area h3{font-size:1.4rem!important}h5{font-family:var(--font-family-body-custom, var(--font-inter, sans-serif));font-weight:600!important}.nav-logo{height:22px}img.rounded,picture img{border:1px solid rgb(var(--gray-100))!important}[data-rmiz] img{margin-top:2em;margin-bottom:2em}.dark img.rounded,.dark picture img{border:1px solid rgb(var(--gray-900))!important}#table-of-contents{margin-top:-56px;overflow-x:hidden}#navbar button[aria-label=\"More actions\"],#navigation-items div.sticky.-top-\\[24px\\],#table-of-contents nav>h2{display:none}#table-of-contents-content{margin:0}#content-area .card h2{font-size:1.2rem!important}li[id^=\"/api-reference/\"]{font-size:.8rem;word-break:break-word}li[id^=\"/api-reference/\"] .method-nav-pill{width:54px;flex:none}li[id^=\"/api-reference/\"] .method-nav-pill span{font-size:.6rem;font-weight:500;letter-spacing:0}#content-area h1,.pagination-title{word-break:break-word}div[data-component-part=card-content]:empty{display:none}#navigation-items{padding-top:40px}#sidebar-group li a,#sidebar-group li button,.sidebar-group li a{border-radius:6px;padding-top:4px;padding-bottom:4px}#sidebar-content h5{font-weight:500!important}#content-container{gap:0}#content-container .lg\\:pl-12{padding-left:0;gap:36px}.dark #content-container{background-color:#000}#content-area{max-width:860px}@media (min-width:1024px){#content-container{padding-left:36px;padding-right:36px}}#footer a[href^=\"https://mintlify.com\"],#footer a[href^=\"https://www.mintlify.com\"]{display:none!important}header#header .sm\\:items-center{align-items:flex-start}a[aria-label^=\"Navigate to\"].-ml-10{margin-left:-28px}a[aria-label^=\"Navigate to\"].-ml-10 div:not(:hover){box-shadow:none}.font-mono{font-family:\"SF Mono\",\"Monaco\",\"Inconsolata\",\"Fira Mono\",\"Droid Sans Mono\",\"Source Code Pro\",monospace!important}:root{--primary:43 30 235;--font-jetbrains-mono:\"SF Mono\", \"Monaco\", \"Inconsolata\", \"Fira Mono\", \"Droid Sans Mono\",\n \"Source Code Pro\", monospace}.dark{--primary-light:87 112 255}:root{--code-line-highlight-background:rgb(var(--primary-light) / 0.06);--code-line-highlight-border:rgb(var(--primary-light) / 0.12)}.dark{--code-line-highlight-background:rgb(var(--primary-light) / 0.08);--code-line-highlight-border:rgb(var(--primary-light) / 0.35)}[data-component-part=code-block-root]:not(.has-line-numbers) .line-highlight,[data-component-part=code-block-root]:not(.has-line-numbers) .line-highlight::after,[data-component-part=code-block-root]:not(.has-line-numbers) .line-highlight::before{background:var(--code-line-highlight-background)!important}[data-component-part=code-block-root]:not(.has-line-numbers) .line-highlight::before{border-left-color:var(--code-line-highlight-border)!important}.has-line-numbers .line-highlight::after{background:var(--code-line-highlight-background)!important;border-left-color:var(--code-line-highlight-border)!important}.navbar-link a{border-radius:6px}#topbar-cta-button a span.absolute{background-color:rgb(var(--primary));border-radius:6px}.dark #topbar-cta-button a span.absolute{background-color:rgb(var(--primary-light))}div[data-page-title=\"Page Not Found\"]>div{width:100vw;max-width:none}.dark\\:bg-background-dark:is(.dark *){background-color:#000}html.dark #navbar div.dark\\:bg-background-dark{background-color:rgb(var(--background-dark)/1)}#footer .nav-logo{opacity:.5;width:100px}#footer .max-w-\\[984px\\]{max-width:72rem;padding-left:1.25rem;padding-right:1.25rem}@media (min-width:1024px){#footer .max-w-\\[984px\\]{padding-left:36px;padding-right:36px}}.integrations-search-input{width:100%;height:2.25rem;padding-left:2.75rem;padding-right:.75rem;font-size:.875rem;line-height:1.5rem;border:0;border-radius:9999px;outline:0;background-color:rgba(3,7,18,.03);color:#6b7280;box-shadow:none;transition:background-color .2s}.integrations-search-input:focus,.integrations-search-input:hover{background-color:rgba(3,7,18,.1)}.integrations-search-input:focus{color:#374151}.integrations-search-input::placeholder{color:#4b5563}.dark .integrations-search-input{background-color:rgba(255,255,255,.06);color:rgba(255,255,255,.5)}.dark .integrations-search-input:focus,.dark .integrations-search-input:hover{background-color:rgba(255,255,255,.1)}.dark .integrations-search-input:focus{color:rgba(255,255,255,.9)}.dark .integrations-search-input::placeholder{color:rgba(255,255,255,.5)}.integrations-search-icon,.integrations-search-kbd{color:#6b7280}.dark .integrations-search-icon,.dark .integrations-search-kbd{color:rgba(255,255,255,.5)}.gateway-models-filters{display:flex;align-items:center;gap:.75rem;margin-bottom:1.5rem;flex-wrap:wrap}.gateway-models-provider-wrap{display:flex;align-items:center;gap:.5rem}.models-provider-label{font-size:.875rem;font-weight:500;color:#374151;white-space:nowrap}.dark .models-provider-label{color:rgba(255,255,255,.85)}.models-provider-select{height:2.25rem;min-width:10rem;padding:0 2rem 0 .75rem;font-size:.875rem;line-height:1.5;border:1px solid rgba(3,7,18,.08);border-radius:.5rem;outline:0;background-color:#fff;color:#111827;cursor:pointer;appearance:none;background-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 24 24' fill='none' stroke='%236b7280' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m6 9 6 6 6-6'/%3E%3C/svg%3E\");background-repeat:no-repeat;background-position:right .75rem center;transition:border-color .15s,box-shadow .15s}.models-provider-select:hover{border-color:rgba(3,7,18,.18)}.models-provider-select:focus{border-color:rgb(43 30 235);box-shadow:0 0 0 2px rgba(43,30,235,.2)}.dark .models-provider-select{background-color:rgba(255,255,255,.06);border-color:rgba(255,255,255,.12);color:rgba(255,255,255,.9);background-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 24 24' fill='none' stroke='rgba(255,255,255,0.6)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m6 9 6 6 6-6'/%3E%3C/svg%3E\")}.dark .models-provider-select:hover{border-color:rgba(255,255,255,.22)}.dark .models-provider-select:focus{border-color:rgb(87 112 255);box-shadow:0 0 0 2px rgba(87,112,255,.25)}[data-component-part=accordion-icon],[data-component-part=card-icon]{flex:none}#content-area svg[data-icon]{width:1rem;height:1rem;display:inline;vertical-align:baseline;transform:translateY(-.125rem)}#content-area :not(pre)>code{padding-left:.2rem;padding-right:.2rem;border-radius:3px;background-color:rgb(0 0 0/.05)}#content-area :not(pre)>code:is(.dark *){background-color:rgb(255 255 255/.1)}body.kb-page #sidebar-content{display:none!important}body.kb-page aside:has(#sidebar-content),body.kb-page aside[id*=sidebar]{display:none!important}body.kb-page #content-container{margin-left:0!important;padding-left:24px!important}body.kb-page main{margin-left:0!important}body.kb-page #table-of-contents{display:block!important}div:has(>.tabs-border[data-component-part=tabs-list]){border:1px solid rgb(var(--gray-200));border-radius:16px;padding:0 .75rem .75rem}.dark div:has(>.tabs-border[data-component-part=tabs-list]){border-color:rgb(var(--gray-800))}.tabs-border[data-component-part=tabs-list]{margin-bottom:1rem!important}td [data-base-ui-tooltip-trigger]{text-align:inherit}"}],"page":{"pagePath":"admin/self-hosting/upgrade/v2","slug":"/admin/self-hosting/upgrade/v2","pageMetadata":{"title":"Upgrade to data plane v2.x","sidebarTitle":"Data plane v2.x","description":"Upgrade your self-hosted Braintrust deployment to the data plane v2 series","og:image":"https://www.braintrust.dev/og?template=docs\u0026title=Upgrade%20to%20data%20plane%20v2.x","href":"/admin/self-hosting/upgrade/v2"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Upgrade your self-hosted Braintrust deployment to the data plane v2 series\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,li:`li`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,ul:`ul`,..._provideComponents(),...props.components},{Accordion,CodeBlock,Heading,Icon,Note,Step,Steps,Tab,Table,Tabs,Tip,Warning}=_components;if(!Accordion)_missingMdxReference(`Accordion`,true);if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Icon)_missingMdxReference(`Icon`,true);if(!Note)_missingMdxReference(`Note`,true);if(!Step)_missingMdxReference(`Step`,true);if(!Steps)_missingMdxReference(`Steps`,true);if(!Tab)_missingMdxReference(`Tab`,true);if(!Table)_missingMdxReference(`Table`,true);if(!Tabs)_missingMdxReference(`Tabs`,true);if(!Tip)_missingMdxReference(`Tip`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsxs(_components.p,{children:[`Data plane v2.0 introduced many new features, including `,_jsx(_components.a,{href:`/changelog#trace-level-scorers`,children:`trace-level scorers`}),`, `,_jsx(_components.a,{href:`/changelog#sandboxes-for-agent-evals`,children:`sandboxes for agent evals`}),`, and `,_jsx(_components.a,{href:`/changelog#log-indexing-and-full-text-search`,children:`log indexing and full-text search`}),`.`]}),`\n`,_jsx(_components.p,{children:`The current recommended target for the v2.x cutover is data plane v2.1.1. The module and chart versions below deploy v2.1.1 images unless noted otherwise.`}),`\n`,_jsx(_components.p,{children:`This guide assumes a standard Braintrust deployment using the Braintrust Terraform modules or Helm chart to manage storage, identity, networking, and generated configuration. If your deployment customizes those layers, confirm the equivalent resources, permissions, network paths, and runtime environment are in place before applying the version upgrade. Braintrust components must be able to list, read, write, and delete the generated object-storage paths, including versioned deletes where object versioning is enabled.`}),`\n`,_jsx(Note,{children:_jsx(_components.p,{children:`Avoid bundling unrelated configuration or workload changes into the upgrade window. Validate the version upgrade first, then separately ramp new automations, scoring traffic, credential rotations, or storage and network policy changes.`})}),`\n`,_jsxs(Tabs,{children:[_jsxs(Tab,{title:`AWS`,icon:`https://img.logo.dev/aws.amazon.com?token=pk_BdcHD9e5SCW3j1rnJkNyMQ`,id:`aws`,\"data-child-heading-ids\":`[\"1-prepare-for-v2-x\",\"upgrade-terraform-module\",\"enable-efficient-wal-format-aws\",\"run-the-preflight-check\",\"upgrade-to-v2-x-aws\",\"apply-the-upgrade\",\"verify-settings\",\"validate-the-base-upgrade\",\"enable-no-postgresql-mode-aws\",\"enable-topics\",\"configuration-reference\"]`,children:[_jsx(_components.p,{children:`This guide shows the process for upgrading the Braintrust data plane to v2.x in your AWS account.`}),_jsx(Heading,{level:`2`,id:`1-prepare-for-v2-x`,children:`1. Prepare for v2.x`}),_jsx(_components.p,{children:`Before upgrading to data plane v2.x, you need to reach Terraform module v4.5.0 (data plane v1.1.32) and enable the efficient WAL format. v1.1.32 is the required foundation for v2.x. It ensures all Brainstore configuration is in place and verified before the upgrade.`}),_jsx(Heading,{level:`3`,id:`upgrade-terraform-module`,children:`Upgrade Terraform module`}),_jsxs(_components.p,{children:[`The goal of this step is to reach v4.5.0. Check your current module version in `,_jsx(_components.code,{children:`main.tf`}),`:`]}),_jsx(CodeBlock,{filename:``,numberOfLines:`3`,language:`hcl`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light github-dark-dimmed`,style:{backgroundColor:`#fff`,\"--shiki-dark-bg\":`#22272e`,color:`#24292e`,\"--shiki-dark\":`#adbac7`},language:`hcl`,children:_jsxs(_components.code,{language:`hcl`,numberOfLines:`3`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#6F42C1`,\"--shiki-dark\":`#F69D50`},children:`module`}),_jsx(_components.span,{style:{color:`#005CC5`,\"--shiki-dark\":`#6CB6FF`},children:` \"braintrust-data-plane\"`}),_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#ADBAC7`},children:` {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#ADBAC7`},children:` source`}),_jsx(_components.span,{style:{color:`#D73A49`,\"--shiki-dark\":`#F47067`},children:` =`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#96D0FF`},children:` \"github.com/braintrustdata/terraform-aws-braintrust-data-plane?ref=v...\"`}),_jsx(_components.span,{style:{color:`#6A737D`,\"--shiki-dark\":`#768390`},children:` # your current version`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#ADBAC7`},children:`}`})}),`\n`]})})}),_jsx(_components.p,{children:`Then follow the path for your starting point:`}),_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Starting version`}),_jsx(_components.th,{children:`Sub-steps to follow`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`TF module \u003c v3.0.0`}),_jsx(_components.td,{children:`1 → 2 → 3`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`TF module v3.x`}),_jsx(_components.td,{\"data-numeric\":`true`,children:`2 → 3`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`TF module v4.x (not v4.5.0)`}),_jsx(_components.td,{children:`3 only`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`TF module v4.5.0`}),_jsxs(_components.td,{children:[`Skip to `,_jsx(_components.a,{href:`#enable-efficient-wal-format-aws`,children:`Enable efficient WAL format`})]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`TF module v5.0.0, v5.1.0, or v5.2.0`}),_jsxs(_components.td,{children:[`Skip to `,_jsx(_components.a,{href:`#upgrade-to-v2-x-aws`,children:`Upgrade to v2.x`})]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`TF module v5.2.1+`}),_jsxs(_components.td,{children:[`Skip to `,_jsx(_components.a,{href:`#enable-no-postgresql-mode-aws`,children:`Enable no-PostgreSQL mode`})]})]})]})]}),_jsxs(Steps,{children:[_jsxs(Step,{title:`Upgrade to Terraform module v3.1.3`,children:[_jsx(_components.p,{children:`This upgrades the data plane from v1.1.25 to v1.1.27. There are no breaking changes.`}),_jsx(CodeBlock,{filename:``,numberOfLines:`5`,language:`hcl`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light github-dark-dimmed`,style:{backgroundColor:`#fff`,\"--shiki-dark-bg\":`#22272e`,color:`#24292e`,\"--shiki-dark\":`#adbac7`},language:`hcl`,children:_jsxs(_components.code,{language:`hcl`,numberOfLines:`5`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#6F42C1`,\"--shiki-dark\":`#F69D50`},children:`module`}),_jsx(_components.span,{style:{color:`#005CC5`,\"--shiki-dark\":`#6CB6FF`},children:` \"braintrust-data-plane\"`}),_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#ADBAC7`},children:` {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#ADBAC7`},children:` source`}),_jsx(_components.span,{style:{color:`#D73A49`,\"--shiki-dark\":`#F47067`},children:` =`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#96D0FF`},children:` \"github.com/braintrustdata/terraform-aws-braintrust-data-plane?ref=v3.1.3\"`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6A737D`,\"--shiki-dark\":`#768390`},children:` # ... other configuration`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#ADBAC7`},children:`}`})}),`\n`]})})}),_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light github-dark-dimmed`,style:{backgroundColor:`#fff`,\"--shiki-dark-bg\":`#22272e`,color:`#24292e`,\"--shiki-dark\":`#adbac7`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#6F42C1`,\"--shiki-dark\":`#F69D50`},children:`terraform`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#96D0FF`},children:` apply`})]}),`\n`]})})})]}),_jsxs(Step,{title:`Upgrade to Terraform module v4.0.0`,children:[_jsxs(_components.p,{children:[`This step upgrades the AWS provider from v5 to v6. `,_jsx(_components.strong,{children:`The Terraform state file changes made in this step are irreversible.`}),` Apply at this version explicitly before proceeding, so that if anything goes wrong, it is clear whether the provider upgrade or the subsequent data plane bump caused it.`]}),_jsx(CodeBlock,{filename:``,numberOfLines:`5`,language:`hcl`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light github-dark-dimmed`,style:{backgroundColor:`#fff`,\"--shiki-dark-bg\":`#22272e`,color:`#24292e`,\"--shiki-dark\":`#adbac7`},language:`hcl`,children:_jsxs(_components.code,{language:`hcl`,numberOfLines:`5`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#6F42C1`,\"--shiki-dark\":`#F69D50`},children:`module`}),_jsx(_components.span,{style:{color:`#005CC5`,\"--shiki-dark\":`#6CB6FF`},children:` \"braintrust-data-plane\"`}),_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#ADBAC7`},children:` {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#ADBAC7`},children:` source`}),_jsx(_components.span,{style:{color:`#D73A49`,\"--shiki-dark\":`#F47067`},children:` =`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#96D0FF`},children:` \"github.com/braintrustdata/terraform-aws-braintrust-data-plane?ref=v4.0.0\"`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6A737D`,\"--shiki-dark\":`#768390`},children:` # ... other configuration`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#ADBAC7`},children:`}`})}),`\n`]})})}),_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light github-dark-dimmed`,style:{backgroundColor:`#fff`,\"--shiki-dark-bg\":`#22272e`,color:`#24292e`,\"--shiki-dark\":`#adbac7`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#6F42C1`,\"--shiki-dark\":`#F69D50`},children:`terraform`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#96D0FF`},children:` apply`})]}),`\n`]})})}),_jsx(_components.p,{children:`The data plane version does not change in this step.`}),_jsx(Tip,{children:_jsx(_components.p,{children:`For straightforward deployments, you can upgrade directly from v3.1.3 to v4.5.0, skipping the v4.0.0 stop. The intermediate stop is recommended for complex deployments to isolate the AWS provider migration. If something goes wrong in a single jump, it’s harder to identify the cause.`})})]}),_jsxs(Step,{title:`Upgrade to Terraform module v4.5.0`,children:[_jsxs(_components.p,{children:[`This upgrades the data plane to v1.1.32. v4.5.0 also introduces the `,_jsx(_components.code,{children:`skip_pg_for_brainstore_objects`}),` variable used in the Topics enablement step.`]}),_jsx(CodeBlock,{filename:``,numberOfLines:`5`,language:`hcl`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light github-dark-dimmed`,style:{backgroundColor:`#fff`,\"--shiki-dark-bg\":`#22272e`,color:`#24292e`,\"--shiki-dark\":`#adbac7`},language:`hcl`,children:_jsxs(_components.code,{language:`hcl`,numberOfLines:`5`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#6F42C1`,\"--shiki-dark\":`#F69D50`},children:`module`}),_jsx(_components.span,{style:{color:`#005CC5`,\"--shiki-dark\":`#6CB6FF`},children:` \"braintrust-data-plane\"`}),_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#ADBAC7`},children:` {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#ADBAC7`},children:` source`}),_jsx(_components.span,{style:{color:`#D73A49`,\"--shiki-dark\":`#F47067`},children:` =`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#96D0FF`},children:` \"github.com/braintrustdata/terraform-aws-braintrust-data-plane?ref=v4.5.0\"`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6A737D`,\"--shiki-dark\":`#768390`},children:` # ... other configuration`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#ADBAC7`},children:`}`})}),`\n`]})})}),_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light github-dark-dimmed`,style:{backgroundColor:`#fff`,\"--shiki-dark-bg\":`#22272e`,color:`#24292e`,\"--shiki-dark\":`#adbac7`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#6F42C1`,\"--shiki-dark\":`#F69D50`},children:`terraform`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#96D0FF`},children:` apply`})]}),`\n`]})})})]})]}),_jsx(Heading,{level:`3`,id:`enable-efficient-wal-format-aws`,children:`Enable efficient WAL format`}),_jsx(Warning,{children:_jsxs(_components.p,{children:[`This must be a separate `,_jsx(_components.code,{children:`terraform apply`}),` from the v4.5.0 upgrade. If you set `,_jsx(_components.code,{children:`brainstore_wal_footer_version`}),` in the same apply, Brainstore nodes that are still rolling out won’t be able to read the new WAL format. Wait until all nodes are confirmed running v1.1.32 before applying this step.`]})}),_jsxs(_components.p,{children:[`Add `,_jsx(_components.code,{children:`brainstore_wal_footer_version = \"v1\"`}),` to your module and apply:`]}),_jsx(CodeBlock,{filename:``,numberOfLines:`7`,language:`hcl`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light github-dark-dimmed`,style:{backgroundColor:`#fff`,\"--shiki-dark-bg\":`#22272e`,color:`#24292e`,\"--shiki-dark\":`#adbac7`},language:`hcl`,children:_jsxs(_components.code,{language:`hcl`,numberOfLines:`7`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#6F42C1`,\"--shiki-dark\":`#F69D50`},children:`module`}),_jsx(_components.span,{style:{color:`#005CC5`,\"--shiki-dark\":`#6CB6FF`},children:` \"braintrust-data-plane\"`}),_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#ADBAC7`},children:` {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#ADBAC7`},children:` source`}),_jsx(_components.span,{style:{color:`#D73A49`,\"--shiki-dark\":`#F47067`},children:` =`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#96D0FF`},children:` \"github.com/braintrustdata/terraform-aws-braintrust-data-plane?ref=v4.5.0\"`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#ADBAC7`},children:` brainstore_wal_footer_version`}),_jsx(_components.span,{style:{color:`#D73A49`,\"--shiki-dark\":`#F47067`},children:` =`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#96D0FF`},children:` \"v1\"`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6A737D`,\"--shiki-dark\":`#768390`},children:` # ... other configuration`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#ADBAC7`},children:`}`})}),`\n`]})})}),_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light github-dark-dimmed`,style:{backgroundColor:`#fff`,\"--shiki-dark-bg\":`#22272e`,color:`#24292e`,\"--shiki-dark\":`#adbac7`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#6F42C1`,\"--shiki-dark\":`#F69D50`},children:`terraform`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#96D0FF`},children:` apply`})]}),`\n`]})})}),_jsxs(_components.p,{children:[`After applying, go to `,_jsxs(_components.strong,{children:[_jsx(Icon,{icon:`settings`}),` Settings`]}),` > `,_jsx(_components.a,{href:`https://www.braintrust.dev/app/~/configuration/brainstore`,children:_jsxs(_components.strong,{children:[_jsx(Icon,{icon:`zap`}),` Brainstore`]})}),` and, under `,_jsx(_components.strong,{children:`Brainstore configuration`}),`, check the WAL footer version (`,_jsx(_components.code,{children:`BRAINSTORE_WAL_FOOTER_VERSION`}),`) row. On v1.1.32, it will show “Unable to verify setting. Please upgrade to configure.” The setting is active; Brainstore v1.1.32 does not report it back to the control plane. It will show correctly after upgrading to v2.x.`]}),_jsx(Note,{children:_jsx(_components.p,{children:`This step is strongly recommended but not mechanically enforced. Deployments running mixed WAL formats become increasingly difficult to tune at scale.`})}),_jsx(Heading,{level:`3`,id:`run-the-preflight-check`,children:`Run the preflight check`}),_jsxs(_components.p,{children:[`Go to `,_jsxs(_components.strong,{children:[_jsx(Icon,{icon:`settings`}),` Settings`]}),` > `,_jsx(_components.a,{href:`https://www.braintrust.dev/app/~/configuration/brainstore`,children:_jsxs(_components.strong,{children:[_jsx(Icon,{icon:`zap`}),` Brainstore`]})}),`. Under `,_jsx(_components.strong,{children:`Brainstore configuration`}),`, verify the following expected statuses before proceeding:`]}),_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Setting`}),_jsx(_components.th,{children:`Expected status`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`License`}),_jsx(_components.td,{children:`Configured`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Telemetry`}),_jsx(_components.td,{children:`Configured`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Data plane service token`}),_jsx(_components.td,{children:`Configured`})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[`Brainstore default mode (`,_jsx(_components.code,{children:`BRAINSTORE_DEFAULT`}),`)`]}),_jsx(_components.td,{children:`Configured`})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[`Insert logs (`,_jsx(_components.code,{children:`INSERT_LOGS2`}),`)`]}),_jsx(_components.td,{children:`Configured`})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[`Insert row references (`,_jsx(_components.code,{children:`BRAINSTORE_INSERT_ROW_REFS`}),`)`]}),_jsx(_components.td,{children:`Configured`})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[`Realtime WAL (`,_jsx(_components.code,{children:`BRAINSTORE_REALTIME_WAL_BUCKET`}),`)`]}),_jsx(_components.td,{children:`Configured`})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[`Ephemeral WAL (`,_jsx(_components.code,{children:`BRAINSTORE_XACT_MANAGER_URI`}),`)`]}),_jsx(_components.td,{children:`Configured`})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[`Proxy URL (`,_jsx(_components.code,{children:`BRAINSTORE_AI_PROXY_URL`}),`)`]}),_jsx(_components.td,{children:`Configured`})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[`Redis (`,_jsx(_components.code,{children:`BRAINSTORE_REDIS_URI`}),`)`]}),_jsx(_components.td,{children:`Configured`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Brainstore direct writes`}),_jsx(_components.td,{children:`”Upgrade to configure Brainstore direct writes”`})]})]})]}),_jsx(Note,{children:_jsx(_components.p,{children:`On v1.1.32, items like WAL footer version, response cache URI, and code bundle URI are not displayed. They appear only after upgrading to v2.x. The HTTP/2 check may show a warning on v1.1.32. This resolves after upgrading.`})}),_jsxs(_components.p,{children:[`If any of the first ten rows are not green, resolve them before proceeding. Contact `,_jsx(_components.a,{href:`mailto:support@braintrust.dev`,children:`Braintrust support`}),` if you need help.`]}),_jsx(Heading,{level:`2`,id:`upgrade-to-v2-x-aws`,children:`2. Upgrade to v2.x`}),_jsx(_components.p,{children:`With preflight complete, upgrade to Terraform module v5.2.1, which ships the recommended data plane v2.1.1 images. The WAL footer also bumps to v3 in the same apply.`}),_jsx(Note,{children:_jsxs(_components.p,{children:[`If you are already on Terraform module v5.2.1 with WAL footer version set to v3, skip to `,_jsx(_components.a,{href:`#enable-no-postgresql-mode-aws`,children:`Enable no-PostgreSQL mode`}),`.`]})}),_jsx(Heading,{level:`3`,id:`apply-the-upgrade`,children:`Apply the upgrade`}),_jsx(_components.p,{children:`Update your module to v5.2.1 and bump the WAL footer to v3. You can do both in the same apply. As long as WAL footer is already on v1 from the previous step, all v2.x nodes will understand the v3 format on startup.`}),_jsx(_components.p,{children:`Because the latest module defaults no-PostgreSQL mode on, explicitly disable it for the base upgrade. Enable it only in the next step.`}),_jsx(CodeBlock,{filename:``,numberOfLines:`8`,language:`hcl`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light github-dark-dimmed`,style:{backgroundColor:`#fff`,\"--shiki-dark-bg\":`#22272e`,color:`#24292e`,\"--shiki-dark\":`#adbac7`},language:`hcl`,children:_jsxs(_components.code,{language:`hcl`,numberOfLines:`8`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#6F42C1`,\"--shiki-dark\":`#F69D50`},children:`module`}),_jsx(_components.span,{style:{color:`#005CC5`,\"--shiki-dark\":`#6CB6FF`},children:` \"braintrust-data-plane\"`}),_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#ADBAC7`},children:` {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#ADBAC7`},children:` source`}),_jsx(_components.span,{style:{color:`#D73A49`,\"--shiki-dark\":`#F47067`},children:` =`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#96D0FF`},children:` \"github.com/braintrustdata/terraform-aws-braintrust-data-plane?ref=v5.2.1\"`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#ADBAC7`},children:` brainstore_wal_footer_version`}),_jsx(_components.span,{style:{color:`#D73A49`,\"--shiki-dark\":`#F47067`},children:` =`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#96D0FF`},children:` \"v3\"`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#ADBAC7`},children:` skip_pg_for_brainstore_objects`}),_jsx(_components.span,{style:{color:`#D73A49`,\"--shiki-dark\":`#F47067`},children:` =`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#96D0FF`},children:` \"\"`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6A737D`,\"--shiki-dark\":`#768390`},children:` # ... other configuration`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#ADBAC7`},children:`}`})}),`\n`]})})}),_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light github-dark-dimmed`,style:{backgroundColor:`#fff`,\"--shiki-dark-bg\":`#22272e`,color:`#24292e`,\"--shiki-dark\":`#adbac7`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#6F42C1`,\"--shiki-dark\":`#F69D50`},children:`terraform`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#96D0FF`},children:` apply`})]}),`\n`]})})}),_jsx(Heading,{level:`3`,id:`verify-settings`,children:`Verify settings`}),_jsxs(_components.p,{children:[`Go to `,_jsxs(_components.strong,{children:[_jsx(Icon,{icon:`settings`}),` Settings`]}),` > `,_jsx(_components.a,{href:`https://www.braintrust.dev/app/~/configuration/brainstore`,children:_jsxs(_components.strong,{children:[_jsx(Icon,{icon:`zap`}),` Brainstore`]})}),` and, under `,_jsx(_components.strong,{children:`Brainstore configuration`}),`, verify the following are all green:`]}),_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Setting`}),_jsx(_components.th,{children:`Expected status`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`License`}),_jsx(_components.td,{children:`Configured`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Telemetry`}),_jsx(_components.td,{children:`Configured`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Data plane service token`}),_jsx(_components.td,{children:`Configured`})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[`Brainstore default mode (`,_jsx(_components.code,{children:`BRAINSTORE_DEFAULT`}),`)`]}),_jsx(_components.td,{children:`Configured`})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[`Insert logs (`,_jsx(_components.code,{children:`INSERT_LOGS2`}),`)`]}),_jsx(_components.td,{children:`Configured`})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[`Insert row references (`,_jsx(_components.code,{children:`BRAINSTORE_INSERT_ROW_REFS`}),`)`]}),_jsx(_components.td,{children:`Configured`})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[`Realtime WAL (`,_jsx(_components.code,{children:`BRAINSTORE_REALTIME_WAL_BUCKET`}),`)`]}),_jsx(_components.td,{children:`Configured`})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[`Ephemeral WAL (`,_jsx(_components.code,{children:`BRAINSTORE_XACT_MANAGER_URI`}),`)`]}),_jsx(_components.td,{children:`Configured`})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[`Proxy URL (`,_jsx(_components.code,{children:`BRAINSTORE_AI_PROXY_URL`}),`)`]}),_jsx(_components.td,{children:`Configured`})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[`Redis (`,_jsx(_components.code,{children:`BRAINSTORE_REDIS_URI`}),`)`]}),_jsx(_components.td,{children:`Configured`})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[`Response cache URI (`,_jsx(_components.code,{children:`BRAINSTORE_RESPONSE_CACHE_URI`}),`)`]}),_jsx(_components.td,{children:`Configured`})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[`Code bundle URI (`,_jsx(_components.code,{children:`BRAINSTORE_CODE_BUNDLE_URI`}),`)`]}),_jsx(_components.td,{children:`Configured`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`HTTP/2`}),_jsx(_components.td,{children:`Data plane is using HTTP/2 or higher`})]})]})]}),_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Brainstore direct writes`}),` will show “Upgrade to configure Brainstore direct writes.” This is enabled in the next step.`]}),_jsx(Heading,{level:`3`,id:`validate-the-base-upgrade`,children:`Validate the base upgrade`}),_jsx(_components.p,{children:`Before enabling no-PostgreSQL mode, validate the workloads your team relies on. For example, trace one production-shaped request, run an eval suite you use regularly, and invoke or iterate on a prompt. If you use online scorers or automations, trigger one through its normal online path. For trace-level scorers, choose one that uses full trace context. If these workflows round-trip cleanly through the data plane and look right in the UI, continue to no-PostgreSQL mode.`}),_jsx(Heading,{level:`3`,id:`enable-no-postgresql-mode-aws`,children:`Enable no-PostgreSQL mode`}),_jsxs(_components.p,{children:[`No-PostgreSQL mode removes PostgreSQL from the Brainstore write path, delivering higher ingestion throughput. This step is a prerequisite for `,_jsx(_components.a,{href:`/observe/topics`,children:`Topics`}),` but does not enable them.`]}),_jsx(Warning,{children:_jsx(_components.p,{children:`The switch to no-PostgreSQL mode is one-way: Once Brainstore is writing data directly, rolling back requires downtime to drain and re-ingest. Enable it only when you are ready to commit.`})}),_jsxs(_components.p,{children:[`Keep your module on v5.2.1 and set `,_jsx(_components.code,{children:`skip_pg_for_brainstore_objects = \"all\"`}),`:`]}),_jsx(CodeBlock,{filename:``,numberOfLines:`8`,language:`hcl`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light github-dark-dimmed`,style:{backgroundColor:`#fff`,\"--shiki-dark-bg\":`#22272e`,color:`#24292e`,\"--shiki-dark\":`#adbac7`},language:`hcl`,children:_jsxs(_components.code,{language:`hcl`,numberOfLines:`8`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#6F42C1`,\"--shiki-dark\":`#F69D50`},children:`module`}),_jsx(_components.span,{style:{color:`#005CC5`,\"--shiki-dark\":`#6CB6FF`},children:` \"braintrust-data-plane\"`}),_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#ADBAC7`},children:` {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#ADBAC7`},children:` source`}),_jsx(_components.span,{style:{color:`#D73A49`,\"--shiki-dark\":`#F47067`},children:` =`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#96D0FF`},children:` \"github.com/braintrustdata/terraform-aws-braintrust-data-plane?ref=v5.2.1\"`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#ADBAC7`},children:` brainstore_wal_footer_version`}),_jsx(_components.span,{style:{color:`#D73A49`,\"--shiki-dark\":`#F47067`},children:` =`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#96D0FF`},children:` \"v3\"`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#ADBAC7`},children:` skip_pg_for_brainstore_objects`}),_jsx(_components.span,{style:{color:`#D73A49`,\"--shiki-dark\":`#F47067`},children:` =`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#96D0FF`},children:` \"all\"`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6A737D`,\"--shiki-dark\":`#768390`},children:` # ... other configuration`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#ADBAC7`},children:`}`})}),`\n`]})})}),_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light github-dark-dimmed`,style:{backgroundColor:`#fff`,\"--shiki-dark-bg\":`#22272e`,color:`#24292e`,\"--shiki-dark\":`#adbac7`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#6F42C1`,\"--shiki-dark\":`#F69D50`},children:`terraform`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#96D0FF`},children:` apply`})]}),`\n`]})})}),_jsx(_components.p,{children:`Repeat the same workload validation after enabling no-PostgreSQL mode. If the same representative workflows round-trip cleanly through the data plane and look right in the UI, proceed to the next environment.`}),_jsx(Heading,{level:`3`,id:`enable-topics`,children:`Enable Topics`}),_jsxs(_components.p,{children:[_jsx(_components.a,{href:`/observe/topics`,children:`Topics`}),` for self-hosted deployments has specific deployment, inference, billing, and maintenance requirements, and Braintrust must grant access to your organization. Completing the full v2.x upgrade and no-PostgreSQL mode migration is a prerequisite, and the following conditions must also be met before Topics can be enabled:`]}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Standard deployment required.`}),` Topics is supported on standard Terraform/Helm deployments only. Custom Kubernetes clusters using the Helm chart on non-standard infrastructure are not supported.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Braintrust-hosted inference required.`}),` Topics runs LLM calls on models hosted by Braintrust with Zero Data Retention (ZDR). Bring-your-own-model is not supported. Currently US-only.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Built-in models must be enabled.`}),` Self-hosted organizations have `,_jsx(_components.a,{href:`/admin/ai-providers#manage-built-in-models`,children:`built-in models`}),` disabled by default, so no trace data leaves your network boundary unless you opt in. Because Topics depends on built-in models, an admin must explicitly enable them before Topics can run.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Pricing is not included by default.`}),` Topics usage is not covered by standard contracts. Discuss pricing with your account team before proceeding.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Ongoing maintenance required.`}),` Self-hosted Topics deployments run on a frequent-release build track separate from the tagged data plane versions and will require regular upgrades to receive the latest fixes and improvements.`]}),`\n`]}),_jsxs(_components.p,{children:[`If you meet all of these requirements and want to proceed, contact your account team or `,_jsx(_components.a,{href:`mailto:support@braintrust.dev`,children:`Braintrust support`}),`. Until Braintrust enables Topics access for your organization, the Topics page and Topics automations remain blocked, even after the upgrade and no-PostgreSQL migration are complete.`]}),_jsx(Heading,{level:`2`,id:`configuration-reference`,children:`Configuration reference`}),_jsx(Accordion,{title:`Core configuration (auto-set by v4.4.0)`,id:`core-configuration-auto-set-by-v4-4-0`,children:_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Variable`}),_jsx(_components.th,{children:`Source`}),_jsx(_components.th,{children:`Since`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`SERVICE_TOKEN_SECRET_KEY`})}),_jsx(_components.td,{children:`Auto-generated 32-character key in Secrets Manager`}),_jsx(_components.td,{\"data-numeric\":`true`,children:`v3.0.0`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`BRAINSTORE_REDIS_URI`})}),_jsx(_components.td,{children:`ElastiCache endpoint and port`}),_jsx(_components.td,{\"data-numeric\":`true`,children:`v3.1.0`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`BRAINSTORE_DEFAULT`})}),_jsxs(_components.td,{children:[`Hardcoded `,_jsx(_components.code,{children:`\"force\"`})]}),_jsx(_components.td,{\"data-numeric\":`true`,children:`v3.0.0`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`INSERT_LOGS2`})}),_jsxs(_components.td,{children:[`Hardcoded `,_jsx(_components.code,{children:`\"true\"`})]}),_jsx(_components.td,{\"data-numeric\":`true`,children:`v3.0.0`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`BRAINSTORE_INSERT_ROW_REFS`})}),_jsxs(_components.td,{children:[`Hardcoded `,_jsx(_components.code,{children:`\"true\"`})]}),_jsx(_components.td,{\"data-numeric\":`true`,children:`v3.0.0`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`BRAINSTORE_REALTIME_WAL_BUCKET`})}),_jsx(_components.td,{children:`Auto-created S3 bucket`}),_jsx(_components.td,{\"data-numeric\":`true`,children:`v3.0.0`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`BRAINSTORE_AI_PROXY_URL`})}),_jsx(_components.td,{children:`Fetched from SSM at boot`}),_jsx(_components.td,{\"data-numeric\":`true`,children:`v4.0.3`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`BRAINSTORE_XACT_MANAGER_URI`})}),_jsx(_components.td,{children:`Same ElastiCache endpoint as Redis`}),_jsx(_components.td,{\"data-numeric\":`true`,children:`v4.4.0`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`BRAINSTORE_RESPONSE_CACHE_URI`})}),_jsxs(_components.td,{children:[`Module-created S3 bucket (at `,_jsx(_components.code,{children:`/brainstore-cache`}),` prefix)`]}),_jsx(_components.td,{\"data-numeric\":`true`,children:`v4.4.0`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`BRAINSTORE_CODE_BUNDLE_URI`})}),_jsx(_components.td,{children:`Module-created S3 bucket`}),_jsx(_components.td,{\"data-numeric\":`true`,children:`v4.4.0`})]})]})]})}),_jsxs(Accordion,{title:`WAL footer version (requires explicit configuration)`,id:`wal-footer-version-requires-explicit-configuration`,children:[_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Variable`}),_jsx(_components.th,{children:`How to set`}),_jsx(_components.th,{children:`Since`})]})}),_jsx(_components.tbody,{children:_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`BRAINSTORE_WAL_FOOTER_VERSION`})}),_jsxs(_components.td,{children:[`Set `,_jsx(_components.code,{children:`brainstore_wal_footer_version = \"v1\"`}),` in module`]}),_jsx(_components.td,{\"data-numeric\":`true`,children:`v4.5.0`})]})})]}),_jsxs(_components.p,{children:[`Allowed values: `,_jsx(_components.code,{children:`\"\"`}),` (disabled, default), `,_jsx(_components.code,{children:`\"v1\"`}),`, `,_jsx(_components.code,{children:`\"v2\"`}),`, `,_jsx(_components.code,{children:`\"v3\"`}),`. Set to `,_jsx(_components.code,{children:`\"v1\"`}),` as part of the pre-upgrade steps. Only set to `,_jsx(_components.code,{children:`\"v3\"`}),` after successfully deploying v2.x.`]})]}),_jsxs(Accordion,{title:`No-PostgreSQL mode (opt-in, post-upgrade)`,id:`no-postgresql-mode-opt-in-post-upgrade`,children:[_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Variable`}),_jsx(_components.th,{children:`How to set`}),_jsx(_components.th,{children:`Since`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`SKIP_PG_FOR_BRAINSTORE_OBJECTS`})}),_jsxs(_components.td,{children:[`Set `,_jsx(_components.code,{children:`skip_pg_for_brainstore_objects`}),` in module`]}),_jsx(_components.td,{\"data-numeric\":`true`,children:`v4.5.0`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`BRAINSTORE_ASYNC_SCORING_OBJECTS`})}),_jsxs(_components.td,{children:[`Auto-derived from `,_jsx(_components.code,{children:`skip_pg_for_brainstore_objects`})]}),_jsx(_components.td,{\"data-numeric\":`true`,children:`v4.5.0`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`BRAINSTORE_LOG_AUTOMATIONS_OBJECTS`})}),_jsxs(_components.td,{children:[`Auto-derived from `,_jsx(_components.code,{children:`skip_pg_for_brainstore_objects`})]}),_jsx(_components.td,{\"data-numeric\":`true`,children:`v4.5.0`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`BRAINSTORE_WAL_USE_EFFICIENT_FORMAT`})}),_jsxs(_components.td,{children:[`Auto-enabled when either `,_jsx(_components.code,{children:`brainstore_wal_footer_version`}),` or `,_jsx(_components.code,{children:`skip_pg_for_brainstore_objects`}),` is set`]}),_jsx(_components.td,{\"data-numeric\":`true`,children:`v4.5.0`})]})]})]}),_jsxs(_components.p,{children:[`Setting `,_jsx(_components.code,{children:`skip_pg_for_brainstore_objects = \"all\"`}),` is a prerequisite for enabling Topics. The module automatically fans this value out to `,_jsx(_components.code,{children:`BRAINSTORE_ASYNC_SCORING_OBJECTS`}),` and `,_jsx(_components.code,{children:`BRAINSTORE_LOG_AUTOMATIONS_OBJECTS`}),`.`]})]})]}),_jsxs(Tab,{title:`GCP`,icon:`https://img.logo.dev/cloud.google.com?token=pk_BdcHD9e5SCW3j1rnJkNyMQ`,id:`gcp`,\"data-child-heading-ids\":`[\"1-prepare-for-v2-x-2\",\"upgrade-helm-chart\",\"enable-efficient-wal-format-gcp\",\"run-the-preflight-check-2\",\"update-workload-identity-bindings\",\"upgrade-to-v2-x-gcp\",\"apply-the-upgrade-2\",\"verify-settings-2\",\"validate-the-base-upgrade-2\",\"enable-no-postgresql-mode-gcp\",\"enable-topics-2\",\"configuration-reference-2\"]`,children:[_jsx(_components.p,{children:`This guide shows the process for upgrading the Braintrust data plane to v2.x in your GCP account.`}),_jsx(Heading,{level:`2`,id:`1-prepare-for-v2-x-2`,children:`1. Prepare for v2.x`}),_jsx(_components.p,{children:`Before upgrading to data plane v2.x, you need to reach Helm chart v5.0.1 (data plane v1.1.32) and enable the efficient WAL format. v1.1.32 is the required foundation for v2.x. It ensures all Brainstore configuration is in place and verified before the upgrade.`}),_jsx(Heading,{level:`3`,id:`upgrade-helm-chart`,children:`Upgrade Helm chart`}),_jsx(_components.p,{children:`Check your current Helm chart version:`}),_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light github-dark-dimmed`,style:{backgroundColor:`#fff`,\"--shiki-dark-bg\":`#22272e`,color:`#24292e`,\"--shiki-dark\":`#adbac7`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#6F42C1`,\"--shiki-dark\":`#F69D50`},children:`helm`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#96D0FF`},children:` list`}),_jsx(_components.span,{style:{color:`#005CC5`,\"--shiki-dark\":`#6CB6FF`},children:` -n`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#96D0FF`},children:` braintrust`})]}),`\n`]})})}),_jsx(_components.p,{children:`Then follow the path for your starting point:`}),_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Starting version`}),_jsx(_components.th,{children:`Sub-steps to follow`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Helm chart \u003c v3.1.1`}),_jsx(_components.td,{children:`1 → 2 → 3`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Helm chart v3.x`}),_jsx(_components.td,{\"data-numeric\":`true`,children:`2 → 3`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Helm chart v4.x`}),_jsx(_components.td,{children:`3 only`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Helm chart v5.0.1`}),_jsxs(_components.td,{children:[`Skip to `,_jsx(_components.a,{href:`#enable-efficient-wal-format-gcp`,children:`Enable efficient WAL format`})]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Helm chart v6.0.0, v6.1.0, or v6.2.0`}),_jsxs(_components.td,{children:[`Skip to `,_jsx(_components.a,{href:`#upgrade-to-v2-x-gcp`,children:`Upgrade to v2.x`})]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Helm chart v6.2.1+`}),_jsxs(_components.td,{children:[`Skip to `,_jsx(_components.a,{href:`#enable-no-postgresql-mode-gcp`,children:`Enable no-PostgreSQL mode`})]})]})]})]}),_jsxs(Steps,{children:[_jsxs(Step,{title:`Upgrade to Helm chart v3.1.1`,children:[_jsx(_components.p,{children:`This upgrades the data plane from v1.1.27 to v1.1.31. There are no breaking changes.`}),_jsx(CodeBlock,{filename:``,numberOfLines:`5`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light github-dark-dimmed`,style:{backgroundColor:`#fff`,\"--shiki-dark-bg\":`#22272e`,color:`#24292e`,\"--shiki-dark\":`#adbac7`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`5`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#6F42C1`,\"--shiki-dark\":`#F69D50`},children:`helm`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#96D0FF`},children:` upgrade`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#96D0FF`},children:` braintrust`}),_jsx(_components.span,{style:{color:`#005CC5`,\"--shiki-dark\":`#F47067`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#96D0FF`},children:` oci://public.ecr.aws/braintrust/helm/braintrust`}),_jsx(_components.span,{style:{color:`#005CC5`,\"--shiki-dark\":`#F47067`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#005CC5`,\"--shiki-dark\":`#6CB6FF`},children:` --namespace`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#96D0FF`},children:` braintrust`}),_jsx(_components.span,{style:{color:`#005CC5`,\"--shiki-dark\":`#F47067`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#005CC5`,\"--shiki-dark\":`#6CB6FF`},children:` --version`}),_jsx(_components.span,{style:{color:`#005CC5`,\"--shiki-dark\":`#6CB6FF`},children:` 3.1.1`}),_jsx(_components.span,{style:{color:`#005CC5`,\"--shiki-dark\":`#F47067`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#005CC5`,\"--shiki-dark\":`#6CB6FF`},children:` --values`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#96D0FF`},children:` helm-values.yaml`})]}),`\n`]})})}),_jsx(_components.p,{children:`After applying, restart pods:`}),_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light github-dark-dimmed`,style:{backgroundColor:`#fff`,\"--shiki-dark-bg\":`#22272e`,color:`#24292e`,\"--shiki-dark\":`#adbac7`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#6F42C1`,\"--shiki-dark\":`#F69D50`},children:`kubectl`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#96D0FF`},children:` rollout`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#96D0FF`},children:` restart`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#96D0FF`},children:` deployment`}),_jsx(_components.span,{style:{color:`#005CC5`,\"--shiki-dark\":`#6CB6FF`},children:` -n`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#96D0FF`},children:` braintrust`})]}),`\n`]})})})]}),_jsxs(Step,{title:`Upgrade to Helm chart v4.0.0`,children:[_jsxs(_components.p,{children:[`This step upgrades the data plane to v1.1.32 and introduces bidirectional communication between Brainstore and API pods. Brainstore now needs to reach the API pods. The chart auto-sets `,_jsx(_components.code,{children:`BRAINSTORE_AI_PROXY_URL`}),` to `,_jsx(_components.code,{children:`http://braintrust-api:8000`}),`.`]}),_jsx(Warning,{children:_jsx(_components.p,{children:`If your cluster has network policies or security rules restricting traffic between pods, allow Brainstore pods to reach the API service on port 8000 before upgrading.`})}),_jsx(CodeBlock,{filename:``,numberOfLines:`5`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light github-dark-dimmed`,style:{backgroundColor:`#fff`,\"--shiki-dark-bg\":`#22272e`,color:`#24292e`,\"--shiki-dark\":`#adbac7`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`5`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#6F42C1`,\"--shiki-dark\":`#F69D50`},children:`helm`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#96D0FF`},children:` upgrade`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#96D0FF`},children:` braintrust`}),_jsx(_components.span,{style:{color:`#005CC5`,\"--shiki-dark\":`#F47067`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#96D0FF`},children:` oci://public.ecr.aws/braintrust/helm/braintrust`}),_jsx(_components.span,{style:{color:`#005CC5`,\"--shiki-dark\":`#F47067`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#005CC5`,\"--shiki-dark\":`#6CB6FF`},children:` --namespace`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#96D0FF`},children:` braintrust`}),_jsx(_components.span,{style:{color:`#005CC5`,\"--shiki-dark\":`#F47067`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#005CC5`,\"--shiki-dark\":`#6CB6FF`},children:` --version`}),_jsx(_components.span,{style:{color:`#005CC5`,\"--shiki-dark\":`#6CB6FF`},children:` 4.0.0`}),_jsx(_components.span,{style:{color:`#005CC5`,\"--shiki-dark\":`#F47067`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#005CC5`,\"--shiki-dark\":`#6CB6FF`},children:` --values`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#96D0FF`},children:` helm-values.yaml`})]}),`\n`]})})}),_jsx(_components.p,{children:`After applying, restart pods:`}),_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light github-dark-dimmed`,style:{backgroundColor:`#fff`,\"--shiki-dark-bg\":`#22272e`,color:`#24292e`,\"--shiki-dark\":`#adbac7`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#6F42C1`,\"--shiki-dark\":`#F69D50`},children:`kubectl`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#96D0FF`},children:` rollout`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#96D0FF`},children:` restart`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#96D0FF`},children:` deployment`}),_jsx(_components.span,{style:{color:`#005CC5`,\"--shiki-dark\":`#6CB6FF`},children:` -n`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#96D0FF`},children:` braintrust`})]}),`\n`]})})})]}),_jsxs(Step,{title:`Upgrade to Helm chart v5.0.1`,children:[_jsxs(_components.p,{children:[`This step enables fast readers, isolated Brainstore nodes that handle common UI queries. Fast readers are enabled by default with 2 replicas and use the same node spec as standard readers, `,_jsx(_components.strong,{children:`increasing your cluster node count by 2`}),`. You can upgrade directly to v5.0.1 from any v4.x version.`]}),_jsx(Warning,{children:_jsxs(_components.p,{children:[`Before upgrading, account for 2 additional fast reader nodes in your cluster capacity. If you have customized `,_jsx(_components.code,{children:`brainstore.reader`}),` settings in `,_jsx(_components.code,{children:`values.yaml`}),`, mirror those customizations to the new `,_jsx(_components.code,{children:`brainstore.fastreader`}),` block. See `,_jsx(_components.a,{href:`/admin/self-hosting/configure/scaling#configure-fast-readers`,children:`Configure Brainstore fast readers`}),` for details.`]})}),_jsx(CodeBlock,{filename:``,numberOfLines:`5`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light github-dark-dimmed`,style:{backgroundColor:`#fff`,\"--shiki-dark-bg\":`#22272e`,color:`#24292e`,\"--shiki-dark\":`#adbac7`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`5`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#6F42C1`,\"--shiki-dark\":`#F69D50`},children:`helm`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#96D0FF`},children:` upgrade`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#96D0FF`},children:` braintrust`}),_jsx(_components.span,{style:{color:`#005CC5`,\"--shiki-dark\":`#F47067`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#96D0FF`},children:` oci://public.ecr.aws/braintrust/helm/braintrust`}),_jsx(_components.span,{style:{color:`#005CC5`,\"--shiki-dark\":`#F47067`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#005CC5`,\"--shiki-dark\":`#6CB6FF`},children:` --namespace`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#96D0FF`},children:` braintrust`}),_jsx(_components.span,{style:{color:`#005CC5`,\"--shiki-dark\":`#F47067`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#005CC5`,\"--shiki-dark\":`#6CB6FF`},children:` --version`}),_jsx(_components.span,{style:{color:`#005CC5`,\"--shiki-dark\":`#6CB6FF`},children:` 5.0.1`}),_jsx(_components.span,{style:{color:`#005CC5`,\"--shiki-dark\":`#F47067`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#005CC5`,\"--shiki-dark\":`#6CB6FF`},children:` --values`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#96D0FF`},children:` helm-values.yaml`})]}),`\n`]})})}),_jsx(_components.p,{children:`After applying, restart pods:`}),_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light github-dark-dimmed`,style:{backgroundColor:`#fff`,\"--shiki-dark-bg\":`#22272e`,color:`#24292e`,\"--shiki-dark\":`#adbac7`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#6F42C1`,\"--shiki-dark\":`#F69D50`},children:`kubectl`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#96D0FF`},children:` rollout`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#96D0FF`},children:` restart`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#96D0FF`},children:` deployment`}),_jsx(_components.span,{style:{color:`#005CC5`,\"--shiki-dark\":`#6CB6FF`},children:` -n`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#96D0FF`},children:` braintrust`})]}),`\n`]})})})]})]}),_jsx(Heading,{level:`3`,id:`enable-efficient-wal-format-gcp`,children:`Enable efficient WAL format`}),_jsx(Warning,{children:_jsxs(_components.p,{children:[`This must be a separate `,_jsx(_components.code,{children:`helm upgrade`}),` after confirming all pods are running v1.1.32. Setting this during the same upgrade as the version bump risks Brainstore nodes still rolling out being unable to read the new WAL format.`]})}),_jsxs(_components.p,{children:[`Set `,_jsx(_components.code,{children:`brainstoreWalFooterVersion`}),` in your `,_jsx(_components.code,{children:`helm-values.yaml`}),`:`]}),_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`yaml`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light github-dark-dimmed`,style:{backgroundColor:`#fff`,\"--shiki-dark-bg\":`#22272e`,color:`#24292e`,\"--shiki-dark\":`#adbac7`},language:`yaml`,children:_jsxs(_components.code,{language:`yaml`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#22863A`,\"--shiki-dark\":`#8DDB8C`},children:`brainstoreWalFooterVersion`}),_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#ADBAC7`},children:`: `}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#96D0FF`},children:`\"v1\"`})]}),`\n`]})})}),_jsx(_components.p,{children:`Then apply:`}),_jsx(CodeBlock,{filename:``,numberOfLines:`5`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light github-dark-dimmed`,style:{backgroundColor:`#fff`,\"--shiki-dark-bg\":`#22272e`,color:`#24292e`,\"--shiki-dark\":`#adbac7`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`5`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#6F42C1`,\"--shiki-dark\":`#F69D50`},children:`helm`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#96D0FF`},children:` upgrade`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#96D0FF`},children:` braintrust`}),_jsx(_components.span,{style:{color:`#005CC5`,\"--shiki-dark\":`#F47067`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#96D0FF`},children:` oci://public.ecr.aws/braintrust/helm/braintrust`}),_jsx(_components.span,{style:{color:`#005CC5`,\"--shiki-dark\":`#F47067`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#005CC5`,\"--shiki-dark\":`#6CB6FF`},children:` --namespace`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#96D0FF`},children:` braintrust`}),_jsx(_components.span,{style:{color:`#005CC5`,\"--shiki-dark\":`#F47067`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#005CC5`,\"--shiki-dark\":`#6CB6FF`},children:` --version`}),_jsx(_components.span,{style:{color:`#005CC5`,\"--shiki-dark\":`#6CB6FF`},children:` 5.1.0`}),_jsx(_components.span,{style:{color:`#005CC5`,\"--shiki-dark\":`#F47067`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#005CC5`,\"--shiki-dark\":`#6CB6FF`},children:` --values`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#96D0FF`},children:` helm-values.yaml`})]}),`\n`]})})}),_jsx(_components.p,{children:`On chart v5.1.0+, pods will automatically restart after applying the upgrade.`}),_jsxs(_components.p,{children:[`Once the pods have cycled, go to `,_jsxs(_components.strong,{children:[_jsx(Icon,{icon:`settings`}),` Settings`]}),` > `,_jsx(_components.a,{href:`https://www.braintrust.dev/app/~/configuration/brainstore`,children:_jsxs(_components.strong,{children:[_jsx(Icon,{icon:`zap`}),` Brainstore`]})}),` and, under `,_jsx(_components.strong,{children:`Brainstore configuration`}),`, check the WAL footer version (`,_jsx(_components.code,{children:`BRAINSTORE_WAL_FOOTER_VERSION`}),`) row. On v1.1.32, it will show “Unable to verify setting. Please upgrade to configure.” The setting is active; Brainstore v1.1.32 does not report it back to the control plane. It will show correctly after upgrading to v2.x.`]}),_jsx(Note,{children:_jsx(_components.p,{children:`This step is strongly recommended but not mechanically enforced. Deployments running mixed WAL formats become increasingly difficult to tune at scale.`})}),_jsx(Heading,{level:`3`,id:`run-the-preflight-check-2`,children:`Run the preflight check`}),_jsxs(_components.p,{children:[`Go to `,_jsxs(_components.strong,{children:[_jsx(Icon,{icon:`settings`}),` Settings`]}),` > `,_jsx(_components.a,{href:`https://www.braintrust.dev/app/~/configuration/brainstore`,children:_jsxs(_components.strong,{children:[_jsx(Icon,{icon:`zap`}),` Brainstore`]})}),`. Under `,_jsx(_components.strong,{children:`Brainstore configuration`}),`, verify the following expected statuses before proceeding:`]}),_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Setting`}),_jsx(_components.th,{children:`Expected status`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`License`}),_jsx(_components.td,{children:`Configured`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Telemetry`}),_jsx(_components.td,{children:`Configured`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Data plane service token`}),_jsx(_components.td,{children:`Configured`})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[`Brainstore default mode (`,_jsx(_components.code,{children:`BRAINSTORE_DEFAULT`}),`)`]}),_jsx(_components.td,{children:`Configured`})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[`Insert logs (`,_jsx(_components.code,{children:`INSERT_LOGS2`}),`)`]}),_jsx(_components.td,{children:`Configured`})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[`Insert row references (`,_jsx(_components.code,{children:`BRAINSTORE_INSERT_ROW_REFS`}),`)`]}),_jsx(_components.td,{children:`Configured`})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[`Realtime WAL (`,_jsx(_components.code,{children:`BRAINSTORE_REALTIME_WAL_BUCKET`}),`)`]}),_jsx(_components.td,{children:`Configured`})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[`Ephemeral WAL (`,_jsx(_components.code,{children:`BRAINSTORE_XACT_MANAGER_URI`}),`)`]}),_jsx(_components.td,{children:`Configured`})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[`Proxy URL (`,_jsx(_components.code,{children:`BRAINSTORE_AI_PROXY_URL`}),`)`]}),_jsx(_components.td,{children:`Configured`})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[`Redis (`,_jsx(_components.code,{children:`BRAINSTORE_REDIS_URI`}),`)`]}),_jsx(_components.td,{children:`Configured`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Brainstore direct writes`}),_jsx(_components.td,{children:`”Upgrade to configure Brainstore direct writes”`})]})]})]}),_jsx(Note,{children:_jsx(_components.p,{children:`On v1.1.32, items like WAL footer version, response cache URI, and code bundle URI are not displayed. They appear only after upgrading to v2.x. The HTTP/2 check may show a warning on v1.1.32. This resolves after upgrading.`})}),_jsxs(_components.p,{children:[`If any of the first ten rows are not green, resolve them before proceeding. Contact `,_jsx(_components.a,{href:`mailto:support@braintrust.dev`,children:`Braintrust support`}),` if you need help.`]}),_jsx(Heading,{level:`3`,id:`update-workload-identity-bindings`,children:`Update Workload Identity bindings`}),_jsxs(_components.p,{children:[`Data plane v2.0 introduces API pod endpoints that access GCS directly. Prior versions only accessed GCS from Brainstore pods. The GCP IAM binding must be updated to grant the `,_jsx(_components.code,{children:`braintrust-api`}),` Kubernetes service account Workload Identity access before upgrading.`]}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`If using the Braintrust GCP Terraform module`}),`, update to `,_jsx(_components.a,{href:`https://github.com/braintrustdata/terraform-google-braintrust-data-plane/releases/tag/v1.5.2`,children:`v1.5.2`}),` and run `,_jsx(_components.code,{children:`terraform apply`}),` before upgrading Helm to v6.2.1. The updated module includes the binding for both the `,_jsx(_components.code,{children:`brainstore`}),` and `,_jsx(_components.code,{children:`braintrust-api`}),` service accounts.`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`5`,language:`hcl`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light github-dark-dimmed`,style:{backgroundColor:`#fff`,\"--shiki-dark-bg\":`#22272e`,color:`#24292e`,\"--shiki-dark\":`#adbac7`},language:`hcl`,children:_jsxs(_components.code,{language:`hcl`,numberOfLines:`5`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#6F42C1`,\"--shiki-dark\":`#F69D50`},children:`module`}),_jsx(_components.span,{style:{color:`#005CC5`,\"--shiki-dark\":`#6CB6FF`},children:` \"braintrust-data-plane\"`}),_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#ADBAC7`},children:` {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#ADBAC7`},children:` source`}),_jsx(_components.span,{style:{color:`#D73A49`,\"--shiki-dark\":`#F47067`},children:` =`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#96D0FF`},children:` \"github.com/braintrustdata/terraform-google-braintrust-data-plane?ref=v1.5.2\"`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6A737D`,\"--shiki-dark\":`#768390`},children:` # ... other configuration`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#ADBAC7`},children:`}`})}),`\n`]})})}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light github-dark-dimmed`,style:{backgroundColor:`#fff`,\"--shiki-dark-bg\":`#22272e`,color:`#24292e`,\"--shiki-dark\":`#adbac7`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#6F42C1`,\"--shiki-dark\":`#F69D50`},children:`terraform`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#96D0FF`},children:` apply`})]}),`\n`]})})}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`If managing IAM manually`}),`, add the binding:`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`4`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light github-dark-dimmed`,style:{backgroundColor:`#fff`,\"--shiki-dark-bg\":`#22272e`,color:`#24292e`,\"--shiki-dark\":`#adbac7`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`4`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#6F42C1`,\"--shiki-dark\":`#F69D50`},children:`gcloud`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#96D0FF`},children:` iam`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#96D0FF`},children:` service-accounts`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#96D0FF`},children:` add-iam-policy-binding`}),_jsx(_components.span,{style:{color:`#005CC5`,\"--shiki-dark\":`#F47067`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#D73A49`,\"--shiki-dark\":`#F47067`},children:` \u003c`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#96D0FF`},children:`brainstore-gcp-service-accoun`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#96D0FF`},children:`t`}),_jsx(_components.span,{style:{color:`#D73A49`,\"--shiki-dark\":`#F47067`},children:`>`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#96D0FF`},children:`@`}),_jsx(_components.span,{style:{color:`#D73A49`,\"--shiki-dark\":`#F47067`},children:`\u003c`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#96D0FF`},children:`projec`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#96D0FF`},children:`t`}),_jsx(_components.span,{style:{color:`#D73A49`,\"--shiki-dark\":`#F47067`},children:`>`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#96D0FF`},children:`.iam.gserviceaccount.com`}),_jsx(_components.span,{style:{color:`#005CC5`,\"--shiki-dark\":`#F47067`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#005CC5`,\"--shiki-dark\":`#6CB6FF`},children:` --role`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#96D0FF`},children:` roles/iam.workloadIdentityUser`}),_jsx(_components.span,{style:{color:`#005CC5`,\"--shiki-dark\":`#F47067`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#005CC5`,\"--shiki-dark\":`#6CB6FF`},children:` --member`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#96D0FF`},children:` \"serviceAccount:\u003cproject>.svc.id.goog[\u003cnamespace>/braintrust-api]\"`})]}),`\n`]})})}),`\n`]}),`\n`]}),_jsx(Warning,{children:_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Apply these IAM changes before upgrading to v2.x.`}),` Without this binding, the API pod will return errors on endpoints that access GCS directly.`]})}),_jsx(Heading,{level:`2`,id:`upgrade-to-v2-x-gcp`,children:`2. Upgrade to v2.x`}),_jsx(_components.p,{children:`With preflight complete, upgrade to Helm chart v6.2.1, which ships the recommended data plane v2.1.1 images. The WAL footer also bumps to v3 in the same apply.`}),_jsx(Note,{children:_jsxs(_components.p,{children:[`If you are already on Helm chart v6.2.1 with WAL footer version set to v3, skip to `,_jsx(_components.a,{href:`#enable-no-postgresql-mode-gcp`,children:`Enable no-PostgreSQL mode`}),`.`]})}),_jsx(Heading,{level:`3`,id:`apply-the-upgrade-2`,children:`Apply the upgrade`}),_jsxs(_components.p,{children:[`Update your `,_jsx(_components.code,{children:`helm-values.yaml`}),` to bump the WAL footer to v3. Because the latest chart defaults no-PostgreSQL mode on, explicitly disable it for the base upgrade. Enable it only in the next step.`]}),_jsx(CodeBlock,{filename:``,numberOfLines:`2`,language:`yaml`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light github-dark-dimmed`,style:{backgroundColor:`#fff`,\"--shiki-dark-bg\":`#22272e`,color:`#24292e`,\"--shiki-dark\":`#adbac7`},language:`yaml`,children:_jsxs(_components.code,{language:`yaml`,numberOfLines:`2`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#22863A`,\"--shiki-dark\":`#8DDB8C`},children:`brainstoreWalFooterVersion`}),_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#ADBAC7`},children:`: `}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#96D0FF`},children:`\"v3\"`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#22863A`,\"--shiki-dark\":`#8DDB8C`},children:`skipPgForBrainstoreObjects`}),_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#ADBAC7`},children:`: `}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#96D0FF`},children:`\"\"`})]}),`\n`]})})}),_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Breaking change:`}),` Chart v6.2.1 disables code function execution by default. To preserve code-backed scorers, tools, or functions on a single-org deployment, add:`]}),_jsx(CodeBlock,{filename:``,numberOfLines:`2`,language:`yaml`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light github-dark-dimmed`,style:{backgroundColor:`#fff`,\"--shiki-dark-bg\":`#22272e`,color:`#24292e`,\"--shiki-dark\":`#adbac7`},language:`yaml`,children:_jsxs(_components.code,{language:`yaml`,numberOfLines:`2`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#22863A`,\"--shiki-dark\":`#8DDB8C`},children:`api`}),_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#ADBAC7`},children:`:`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#22863A`,\"--shiki-dark\":`#8DDB8C`},children:` allowCodeFunctionExecution`}),_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#ADBAC7`},children:`: `}),_jsx(_components.span,{style:{color:`#005CC5`,\"--shiki-dark\":`#6CB6FF`},children:`true`})]}),`\n`]})})}),_jsx(Warning,{children:_jsxs(_components.p,{children:[`If your deployment uses `,_jsx(_components.code,{children:`ORG_NAME=*`}),` or hosts multiple Braintrust organizations, `,_jsx(_components.a,{href:`mailto:support@braintrust.dev`,children:`contact Braintrust`}),` before enabling code function execution.`]})}),_jsx(_components.p,{children:`Apply Helm chart v6.2.1:`}),_jsx(CodeBlock,{filename:``,numberOfLines:`5`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light github-dark-dimmed`,style:{backgroundColor:`#fff`,\"--shiki-dark-bg\":`#22272e`,color:`#24292e`,\"--shiki-dark\":`#adbac7`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`5`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#6F42C1`,\"--shiki-dark\":`#F69D50`},children:`helm`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#96D0FF`},children:` upgrade`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#96D0FF`},children:` braintrust`}),_jsx(_components.span,{style:{color:`#005CC5`,\"--shiki-dark\":`#F47067`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#96D0FF`},children:` oci://public.ecr.aws/braintrust/helm/braintrust`}),_jsx(_components.span,{style:{color:`#005CC5`,\"--shiki-dark\":`#F47067`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#005CC5`,\"--shiki-dark\":`#6CB6FF`},children:` --namespace`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#96D0FF`},children:` braintrust`}),_jsx(_components.span,{style:{color:`#005CC5`,\"--shiki-dark\":`#F47067`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#005CC5`,\"--shiki-dark\":`#6CB6FF`},children:` --version`}),_jsx(_components.span,{style:{color:`#005CC5`,\"--shiki-dark\":`#6CB6FF`},children:` 6.2.1`}),_jsx(_components.span,{style:{color:`#005CC5`,\"--shiki-dark\":`#F47067`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#005CC5`,\"--shiki-dark\":`#6CB6FF`},children:` --values`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#96D0FF`},children:` helm-values.yaml`})]}),`\n`]})})}),_jsx(_components.p,{children:`Pods will automatically restart after applying the upgrade.`}),_jsx(Heading,{level:`3`,id:`verify-settings-2`,children:`Verify settings`}),_jsxs(_components.p,{children:[`After the pods have cycled, go to `,_jsxs(_components.strong,{children:[_jsx(Icon,{icon:`settings`}),` Settings`]}),` > `,_jsx(_components.a,{href:`https://www.braintrust.dev/app/~/configuration/brainstore`,children:_jsxs(_components.strong,{children:[_jsx(Icon,{icon:`zap`}),` Brainstore`]})}),` and, under `,_jsx(_components.strong,{children:`Brainstore configuration`}),`, verify the following are all green:`]}),_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Setting`}),_jsx(_components.th,{children:`Expected status`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`License`}),_jsx(_components.td,{children:`Configured`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Telemetry`}),_jsx(_components.td,{children:`Configured`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Data plane service token`}),_jsx(_components.td,{children:`Configured`})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[`Brainstore default mode (`,_jsx(_components.code,{children:`BRAINSTORE_DEFAULT`}),`)`]}),_jsx(_components.td,{children:`Configured`})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[`Insert logs (`,_jsx(_components.code,{children:`INSERT_LOGS2`}),`)`]}),_jsx(_components.td,{children:`Configured`})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[`Insert row references (`,_jsx(_components.code,{children:`BRAINSTORE_INSERT_ROW_REFS`}),`)`]}),_jsx(_components.td,{children:`Configured`})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[`Realtime WAL (`,_jsx(_components.code,{children:`BRAINSTORE_REALTIME_WAL_BUCKET`}),`)`]}),_jsx(_components.td,{children:`Configured`})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[`Ephemeral WAL (`,_jsx(_components.code,{children:`BRAINSTORE_XACT_MANAGER_URI`}),`)`]}),_jsx(_components.td,{children:`Configured`})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[`Proxy URL (`,_jsx(_components.code,{children:`BRAINSTORE_AI_PROXY_URL`}),`)`]}),_jsx(_components.td,{children:`Configured`})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[`Redis (`,_jsx(_components.code,{children:`BRAINSTORE_REDIS_URI`}),`)`]}),_jsx(_components.td,{children:`Configured`})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[`Response cache URI (`,_jsx(_components.code,{children:`BRAINSTORE_RESPONSE_CACHE_URI`}),`)`]}),_jsx(_components.td,{children:`Configured`})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[`Code bundle URI (`,_jsx(_components.code,{children:`BRAINSTORE_CODE_BUNDLE_URI`}),`)`]}),_jsx(_components.td,{children:`Configured`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`HTTP/2`}),_jsx(_components.td,{children:`Data plane is using HTTP/2 or higher`})]})]})]}),_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Brainstore direct writes`}),` will show “Upgrade to configure Brainstore direct writes.” This is enabled in the next step.`]}),_jsx(Heading,{level:`3`,id:`validate-the-base-upgrade-2`,children:`Validate the base upgrade`}),_jsx(_components.p,{children:`Before enabling no-PostgreSQL mode, validate the workloads your team relies on. For example, trace one production-shaped request, run an eval suite you use regularly, and invoke or iterate on a prompt. If you use online scorers or automations, trigger one through its normal online path. For trace-level scorers, choose one that uses full trace context. If these workflows round-trip cleanly through the data plane and look right in the UI, continue to no-PostgreSQL mode.`}),_jsx(Heading,{level:`3`,id:`enable-no-postgresql-mode-gcp`,children:`Enable no-PostgreSQL mode`}),_jsxs(_components.p,{children:[`No-PostgreSQL mode removes PostgreSQL from the Brainstore write path, delivering higher ingestion throughput. This step is a prerequisite for `,_jsx(_components.a,{href:`/observe/topics`,children:`Topics`}),` but does not enable them.`]}),_jsx(Warning,{children:_jsx(_components.p,{children:`The switch to no-PostgreSQL mode is one-way: Once Brainstore is writing data directly, rolling back requires downtime to drain and re-ingest. Enable it only when you are ready to commit.`})}),_jsxs(_components.p,{children:[`Set `,_jsx(_components.code,{children:`skipPgForBrainstoreObjects`}),` in your `,_jsx(_components.code,{children:`helm-values.yaml`}),`:`]}),_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`yaml`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light github-dark-dimmed`,style:{backgroundColor:`#fff`,\"--shiki-dark-bg\":`#22272e`,color:`#24292e`,\"--shiki-dark\":`#adbac7`},language:`yaml`,children:_jsxs(_components.code,{language:`yaml`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#22863A`,\"--shiki-dark\":`#8DDB8C`},children:`skipPgForBrainstoreObjects`}),_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#ADBAC7`},children:`: `}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#96D0FF`},children:`\"all\"`})]}),`\n`]})})}),_jsx(_components.p,{children:`Keep Helm chart v6.2.1 and apply the updated values:`}),_jsx(CodeBlock,{filename:``,numberOfLines:`5`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light github-dark-dimmed`,style:{backgroundColor:`#fff`,\"--shiki-dark-bg\":`#22272e`,color:`#24292e`,\"--shiki-dark\":`#adbac7`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`5`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#6F42C1`,\"--shiki-dark\":`#F69D50`},children:`helm`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#96D0FF`},children:` upgrade`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#96D0FF`},children:` braintrust`}),_jsx(_components.span,{style:{color:`#005CC5`,\"--shiki-dark\":`#F47067`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#96D0FF`},children:` oci://public.ecr.aws/braintrust/helm/braintrust`}),_jsx(_components.span,{style:{color:`#005CC5`,\"--shiki-dark\":`#F47067`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#005CC5`,\"--shiki-dark\":`#6CB6FF`},children:` --namespace`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#96D0FF`},children:` braintrust`}),_jsx(_components.span,{style:{color:`#005CC5`,\"--shiki-dark\":`#F47067`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#005CC5`,\"--shiki-dark\":`#6CB6FF`},children:` --version`}),_jsx(_components.span,{style:{color:`#005CC5`,\"--shiki-dark\":`#6CB6FF`},children:` 6.2.1`}),_jsx(_components.span,{style:{color:`#005CC5`,\"--shiki-dark\":`#F47067`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#005CC5`,\"--shiki-dark\":`#6CB6FF`},children:` --values`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#96D0FF`},children:` helm-values.yaml`})]}),`\n`]})})}),_jsx(_components.p,{children:`Then repeat the same workload validation after enabling no-PostgreSQL mode. If the same representative workflows round-trip cleanly through the data plane and look right in the UI, proceed to the next environment.`}),_jsx(Heading,{level:`3`,id:`enable-topics-2`,children:`Enable Topics`}),_jsxs(_components.p,{children:[_jsx(_components.a,{href:`/observe/topics`,children:`Topics`}),` for self-hosted deployments has specific deployment, inference, billing, and maintenance requirements, and Braintrust must grant access to your organization. Completing the full v2.x upgrade and no-PostgreSQL mode migration is a prerequisite, and the following conditions must also be met before Topics can be enabled:`]}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Standard deployment required.`}),` Topics is supported on standard Terraform/Helm deployments only. Custom Kubernetes clusters using the Helm chart on non-standard infrastructure are not supported.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Braintrust-hosted inference required.`}),` Topics runs LLM calls on models hosted by Braintrust with Zero Data Retention (ZDR). Bring-your-own-model is not supported. Currently US-only.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Built-in models must be enabled.`}),` Self-hosted organizations have `,_jsx(_components.a,{href:`/admin/ai-providers#manage-built-in-models`,children:`built-in models`}),` disabled by default, so no trace data leaves your network boundary unless you opt in. Because Topics depends on built-in models, an admin must explicitly enable them before Topics can run.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Pricing is not included by default.`}),` Topics usage is not covered by standard contracts. Discuss pricing with your account team before proceeding.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Ongoing maintenance required.`}),` Self-hosted Topics deployments run on a frequent-release build track separate from the tagged data plane versions and will require regular upgrades to receive the latest fixes and improvements.`]}),`\n`]}),_jsxs(_components.p,{children:[`If you meet all of these requirements and want to proceed, contact your account team or `,_jsx(_components.a,{href:`mailto:support@braintrust.dev`,children:`Braintrust support`}),`. Until Braintrust enables Topics access for your organization, the Topics page and Topics automations remain blocked, even after the upgrade and no-PostgreSQL migration are complete.`]}),_jsx(Heading,{level:`2`,id:`configuration-reference-2`,children:`Configuration reference`}),_jsx(Accordion,{title:`Core configuration (auto-set by Helm v5.1.0)`,id:`core-configuration-auto-set-by-helm-v5-1-0`,children:_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Variable`}),_jsx(_components.th,{children:`Source`}),_jsx(_components.th,{children:`Pods`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`BRAINSTORE_REDIS_URI`})}),_jsxs(_components.td,{children:[`From `,_jsx(_components.code,{children:`REDIS_URL`}),` secret`]}),_jsx(_components.td,{children:`reader, writer, fastreader`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`BRAINSTORE_DEFAULT`})}),_jsxs(_components.td,{children:[`Hardcoded `,_jsx(_components.code,{children:`\"force\"`})]}),_jsx(_components.td,{children:`API`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`INSERT_LOGS2`})}),_jsxs(_components.td,{children:[`Hardcoded `,_jsx(_components.code,{children:`\"true\"`})]}),_jsx(_components.td,{children:`API`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`BRAINSTORE_INSERT_ROW_REFS`})}),_jsxs(_components.td,{children:[`Hardcoded `,_jsx(_components.code,{children:`\"true\"`})]}),_jsx(_components.td,{children:`API`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`BRAINSTORE_REALTIME_WAL_BUCKET`})}),_jsxs(_components.td,{children:[`From `,_jsx(_components.code,{children:`objectStorage`}),` values`]}),_jsx(_components.td,{children:`API`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`BRAINSTORE_AI_PROXY_URL`})}),_jsxs(_components.td,{children:[`Built from `,_jsx(_components.code,{children:`api.name`}),` and `,_jsx(_components.code,{children:`api.service.port`})]}),_jsx(_components.td,{children:`reader, writer, fastreader`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`BRAINSTORE_XACT_MANAGER_URI`})}),_jsxs(_components.td,{children:[`From `,_jsx(_components.code,{children:`REDIS_URL`}),` secret`]}),_jsx(_components.td,{children:`reader, writer, fastreader`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`BRAINSTORE_RESPONSE_CACHE_URI`})}),_jsxs(_components.td,{children:[`Auto-derived from `,_jsx(_components.code,{children:`objectStorage`}),` config`]}),_jsx(_components.td,{children:`reader, writer, fastreader`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`BRAINSTORE_CODE_BUNDLE_URI`})}),_jsxs(_components.td,{children:[`Auto-derived from `,_jsx(_components.code,{children:`objectStorage`}),` config`]}),_jsx(_components.td,{children:`reader, writer, fastreader`})]})]})]})}),_jsxs(Accordion,{title:`WAL footer version (requires explicit configuration)`,id:`wal-footer-version-requires-explicit-configuration-1`,children:[_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Variable`}),_jsx(_components.th,{children:`How to set`}),_jsx(_components.th,{children:`Since`}),_jsx(_components.th,{children:`Pods`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`BRAINSTORE_WAL_FOOTER_VERSION`})}),_jsxs(_components.td,{children:[`Set `,_jsx(_components.code,{children:`brainstoreWalFooterVersion`}),` in `,_jsx(_components.code,{children:`helm-values.yaml`})]}),_jsx(_components.td,{\"data-numeric\":`true`,children:`v5.1.0`}),_jsx(_components.td,{children:`API`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`BRAINSTORE_WAL_USE_EFFICIENT_FORMAT`})}),_jsxs(_components.td,{children:[`Auto-enabled when either `,_jsx(_components.code,{children:`brainstoreWalFooterVersion`}),` or `,_jsx(_components.code,{children:`skipPgForBrainstoreObjects`}),` is set`]}),_jsx(_components.td,{\"data-numeric\":`true`,children:`v5.1.0`}),_jsx(_components.td,{children:`API`})]})]})]}),_jsxs(_components.p,{children:[`Set `,_jsx(_components.code,{children:`brainstoreWalFooterVersion: \"v1\"`}),` as part of the pre-upgrade steps. Only set to `,_jsx(_components.code,{children:`\"v3\"`}),` after successfully deploying v2.x.`]})]}),_jsxs(Accordion,{title:`No-PostgreSQL mode (opt-in, post-upgrade)`,id:`no-postgresql-mode-opt-in-post-upgrade-1`,children:[_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Variable`}),_jsx(_components.th,{children:`How to set`}),_jsx(_components.th,{children:`Since`}),_jsx(_components.th,{children:`Pods`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`SKIP_PG_FOR_BRAINSTORE_OBJECTS`})}),_jsxs(_components.td,{children:[`Set `,_jsx(_components.code,{children:`skipPgForBrainstoreObjects`}),` in `,_jsx(_components.code,{children:`helm-values.yaml`})]}),_jsx(_components.td,{\"data-numeric\":`true`,children:`v5.1.0`}),_jsx(_components.td,{children:`API`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`BRAINSTORE_ASYNC_SCORING_OBJECTS`})}),_jsxs(_components.td,{children:[`Auto-derived from `,_jsx(_components.code,{children:`skipPgForBrainstoreObjects`})]}),_jsx(_components.td,{\"data-numeric\":`true`,children:`v5.1.0`}),_jsx(_components.td,{children:`reader, writer, fastreader`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`BRAINSTORE_LOG_AUTOMATIONS_OBJECTS`})}),_jsxs(_components.td,{children:[`Auto-derived from `,_jsx(_components.code,{children:`skipPgForBrainstoreObjects`})]}),_jsx(_components.td,{\"data-numeric\":`true`,children:`v5.1.0`}),_jsx(_components.td,{children:`reader, writer, fastreader`})]})]})]}),_jsxs(_components.p,{children:[`Setting `,_jsx(_components.code,{children:`skipPgForBrainstoreObjects: \"all\"`}),` is a prerequisite for enabling Topics. The chart automatically fans this value out to `,_jsx(_components.code,{children:`BRAINSTORE_ASYNC_SCORING_OBJECTS`}),` and `,_jsx(_components.code,{children:`BRAINSTORE_LOG_AUTOMATIONS_OBJECTS`}),`.`]})]})]}),_jsxs(Tab,{title:`Azure`,icon:`https://img.logo.dev/azure.microsoft.com?token=pk_BdcHD9e5SCW3j1rnJkNyMQ`,id:`azure`,\"data-child-heading-ids\":`[\"1-prepare-for-v2-x-3\",\"upgrade-helm-chart-2\",\"enable-efficient-wal-format-azure\",\"run-the-preflight-check-3\",\"update-terraform-module\",\"upgrade-to-v2-x-azure\",\"apply-the-upgrade-3\",\"verify-settings-3\",\"validate-the-base-upgrade-3\",\"enable-no-postgresql-mode-azure\",\"enable-topics-3\",\"configuration-reference-3\"]`,children:[_jsx(_components.p,{children:`This guide shows the process for upgrading the Braintrust data plane to v2.x in your Azure account.`}),_jsx(Heading,{level:`2`,id:`1-prepare-for-v2-x-3`,children:`1. Prepare for v2.x`}),_jsx(_components.p,{children:`Before upgrading to data plane v2.x, you need to reach Helm chart v5.0.1 (data plane v1.1.32) and enable the efficient WAL format. v1.1.32 is the required foundation for v2.x. It ensures all Brainstore configuration is in place and verified before the upgrade.`}),_jsx(Heading,{level:`3`,id:`upgrade-helm-chart-2`,children:`Upgrade Helm chart`}),_jsx(_components.p,{children:`Check your current Helm chart version:`}),_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light github-dark-dimmed`,style:{backgroundColor:`#fff`,\"--shiki-dark-bg\":`#22272e`,color:`#24292e`,\"--shiki-dark\":`#adbac7`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#6F42C1`,\"--shiki-dark\":`#F69D50`},children:`helm`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#96D0FF`},children:` list`}),_jsx(_components.span,{style:{color:`#005CC5`,\"--shiki-dark\":`#6CB6FF`},children:` -n`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#96D0FF`},children:` braintrust`})]}),`\n`]})})}),_jsx(_components.p,{children:`Then follow the path for your starting point:`}),_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Starting version`}),_jsx(_components.th,{children:`Sub-steps to follow`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Helm chart \u003c v3.1.1`}),_jsx(_components.td,{children:`1 → 2 → 3`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Helm chart v3.x`}),_jsx(_components.td,{\"data-numeric\":`true`,children:`2 → 3`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Helm chart v4.x`}),_jsx(_components.td,{children:`3 only`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Helm chart v5.0.1`}),_jsxs(_components.td,{children:[`Skip to `,_jsx(_components.a,{href:`#enable-efficient-wal-format-azure`,children:`Enable efficient WAL format`})]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Helm chart v6.0.0, v6.1.0, or v6.2.0`}),_jsxs(_components.td,{children:[`Skip to `,_jsx(_components.a,{href:`#upgrade-to-v2-x-azure`,children:`Upgrade to v2.x`})]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Helm chart v6.2.1+`}),_jsxs(_components.td,{children:[`Skip to `,_jsx(_components.a,{href:`#enable-no-postgresql-mode-azure`,children:`Enable no-PostgreSQL mode`})]})]})]})]}),_jsxs(Steps,{children:[_jsxs(Step,{title:`Upgrade to Helm chart v3.1.1`,children:[_jsx(_components.p,{children:`This upgrades the data plane from v1.1.27 to v1.1.31. There are no breaking changes.`}),_jsx(CodeBlock,{filename:``,numberOfLines:`5`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light github-dark-dimmed`,style:{backgroundColor:`#fff`,\"--shiki-dark-bg\":`#22272e`,color:`#24292e`,\"--shiki-dark\":`#adbac7`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`5`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#6F42C1`,\"--shiki-dark\":`#F69D50`},children:`helm`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#96D0FF`},children:` upgrade`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#96D0FF`},children:` braintrust`}),_jsx(_components.span,{style:{color:`#005CC5`,\"--shiki-dark\":`#F47067`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#96D0FF`},children:` oci://public.ecr.aws/braintrust/helm/braintrust`}),_jsx(_components.span,{style:{color:`#005CC5`,\"--shiki-dark\":`#F47067`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#005CC5`,\"--shiki-dark\":`#6CB6FF`},children:` --namespace`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#96D0FF`},children:` braintrust`}),_jsx(_components.span,{style:{color:`#005CC5`,\"--shiki-dark\":`#F47067`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#005CC5`,\"--shiki-dark\":`#6CB6FF`},children:` --version`}),_jsx(_components.span,{style:{color:`#005CC5`,\"--shiki-dark\":`#6CB6FF`},children:` 3.1.1`}),_jsx(_components.span,{style:{color:`#005CC5`,\"--shiki-dark\":`#F47067`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#005CC5`,\"--shiki-dark\":`#6CB6FF`},children:` --values`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#96D0FF`},children:` helm-values.yaml`})]}),`\n`]})})}),_jsx(_components.p,{children:`After applying, restart pods:`}),_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light github-dark-dimmed`,style:{backgroundColor:`#fff`,\"--shiki-dark-bg\":`#22272e`,color:`#24292e`,\"--shiki-dark\":`#adbac7`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#6F42C1`,\"--shiki-dark\":`#F69D50`},children:`kubectl`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#96D0FF`},children:` rollout`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#96D0FF`},children:` restart`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#96D0FF`},children:` deployment`}),_jsx(_components.span,{style:{color:`#005CC5`,\"--shiki-dark\":`#6CB6FF`},children:` -n`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#96D0FF`},children:` braintrust`})]}),`\n`]})})})]}),_jsxs(Step,{title:`Upgrade to Helm chart v4.0.0`,children:[_jsxs(_components.p,{children:[`This step upgrades the data plane to v1.1.32 and introduces bidirectional communication between Brainstore and API pods. Brainstore now needs to reach the API pods. The chart auto-sets `,_jsx(_components.code,{children:`BRAINSTORE_AI_PROXY_URL`}),` to `,_jsx(_components.code,{children:`http://braintrust-api:8000`}),`.`]}),_jsx(Warning,{children:_jsx(_components.p,{children:`If your cluster has network policies or security rules restricting traffic between pods, allow Brainstore pods to reach the API service on port 8000 before upgrading.`})}),_jsx(CodeBlock,{filename:``,numberOfLines:`5`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light github-dark-dimmed`,style:{backgroundColor:`#fff`,\"--shiki-dark-bg\":`#22272e`,color:`#24292e`,\"--shiki-dark\":`#adbac7`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`5`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#6F42C1`,\"--shiki-dark\":`#F69D50`},children:`helm`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#96D0FF`},children:` upgrade`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#96D0FF`},children:` braintrust`}),_jsx(_components.span,{style:{color:`#005CC5`,\"--shiki-dark\":`#F47067`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#96D0FF`},children:` oci://public.ecr.aws/braintrust/helm/braintrust`}),_jsx(_components.span,{style:{color:`#005CC5`,\"--shiki-dark\":`#F47067`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#005CC5`,\"--shiki-dark\":`#6CB6FF`},children:` --namespace`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#96D0FF`},children:` braintrust`}),_jsx(_components.span,{style:{color:`#005CC5`,\"--shiki-dark\":`#F47067`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#005CC5`,\"--shiki-dark\":`#6CB6FF`},children:` --version`}),_jsx(_components.span,{style:{color:`#005CC5`,\"--shiki-dark\":`#6CB6FF`},children:` 4.0.0`}),_jsx(_components.span,{style:{color:`#005CC5`,\"--shiki-dark\":`#F47067`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#005CC5`,\"--shiki-dark\":`#6CB6FF`},children:` --values`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#96D0FF`},children:` helm-values.yaml`})]}),`\n`]})})}),_jsx(_components.p,{children:`After applying, restart pods:`}),_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light github-dark-dimmed`,style:{backgroundColor:`#fff`,\"--shiki-dark-bg\":`#22272e`,color:`#24292e`,\"--shiki-dark\":`#adbac7`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#6F42C1`,\"--shiki-dark\":`#F69D50`},children:`kubectl`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#96D0FF`},children:` rollout`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#96D0FF`},children:` restart`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#96D0FF`},children:` deployment`}),_jsx(_components.span,{style:{color:`#005CC5`,\"--shiki-dark\":`#6CB6FF`},children:` -n`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#96D0FF`},children:` braintrust`})]}),`\n`]})})})]}),_jsxs(Step,{title:`Upgrade to Helm chart v5.0.1`,children:[_jsxs(_components.p,{children:[`This step enables fast readers, isolated Brainstore nodes that handle common UI queries. Fast readers are enabled by default with 2 replicas and use the same node spec as standard readers, `,_jsx(_components.strong,{children:`increasing your cluster node count by 2`}),`. You can upgrade directly to v5.0.1 from any v4.x version.`]}),_jsx(Warning,{children:_jsxs(_components.p,{children:[`Before upgrading, account for 2 additional fast reader nodes in your cluster capacity. If you have customized `,_jsx(_components.code,{children:`brainstore.reader`}),` settings in `,_jsx(_components.code,{children:`values.yaml`}),`, mirror those customizations to the new `,_jsx(_components.code,{children:`brainstore.fastreader`}),` block. See `,_jsx(_components.a,{href:`/admin/self-hosting/configure/scaling#configure-fast-readers`,children:`Configure Brainstore fast readers`}),` for details.`]})}),_jsx(CodeBlock,{filename:``,numberOfLines:`5`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light github-dark-dimmed`,style:{backgroundColor:`#fff`,\"--shiki-dark-bg\":`#22272e`,color:`#24292e`,\"--shiki-dark\":`#adbac7`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`5`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#6F42C1`,\"--shiki-dark\":`#F69D50`},children:`helm`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#96D0FF`},children:` upgrade`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#96D0FF`},children:` braintrust`}),_jsx(_components.span,{style:{color:`#005CC5`,\"--shiki-dark\":`#F47067`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#96D0FF`},children:` oci://public.ecr.aws/braintrust/helm/braintrust`}),_jsx(_components.span,{style:{color:`#005CC5`,\"--shiki-dark\":`#F47067`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#005CC5`,\"--shiki-dark\":`#6CB6FF`},children:` --namespace`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#96D0FF`},children:` braintrust`}),_jsx(_components.span,{style:{color:`#005CC5`,\"--shiki-dark\":`#F47067`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#005CC5`,\"--shiki-dark\":`#6CB6FF`},children:` --version`}),_jsx(_components.span,{style:{color:`#005CC5`,\"--shiki-dark\":`#6CB6FF`},children:` 5.0.1`}),_jsx(_components.span,{style:{color:`#005CC5`,\"--shiki-dark\":`#F47067`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#005CC5`,\"--shiki-dark\":`#6CB6FF`},children:` --values`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#96D0FF`},children:` helm-values.yaml`})]}),`\n`]})})}),_jsx(_components.p,{children:`After applying, restart pods:`}),_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light github-dark-dimmed`,style:{backgroundColor:`#fff`,\"--shiki-dark-bg\":`#22272e`,color:`#24292e`,\"--shiki-dark\":`#adbac7`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#6F42C1`,\"--shiki-dark\":`#F69D50`},children:`kubectl`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#96D0FF`},children:` rollout`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#96D0FF`},children:` restart`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#96D0FF`},children:` deployment`}),_jsx(_components.span,{style:{color:`#005CC5`,\"--shiki-dark\":`#6CB6FF`},children:` -n`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#96D0FF`},children:` braintrust`})]}),`\n`]})})})]})]}),_jsx(Heading,{level:`3`,id:`enable-efficient-wal-format-azure`,children:`Enable efficient WAL format`}),_jsx(Warning,{children:_jsxs(_components.p,{children:[`This must be a separate `,_jsx(_components.code,{children:`helm upgrade`}),` after confirming all pods are running v1.1.32. Setting this during the same upgrade as the version bump risks Brainstore nodes still rolling out being unable to read the new WAL format.`]})}),_jsxs(_components.p,{children:[`Set `,_jsx(_components.code,{children:`brainstoreWalFooterVersion`}),` in your `,_jsx(_components.code,{children:`helm-values.yaml`}),`:`]}),_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`yaml`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light github-dark-dimmed`,style:{backgroundColor:`#fff`,\"--shiki-dark-bg\":`#22272e`,color:`#24292e`,\"--shiki-dark\":`#adbac7`},language:`yaml`,children:_jsxs(_components.code,{language:`yaml`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#22863A`,\"--shiki-dark\":`#8DDB8C`},children:`brainstoreWalFooterVersion`}),_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#ADBAC7`},children:`: `}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#96D0FF`},children:`\"v1\"`})]}),`\n`]})})}),_jsx(_components.p,{children:`Then apply:`}),_jsx(CodeBlock,{filename:``,numberOfLines:`5`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light github-dark-dimmed`,style:{backgroundColor:`#fff`,\"--shiki-dark-bg\":`#22272e`,color:`#24292e`,\"--shiki-dark\":`#adbac7`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`5`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#6F42C1`,\"--shiki-dark\":`#F69D50`},children:`helm`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#96D0FF`},children:` upgrade`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#96D0FF`},children:` braintrust`}),_jsx(_components.span,{style:{color:`#005CC5`,\"--shiki-dark\":`#F47067`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#96D0FF`},children:` oci://public.ecr.aws/braintrust/helm/braintrust`}),_jsx(_components.span,{style:{color:`#005CC5`,\"--shiki-dark\":`#F47067`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#005CC5`,\"--shiki-dark\":`#6CB6FF`},children:` --namespace`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#96D0FF`},children:` braintrust`}),_jsx(_components.span,{style:{color:`#005CC5`,\"--shiki-dark\":`#F47067`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#005CC5`,\"--shiki-dark\":`#6CB6FF`},children:` --version`}),_jsx(_components.span,{style:{color:`#005CC5`,\"--shiki-dark\":`#6CB6FF`},children:` 5.1.0`}),_jsx(_components.span,{style:{color:`#005CC5`,\"--shiki-dark\":`#F47067`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#005CC5`,\"--shiki-dark\":`#6CB6FF`},children:` --values`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#96D0FF`},children:` helm-values.yaml`})]}),`\n`]})})}),_jsx(_components.p,{children:`On chart v5.1.0+, pods will automatically restart after applying the upgrade.`}),_jsxs(_components.p,{children:[`Once the pods have cycled, go to `,_jsxs(_components.strong,{children:[_jsx(Icon,{icon:`settings`}),` Settings`]}),` > `,_jsx(_components.a,{href:`https://www.braintrust.dev/app/~/configuration/brainstore`,children:_jsxs(_components.strong,{children:[_jsx(Icon,{icon:`zap`}),` Brainstore`]})}),` and, under `,_jsx(_components.strong,{children:`Brainstore configuration`}),`, check the WAL footer version (`,_jsx(_components.code,{children:`BRAINSTORE_WAL_FOOTER_VERSION`}),`) row. On v1.1.32, it will show “Unable to verify setting. Please upgrade to configure.” The setting is active; Brainstore v1.1.32 does not report it back to the control plane. It will show correctly after upgrading to v2.x.`]}),_jsx(Note,{children:_jsx(_components.p,{children:`This step is strongly recommended but not mechanically enforced. Deployments running mixed WAL formats become increasingly difficult to tune at scale.`})}),_jsx(Heading,{level:`3`,id:`run-the-preflight-check-3`,children:`Run the preflight check`}),_jsxs(_components.p,{children:[`Go to `,_jsxs(_components.strong,{children:[_jsx(Icon,{icon:`settings`}),` Settings`]}),` > `,_jsx(_components.a,{href:`https://www.braintrust.dev/app/~/configuration/brainstore`,children:_jsxs(_components.strong,{children:[_jsx(Icon,{icon:`zap`}),` Brainstore`]})}),`. Under `,_jsx(_components.strong,{children:`Brainstore configuration`}),`, verify the following expected statuses before proceeding:`]}),_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Setting`}),_jsx(_components.th,{children:`Expected status`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`License`}),_jsx(_components.td,{children:`Configured`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Telemetry`}),_jsx(_components.td,{children:`Configured`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Data plane service token`}),_jsx(_components.td,{children:`Configured`})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[`Brainstore default mode (`,_jsx(_components.code,{children:`BRAINSTORE_DEFAULT`}),`)`]}),_jsx(_components.td,{children:`Configured`})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[`Insert logs (`,_jsx(_components.code,{children:`INSERT_LOGS2`}),`)`]}),_jsx(_components.td,{children:`Configured`})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[`Insert row references (`,_jsx(_components.code,{children:`BRAINSTORE_INSERT_ROW_REFS`}),`)`]}),_jsx(_components.td,{children:`Configured`})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[`Realtime WAL (`,_jsx(_components.code,{children:`BRAINSTORE_REALTIME_WAL_BUCKET`}),`)`]}),_jsx(_components.td,{children:`Configured`})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[`Ephemeral WAL (`,_jsx(_components.code,{children:`BRAINSTORE_XACT_MANAGER_URI`}),`)`]}),_jsx(_components.td,{children:`Configured`})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[`Proxy URL (`,_jsx(_components.code,{children:`BRAINSTORE_AI_PROXY_URL`}),`)`]}),_jsx(_components.td,{children:`Configured`})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[`Redis (`,_jsx(_components.code,{children:`BRAINSTORE_REDIS_URI`}),`)`]}),_jsx(_components.td,{children:`Configured`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Brainstore direct writes`}),_jsx(_components.td,{children:`”Upgrade to configure Brainstore direct writes”`})]})]})]}),_jsx(Note,{children:_jsx(_components.p,{children:`On v1.1.32, items like WAL footer version, response cache URI, and code bundle URI are not displayed. They appear only after upgrading to v2.x. The HTTP/2 check may show a warning on v1.1.32. This resolves after upgrading.`})}),_jsxs(_components.p,{children:[`If any of the first ten rows are not green, resolve them before proceeding. Contact `,_jsx(_components.a,{href:`mailto:support@braintrust.dev`,children:`Braintrust support`}),` if you need help.`]}),_jsx(Heading,{level:`3`,id:`update-terraform-module`,children:`Update Terraform module`}),_jsxs(_components.p,{children:[`Update the Braintrust Azure Terraform module to `,_jsx(_components.a,{href:`https://github.com/braintrustdata/terraform-azure-braintrust-data-plane/releases/tag/v1.1.0`,children:`v1.1.0`}),` and apply before upgrading Helm to v6.2.1:`]}),_jsx(CodeBlock,{filename:``,numberOfLines:`5`,language:`hcl`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light github-dark-dimmed`,style:{backgroundColor:`#fff`,\"--shiki-dark-bg\":`#22272e`,color:`#24292e`,\"--shiki-dark\":`#adbac7`},language:`hcl`,children:_jsxs(_components.code,{language:`hcl`,numberOfLines:`5`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#6F42C1`,\"--shiki-dark\":`#F69D50`},children:`module`}),_jsx(_components.span,{style:{color:`#005CC5`,\"--shiki-dark\":`#6CB6FF`},children:` \"braintrust-data-plane\"`}),_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#ADBAC7`},children:` {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#ADBAC7`},children:` source`}),_jsx(_components.span,{style:{color:`#D73A49`,\"--shiki-dark\":`#F47067`},children:` =`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#96D0FF`},children:` \"github.com/braintrustdata/terraform-azure-braintrust-data-plane?ref=v1.1.0\"`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6A737D`,\"--shiki-dark\":`#768390`},children:` # ... other configuration`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#ADBAC7`},children:`}`})}),`\n`]})})}),_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light github-dark-dimmed`,style:{backgroundColor:`#fff`,\"--shiki-dark-bg\":`#22272e`,color:`#24292e`,\"--shiki-dark\":`#adbac7`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#6F42C1`,\"--shiki-dark\":`#F69D50`},children:`terraform`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#96D0FF`},children:` apply`})]}),`\n`]})})}),_jsx(Heading,{level:`2`,id:`upgrade-to-v2-x-azure`,children:`2. Upgrade to v2.x`}),_jsx(_components.p,{children:`With preflight complete, upgrade to Helm chart v6.2.1, which ships the recommended data plane v2.1.1 images. The WAL footer also bumps to v3 in the same apply.`}),_jsx(Note,{children:_jsxs(_components.p,{children:[`If you are already on Helm chart v6.2.1 with WAL footer version set to v3, skip to `,_jsx(_components.a,{href:`#enable-no-postgresql-mode-azure`,children:`Enable no-PostgreSQL mode`}),`.`]})}),_jsx(Heading,{level:`3`,id:`apply-the-upgrade-3`,children:`Apply the upgrade`}),_jsxs(_components.p,{children:[`Update your `,_jsx(_components.code,{children:`helm-values.yaml`}),` to bump the WAL footer to v3. Because the latest chart defaults no-PostgreSQL mode on, explicitly disable it for the base upgrade. Enable it only in the next step.`]}),_jsx(CodeBlock,{filename:``,numberOfLines:`2`,language:`yaml`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light github-dark-dimmed`,style:{backgroundColor:`#fff`,\"--shiki-dark-bg\":`#22272e`,color:`#24292e`,\"--shiki-dark\":`#adbac7`},language:`yaml`,children:_jsxs(_components.code,{language:`yaml`,numberOfLines:`2`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#22863A`,\"--shiki-dark\":`#8DDB8C`},children:`brainstoreWalFooterVersion`}),_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#ADBAC7`},children:`: `}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#96D0FF`},children:`\"v3\"`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#22863A`,\"--shiki-dark\":`#8DDB8C`},children:`skipPgForBrainstoreObjects`}),_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#ADBAC7`},children:`: `}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#96D0FF`},children:`\"\"`})]}),`\n`]})})}),_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Breaking change:`}),` Chart v6.2.1 disables code function execution by default. To preserve code-backed scorers, tools, or functions on a single-org deployment, add:`]}),_jsx(CodeBlock,{filename:``,numberOfLines:`2`,language:`yaml`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light github-dark-dimmed`,style:{backgroundColor:`#fff`,\"--shiki-dark-bg\":`#22272e`,color:`#24292e`,\"--shiki-dark\":`#adbac7`},language:`yaml`,children:_jsxs(_components.code,{language:`yaml`,numberOfLines:`2`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#22863A`,\"--shiki-dark\":`#8DDB8C`},children:`api`}),_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#ADBAC7`},children:`:`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#22863A`,\"--shiki-dark\":`#8DDB8C`},children:` allowCodeFunctionExecution`}),_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#ADBAC7`},children:`: `}),_jsx(_components.span,{style:{color:`#005CC5`,\"--shiki-dark\":`#6CB6FF`},children:`true`})]}),`\n`]})})}),_jsx(Warning,{children:_jsxs(_components.p,{children:[`If your deployment uses `,_jsx(_components.code,{children:`ORG_NAME=*`}),` or hosts multiple Braintrust organizations, `,_jsx(_components.a,{href:`mailto:support@braintrust.dev`,children:`contact Braintrust`}),` before enabling code function execution.`]})}),_jsx(_components.p,{children:`Then apply Helm chart v6.2.1:`}),_jsx(CodeBlock,{filename:``,numberOfLines:`5`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light github-dark-dimmed`,style:{backgroundColor:`#fff`,\"--shiki-dark-bg\":`#22272e`,color:`#24292e`,\"--shiki-dark\":`#adbac7`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`5`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#6F42C1`,\"--shiki-dark\":`#F69D50`},children:`helm`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#96D0FF`},children:` upgrade`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#96D0FF`},children:` braintrust`}),_jsx(_components.span,{style:{color:`#005CC5`,\"--shiki-dark\":`#F47067`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#96D0FF`},children:` oci://public.ecr.aws/braintrust/helm/braintrust`}),_jsx(_components.span,{style:{color:`#005CC5`,\"--shiki-dark\":`#F47067`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#005CC5`,\"--shiki-dark\":`#6CB6FF`},children:` --namespace`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#96D0FF`},children:` braintrust`}),_jsx(_components.span,{style:{color:`#005CC5`,\"--shiki-dark\":`#F47067`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#005CC5`,\"--shiki-dark\":`#6CB6FF`},children:` --version`}),_jsx(_components.span,{style:{color:`#005CC5`,\"--shiki-dark\":`#6CB6FF`},children:` 6.2.1`}),_jsx(_components.span,{style:{color:`#005CC5`,\"--shiki-dark\":`#F47067`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#005CC5`,\"--shiki-dark\":`#6CB6FF`},children:` --values`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#96D0FF`},children:` helm-values.yaml`})]}),`\n`]})})}),_jsx(_components.p,{children:`Pods will automatically restart after applying the upgrade.`}),_jsx(Heading,{level:`3`,id:`verify-settings-3`,children:`Verify settings`}),_jsxs(_components.p,{children:[`After the pods have cycled, go to `,_jsxs(_components.strong,{children:[_jsx(Icon,{icon:`settings`}),` Settings`]}),` > `,_jsx(_components.a,{href:`https://www.braintrust.dev/app/~/configuration/brainstore`,children:_jsxs(_components.strong,{children:[_jsx(Icon,{icon:`zap`}),` Brainstore`]})}),` and, under `,_jsx(_components.strong,{children:`Brainstore configuration`}),`, verify the following are all green:`]}),_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Setting`}),_jsx(_components.th,{children:`Expected status`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`License`}),_jsx(_components.td,{children:`Configured`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Telemetry`}),_jsx(_components.td,{children:`Configured`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Data plane service token`}),_jsx(_components.td,{children:`Configured`})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[`Brainstore default mode (`,_jsx(_components.code,{children:`BRAINSTORE_DEFAULT`}),`)`]}),_jsx(_components.td,{children:`Configured`})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[`Insert logs (`,_jsx(_components.code,{children:`INSERT_LOGS2`}),`)`]}),_jsx(_components.td,{children:`Configured`})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[`Insert row references (`,_jsx(_components.code,{children:`BRAINSTORE_INSERT_ROW_REFS`}),`)`]}),_jsx(_components.td,{children:`Configured`})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[`Realtime WAL (`,_jsx(_components.code,{children:`BRAINSTORE_REALTIME_WAL_BUCKET`}),`)`]}),_jsx(_components.td,{children:`Configured`})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[`Ephemeral WAL (`,_jsx(_components.code,{children:`BRAINSTORE_XACT_MANAGER_URI`}),`)`]}),_jsx(_components.td,{children:`Configured`})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[`Proxy URL (`,_jsx(_components.code,{children:`BRAINSTORE_AI_PROXY_URL`}),`)`]}),_jsx(_components.td,{children:`Configured`})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[`Redis (`,_jsx(_components.code,{children:`BRAINSTORE_REDIS_URI`}),`)`]}),_jsx(_components.td,{children:`Configured`})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[`Response cache URI (`,_jsx(_components.code,{children:`BRAINSTORE_RESPONSE_CACHE_URI`}),`)`]}),_jsx(_components.td,{children:`Configured`})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[`Code bundle URI (`,_jsx(_components.code,{children:`BRAINSTORE_CODE_BUNDLE_URI`}),`)`]}),_jsx(_components.td,{children:`Configured`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`HTTP/2`}),_jsx(_components.td,{children:`Data plane is using HTTP/2 or higher`})]})]})]}),_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Brainstore direct writes`}),` will show “Upgrade to configure Brainstore direct writes.” This is enabled in the next step.`]}),_jsx(Heading,{level:`3`,id:`validate-the-base-upgrade-3`,children:`Validate the base upgrade`}),_jsx(_components.p,{children:`Before enabling no-PostgreSQL mode, validate the workloads your team relies on. For example, trace one production-shaped request, run an eval suite you use regularly, and invoke or iterate on a prompt. If you use online scorers or automations, trigger one through its normal online path. For trace-level scorers, choose one that uses full trace context. If these workflows round-trip cleanly through the data plane and look right in the UI, continue to no-PostgreSQL mode.`}),_jsx(Heading,{level:`3`,id:`enable-no-postgresql-mode-azure`,children:`Enable no-PostgreSQL mode`}),_jsxs(_components.p,{children:[`No-PostgreSQL mode removes PostgreSQL from the Brainstore write path, delivering higher ingestion throughput. This step is a prerequisite for `,_jsx(_components.a,{href:`/observe/topics`,children:`Topics`}),` but does not enable them.`]}),_jsx(Warning,{children:_jsx(_components.p,{children:`The switch to no-PostgreSQL mode is one-way: Once Brainstore is writing data directly, rolling back requires downtime to drain and re-ingest. Enable it only when you are ready to commit.`})}),_jsxs(_components.p,{children:[`Set `,_jsx(_components.code,{children:`skipPgForBrainstoreObjects`}),` in your `,_jsx(_components.code,{children:`helm-values.yaml`}),`:`]}),_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`yaml`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light github-dark-dimmed`,style:{backgroundColor:`#fff`,\"--shiki-dark-bg\":`#22272e`,color:`#24292e`,\"--shiki-dark\":`#adbac7`},language:`yaml`,children:_jsxs(_components.code,{language:`yaml`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#22863A`,\"--shiki-dark\":`#8DDB8C`},children:`skipPgForBrainstoreObjects`}),_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#ADBAC7`},children:`: `}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#96D0FF`},children:`\"all\"`})]}),`\n`]})})}),_jsx(_components.p,{children:`Keep Helm chart v6.2.1 and apply the updated values:`}),_jsx(CodeBlock,{filename:``,numberOfLines:`5`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light github-dark-dimmed`,style:{backgroundColor:`#fff`,\"--shiki-dark-bg\":`#22272e`,color:`#24292e`,\"--shiki-dark\":`#adbac7`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`5`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#6F42C1`,\"--shiki-dark\":`#F69D50`},children:`helm`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#96D0FF`},children:` upgrade`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#96D0FF`},children:` braintrust`}),_jsx(_components.span,{style:{color:`#005CC5`,\"--shiki-dark\":`#F47067`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#96D0FF`},children:` oci://public.ecr.aws/braintrust/helm/braintrust`}),_jsx(_components.span,{style:{color:`#005CC5`,\"--shiki-dark\":`#F47067`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#005CC5`,\"--shiki-dark\":`#6CB6FF`},children:` --namespace`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#96D0FF`},children:` braintrust`}),_jsx(_components.span,{style:{color:`#005CC5`,\"--shiki-dark\":`#F47067`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#005CC5`,\"--shiki-dark\":`#6CB6FF`},children:` --version`}),_jsx(_components.span,{style:{color:`#005CC5`,\"--shiki-dark\":`#6CB6FF`},children:` 6.2.1`}),_jsx(_components.span,{style:{color:`#005CC5`,\"--shiki-dark\":`#F47067`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#005CC5`,\"--shiki-dark\":`#6CB6FF`},children:` --values`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#96D0FF`},children:` helm-values.yaml`})]}),`\n`]})})}),_jsx(_components.p,{children:`Then repeat the same workload validation after enabling no-PostgreSQL mode. If the same representative workflows round-trip cleanly through the data plane and look right in the UI, proceed to the next environment.`}),_jsx(Heading,{level:`3`,id:`enable-topics-3`,children:`Enable Topics`}),_jsxs(_components.p,{children:[_jsx(_components.a,{href:`/observe/topics`,children:`Topics`}),` for self-hosted deployments has specific deployment, inference, billing, and maintenance requirements, and Braintrust must grant access to your organization. Completing the full v2.x upgrade and no-PostgreSQL mode migration is a prerequisite, and the following conditions must also be met before Topics can be enabled:`]}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Standard deployment required.`}),` Topics is supported on standard Terraform/Helm deployments only. Custom Kubernetes clusters using the Helm chart on non-standard infrastructure are not supported.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Braintrust-hosted inference required.`}),` Topics runs LLM calls on models hosted by Braintrust with Zero Data Retention (ZDR). Bring-your-own-model is not supported. Currently US-only.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Built-in models must be enabled.`}),` Self-hosted organizations have `,_jsx(_components.a,{href:`/admin/ai-providers#manage-built-in-models`,children:`built-in models`}),` disabled by default, so no trace data leaves your network boundary unless you opt in. Because Topics depends on built-in models, an admin must explicitly enable them before Topics can run.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Pricing is not included by default.`}),` Topics usage is not covered by standard contracts. Discuss pricing with your account team before proceeding.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Ongoing maintenance required.`}),` Self-hosted Topics deployments run on a frequent-release build track separate from the tagged data plane versions and will require regular upgrades to receive the latest fixes and improvements.`]}),`\n`]}),_jsxs(_components.p,{children:[`If you meet all of these requirements and want to proceed, contact your account team or `,_jsx(_components.a,{href:`mailto:support@braintrust.dev`,children:`Braintrust support`}),`. Until Braintrust enables Topics access for your organization, the Topics page and Topics automations remain blocked, even after the upgrade and no-PostgreSQL migration are complete.`]}),_jsx(Heading,{level:`2`,id:`configuration-reference-3`,children:`Configuration reference`}),_jsx(Accordion,{title:`Core configuration (auto-set by Helm v5.1.0)`,id:`core-configuration-auto-set-by-helm-v5-1-0-1`,children:_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Variable`}),_jsx(_components.th,{children:`Source`}),_jsx(_components.th,{children:`Pods`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`BRAINSTORE_REDIS_URI`})}),_jsxs(_components.td,{children:[`From `,_jsx(_components.code,{children:`REDIS_URL`}),` secret`]}),_jsx(_components.td,{children:`reader, writer, fastreader`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`BRAINSTORE_DEFAULT`})}),_jsxs(_components.td,{children:[`Hardcoded `,_jsx(_components.code,{children:`\"force\"`})]}),_jsx(_components.td,{children:`API`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`INSERT_LOGS2`})}),_jsxs(_components.td,{children:[`Hardcoded `,_jsx(_components.code,{children:`\"true\"`})]}),_jsx(_components.td,{children:`API`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`BRAINSTORE_INSERT_ROW_REFS`})}),_jsxs(_components.td,{children:[`Hardcoded `,_jsx(_components.code,{children:`\"true\"`})]}),_jsx(_components.td,{children:`API`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`BRAINSTORE_REALTIME_WAL_BUCKET`})}),_jsxs(_components.td,{children:[`From `,_jsx(_components.code,{children:`objectStorage`}),` values`]}),_jsx(_components.td,{children:`API`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`BRAINSTORE_AI_PROXY_URL`})}),_jsxs(_components.td,{children:[`Built from `,_jsx(_components.code,{children:`api.name`}),` and `,_jsx(_components.code,{children:`api.service.port`})]}),_jsx(_components.td,{children:`reader, writer, fastreader`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`BRAINSTORE_XACT_MANAGER_URI`})}),_jsxs(_components.td,{children:[`From `,_jsx(_components.code,{children:`REDIS_URL`}),` secret`]}),_jsx(_components.td,{children:`reader, writer, fastreader`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`BRAINSTORE_RESPONSE_CACHE_URI`})}),_jsxs(_components.td,{children:[`Auto-derived from `,_jsx(_components.code,{children:`objectStorage`}),` config`]}),_jsx(_components.td,{children:`reader, writer, fastreader`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`BRAINSTORE_CODE_BUNDLE_URI`})}),_jsxs(_components.td,{children:[`Auto-derived from `,_jsx(_components.code,{children:`objectStorage`}),` config`]}),_jsx(_components.td,{children:`reader, writer, fastreader`})]})]})]})}),_jsxs(Accordion,{title:`WAL footer version (requires explicit configuration)`,id:`wal-footer-version-requires-explicit-configuration-2`,children:[_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Variable`}),_jsx(_components.th,{children:`How to set`}),_jsx(_components.th,{children:`Since`}),_jsx(_components.th,{children:`Pods`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`BRAINSTORE_WAL_FOOTER_VERSION`})}),_jsxs(_components.td,{children:[`Set `,_jsx(_components.code,{children:`brainstoreWalFooterVersion`}),` in `,_jsx(_components.code,{children:`helm-values.yaml`})]}),_jsx(_components.td,{\"data-numeric\":`true`,children:`v5.1.0`}),_jsx(_components.td,{children:`API`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`BRAINSTORE_WAL_USE_EFFICIENT_FORMAT`})}),_jsxs(_components.td,{children:[`Auto-enabled when either `,_jsx(_components.code,{children:`brainstoreWalFooterVersion`}),` or `,_jsx(_components.code,{children:`skipPgForBrainstoreObjects`}),` is set`]}),_jsx(_components.td,{\"data-numeric\":`true`,children:`v5.1.0`}),_jsx(_components.td,{children:`API`})]})]})]}),_jsxs(_components.p,{children:[`Set `,_jsx(_components.code,{children:`brainstoreWalFooterVersion: \"v1\"`}),` as part of the pre-upgrade steps. Only set to `,_jsx(_components.code,{children:`\"v3\"`}),` after successfully deploying v2.x.`]})]}),_jsxs(Accordion,{title:`No-PostgreSQL mode (opt-in, post-upgrade)`,id:`no-postgresql-mode-opt-in-post-upgrade-2`,children:[_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Variable`}),_jsx(_components.th,{children:`How to set`}),_jsx(_components.th,{children:`Since`}),_jsx(_components.th,{children:`Pods`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`SKIP_PG_FOR_BRAINSTORE_OBJECTS`})}),_jsxs(_components.td,{children:[`Set `,_jsx(_components.code,{children:`skipPgForBrainstoreObjects`}),` in `,_jsx(_components.code,{children:`helm-values.yaml`})]}),_jsx(_components.td,{\"data-numeric\":`true`,children:`v5.1.0`}),_jsx(_components.td,{children:`API`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`BRAINSTORE_ASYNC_SCORING_OBJECTS`})}),_jsxs(_components.td,{children:[`Auto-derived from `,_jsx(_components.code,{children:`skipPgForBrainstoreObjects`})]}),_jsx(_components.td,{\"data-numeric\":`true`,children:`v5.1.0`}),_jsx(_components.td,{children:`reader, writer, fastreader`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`BRAINSTORE_LOG_AUTOMATIONS_OBJECTS`})}),_jsxs(_components.td,{children:[`Auto-derived from `,_jsx(_components.code,{children:`skipPgForBrainstoreObjects`})]}),_jsx(_components.td,{\"data-numeric\":`true`,children:`v5.1.0`}),_jsx(_components.td,{children:`reader, writer, fastreader`})]})]})]}),_jsxs(_components.p,{children:[`Setting `,_jsx(_components.code,{children:`skipPgForBrainstoreObjects: \"all\"`}),` is a prerequisite for enabling Topics. The chart automatically fans this value out to `,_jsx(_components.code,{children:`BRAINSTORE_ASYNC_SCORING_OBJECTS`}),` and `,_jsx(_components.code,{children:`BRAINSTORE_LOG_AUTOMATIONS_OBJECTS`}),`.`]})]})]})]}),`\n`,_jsx(Heading,{level:`2`,id:`next-steps`,children:`Next steps`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.a,{href:`/data-plane-changelog`,children:`Self-hosting releases`}),`: release notes and infrastructure requirements for each data plane version`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.a,{href:`/admin/self-hosting/configure`,children:`Configuration`}),`: telemetry, network access, rate limiting, and other options`]}),`\n`]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"codeStyling":{"theme":{"light":"github-light","dark":"github-dark-dimmed"}},"config":{},"pageMetadata":{"title":"Upgrade to data plane v2.x","sidebarTitle":"Data plane v2.x","description":"Upgrade your self-hosted Braintrust deployment to the data plane v2 series","og:image":"https://www.braintrust.dev/og?template=docs\u0026title=Upgrade%20to%20data%20plane%20v2.x","href":"/admin/self-hosting/upgrade/v2"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"1. Prepare for v2.x","slug":"1-prepare-for-v2-x","depth":2,"children":[{"title":"Upgrade Terraform module","slug":"upgrade-terraform-module","depth":3,"children":[],"tabId":"aws"},{"title":"Enable efficient WAL format","slug":"enable-efficient-wal-format-aws","depth":3,"children":[],"tabId":"aws"},{"title":"Run the preflight check","slug":"run-the-preflight-check","depth":3,"children":[],"tabId":"aws"}],"tabId":"aws"},{"title":"2. Upgrade to v2.x","slug":"upgrade-to-v2-x-aws","depth":2,"children":[{"title":"Apply the upgrade","slug":"apply-the-upgrade","depth":3,"children":[],"tabId":"aws"},{"title":"Verify settings","slug":"verify-settings","depth":3,"children":[],"tabId":"aws"},{"title":"Validate the base upgrade","slug":"validate-the-base-upgrade","depth":3,"children":[],"tabId":"aws"},{"title":"Enable no-PostgreSQL mode","slug":"enable-no-postgresql-mode-aws","depth":3,"children":[],"tabId":"aws"},{"title":"Enable Topics","slug":"enable-topics","depth":3,"children":[],"tabId":"aws"}],"tabId":"aws"},{"title":"Configuration reference","slug":"configuration-reference","depth":2,"children":[],"tabId":"aws"},{"title":"1. Prepare for v2.x","slug":"1-prepare-for-v2-x-2","depth":2,"children":[{"title":"Upgrade Helm chart","slug":"upgrade-helm-chart","depth":3,"children":[],"tabId":"gcp"},{"title":"Enable efficient WAL format","slug":"enable-efficient-wal-format-gcp","depth":3,"children":[],"tabId":"gcp"},{"title":"Run the preflight check","slug":"run-the-preflight-check-2","depth":3,"children":[],"tabId":"gcp"},{"title":"Update Workload Identity bindings","slug":"update-workload-identity-bindings","depth":3,"children":[],"tabId":"gcp"}],"tabId":"gcp"},{"title":"2. Upgrade to v2.x","slug":"upgrade-to-v2-x-gcp","depth":2,"children":[{"title":"Apply the upgrade","slug":"apply-the-upgrade-2","depth":3,"children":[],"tabId":"gcp"},{"title":"Verify settings","slug":"verify-settings-2","depth":3,"children":[],"tabId":"gcp"},{"title":"Validate the base upgrade","slug":"validate-the-base-upgrade-2","depth":3,"children":[],"tabId":"gcp"},{"title":"Enable no-PostgreSQL mode","slug":"enable-no-postgresql-mode-gcp","depth":3,"children":[],"tabId":"gcp"},{"title":"Enable Topics","slug":"enable-topics-2","depth":3,"children":[],"tabId":"gcp"}],"tabId":"gcp"},{"title":"Configuration reference","slug":"configuration-reference-2","depth":2,"children":[],"tabId":"gcp"},{"title":"1. Prepare for v2.x","slug":"1-prepare-for-v2-x-3","depth":2,"children":[{"title":"Upgrade Helm chart","slug":"upgrade-helm-chart-2","depth":3,"children":[],"tabId":"azure"},{"title":"Enable efficient WAL format","slug":"enable-efficient-wal-format-azure","depth":3,"children":[],"tabId":"azure"},{"title":"Run the preflight check","slug":"run-the-preflight-check-3","depth":3,"children":[],"tabId":"azure"},{"title":"Update Terraform module","slug":"update-terraform-module","depth":3,"children":[],"tabId":"azure"}],"tabId":"azure"},{"title":"2. Upgrade to v2.x","slug":"upgrade-to-v2-x-azure","depth":2,"children":[{"title":"Apply the upgrade","slug":"apply-the-upgrade-3","depth":3,"children":[],"tabId":"azure"},{"title":"Verify settings","slug":"verify-settings-3","depth":3,"children":[],"tabId":"azure"},{"title":"Validate the base upgrade","slug":"validate-the-base-upgrade-3","depth":3,"children":[],"tabId":"azure"},{"title":"Enable no-PostgreSQL mode","slug":"enable-no-postgresql-mode-azure","depth":3,"children":[],"tabId":"azure"},{"title":"Enable Topics","slug":"enable-topics-3","depth":3,"children":[],"tabId":"azure"}],"tabId":"azure"},{"title":"Configuration reference","slug":"configuration-reference-3","depth":2,"children":[],"tabId":"azure"},{"title":"Next steps","slug":"next-steps","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":["/_mintlify/custom/braintrust/dd75b144de68c9c9/custom.js","/_mintlify/custom/braintrust/0c94fa43664e0c40/utm-attribution.js"],"subdomain":"braintrust","siteName":"Braintrust","title":"Upgrade to data plane v2.x - Braintrust","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-10-22T23:37:41.339Z","originalFileLocation":"admin/self-hosting/upgrade/v2.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Upgrade your self-hosted Braintrust deployment to the data plane v2 series\">\u003cmeta data-mint-head name=\"application-name\" content=\"Braintrust\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/braintrust/Pnqso5CFAxfn5afF/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/braintrust/Pnqso5CFAxfn5afF/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/braintrust/Pnqso5CFAxfn5afF/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/braintrust/Pnqso5CFAxfn5afF/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/braintrust/Pnqso5CFAxfn5afF/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/braintrust/Pnqso5CFAxfn5afF/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/braintrust/Pnqso5CFAxfn5afF/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/braintrust/Pnqso5CFAxfn5afF/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/braintrust/Pnqso5CFAxfn5afF/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Upgrade to data plane v2.x - Braintrust\">\u003cmeta data-mint-head property=\"og:description\" content=\"Upgrade your self-hosted Braintrust deployment to the data plane v2 series\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Braintrust documentation, API reference, and changelog\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.braintrust.dev/admin/self-hosting/upgrade/v2\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://www.braintrust.dev/og?template=docs\u0026amp;title=Upgrade%20to%20data%20plane%20v2.x\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Upgrade to data plane v2.x - Braintrust\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Upgrade your self-hosted Braintrust deployment to the data plane v2 series\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://www.braintrust.dev/og?template=docs\u0026amp;title=Upgrade%20to%20data%20plane%20v2.x\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/braintrust/Pnqso5CFAxfn5afF/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Braintrust\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#3a4af8\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.braintrust.dev/admin/self-hosting/upgrade/v2\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/admin/self-hosting/upgrade/v2.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.braintrust.dev/#organization\",\"name\":\"Braintrust\",\"url\":\"https://docs.braintrust.dev\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/braintrust/u7i5gTV-ad3TRDYt/logo/logo-light.svg?fit=max\u0026auto=format\u0026n=u7i5gTV-ad3TRDYt\u0026q=85\u0026s=23878ca308aee393dcc8c89ed8705189\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.braintrust.dev#website\",\"name\":\"Braintrust\",\"url\":\"https://docs.braintrust.dev\",\"publisher\":{\"@id\":\"https://docs.braintrust.dev/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.braintrust.dev/admin/self-hosting/upgrade/v2#webpage\",\"url\":\"https://docs.braintrust.dev/admin/self-hosting/upgrade/v2\",\"name\":\"Upgrade to data plane v2.x\",\"description\":\"Upgrade your self-hosted Braintrust deployment to the data plane v2 series\",\"dateModified\":\"2026-10-22T23:37:41.339Z\",\"isPartOf\":{\"@id\":\"https://docs.braintrust.dev#website\"},\"breadcrumb\":{\"@id\":\"https://docs.braintrust.dev/admin/self-hosting/upgrade/v2#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.braintrust.dev/admin/self-hosting/upgrade/v2#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Admin\",\"item\":\"https://docs.braintrust.dev/admin/index\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Deployment\",\"item\":\"https://docs.braintrust.dev/admin/deployment/index\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Self-hosting\",\"item\":\"https://docs.braintrust.dev/admin/self-hosting/index\"},{\"@type\":\"ListItem\",\"position\":4,\"name\":\"Upgrade\",\"item\":\"https://docs.braintrust.dev/admin/self-hosting/upgrade/routine\"},{\"@type\":\"ListItem\",\"position\":5,\"name\":\"Upgrade to data plane v2.x\",\"item\":\"https://docs.braintrust.dev/admin/self-hosting/upgrade/v2\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.braintrust.dev/admin/self-hosting/upgrade/v2#article\",\"headline\":\"Upgrade to data plane v2.x\",\"name\":\"Upgrade to data plane v2.x\",\"description\":\"Upgrade your self-hosted Braintrust deployment to the data plane v2 series\",\"url\":\"https://docs.braintrust.dev/admin/self-hosting/upgrade/v2\",\"mainEntityOfPage\":{\"@id\":\"https://docs.braintrust.dev/admin/self-hosting/upgrade/v2#webpage\"},\"image\":\"https://www.braintrust.dev/og?template=docs\u0026title=Upgrade%20to%20data%20plane%20v2.x\",\"dateModified\":\"2026-10-22T23:37:41.339Z\",\"publisher\":{\"@id\":\"https://docs.braintrust.dev/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.braintrust.dev#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Braintrust\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Braintrust","nav":{"global":null,"tabs":[{"tab":"Guides","icon":"book-open","pages":[{"group":"Start","boost":3,"icon":"arrow-down-right","pages":[{"title":"Get started with Braintrust","sidebarTitle":"Introduction","mode":"wide","href":""},{"title":"Braintrust workflow","href":"/workflow"},{"group":"Quickstart","pages":[{"title":"Tracing quickstart","sidebarTitle":"Tracing","href":"/tracing-quickstart"},{"title":"Evaluation quickstart","sidebarTitle":"Evaluation","href":"/evaluation-quickstart"}]},{"group":"Loop agent","pages":[{"title":"Get started with Loop","sidebarTitle":"Get started","href":"/loop/index"},{"title":"What Loop can do","href":"/loop/capabilities"},{"group":"Integrations","pages":[{"title":"Connect external MCP servers","sidebarTitle":"External MCP servers","href":"/loop/mcp"},{"title":"Connect GitHub repositories","sidebarTitle":"GitHub repositories","href":"/loop/github"}]},{"title":"Run Loop on a schedule","sidebarTitle":"Automations","href":"/loop/automations"},{"title":"Manage Loop threads and limits","sidebarTitle":"Threads and limits","href":"/loop/manage"}]},{"title":"Plans and limits","href":"/plans-and-limits"}]},{"group":"Instrument","boost":3,"icon":"braces","pages":[{"title":"Instrument your application","sidebarTitle":"Overview","href":"/instrument/index"},{"group":"Tracing","pages":[{"title":"Trace LLM calls","href":"/instrument/trace-llm-calls"},{"title":"Trace application logic","href":"/instrument/trace-application-logic"},{"title":"Send application logs","href":"/instrument/application-logs"},{"title":"Advanced tracing patterns","href":"/instrument/advanced-tracing"}]},{"title":"Capture user feedback","sidebarTitle":"User feedback","href":"/instrument/user-feedback"},{"title":"Log attachments","sidebarTitle":"Attachments","href":"/instrument/attachments"}]},{"group":"Observe","boost":3,"icon":"activity","pages":[{"title":"Observe your application","sidebarTitle":"Overview","href":"/observe/index"},{"group":"Logs","pages":[{"title":"View your logs","href":"/observe/view-logs"},{"title":"Filter and search logs","href":"/observe/filter"},{"title":"Examine traces","href":"/observe/examine-traces"}]},{"group":"Patterns","pages":[{"title":"Patterns","sidebarTitle":"Overview","href":"/observe/patterns/index"},{"title":"Enable Patterns","href":"/observe/patterns/enable"},{"title":"Review and act on patterns","sidebarTitle":"Review and act","href":"/observe/patterns/review"}]},{"group":"Topics","pages":[{"title":"Topics","sidebarTitle":"Overview","href":"/observe/topics/index"},{"title":"Enable Topics","href":"/observe/topics/enable"},{"title":"Review insights from Topics","sidebarTitle":"Review insights","href":"/observe/topics/review-insights"},{"title":"Act on findings from Topics","sidebarTitle":"Act on findings","href":"/observe/topics/act-on-findings"},{"title":"Manage Topics","href":"/observe/topics/manage"},{"title":"Custom facets","href":"/observe/topics/custom-facets"}]},{"group":"Dashboards","pages":[{"title":"Dashboards","sidebarTitle":"Overview","href":"/observe/dashboards/index"},{"title":"Create dashboards","href":"/observe/dashboards/create"},{"title":"Build charts","href":"/observe/dashboards/build-charts"},{"title":"SQL charts","href":"/observe/dashboards/sql-charts"},{"title":"Coding agent insights dashboard","sidebarTitle":"Coding agent insights","href":"/observe/dashboards/coding-agent-insights"}]},{"title":"Set up alerts","sidebarTitle":"Alerts","href":"/observe/alerts"}]},{"group":"Annotate","boost":3,"icon":"list-checks","pages":[{"title":"Annotate and curate data","sidebarTitle":"Overview","href":"/annotate/index"},{"group":"Human review","pages":[{"title":"Set up human review","sidebarTitle":"Set up human review","href":"/annotate/human-review/index"},{"title":"Score traces and datasets","href":"/annotate/human-review/score-traces"},{"title":"Review with multiple reviewers","href":"/annotate/human-review/multiple-reviewers"},{"title":"Manage review work","href":"/annotate/human-review/manage-review-work"}]},{"title":"Add labels and corrections","sidebarTitle":"Labels and corrections","href":"/annotate/labels"},{"group":"Datasets","pages":[{"title":"Datasets","sidebarTitle":"Overview","href":"/annotate/datasets/index"},{"title":"Create datasets","href":"/annotate/datasets/create"},{"title":"Dataset pipelines","href":"/annotate/datasets/pipelines"},{"title":"Manage datasets","href":"/annotate/datasets/manage"},{"title":"Use datasets in evaluations","sidebarTitle":"Use in evaluations","href":"/annotate/datasets/use-in-evaluations"},{"title":"Track dataset performance","sidebarTitle":"Track performance","href":"/annotate/datasets/track-performance"}]},{"title":"Export annotated data","sidebarTitle":"Exports","href":"/annotate/export"},{"title":"Create custom views","sidebarTitle":"Custom views","href":"/annotate/custom-views"}]},{"group":"Evaluate","boost":3,"icon":"flask-conical","pages":[{"title":"Evaluate systematically","sidebarTitle":"Overview","href":"/evaluate/index"},{"group":"Prompts","pages":[{"title":"Prompts","sidebarTitle":"Overview","href":"/evaluate/prompts/index"},{"title":"Create prompts","href":"/evaluate/prompts/create"},{"title":"Prompt templating","sidebarTitle":"Templating","href":"/evaluate/prompts/templating"},{"title":"Use prompts in code","sidebarTitle":"Use in code","href":"/evaluate/prompts/use-in-code"},{"title":"Version prompts","href":"/evaluate/prompts/versions"},{"title":"Manage prompts","href":"/evaluate/prompts/manage"}]},{"group":"Evaluators","pages":[{"title":"Evaluate output quality with scorers and classifiers","sidebarTitle":"Overview","href":"/evaluate/write-scorers"},{"title":"Autoevals","href":"/evaluate/autoevals"},{"title":"Custom code evaluators","sidebarTitle":"Custom code","href":"/evaluate/custom-code"},{"title":"LLM-as-a-judge evaluators","sidebarTitle":"LLM-as-a-judge","href":"/evaluate/llm-as-a-judge"}]},{"title":"Iterate in playgrounds","sidebarTitle":"Playgrounds","href":"/evaluate/playgrounds"},{"group":"Experiments","pages":[{"title":"Experiments","sidebarTitle":"Overview","href":"/evaluate/run-evaluations"},{"title":"Run experiments in code","sidebarTitle":"Run in code","href":"/evaluate/run-in-code"},{"title":"Run experiments in the UI","sidebarTitle":"Run in the UI","href":"/evaluate/run-in-ui"},{"title":"Run experiments in CI/CD","sidebarTitle":"Run in CI/CD","href":"/evaluate/run-in-ci"},{"title":"Advanced eval techniques","sidebarTitle":"Advanced techniques","href":"/evaluate/advanced-evaluations"},{"group":"Analyze results","pages":[{"title":"Interpret evaluation results","href":"/evaluate/interpret-results"},{"title":"Compare experiments","href":"/evaluate/compare-experiments"},{"title":"Evaluate reasoning models","href":"/evaluate/reasoning"}]}]},{"group":"Remote evals","pages":[{"title":"Remote evals and sandboxes","sidebarTitle":"Test complex agents","href":"/evaluate/remote-evals"},{"title":"Create evaluation parameters","sidebarTitle":"Parameters","href":"/evaluate/write-parameters"}]},{"title":"Score production traces","sidebarTitle":"Online scoring","href":"/evaluate/score-online"},{"title":"Evaluation best practices","sidebarTitle":"Best practices","href":"/evaluate/best-practices"}]},{"group":"Deploy","boost":3,"icon":"rocket","pages":[{"title":"Deploy","sidebarTitle":"Overview","href":"/deploy/index"},{"title":"Deploy functions","sidebarTitle":"Functions","href":"/deploy/functions"},{"group":"Braintrust Gateway","pages":[{"title":"Use the Braintrust Gateway","sidebarTitle":"Use the Gateway","href":"/deploy/gateway"},{"title":"Supported models","mode":"wide","href":"/deploy/supported-models"},{"title":"Use the proxy (deprecated)","href":"/deploy/ai-proxy"}]},{"title":"Manage environments","sidebarTitle":"Environments","href":"/deploy/environments"},{"title":"Monitor deployments","sidebarTitle":"Monitoring","href":"/deploy/monitor"},{"title":"Stream responses","sidebarTitle":"Streaming","href":"/deploy/streaming"}]},{"group":"Admin","boost":3,"icon":"shield","pages":[{"title":"Administration","sidebarTitle":"Overview","href":"/admin/index"},{"title":"Manage organizations","sidebarTitle":"Organizations","href":"/admin/organizations"},{"title":"Manage projects","sidebarTitle":"Projects","href":"/admin/projects"},{"title":"Configure AI providers","sidebarTitle":"AI providers","href":"/admin/ai-providers"},{"title":"Audit logging","href":"/admin/audit-logs"},{"group":"Access control","pages":[{"title":"Access control","sidebarTitle":"Overview","href":"/admin/access-control/index"},{"title":"Manage permissions","sidebarTitle":"Manage permissions","href":"/admin/access-control/manage-permissions"}]},{"group":"Billing","pages":[{"title":"Manage billing","sidebarTitle":"Overview","href":"/admin/billing/index"},{"title":"Change your plan","href":"/admin/billing/change-plan"},{"title":"Monitor usage","href":"/admin/billing/monitor-usage"},{"title":"Optimize costs","href":"/admin/billing/optimize-costs"},{"title":"Billing FAQ","href":"/admin/billing/faq"}]},{"group":"Data management","pages":[{"title":"Protect sensitive data","href":"/admin/data-management/protect-sensitive-data"},{"title":"Export to cloud storage","sidebarTitle":"Data export","href":"/admin/data-management/export"},{"title":"Configure data retention","sidebarTitle":"Data retention","href":"/admin/data-management/retention"}]},{"group":"Deployment","pages":[{"title":"Deployment options","sidebarTitle":"Overview","href":"/admin/deployment/index"},{"group":"BYOC","pages":[{"title":"Bring your own cloud (BYOC)","sidebarTitle":"Overview","href":"/admin/deployment/byoc/index"},{"title":"Set up BYOC on AWS","sidebarTitle":"Set up BYOC","href":"/admin/deployment/byoc/aws"},{"title":"BYOC operations and lifecycle","sidebarTitle":"Operations and lifecycle","href":"/admin/deployment/byoc/manage"},{"title":"AWS access and security","sidebarTitle":"Access and security","href":"/admin/deployment/byoc/aws-security"}]},{"group":"Self-hosting","pages":[{"title":"Self-hosting Braintrust","sidebarTitle":"Overview","href":"/admin/self-hosting/index"},{"title":"Architecture","href":"/admin/self-hosting/architecture"},{"title":"Deploy Braintrust","sidebarTitle":"Deploy","href":"/admin/self-hosting/deploy"},{"group":"Configure","pages":[{"title":"Configure your deployment","sidebarTitle":"Overview","href":"/admin/self-hosting/configure/index"},{"title":"Security and access","href":"/admin/self-hosting/configure/security"},{"title":"Networking and connectivity","href":"/admin/self-hosting/configure/networking"},{"title":"Scaling and storage","href":"/admin/self-hosting/configure/scaling"},{"title":"Self-host the Braintrust Gateway","sidebarTitle":"Braintrust Gateway","href":"/admin/self-hosting/configure/gateway"},{"title":"Loop runtime","href":"/admin/self-hosting/configure/loop-runtime"},{"title":"Telemetry and data retention","href":"/admin/self-hosting/configure/telemetry"}]},{"group":"Upgrade","pages":[{"title":"Upgrade your deployment","sidebarTitle":"Routine upgrades","description":"Upgrade a self-hosted Braintrust data plane on AWS, GCP, or Azure","href":"/admin/self-hosting/upgrade/routine"},{"group":"Version migrations","pages":[{"title":"Upgrade to data plane v2.x","sidebarTitle":"Data plane v2.x","href":"/admin/self-hosting/upgrade/v2"},{"title":"Upgrade to Terraform module v6","sidebarTitle":"AWS module v6 (Lambda to ECS)","description":"Upgrade your self-hosted Braintrust AWS deployment from Terraform module v5.x to v6 and cut API traffic over from Lambda to ECS.","href":"/admin/self-hosting/upgrade/v6"},{"title":"Upgrade to Terraform module v7","sidebarTitle":"AWS module v7 (ECS and Gateway defaults)","href":"/admin/self-hosting/upgrade/v7"}]}]}]}]},{"title":"Authentication","href":"/admin/authentication"},{"title":"SCIM provisioning","href":"/admin/scim"},{"title":"Personal settings","href":"/admin/personal-settings"},{"title":"Service health","href":"/admin/service-health"}]},{"group":"Best practices","icon":"shield-check","pages":[{"title":"Evaluating agents","href":"/best-practices/agents"},{"title":"Writing scorers","href":"/best-practices/scorers"},{"title":"Product manager workflows","sidebarTitle":"PM workflows","href":"/best-practices/pm-workflows"}]},{"title":"Security","href":"/security"}]},{"tab":"Integrations","icon":"plug","pages":[{"title":"Integrations","href":"/integrations"}]},{"tab":"SDKs","icon":"blocks","dropdowns":[{"dropdown":"All SDKs","pages":[{"title":"SDKs","mode":"custom","href":"/sdks"}]},{"dropdown":"TypeScript","icon":"https://mintlify.s3.us-west-1.amazonaws.com/braintrust/images/sdk-icons/typescript.svg","pages":[{"title":"TypeScript SDK quickstart","sidebarTitle":"Quickstart","href":"/sdks/typescript/quickstart"},{"group":"Use the SDK","icon":"code","pages":[{"title":"Install and instrument","href":"/sdks/typescript/install-and-instrument"},{"title":"TypeScript SDK integrations","sidebarTitle":"SDK integrations","href":"/sdks/typescript/sdk-integrations"},{"title":"Troubleshooting","href":"/sdks/typescript/troubleshooting"}]},{"group":"Features","icon":"component","pages":[{"title":"Workflow evaluations","href":"/sdks/typescript/workflow-evaluations"},{"title":"Application logs","href":"/sdks/typescript/application-logs"},{"title":"Redact sensitive data","href":"/sdks/typescript/redact-sensitive-data"}]},{"group":"Reference","icon":"file-text","pages":[{"title":"API reference","href":"/sdks/typescript/api-reference"},{"group":"Versions","boost":0.5,"pages":[{"title":"Braintrust TypeScript SDK","sidebarTitle":"v3.42.0 (latest)","href":"/sdks/typescript/versions/3.42.0"},{"title":"Braintrust TypeScript SDK","sidebarTitle":"v3.41.0","href":"/sdks/typescript/versions/3.41.0"},{"title":"Braintrust TypeScript SDK","sidebarTitle":"v3.40.0","href":"/sdks/typescript/versions/3.40.0"},{"title":"Braintrust TypeScript SDK","sidebarTitle":"v3.39.0","href":"/sdks/typescript/versions/3.39.0"},{"title":"Braintrust TypeScript SDK","sidebarTitle":"v3.38.0","href":"/sdks/typescript/versions/3.38.0"},{"title":"Braintrust TypeScript SDK","sidebarTitle":"v3.37.2","href":"/sdks/typescript/versions/3.37.2"},{"title":"Braintrust TypeScript SDK","sidebarTitle":"v3.36.0","href":"/sdks/typescript/versions/3.36.0"},{"title":"Braintrust TypeScript SDK","sidebarTitle":"v3.35.0","href":"/sdks/typescript/versions/3.35.0"},{"title":"Braintrust TypeScript SDK","sidebarTitle":"v3.34.0","href":"/sdks/typescript/versions/3.34.0"},{"title":"Braintrust TypeScript SDK","sidebarTitle":"v3.33.0","href":"/sdks/typescript/versions/3.33.0"},{"title":"Braintrust TypeScript SDK","sidebarTitle":"v3.32.0","href":"/sdks/typescript/versions/3.32.0"},{"title":"Braintrust TypeScript SDK","sidebarTitle":"v3.31.0","href":"/sdks/typescript/versions/3.31.0"},{"title":"Braintrust TypeScript SDK","sidebarTitle":"v3.30.0","href":"/sdks/typescript/versions/3.30.0"},{"title":"Braintrust TypeScript SDK","sidebarTitle":"v3.29.0","href":"/sdks/typescript/versions/3.29.0"},{"title":"Braintrust TypeScript SDK","sidebarTitle":"v3.28.0","href":"/sdks/typescript/versions/3.28.0"},{"title":"Braintrust TypeScript SDK","sidebarTitle":"v3.27.0","href":"/sdks/typescript/versions/3.27.0"},{"title":"Braintrust TypeScript SDK","sidebarTitle":"v3.26.0","href":"/sdks/typescript/versions/3.26.0"},{"title":"Braintrust TypeScript SDK","sidebarTitle":"v3.25.0","href":"/sdks/typescript/versions/3.25.0"},{"title":"Braintrust TypeScript SDK","sidebarTitle":"v3.24.0","href":"/sdks/typescript/versions/3.24.0"},{"title":"Braintrust TypeScript SDK","sidebarTitle":"v3.23.1","href":"/sdks/typescript/versions/3.23.1"},{"title":"Braintrust TypeScript SDK","sidebarTitle":"v3.22.0","href":"/sdks/typescript/versions/3.22.0"},{"title":"Braintrust TypeScript SDK","sidebarTitle":"v3.21.0","href":"/sdks/typescript/versions/3.21.0"},{"title":"Braintrust TypeScript SDK","sidebarTitle":"v3.20.0","href":"/sdks/typescript/versions/3.20.0"},{"title":"Braintrust TypeScript SDK","sidebarTitle":"v3.19.0","href":"/sdks/typescript/versions/3.19.0"},{"title":"Braintrust TypeScript SDK","sidebarTitle":"v3.18.0","href":"/sdks/typescript/versions/3.18.0"},{"title":"Braintrust TypeScript SDK","sidebarTitle":"v3.17.0","href":"/sdks/typescript/versions/3.17.0"},{"title":"Braintrust TypeScript SDK","sidebarTitle":"v3.16.0","href":"/sdks/typescript/versions/3.16.0"},{"title":"Braintrust TypeScript SDK","sidebarTitle":"v3.15.0","href":"/sdks/typescript/versions/3.15.0"},{"title":"Braintrust TypeScript SDK","sidebarTitle":"v3.14.0","href":"/sdks/typescript/versions/3.14.0"},{"title":"Braintrust TypeScript SDK","sidebarTitle":"v3.13.0","href":"/sdks/typescript/versions/3.13.0"},{"title":"Braintrust TypeScript SDK","sidebarTitle":"v3.12.0","href":"/sdks/typescript/versions/3.12.0"},{"title":"Braintrust TypeScript SDK","sidebarTitle":"v3.11.0","href":"/sdks/typescript/versions/3.11.0"},{"title":"Braintrust TypeScript SDK","sidebarTitle":"v3.10.0","href":"/sdks/typescript/versions/3.10.0"},{"title":"Braintrust TypeScript SDK","sidebarTitle":"v3.9.0","href":"/sdks/typescript/versions/3.9.0"},{"title":"Braintrust TypeScript SDK","sidebarTitle":"v3.8.0","href":"/sdks/typescript/versions/3.8.0"},{"title":"Braintrust TypeScript SDK","sidebarTitle":"v3.7.1","href":"/sdks/typescript/versions/3.7.1"},{"title":"Braintrust TypeScript SDK","sidebarTitle":"v3.7.0","href":"/sdks/typescript/versions/3.7.0"},{"title":"Braintrust TypeScript SDK","sidebarTitle":"v3.6.0","href":"/sdks/typescript/versions/3.6.0"},{"title":"Braintrust TypeScript SDK","sidebarTitle":"v3.5.0","href":"/sdks/typescript/versions/3.5.0"},{"title":"Braintrust TypeScript SDK","sidebarTitle":"v3.4.0","href":"/sdks/typescript/versions/3.4.0"},{"title":"Braintrust TypeScript SDK","sidebarTitle":"v3.3.0","href":"/sdks/typescript/versions/3.3.0"},{"title":"Braintrust TypeScript SDK","sidebarTitle":"v3.2.0","href":"/sdks/typescript/versions/3.2.0"},{"title":"Braintrust TypeScript SDK","sidebarTitle":"v3.1.0","href":"/sdks/typescript/versions/3.1.0"},{"title":"Braintrust TypeScript SDK","sidebarTitle":"v3.0.0","href":"/sdks/typescript/versions/3.0.0"},{"title":"Braintrust TypeScript SDK","sidebarTitle":"v2.2.2","href":"/sdks/typescript/versions/2.2.2"},{"title":"Braintrust TypeScript SDK","sidebarTitle":"v2.1.0","href":"/sdks/typescript/versions/2.1.0"},{"title":"Braintrust TypeScript SDK","sidebarTitle":"v2.0.2","href":"/sdks/typescript/versions/2.0.2"},{"title":"TypeScript SDK","sidebarTitle":"v1.1.1","href":"/sdks/typescript/versions/1.1.1"}]},{"group":"Migration guides","pages":[{"title":"Migrate from v2.x to v3.x","sidebarTitle":"v2.x to v3.x","href":"/sdks/typescript/migrations/v2-to-v3"},{"title":"Migrate from v1.x to v2.x","sidebarTitle":"v1.x to v2.x","href":"/sdks/typescript/migrations/v1-to-v2"},{"title":"Migrate from v0.x to v1.x","sidebarTitle":"v0.x to v1.x","href":"/sdks/typescript/migrations/v0-to-v1"}]},{"title":"Changelog","url":"https://github.com/braintrustdata/braintrust-sdk-javascript/releases?q=js-sdk-\u0026expanded=true","href":"/sdks/typescript/changelog"},{"title":"GitHub","url":"https://github.com/braintrustdata/braintrust-sdk-javascript","href":"/sdks/typescript/github"}]},{"group":"Related packages","icon":"puzzle","pages":[{"title":"TypeScript SDK: related packages","sidebarTitle":"Overview","href":"/sdks/typescript/related/index"},{"group":"Audio","boost":0.5,"pages":[{"title":"Audio JS package","sidebarTitle":"v0.1.0 (latest)","href":"/sdks/typescript/related/audio/0.1.0"}]},{"group":"Autoevals","boost":0.5,"pages":[{"title":"Autoevals TypeScript API","sidebarTitle":"v0.3.0 (latest)","href":"/sdks/typescript/related/autoevals/0.3.0"},{"title":"Autoevals TypeScript API","sidebarTitle":"v0.0.132","href":"/sdks/typescript/related/autoevals/0.0.132"},{"title":"Autoevals TypeScript API","sidebarTitle":"v0.0.131","href":"/sdks/typescript/related/autoevals/0.0.131"}]},{"group":"LangChain (deprecated)","boost":0.5,"pages":[{"title":"LangChain JS Integration","sidebarTitle":"v0.2.5 (latest)","href":"/sdks/typescript/related/langchain/0.2.5"},{"title":"LangChain JS Integration","sidebarTitle":"v0.2.4","href":"/sdks/typescript/related/langchain/0.2.4"}]},{"group":"OpenAI Agents","boost":0.5,"pages":[{"title":"OpenAI Agents JS Integration","sidebarTitle":"v0.1.7 (latest)","href":"/sdks/typescript/related/openai-agents/0.1.7"},{"title":"OpenAI Agents JS Integration","sidebarTitle":"v0.1.6","href":"/sdks/typescript/related/openai-agents/0.1.6"}]},{"group":"OpenTelemetry","boost":0.5,"pages":[{"title":"OpenTelemetry JS Integration","sidebarTitle":"v1.1.0 (latest)","href":"/sdks/typescript/related/otel/1.1.0"},{"title":"OpenTelemetry JS Integration","sidebarTitle":"v1.0.2","href":"/sdks/typescript/related/otel/1.0.2"},{"title":"OpenTelemetry JS Integration","sidebarTitle":"v1.0.0","href":"/sdks/typescript/related/otel/1.0.0"}]}]}]},{"dropdown":"Python","icon":"https://mintlify.s3.us-west-1.amazonaws.com/braintrust/images/sdk-icons/python.svg","pages":[{"title":"Python SDK quickstart","sidebarTitle":"Quickstart","href":"/sdks/python/quickstart"},{"group":"Use the SDK","icon":"code","pages":[{"title":"Install and instrument","href":"/sdks/python/install-and-instrument"},{"title":"Python SDK integrations","sidebarTitle":"SDK integrations","href":"/sdks/python/sdk-integrations"},{"title":"Troubleshooting","href":"/sdks/python/troubleshooting"}]},{"group":"Features","icon":"component","pages":[{"title":"Workflow evaluations","href":"/sdks/python/workflow-evaluations"},{"title":"Application logs","href":"/sdks/python/application-logs"},{"title":"Redact sensitive data","href":"/sdks/python/redact-sensitive-data"}]},{"group":"Reference","icon":"file-text","pages":[{"title":"API reference","href":"/sdks/python/api-reference"},{"group":"Versions","boost":0.5,"pages":[{"title":"Braintrust Python SDK","sidebarTitle":"v0.49.1 (latest)","href":"/sdks/python/versions/0.49.1"},{"title":"Braintrust Python SDK","sidebarTitle":"v0.48.1","href":"/sdks/python/versions/0.48.1"},{"title":"Braintrust Python SDK","sidebarTitle":"v0.47.0","href":"/sdks/python/versions/0.47.0"},{"title":"Braintrust Python SDK","sidebarTitle":"v0.46.1","href":"/sdks/python/versions/0.46.1"},{"title":"Braintrust Python SDK","sidebarTitle":"v0.45.0","href":"/sdks/python/versions/0.45.0"},{"title":"Braintrust Python SDK","sidebarTitle":"v0.44.1","href":"/sdks/python/versions/0.44.1"},{"title":"Braintrust Python SDK","sidebarTitle":"v0.43.0","href":"/sdks/python/versions/0.43.0"},{"title":"Braintrust Python SDK","sidebarTitle":"v0.42.0","href":"/sdks/python/versions/0.42.0"},{"title":"Braintrust Python SDK","sidebarTitle":"v0.41.1","href":"/sdks/python/versions/0.41.1"},{"title":"Braintrust Python SDK","sidebarTitle":"v0.40.0","href":"/sdks/python/versions/0.40.0"},{"title":"Braintrust Python SDK","sidebarTitle":"v0.39.0","href":"/sdks/python/versions/0.39.0"},{"title":"Braintrust Python SDK","sidebarTitle":"v0.38.0","href":"/sdks/python/versions/0.38.0"},{"title":"Braintrust Python SDK","sidebarTitle":"v0.37.0","href":"/sdks/python/versions/0.37.0"},{"title":"Braintrust Python SDK","sidebarTitle":"v0.36.0","href":"/sdks/python/versions/0.36.0"},{"title":"Braintrust Python SDK","sidebarTitle":"v0.35.0","href":"/sdks/python/versions/0.35.0"},{"title":"Braintrust Python SDK","sidebarTitle":"v0.34.0","href":"/sdks/python/versions/0.34.0"},{"title":"Braintrust Python SDK","sidebarTitle":"v0.33.0","href":"/sdks/python/versions/0.33.0"},{"title":"Braintrust Python SDK","sidebarTitle":"v0.32.0","href":"/sdks/python/versions/0.32.0"},{"title":"Braintrust Python SDK","sidebarTitle":"v0.31.1","href":"/sdks/python/versions/0.31.1"},{"title":"Braintrust Python SDK","sidebarTitle":"v0.31.0","href":"/sdks/python/versions/0.31.0"},{"title":"Braintrust Python SDK","sidebarTitle":"v0.30.1","href":"/sdks/python/versions/0.30.1"},{"title":"Braintrust Python SDK","sidebarTitle":"v0.30.0","href":"/sdks/python/versions/0.30.0"},{"title":"Braintrust Python SDK","sidebarTitle":"v0.29.0","href":"/sdks/python/versions/0.29.0"},{"title":"Braintrust Python SDK","sidebarTitle":"v0.28.0","href":"/sdks/python/versions/0.28.0"},{"title":"Braintrust Python SDK","sidebarTitle":"v0.27.0","href":"/sdks/python/versions/0.27.0"},{"title":"Braintrust Python SDK","sidebarTitle":"v0.26.0","href":"/sdks/python/versions/0.26.0"},{"title":"Braintrust Python SDK","sidebarTitle":"v0.25.0","href":"/sdks/python/versions/0.25.0"},{"title":"Braintrust Python SDK","sidebarTitle":"v0.24.0","href":"/sdks/python/versions/0.24.0"},{"title":"Braintrust Python SDK","sidebarTitle":"v0.23.0","href":"/sdks/python/versions/0.23.0"},{"title":"Braintrust Python SDK","sidebarTitle":"v0.22.1","href":"/sdks/python/versions/0.22.1"},{"title":"Braintrust Python SDK","sidebarTitle":"v0.21.0","href":"/sdks/python/versions/0.21.0"},{"title":"Braintrust Python SDK","sidebarTitle":"v0.20.0","href":"/sdks/python/versions/0.20.0"},{"title":"Braintrust Python SDK","sidebarTitle":"v0.19.0","href":"/sdks/python/versions/0.19.0"},{"title":"Braintrust Python SDK","sidebarTitle":"v0.18.0","href":"/sdks/python/versions/0.18.0"},{"title":"Braintrust Python SDK","sidebarTitle":"v0.17.0","href":"/sdks/python/versions/0.17.0"},{"title":"Braintrust Python SDK","sidebarTitle":"v0.16.0","href":"/sdks/python/versions/0.16.0"},{"title":"Braintrust Python SDK","sidebarTitle":"v0.15.0","href":"/sdks/python/versions/0.15.0"},{"title":"Braintrust Python SDK","sidebarTitle":"v0.14.0","href":"/sdks/python/versions/0.14.0"},{"title":"Braintrust Python SDK","sidebarTitle":"v0.13.0","href":"/sdks/python/versions/0.13.0"},{"title":"Braintrust Python SDK","sidebarTitle":"v0.12.1","href":"/sdks/python/versions/0.12.1"},{"title":"Braintrust Python SDK","sidebarTitle":"v0.11.0","href":"/sdks/python/versions/0.11.0"},{"title":"Braintrust Python SDK","sidebarTitle":"v0.10.0","href":"/sdks/python/versions/0.10.0"},{"title":"Braintrust Python SDK","sidebarTitle":"v0.9.0","href":"/sdks/python/versions/0.9.0"},{"title":"Braintrust Python SDK","sidebarTitle":"v0.8.0","href":"/sdks/python/versions/0.8.0"},{"title":"Braintrust Python SDK","sidebarTitle":"v0.7.0","href":"/sdks/python/versions/0.7.0"},{"title":"Braintrust Python SDK","sidebarTitle":"v0.6.0","href":"/sdks/python/versions/0.6.0"},{"title":"Braintrust Python SDK","sidebarTitle":"v0.5.6","href":"/sdks/python/versions/0.5.6"},{"title":"Braintrust Python SDK","sidebarTitle":"v0.4.3","href":"/sdks/python/versions/0.4.3"},{"title":"Python SDK","sidebarTitle":"v0.3.15","href":"/sdks/python/versions/0.3.15"}]},{"title":"Changelog","url":"https://github.com/braintrustdata/braintrust-sdk-python/releases","href":"/sdks/python/changelog"},{"title":"GitHub","url":"https://github.com/braintrustdata/braintrust-sdk-python","href":"/sdks/python/github"}]},{"group":"Related packages","icon":"puzzle","pages":[{"title":"Python SDK: related packages","sidebarTitle":"Overview","href":"/sdks/python/related/index"},{"group":"Autoevals","boost":0.5,"pages":[{"title":"Autoevals Python API","sidebarTitle":"v0.3.0 (latest)","href":"/sdks/python/related/autoevals/0.3.0"},{"title":"Autoevals Python API","sidebarTitle":"v0.2.0","href":"/sdks/python/related/autoevals/0.2.0"},{"title":"Autoevals Python API","sidebarTitle":"v0.1.0","href":"/sdks/python/related/autoevals/0.1.0"},{"title":"Autoevals Python API","sidebarTitle":"v0.0.131","href":"/sdks/python/related/autoevals/0.0.131"},{"title":"Autoevals Python API","sidebarTitle":"v0.0.130","href":"/sdks/python/related/autoevals/0.0.130"}]},{"group":"LangChain (deprecated)","boost":0.5,"pages":[{"title":"LangChain Python Integration","sidebarTitle":"v0.3.0 (deprecated)","href":"/sdks/python/related/langchain/0.3.0"},{"title":"LangChain Python Integration","sidebarTitle":"v0.2.1 (deprecated)","href":"/sdks/python/related/langchain/0.2.1"},{"title":"LangChain Python Integration","sidebarTitle":"v0.2.0 (deprecated)","href":"/sdks/python/related/langchain/0.2.0"},{"title":"LangChain Python Integration","sidebarTitle":"v0.1.5 (deprecated)","href":"/sdks/python/related/langchain/0.1.5"}]},{"group":"Google ADK (deprecated)","boost":0.5,"pages":[{"title":"Google ADK Integration","sidebarTitle":"v0.4.0 (deprecated)","href":"/sdks/python/related/adk/0.4.0"},{"title":"Google ADK Integration","sidebarTitle":"v0.3.1 (deprecated)","href":"/sdks/python/related/adk/0.3.1"},{"title":"Google ADK Integration","sidebarTitle":"v0.2.4 (deprecated)","href":"/sdks/python/related/adk/0.2.4"}]}]}]},{"dropdown":"Go","icon":"https://mintlify.s3.us-west-1.amazonaws.com/braintrust/images/sdk-icons/go.svg","pages":[{"title":"Go SDK quickstart","sidebarTitle":"Quickstart","href":"/sdks/go/quickstart"},{"group":"Use the SDK","icon":"code","pages":[{"title":"Install and instrument","href":"/sdks/go/install-and-instrument"},{"title":"Go SDK integrations","sidebarTitle":"SDK integrations","href":"/sdks/go/sdk-integrations"},{"title":"Troubleshooting","href":"/sdks/go/troubleshooting"}]},{"group":"Features","icon":"component","pages":[{"title":"Workflow evaluations","href":"/sdks/go/workflow-evaluations"},{"title":"Redact sensitive data","href":"/sdks/go/redact-sensitive-data"}]},{"group":"Reference","icon":"file-text","pages":[{"title":"API reference","href":"/sdks/go/api-reference"},{"group":"Versions","boost":0.5,"pages":[{"title":"Braintrust Go SDK","sidebarTitle":"v0.19.0 (latest)","url":"https://pkg.go.dev/github.com/braintrustdata/braintrust-sdk-go@v0.19.0","href":"/sdks/go/versions/0.19.0"},{"title":"Braintrust Go SDK","sidebarTitle":"v0.18.0","url":"https://pkg.go.dev/github.com/braintrustdata/braintrust-sdk-go@v0.18.0","href":"/sdks/go/versions/0.18.0"},{"title":"Braintrust Go SDK","sidebarTitle":"v0.17.2","url":"https://pkg.go.dev/github.com/braintrustdata/braintrust-sdk-go@v0.17.2","href":"/sdks/go/versions/0.17.2"},{"title":"Braintrust Go SDK","sidebarTitle":"v0.17.1","url":"https://pkg.go.dev/github.com/braintrustdata/braintrust-sdk-go@v0.17.1","href":"/sdks/go/versions/0.17.1"},{"title":"Braintrust Go SDK","sidebarTitle":"v0.17.0","url":"https://pkg.go.dev/github.com/braintrustdata/braintrust-sdk-go@v0.17.0","href":"/sdks/go/versions/0.17.0"},{"title":"Braintrust Go SDK","sidebarTitle":"v0.16.0","url":"https://pkg.go.dev/github.com/braintrustdata/braintrust-sdk-go@v0.16.0","href":"/sdks/go/versions/0.16.0"},{"title":"Braintrust Go SDK","sidebarTitle":"v0.15.0","url":"https://pkg.go.dev/github.com/braintrustdata/braintrust-sdk-go@v0.15.0","href":"/sdks/go/versions/0.15.0"},{"title":"Braintrust Go SDK","sidebarTitle":"v0.14.0","url":"https://pkg.go.dev/github.com/braintrustdata/braintrust-sdk-go@v0.14.0","href":"/sdks/go/versions/0.14.0"},{"title":"Braintrust Go SDK","sidebarTitle":"v0.13.0","url":"https://pkg.go.dev/github.com/braintrustdata/braintrust-sdk-go@v0.13.0","href":"/sdks/go/versions/0.13.0"},{"title":"Braintrust Go SDK","sidebarTitle":"v0.12.0","url":"https://pkg.go.dev/github.com/braintrustdata/braintrust-sdk-go@v0.12.0","href":"/sdks/go/versions/0.12.0"},{"title":"Braintrust Go SDK","sidebarTitle":"v0.11.1","url":"https://pkg.go.dev/github.com/braintrustdata/braintrust-sdk-go@v0.11.1","href":"/sdks/go/versions/0.11.1"},{"title":"Braintrust Go SDK","sidebarTitle":"v0.11.0","url":"https://pkg.go.dev/github.com/braintrustdata/braintrust-sdk-go@v0.11.0","href":"/sdks/go/versions/0.11.0"},{"title":"Braintrust Go SDK","sidebarTitle":"v0.10.0","url":"https://pkg.go.dev/github.com/braintrustdata/braintrust-sdk-go@v0.10.0","href":"/sdks/go/versions/0.10.0"},{"title":"Braintrust Go SDK","sidebarTitle":"v0.9.1","url":"https://pkg.go.dev/github.com/braintrustdata/braintrust-sdk-go@v0.9.1","href":"/sdks/go/versions/0.9.1"},{"title":"Braintrust Go SDK","sidebarTitle":"v0.9.0","url":"https://pkg.go.dev/github.com/braintrustdata/braintrust-sdk-go@v0.9.0","href":"/sdks/go/versions/0.9.0"},{"title":"Braintrust Go SDK","sidebarTitle":"v0.8.0","url":"https://pkg.go.dev/github.com/braintrustdata/braintrust-sdk-go@v0.8.0","href":"/sdks/go/versions/0.8.0"},{"title":"Braintrust Go SDK","sidebarTitle":"v0.7.2","url":"https://pkg.go.dev/github.com/braintrustdata/braintrust-sdk-go@v0.7.2","href":"/sdks/go/versions/0.7.2"},{"title":"Braintrust Go SDK","sidebarTitle":"v0.7.0","url":"https://pkg.go.dev/github.com/braintrustdata/braintrust-sdk-go@v0.7.0","href":"/sdks/go/versions/0.7.0"},{"title":"Braintrust Go SDK","sidebarTitle":"v0.6.1","url":"https://pkg.go.dev/github.com/braintrustdata/braintrust-sdk-go@v0.6.1","href":"/sdks/go/versions/0.6.1"},{"title":"Braintrust Go SDK","sidebarTitle":"v0.6.0","url":"https://pkg.go.dev/github.com/braintrustdata/braintrust-sdk-go@v0.6.0","href":"/sdks/go/versions/0.6.0"},{"title":"Braintrust Go SDK","sidebarTitle":"v0.5.0","url":"https://pkg.go.dev/github.com/braintrustdata/braintrust-sdk-go@v0.5.0","href":"/sdks/go/versions/0.5.0"},{"title":"Braintrust Go SDK","sidebarTitle":"v0.4.1","url":"https://pkg.go.dev/github.com/braintrustdata/braintrust-sdk-go@v0.4.1","href":"/sdks/go/versions/0.4.1"},{"title":"Braintrust Go SDK","sidebarTitle":"v0.4.0","url":"https://pkg.go.dev/github.com/braintrustdata/braintrust-sdk-go@v0.4.0","href":"/sdks/go/versions/0.4.0"},{"title":"Braintrust Go SDK","sidebarTitle":"v0.3.1","url":"https://pkg.go.dev/github.com/braintrustdata/braintrust-sdk-go@v0.3.1","href":"/sdks/go/versions/0.3.1"},{"title":"Braintrust Go SDK","sidebarTitle":"v0.3.0","url":"https://pkg.go.dev/github.com/braintrustdata/braintrust-sdk-go@v0.3.0","href":"/sdks/go/versions/0.3.0"},{"title":"Braintrust Go SDK","sidebarTitle":"v0.2.1","url":"https://pkg.go.dev/github.com/braintrustdata/braintrust-sdk-go@v0.2.1","href":"/sdks/go/versions/0.2.1"},{"title":"Braintrust Go SDK","sidebarTitle":"v0.2.0-beta.1","url":"https://pkg.go.dev/github.com/braintrustdata/braintrust-sdk-go@v0.2.0-beta.1","href":"/sdks/go/versions/0.2.0-beta.1"},{"title":"Braintrust Go SDK","sidebarTitle":"v0.1.2","url":"https://pkg.go.dev/github.com/braintrustdata/braintrust-sdk-go@v0.1.2","href":"/sdks/go/versions/0.1.2"},{"title":"Braintrust Go SDK","sidebarTitle":"v0.1.1","url":"https://pkg.go.dev/github.com/braintrustdata/braintrust-sdk-go@v0.1.1","href":"/sdks/go/versions/0.1.1"},{"title":"Braintrust Go SDK","sidebarTitle":"v0.1.1-beta.1","url":"https://pkg.go.dev/github.com/braintrustdata/braintrust-sdk-go@v0.1.1-beta.1","href":"/sdks/go/versions/0.1.1-beta.1"},{"title":"Braintrust Go SDK","sidebarTitle":"v0.1.0","url":"https://pkg.go.dev/github.com/braintrustdata/braintrust-sdk-go@v0.1.0","href":"/sdks/go/versions/0.1.0"},{"title":"Braintrust Go SDK","sidebarTitle":"v0.0.3","url":"https://pkg.go.dev/github.com/braintrustdata/braintrust-sdk-go@v0.0.3","href":"/sdks/go/versions/0.0.3"},{"title":"Braintrust Go SDK","sidebarTitle":"v0.0.2","url":"https://pkg.go.dev/github.com/braintrustdata/braintrust-sdk-go@v0.0.2","href":"/sdks/go/versions/0.0.2"},{"title":"Braintrust Go SDK","sidebarTitle":"v0.0.1","url":"https://pkg.go.dev/github.com/braintrustdata/braintrust-sdk-go@v0.0.1","href":"/sdks/go/versions/0.0.1"},{"title":"Braintrust Go SDK","sidebarTitle":"v0.0.1-beta.1","url":"https://pkg.go.dev/github.com/braintrustdata/braintrust-sdk-go@v0.0.1-beta.1","href":"/sdks/go/versions/0.0.1-beta.1"}]},{"group":"Migration guides","pages":[{"title":"Migrate from v0.3.x to v0.4.x","sidebarTitle":"v0.3.x to v0.4.x","href":"/sdks/go/migrations/v0-3-to-v0-4"}]},{"title":"Changelog","url":"https://github.com/braintrustdata/braintrust-sdk-go/releases","href":"/sdks/go/changelog"},{"title":"GitHub","url":"https://github.com/braintrustdata/braintrust-sdk-go","href":"/sdks/go/github"}]}]},{"dropdown":"Java","icon":"https://mintlify.s3.us-west-1.amazonaws.com/braintrust/images/sdk-icons/java.svg","pages":[{"title":"Java SDK quickstart","sidebarTitle":"Quickstart","href":"/sdks/java/quickstart"},{"group":"Use the SDK","icon":"code","pages":[{"title":"Install and instrument","href":"/sdks/java/install-and-instrument"},{"title":"Java SDK integrations","sidebarTitle":"SDK integrations","href":"/sdks/java/sdk-integrations"},{"title":"Troubleshooting","href":"/sdks/java/troubleshooting"}]},{"group":"Features","icon":"component","pages":[{"title":"Redact sensitive data","href":"/sdks/java/redact-sensitive-data"}]},{"group":"Reference","icon":"file-text","pages":[{"title":"API reference","href":"/sdks/java/api-reference"},{"group":"Versions","boost":0.5,"pages":[{"title":"0.3.26","url":"https://javadoc.io/doc/dev.braintrust/braintrust-sdk-java/0.3.26","href":"/sdks/java/versions/0.3.26"},{"title":"0.3.25","url":"https://javadoc.io/doc/dev.braintrust/braintrust-sdk-java/0.3.25","href":"/sdks/java/versions/0.3.25"},{"title":"0.3.24","url":"https://javadoc.io/doc/dev.braintrust/braintrust-sdk-java/0.3.24","href":"/sdks/java/versions/0.3.24"},{"title":"0.3.23","url":"https://javadoc.io/doc/dev.braintrust/braintrust-sdk-java/0.3.23","href":"/sdks/java/versions/0.3.23"},{"title":"0.3.22","url":"https://javadoc.io/doc/dev.braintrust/braintrust-sdk-java/0.3.22","href":"/sdks/java/versions/0.3.22"},{"title":"0.3.21","url":"https://javadoc.io/doc/dev.braintrust/braintrust-sdk-java/0.3.21","href":"/sdks/java/versions/0.3.21"},{"title":"0.3.20","url":"https://javadoc.io/doc/dev.braintrust/braintrust-sdk-java/0.3.20","href":"/sdks/java/versions/0.3.20"},{"title":"0.3.19","url":"https://javadoc.io/doc/dev.braintrust/braintrust-sdk-java/0.3.19","href":"/sdks/java/versions/0.3.19"},{"title":"0.3.18","url":"https://javadoc.io/doc/dev.braintrust/braintrust-sdk-java/0.3.18","href":"/sdks/java/versions/0.3.18"},{"title":"0.3.17","url":"https://javadoc.io/doc/dev.braintrust/braintrust-sdk-java/0.3.17","href":"/sdks/java/versions/0.3.17"},{"title":"0.3.16","url":"https://javadoc.io/doc/dev.braintrust/braintrust-sdk-java/0.3.16","href":"/sdks/java/versions/0.3.16"},{"title":"0.3.15","url":"https://javadoc.io/doc/dev.braintrust/braintrust-sdk-java/0.3.15","href":"/sdks/java/versions/0.3.15"},{"title":"0.3.14","url":"https://javadoc.io/doc/dev.braintrust/braintrust-sdk-java/0.3.14","href":"/sdks/java/versions/0.3.14"},{"title":"0.3.13","url":"https://javadoc.io/doc/dev.braintrust/braintrust-sdk-java/0.3.13","href":"/sdks/java/versions/0.3.13"},{"title":"0.3.12","url":"https://javadoc.io/doc/dev.braintrust/braintrust-sdk-java/0.3.12","href":"/sdks/java/versions/0.3.12"},{"title":"0.3.11","url":"https://javadoc.io/doc/dev.braintrust/braintrust-sdk-java/0.3.11","href":"/sdks/java/versions/0.3.11"},{"title":"0.3.10","url":"https://javadoc.io/doc/dev.braintrust/braintrust-sdk-java/0.3.10","href":"/sdks/java/versions/0.3.10"},{"title":"0.3.9","url":"https://javadoc.io/doc/dev.braintrust/braintrust-sdk-java/0.3.9","href":"/sdks/java/versions/0.3.9"},{"title":"0.3.8","url":"https://javadoc.io/doc/dev.braintrust/braintrust-sdk-java/0.3.8","href":"/sdks/java/versions/0.3.8"},{"title":"0.3.7","url":"https://javadoc.io/doc/dev.braintrust/braintrust-sdk-java/0.3.7","href":"/sdks/java/versions/0.3.7"},{"title":"0.3.6","url":"https://javadoc.io/doc/dev.braintrust/braintrust-sdk-java/0.3.6","href":"/sdks/java/versions/0.3.6"},{"title":"0.3.5","url":"https://javadoc.io/doc/dev.braintrust/braintrust-sdk-java/0.3.5","href":"/sdks/java/versions/0.3.5"},{"title":"0.3.4","url":"https://javadoc.io/doc/dev.braintrust/braintrust-sdk-java/0.3.4","href":"/sdks/java/versions/0.3.4"},{"title":"0.3.3","url":"https://javadoc.io/doc/dev.braintrust/braintrust-sdk-java/0.3.3","href":"/sdks/java/versions/0.3.3"},{"title":"0.3.2","url":"https://javadoc.io/doc/dev.braintrust/braintrust-sdk-java/0.3.2","href":"/sdks/java/versions/0.3.2"},{"title":"0.3.1","url":"https://javadoc.io/doc/dev.braintrust/braintrust-sdk-java/0.3.1","href":"/sdks/java/versions/0.3.1"},{"title":"0.3.0","url":"https://javadoc.io/doc/dev.braintrust/braintrust-sdk-java/0.3.0","href":"/sdks/java/versions/0.3.0"},{"title":"0.2.11","url":"https://javadoc.io/doc/dev.braintrust/braintrust-sdk-java/0.2.11","href":"/sdks/java/versions/0.2.11"},{"title":"0.2.10","url":"https://javadoc.io/doc/dev.braintrust/braintrust-sdk-java/0.2.10","href":"/sdks/java/versions/0.2.10"},{"title":"0.2.9","url":"https://javadoc.io/doc/dev.braintrust/braintrust-sdk-java/0.2.9","href":"/sdks/java/versions/0.2.9"},{"title":"0.2.8","url":"https://javadoc.io/doc/dev.braintrust/braintrust-sdk-java/0.2.8","href":"/sdks/java/versions/0.2.8"},{"title":"0.2.7","url":"https://javadoc.io/doc/dev.braintrust/braintrust-sdk-java/0.2.7","href":"/sdks/java/versions/0.2.7"},{"title":"0.2.6","url":"https://javadoc.io/doc/dev.braintrust/braintrust-sdk-java/0.2.6","href":"/sdks/java/versions/0.2.6"},{"title":"0.2.5","url":"https://javadoc.io/doc/dev.braintrust/braintrust-sdk-java/0.2.5","href":"/sdks/java/versions/0.2.5"},{"title":"0.2.4","url":"https://javadoc.io/doc/dev.braintrust/braintrust-sdk-java/0.2.4","href":"/sdks/java/versions/0.2.4"},{"title":"0.2.3","url":"https://javadoc.io/doc/dev.braintrust/braintrust-sdk-java/0.2.3","href":"/sdks/java/versions/0.2.3"},{"title":"0.2.2","url":"https://javadoc.io/doc/dev.braintrust/braintrust-sdk-java/0.2.2","href":"/sdks/java/versions/0.2.2"},{"title":"0.2.1","url":"https://javadoc.io/doc/dev.braintrust/braintrust-sdk-java/0.2.1","href":"/sdks/java/versions/0.2.1"},{"title":"0.2.0","url":"https://javadoc.io/doc/dev.braintrust/braintrust-sdk-java/0.2.0","href":"/sdks/java/versions/0.2.0"},{"title":"0.1.3","url":"https://javadoc.io/doc/dev.braintrust/braintrust-sdk-java/0.1.3","href":"/sdks/java/versions/0.1.3"},{"title":"0.1.2","url":"https://javadoc.io/doc/dev.braintrust/braintrust-sdk-java/0.1.2","href":"/sdks/java/versions/0.1.2"},{"title":"0.1.1","url":"https://javadoc.io/doc/dev.braintrust/braintrust-sdk-java/0.1.1","href":"/sdks/java/versions/0.1.1"},{"title":"0.1.0","url":"https://javadoc.io/doc/dev.braintrust/braintrust-sdk-java/0.1.0","href":"/sdks/java/versions/0.1.0"},{"title":"0.0.2","url":"https://javadoc.io/doc/dev.braintrust/braintrust-sdk-java/0.0.2","href":"/sdks/java/versions/0.0.2"},{"title":"0.0.1","url":"https://javadoc.io/doc/dev.braintrust/braintrust-sdk-java/0.0.1","href":"/sdks/java/versions/0.0.1"}]},{"title":"Changelog","url":"https://github.com/braintrustdata/braintrust-sdk-java/releases","href":"/sdks/java/changelog"},{"title":"GitHub","url":"https://github.com/braintrustdata/braintrust-sdk-java","href":"/sdks/java/github"}]}]},{"dropdown":"Ruby","icon":"https://mintlify.s3.us-west-1.amazonaws.com/braintrust/images/sdk-icons/ruby.svg","pages":[{"title":"Ruby SDK quickstart","sidebarTitle":"Quickstart","href":"/sdks/ruby/quickstart"},{"group":"Use the SDK","icon":"code","pages":[{"title":"Install and instrument","href":"/sdks/ruby/install-and-instrument"},{"title":"Ruby SDK integrations","sidebarTitle":"SDK integrations","href":"/sdks/ruby/sdk-integrations"},{"title":"Troubleshooting","href":"/sdks/ruby/troubleshooting"}]},{"group":"Features","icon":"component","pages":[{"title":"Redact sensitive data","href":"/sdks/ruby/redact-sensitive-data"}]},{"group":"Reference","icon":"file-text","pages":[{"title":"API reference","href":"/sdks/ruby/api-reference"},{"group":"Versions","boost":0.5,"pages":[{"title":"0.6.0","url":"https://gemdocs.org/gems/braintrust/0.6.0/","href":"/sdks/ruby/versions/0.6.0"},{"title":"0.5.0","url":"https://gemdocs.org/gems/braintrust/0.5.0/","href":"/sdks/ruby/versions/0.5.0"},{"title":"0.4.2","url":"https://gemdocs.org/gems/braintrust/0.4.2/","href":"/sdks/ruby/versions/0.4.2"},{"title":"0.4.1","url":"https://gemdocs.org/gems/braintrust/0.4.1/","href":"/sdks/ruby/versions/0.4.1"},{"title":"0.4.0","url":"https://gemdocs.org/gems/braintrust/0.4.0/","href":"/sdks/ruby/versions/0.4.0"},{"title":"0.3.2","url":"https://gemdocs.org/gems/braintrust/0.3.2/","href":"/sdks/ruby/versions/0.3.2"},{"title":"0.3.1","url":"https://gemdocs.org/gems/braintrust/0.3.1/","href":"/sdks/ruby/versions/0.3.1"},{"title":"0.3.0","url":"https://gemdocs.org/gems/braintrust/0.3.0/","href":"/sdks/ruby/versions/0.3.0"},{"title":"0.2.1","url":"https://gemdocs.org/gems/braintrust/0.2.1/","href":"/sdks/ruby/versions/0.2.1"},{"title":"0.2.0","url":"https://gemdocs.org/gems/braintrust/0.2.0/","href":"/sdks/ruby/versions/0.2.0"},{"title":"0.1.4","url":"https://gemdocs.org/gems/braintrust/0.1.4/","href":"/sdks/ruby/versions/0.1.4"},{"title":"0.1.3","url":"https://gemdocs.org/gems/braintrust/0.1.3/","href":"/sdks/ruby/versions/0.1.3"},{"title":"0.1.2","url":"https://gemdocs.org/gems/braintrust/0.1.2/","href":"/sdks/ruby/versions/0.1.2"},{"title":"0.1.1","url":"https://gemdocs.org/gems/braintrust/0.1.1/","href":"/sdks/ruby/versions/0.1.1"},{"title":"0.1.0","url":"https://gemdocs.org/gems/braintrust/0.1.0/","href":"/sdks/ruby/versions/0.1.0"},{"title":"0.0.12","url":"https://gemdocs.org/gems/braintrust/0.0.12/","href":"/sdks/ruby/versions/0.0.12"},{"title":"0.0.11","url":"https://gemdocs.org/gems/braintrust/0.0.11/","href":"/sdks/ruby/versions/0.0.11"},{"title":"0.0.10","url":"https://gemdocs.org/gems/braintrust/0.0.10/","href":"/sdks/ruby/versions/0.0.10"},{"title":"0.0.9","url":"https://gemdocs.org/gems/braintrust/0.0.9/","href":"/sdks/ruby/versions/0.0.9"},{"title":"0.0.8","url":"https://gemdocs.org/gems/braintrust/0.0.8/","href":"/sdks/ruby/versions/0.0.8"},{"title":"0.0.7","url":"https://gemdocs.org/gems/braintrust/0.0.7/","href":"/sdks/ruby/versions/0.0.7"},{"title":"0.0.6","url":"https://gemdocs.org/gems/braintrust/0.0.6/","href":"/sdks/ruby/versions/0.0.6"},{"title":"0.0.5","url":"https://gemdocs.org/gems/braintrust/0.0.5/","href":"/sdks/ruby/versions/0.0.5"},{"title":"0.0.4","url":"https://gemdocs.org/gems/braintrust/0.0.4/","href":"/sdks/ruby/versions/0.0.4"},{"title":"0.0.3","url":"https://gemdocs.org/gems/braintrust/0.0.3/","href":"/sdks/ruby/versions/0.0.3"},{"title":"0.0.2","url":"https://gemdocs.org/gems/braintrust/0.0.2/","href":"/sdks/ruby/versions/0.0.2"},{"title":"0.0.1","url":"https://gemdocs.org/gems/braintrust/0.0.1/","href":"/sdks/ruby/versions/0.0.1"}]},{"title":"Changelog","url":"https://github.com/braintrustdata/braintrust-sdk-ruby/releases","href":"/sdks/ruby/changelog"},{"title":"GitHub","url":"https://github.com/braintrustdata/braintrust-sdk-ruby","href":"/sdks/ruby/github"}]}]},{"dropdown":"C#","icon":"https://mintlify.s3.us-west-1.amazonaws.com/braintrust/images/sdk-icons/csharp.svg","pages":[{"title":"C# SDK quickstart","sidebarTitle":"Quickstart","href":"/sdks/csharp/quickstart"},{"group":"Use the SDK","icon":"code","pages":[{"title":"Install and instrument","href":"/sdks/csharp/install-and-instrument"},{"title":"C# SDK integrations","sidebarTitle":"SDK integrations","href":"/sdks/csharp/sdk-integrations"},{"title":"Troubleshooting","href":"/sdks/csharp/troubleshooting"}]},{"group":"Reference","icon":"file-text","pages":[{"title":"API reference","href":"/sdks/csharp/api-reference"},{"title":"Changelog","url":"https://github.com/braintrustdata/braintrust-sdk-dotnet/releases","href":"/sdks/csharp/changelog"},{"title":"GitHub","url":"https://github.com/braintrustdata/braintrust-sdk-dotnet","href":"/sdks/csharp/github"}]}]}]},{"tab":"Reference","icon":"code","pages":[{"title":"Reference","href":"/reference"}]},{"tab":"Cookbook","icon":"notebook","pages":[{"title":"Cookbook","href":"/cookbook"}]},{"tab":"Troubleshooting","icon":"wrench","pages":[{"title":"Troubleshooting","href":"/kb"}]},{"tab":"Changelog","icon":"mailbox","pages":[{"title":"Changelog","href":"/changelog"}]}]},"basePath":"","title":"Upgrade to data plane v2.x - Braintrust","buildId":"dpl_G9nrg4qeJSZtah1Ziwbc2n6WkLch","deploymentId":"dpl_G9nrg4qeJSZtah1Ziwbc2n6WkLch","dynamics":[],"chunks":[]}