How to plan a LiteLLM upgrade on a production proxy
An upgrade that spans several minor versions of a self-hosted LiteLLM proxy must follow every intermediate release note, use an exact image tag and start with a verified database backup, because migrations only move forward. Your situation is typical: the proxy serves several teams, PostgreSQL holds virtual keys, budgets and the spend log, and the target release sits several minor versions ahead of what you run today. Each step between those versions may run database migrations that you cannot reverse by changing the image back. Plan the upgrade as a sequence of documented steps, not as a single image swap.
The reason to upgrade on a schedule is support. LiteLLM maintains support for the four most recent stable minor versions for both open source and Enterprise deployments, according to its enterprise documentation. A proxy on an older minor version can fall outside that window, which means fixes for security and stability issues go to newer releases only. The supported path therefore runs through a release you can still receive support on, so the first decision is which intermediate release becomes the first stop. Confirm the current window against the LiteLLM releases page and its enterprise documentation before you set the target, because the window moves as new minor versions ship.
Build the plan from an inventory of what the upgrade touches. Record the running image tag, the Postgres version and size, the Redis deployment if more than one proxy instance runs, the number of pods or workers, and the value of LITELLM_PRISMA_MIGRATE_DEPLOY_TIMEOUT. By default each pod runs prisma migrate deploy at startup, with one pod applying migrations under a database lock while the others wait. The proxy stops the migration after LITELLM_PRISMA_MIGRATE_DEPLOY_TIMEOUT seconds, which defaults to 600, and retries it. Decide before the window whether to raise that timeout, and whether to run migrations once as a separate job rather than letting every pod attempt them at startup.
Rehearse the upgrade on a copy of production data before you schedule it. Restore a recent backup into a staging database, run each intermediate step in order and time the migrations against your real spend log volume. The LiteLLM_SpendLogs table drives most of the risk: a plain index build can take seconds on a small table and hours on a very large one, and a table rewrite holds a lock for its full duration, which blocks writes to the proxy. Ask your upgrade team to report which migration statements take locks and for how long at your data size. Agree on a maintenance window, a go or no-go checkpoint, and a restore procedure that puts back the backup and the previous image if the rehearsal fails.
DeployOpen plans and runs LiteLLM upgrades inside your own infrastructure, including your cloud accounts, data centers or air-gapped networks, so the database, backups and migration logs stay under your control. The engagement covers the release-note review, pinned image tags, the staging rehearsal, the production run and the verification of virtual keys, budgets and routing after each step. Ask any partner to confirm in writing which steps they will perform, which evidence they will hand over and how they will handle a failed migration, before the work starts.
What changes between LiteLLM releases and what each change asks of you
This table pairs each upgrade-relevant change in LiteLLM with its impact on a running proxy and the action your team should take before or during the upgrade. Read it as a checklist for planning the change window, not as a full inventory of what each release modifies. The main takeaway is that migrations only move forward, so the backup, timeout and version-pinning steps matter more than any single feature change.
| Change | Impact | Action needed |
|---|---|---|
| Database migrations move forward only | A migration cannot be reversed by the proxy, so rolling back a release may leave the schema ahead of the older code. | Take and test a database backup before every upgrade, and confirm the restore procedure before the change window. |
| Migrations run at pod startup under a lock | Each pod runs prisma migrate deploy at startup, with one pod doing the work while the others wait on the database lock. | Plan a maintenance window, watch startup logs on the first pod, and confirm the other pods start only after migration completes. |
| Default migration timeout of 600 seconds | The proxy stops prisma migrate deploy after 600 seconds by default and retries it, which can interrupt long migrations on a large spend log table. | Estimate migration duration on a copy of your database and raise LITELLM_PRISMA_MIGRATE_DEPLOY_TIMEOUT before the upgrade if needed. |
| Floating image tags such as main-latest | A floating tag can pull a different build on the next restart, so the running version may change without a deliberate upgrade. | Pin an exact image tag in your deployment manifests and record the tag in your change log. |
| Support window covers the four most recent stable minor versions | Versions older than the four most recent stable minor releases fall outside maintained support for open source and Enterprise deployments. | Track the current minor line against the support window and schedule upgrades before your version leaves it. |
| Free SSO limit of 5 users from v1.76.0 | From v1.76.0, SSO is free for up to 5 users, and an Enterprise license is needed beyond that. | Count SSO users before upgrading to v1.76.0 or later and confirm licensing with LiteLLM if your user count is above 5. |
| Release notes between current and target version | Breaking changes are documented per release, and this page does not list them for each version. | Read the release notes for every version between your current and target release on the LiteLLM GitHub releases page before you pick a target. |
| Latest listed release v1.105.1 (published October 14, 2026) | The latest release on the GitHub releases page is v1.105.1, but your target should be chosen from your support window and tested changes. | Confirm the target version against the releases page on the day you plan the upgrade, and test that exact tag in staging first. |
Why LiteLLM database migrations lock writes on large spend log tables
The main risk in a LiteLLM upgrade is not that a migration fails but that it blocks writes while it runs. By default, each LiteLLM proxy pod runs prisma migrate deploy at startup. One pod performs the migration under a database lock while the other pods wait for it to finish. A rolling restart or a scale-out event can therefore stall for as long as the migration takes, and the stall is largest when the migration touches a large table. Plan the upgrade window around the slowest pod start, not the average one.
The table that usually matters is LiteLLM_SpendLogs, which grows with every request the gateway handles. Creating an index on it, or rewriting the table, holds a lock for the full duration of that operation. LiteLLM's upgrade guide cites measured and estimated times: a plain index build on LiteLLM_SpendLogs takes about 4 to 8 seconds at 10 GB and an estimated 1.5 to 3.5 hours at 10 TB. Table rewrites range from about 1 minute to about 1 day. These figures come from LiteLLM's upgrade guide, and your own table will differ in row width, indexes, PostgreSQL version and hardware, so treat them as reference points rather than a forecast for your system.
The proxy does not wait indefinitely. It stops prisma migrate deploy after LITELLM_PRISMA_MIGRATE_DEPLOY_TIMEOUT seconds, which defaults to 600, and then retries. A migration that needs longer than the timeout will be interrupted and retried, which wastes time and can leave the reader guessing about the state of the schema. Before a large upgrade, decide whether the timeout must be raised for that run, set it deliberately in the deployment configuration, and confirm that the value is applied to every pod that will start during the window.
Estimate the window from evidence, not from the figures above. Copy the production database to a staging environment that matches production in PostgreSQL version and hardware, check the size of LiteLLM_SpendLogs and the row count, identify which migrations the target release contains between your current and target versions, and run those migrations against the copy while timing them. Use the measured duration, add margin for the production load, and compare it with the timeout. Ask your DBA or platform team to confirm that the lock behavior in staging matches production before you schedule the change.
What to back up and inventory before the LiteLLM upgrade
Six items decide whether a LiteLLM upgrade can be rolled back and whether its database migration finishes within the startup timeout. Each card names one thing to finish, record and check before the target image reaches production. Together they give you a restorable rollback point, a pinned version change, a verified configuration and a staging run that matches production.
Verified Postgres backup
Take a Postgres backup of the LiteLLM database before any new release starts, then restore it to a separate test instance to confirm it works. LiteLLM's upgrade guide notes that migrations only move forward, so this backup is the only path back to the previous schema. Confirm the restored copy includes virtual keys, budgets, team and user tables, and the spend log table, then run a test query against it. Record the backup identifier in the change ticket.
Current and target image tags
List the image tag the proxy runs today and the exact tag you plan to deploy. Pin an explicit version tag. Floating tags such as main-latest can change under you between restarts or on new pods, so the image must be fixed in your deployment manifest. Read the release notes for every version between the current and target release, not only the final one, and note any migration, setting or deprecation that applies. Keep the same pinned tag in the rollback plan.
Customization inventory
Inventory every customization the running proxy depends on: custom callbacks, guardrail configuration, admin UI SSO settings and values in config.yaml. Compare each item against the release notes for the target version, since a callback or guardrail that loads cleanly on one release can break on another. Export the live configuration from the running environment and compare it with the copy in your repository, because environment overrides often hold the values that matter.
Staging environment sized like production
Stand up staging with the same number of proxy pods, worker settings, database size and network path as production, and restore a copy of the spend log table into it. This table is usually the largest in the database and the one most likely to slow a migration, so test at production-scale volume. Time the migration in staging and compare the result with LITELLM_PRISMA_MIGRATE_DEPLOY_TIMEOUT, which defaults to 600 seconds, so you can raise it before production if needed.
Secrets available to the new release
Confirm that LITELLM_MASTER_KEY, which must start with sk-, and every other secret the proxy reads are held in your secret manager and reachable by the new release's service account. Check the release notes for renamed or newly required variables. Test retrieval in staging with the target image, so a missing value appears in staging rather than during a production rollout. Record which secret versions the rollback plan depends on.
Redis for multi-instance proxies
If more than one proxy instance runs, confirm that Redis 7.0 or newer is deployed and reachable from every instance. LiteLLM's production guide requires it once multiple instances run, because shared rate limits, router state and cache depend on it. Check the Redis version in both production and staging, and confirm the connection settings work with the target release in staging before you start a rolling upgrade.
Which LiteLLM upgrade path is supported and how to choose the target
LiteLLM maintains support for the four most recent stable minor versions, and it applies that window to both open source and Enterprise deployments. The practical consequence is that a gateway further behind than that window cannot jump straight to the newest release and expect a supported path. The team has to move in steps that stay within a supported line, and at each step it reads the release notes for every version it passes through. Before planning any step, the operator should confirm the current support status of each candidate version in LiteLLM's vendor documentation, because the window moves as new minor versions ship.
Choosing the target release is a decision the platform owner should make deliberately. The usual choice is the newest stable minor version that the team can test fully against its own configuration, including virtual keys, budgets, router settings, callbacks and any custom providers. Once the version is chosen, pin the exact image tag in the deployment manifest. Avoid floating tags such as main-latest, because a floating tag can change under a running cluster between a test run and a production rollout, and then the version under test is no longer the version in production. The pinned tag should be recorded in change management so that the rollback target is known in advance.
A jump across many minor versions multiplies the work. Every intermediate release adds release notes to read, configuration changes to check and database migrations to test, and the migrations run forward only. If a deployment must cross several lines, each stop becomes its own test cycle with its own backup point, so the team should plan the number of stops before scheduling the change window. Enterprise deployments follow the same support window according to LiteLLM's enterprise documentation, so a licensed gateway gains no extra room to skip versions. Teams should confirm that point in the Enterprise documentation for their contract.
The output of this planning step is a written upgrade path: the current version, the ordered list of pinned target tags, the release notes reviewed for each stop, the support status confirmed for each line and the test environment used for each step. An illustrative example would be a gateway that must pass through three intermediate tags before reaching its target, with a backup and a migration test before each one. Ask the vendor or check the LiteLLM releases page for the latest stable tag and its publication date before the plan is final. At the time of research, the releases page listed v1.105.1, published October 14, 2026, but the current line must be confirmed at planning time.
LiteLLM upgrade sequence with checks and rollback points
This sequence moves a production LiteLLM proxy to a pinned target release with a verified backup, a rehearsed migration time and a clear stop-and-restore decision at every stage. It produces an upgrade that the team can explain, measure and reverse if needed.
Freeze configuration and read release notes
The platform owner freezes changes to proxy configuration, model routes, virtual keys and budgets for the duration of the upgrade, and announces the freeze to teams that manage keys. The engineer then reads the release notes for every version between the current and target release, noting schema changes, configuration changes, deprecations and any migration that touches the spend log table. Done means a written upgrade record lists each release reviewed, the chosen exact image tag and any config changes required. Rollback point: nothing has changed yet, so stopping here costs only time.
Take and verify the Postgres backup
The database owner takes a fresh backup of the PostgreSQL database that holds LiteLLM state, including virtual keys, budgets and spend logs, and records the backup identifier and timestamp. The backup is verified by restoring it to a separate instance and confirming that row counts for key tables match the source and that the LiteLLM schema version is the expected one. Done means a restore has been proven, not just a backup job reporting success. Rollback point: this backup is the only route back after a completed migration, so the team keeps it until the upgrade is accepted.
Rehearse the upgrade on a restored copy
The engineer restores the verified backup to a staging environment that matches production's database version and approximate table size, then runs the target image against it. The run records the wall-clock duration of the migration, any lock waits observed and the proxy startup time. Because long migrations on large spend log tables can hold locks for extended periods, the rehearsal result drives the production change window. Done means the team has a measured migration duration and a go or no-go recommendation signed off by the platform owner. Rollback point: staging is disposable, so a failed rehearsal leads to a fix or a longer window, not a production change.
Raise the migration timeout where needed
If the rehearsal shows that the migration runs longer than the default timeout, the engineer sets LITELLM_PRISMA_MIGRATE_DEPLOY_TIMEOUT in the production deployment to a value above the measured duration, with margin agreed by the team. By default the proxy stops prisma migrate deploy after 600 seconds and retries it, so an unraised timeout can cause repeated partial attempts on a large table. Done means the setting is recorded in the deployment manifest and the rehearsal confirms that the migration completes within it. Rollback point: the setting is a configuration value, so reverting it is a single change before the migration starts.
Scale to one instance or drain traffic
Before the migration, the platform engineer scales the proxy deployment to one instance or drains traffic from the other instances, so that a single pod runs the migration and no request reaches a pod that expects a different schema. The engineer confirms that the remaining pod is healthy and that the load balancer routes nothing to pods being removed. Done means the deployment shows one ready pod, the traffic path has been checked and the team has agreed the window in which some requests may fail or queue. Rollback point: scaling back up to the previous replica count restores the prior state, as long as the migration has not yet begun.
Apply the pinned image tag and watch the migration
The engineer applies the exact image tag recorded in the upgrade record, never a floating tag such as main-latest. The engineer watches the single migrating pod's logs for the prisma migrate deploy run, then confirms that the other pods, if any, wait on the database lock and do not start their own migration. Done means the pod logs show the migration completed and the proxy reports ready. Decision point: if the migration exceeds the rehearsed duration, shows repeated retries or reports errors that the rehearsal did not, the team stops and does not start the next step. Because migrations only move forward, the team restores the backup to a point before the migration rather than running the previous image against the migrated schema.
Run smoke tests on keys, budgets, routing and logging
The platform engineer runs a scripted set of smoke tests against the upgraded proxy using a test virtual key. The checks cover key creation and authentication, budget enforcement and spend recording, routing to each approved model provider or private model with the expected failover order, and logging of requests and spend. Results are compared against the baseline recorded before the upgrade. Done means every check passes and the results are stored with the upgrade record. Decision point: a failed budget or spend check is a stop condition, because it can misstate cost or allow overspend. The team restores from the verified backup if the fault cannot be corrected quickly and safely.
Restore traffic gradually and keep the backup
Once smoke tests pass, the engineer restores replicas and routes traffic back in stages, watching error rates, latency and spend metrics at each stage before increasing the share. The configuration freeze is lifted only after the proxy has run normally for an observation period the team agreed in advance. The backup is retained until the owner accepts the upgrade, then the retention decision is recorded. Done means full traffic is served, the upgrade record is closed and the previous image tag is documented for reference. Rollback point: until the backup is released, the team can restore the database to the pre-migration point and deploy the prior image, accepting the loss of any data written after the backup.
How to test a LiteLLM upgrade and plan the rollback
The test plan for a LiteLLM upgrade should prove that the gateway still behaves the way your teams and budgets depend on, and the rollback plan should be written before the first pod restarts. Treat the upgrade as a change to a running control point, not only a version bump. Run the same test suite against a staging copy of production data, on the exact image tag you intend to deploy, and compare the results with the outcome recorded before the upgrade. Start with smoke tests against each provider route in use. If your gateway sends traffic to OpenAI, Anthropic, Gemini, Bedrock, Azure or a private model, send a short request through every route and every model alias that real applications call. Check the response shape, the streamed output, token counts and the model name written to the logs. A route that quietly stops working after an upgrade often fails only for one provider, so do not sample a single model and assume the rest are healthy.
Next, test authentication and limits with the keys your teams actually hold. Confirm that existing virtual keys still authenticate, and that each key still reports its per-key, per-user and per-team budgets, TPM and RPM limits, temporary budget increases and model restrictions. Send requests that should be refused: a key outside its allowed models, a key past its budget, and a key over its RPM limit. Refusal behavior is the control most likely to change silently, and it is the one your finance and security teams will ask about first. Then test router behavior under failure. Simulate an unavailable deployment and confirm that retries, cooldowns and priority-based failover happen in the order your configuration defines, and that the cooldown ends when the deployment recovers. Also check the admin UI login through your SSO provider, and confirm that log delivery reaches each destination with the fields your retention and privacy rules require. Record every result in a sheet with the image tag, so a later difference can be traced to a specific release.
Rollback has two cases, and they need different plans. If the upgrade fails before the database migration completes, the previous image may be able to run against the unchanged schema. Confirm this in rehearsal, because it depends on whether the new release changed the schema before the failure point. If the migration completes and the new release then fails, the schema has moved forward, and only a verified backup restore returns it to the earlier state. The upgrade guide states that migrations only move forward, so an older image cannot undo a completed migration on its own. Before the window, rehearse the restore on a copy of production and record the exact restore time you observe, including the time to restore the database, start the older image and run the smoke tests again. Use that measured figure, not an estimate, to set the point after which rolling back is no longer practical. Agree in advance who has the authority to call a rollback during the window, who is on the bridge, and what evidence triggers the decision. Ask whether your release changes the schema before the migration step, and confirm the rollback behavior for your specific release in its release notes.
What makes a LiteLLM upgrade take longer
This table lists the factors that most often stretch a LiteLLM upgrade, why each one adds effort, and what to check before the change window. Use it as a checklist for sizing the work, since the spend log table is often the largest driver and depends on whether the migration rewrites it or only builds an index. Several rows need measurements from your own environment, and the timings shown are LiteLLM's measured and estimated figures, not guarantees for your hardware.
| Driver | Why it adds effort | What to check |
|---|---|---|
| Minor versions between current and target | Each minor release can add migrations and configuration changes, and migrations only move forward. | Read the release notes for every version in between, and confirm the target is within the four most recent stable minor versions. |
| Size of LiteLLM_SpendLogs and migration type | LiteLLM's measured and estimated figures: an index build takes 4 to 8 seconds at 10 GB and 1.5 to 3.5 hours at 10 TB. Table rewrites range from about 1 minute to about 1 day. | Measure the table's row count and size, and check whether the migration rewrites the table or only builds an index. Expect writes to be locked for the duration. |
| Number of proxy pods and rolling restarts | By default each pod runs prisma migrate deploy at startup, and one pod holds a database lock while the others wait. | Count the pods, and decide whether the migration runs once before pods roll, so restarts do not queue behind one migrating pod. |
| Migration timeout | The proxy stops prisma migrate deploy after LITELLM_PRISMA_MIGRATE_DEPLOY_TIMEOUT seconds (default 600) and retries it, so long migrations can fail in a loop. | Estimate the longest migration from your staging test, then set the timeout above that value in your deployment configuration. |
| Custom callbacks, guardrails or forks | Custom code depends on internal interfaces that can change between releases, and a fork must be rebased onto the target version. | List every callback, guardrail and patch, then retest each one against the target version in staging. |
| Providers, models, teams, budgets and routing rules | Virtual keys, per-team budgets, TPM and RPM limits, model restrictions and routing strategy all need to behave the same after the upgrade. | Export keys, teams, budgets, limits and router settings before the upgrade, then compare them afterward. |
| SSO, secret manager and Enterprise features | Identity, secret manager integrations and Enterprise features are configured separately from the core proxy and need their own tests. | Test sign-in, secret retrieval and any Enterprise feature in use, and confirm your license covers the target release. |
| Staging copy matching production data volume | A staging database with a small spend log cannot show how long the migration will lock writes in production. | Restore a staging copy with a comparable spend log size, and time the migration there before scheduling the change. |
LiteLLM upgrade questions buyers ask before hiring help
What drives the cost of a LiteLLM upgrade?
The biggest driver is how many releases sit between your current version and your target, because LiteLLM's upgrade guide asks you to read the release notes for every version in between. The cost comes from several components: reviewing those notes, checking your configuration and custom callbacks against each change, pinning an exact image tag, rehearsing the migration on a copy of your database, planning the cutover, writing a rollback runbook, and verifying the result afterward. Your own staff are paid in time for reviews, testing and sign-off. A partner is paid for the scoped work. Most of the upgrade is one-time, but each later release line repeats part of this work, and any ongoing support is a recurring cost. Ask for a quote that lists each component, the number of releases in scope, the environments covered and what is excluded.
How long will a LiteLLM database migration lock writes?
The lock time depends on the type of migration and the size of the LiteLLM_SpendLogs table, so no single number applies to every deployment. LiteLLM's measured and estimated figures show a plain index build on that table taking 4 to 8 seconds at 10 GB and 1.5 to 3.5 hours at 10 TB. Table rewrites range from about 1 minute to about 1 day, and the lock is held for the full duration. To estimate your own window, read the migrations in each target release, identify whether each one builds an index or rewrites a table, measure your table size, and time the same migrations on a restored copy with a similar row count. Also raise LITELLM_PRISMA_MIGRATE_DEPLOY_TIMEOUT above its default of 600 seconds if a migration may run longer, because the proxy otherwise stops and retries it.
Can our own team upgrade LiteLLM without outside help?
Yes, a capable team can do it, provided it has people who can operate PostgreSQL, run containers or Kubernetes workloads, and set aside time to read every intervening release note. The work that most often gets underestimated is the database migration rehearsal and the rollback test, not the image swap itself. Your team keeps the knowledge in-house and avoids external fees, but the upgrade will compete with other work and the people running it will be on call during cutover. A partner adds capacity and a second set of eyes, and the cost follows the written scope. Decide based on your staff's Postgres and container experience, your change window, how many releases you must cross and whether anyone has restored your database from backup in the last year.
What does a LiteLLM upgrade need from our staff and environment?
You need a staging environment that matches production in database engine and approximate data size, because a migration timed on a small copy will not predict lock time on a large spend log table. Your team should provide a tested backup and restore path, access to the secret manager that holds LITELLM_MASTER_KEY, a named owner for the database, the platform and security sign-off, and a change window long enough for the rehearsed migration. Confirm that PostgreSQL is your primary database. If more than one proxy instance runs, confirm Redis 7.0 or newer is in place for shared rate limits and router state. Finally, confirm how many pods will start at once, since by default each pod runs prisma migrate deploy at startup and one pod holds the database lock while the others wait.
Can we roll back a LiteLLM migration after it has run?
Usually not by redeploying the previous image alone, because LiteLLM's upgrade guide says migrations only move forward. A rollback normally means stopping writes, restoring the database from a backup taken before the upgrade, and then starting the earlier pinned image. Any spend logs, keys, budgets or configuration written after that backup will be lost unless you reconcile them. Before the upgrade, ask for the measured restore time, a confirmed backup, the previous image tag kept in your registry, a written decision point for when to roll back, and a plan for what happens to activity recorded during the cutover window. Test the restore on a copy so the first real restore does not happen during an incident.
Is a fixed-scope quote available for a LiteLLM upgrade?
Most DeployOpen engagements are fixed-scope, with the scope, deliverables and timeline agreed in writing before work starts, and a quote follows from that written scope. DeployOpen does not publish a price list, so the number depends on the releases to cross, the environments, the migration rehearsal, the cutover support and the rollback runbook. Ask for a written scope that names the starting and target versions, every release note reviewed, the databases and environments covered, the timing approach for migrations, who performs the cutover, and what is excluded, such as custom callbacks or unrelated changes. If you want help after the upgrade, ask whether ongoing support or upgrades fall under a separate retainer. Do not begin work until the written scope and quote are accepted.
What happens if the target LiteLLM release is outside the support window?
LiteLLM maintains support for the four most recent stable minor versions for both open source and Enterprise deployments. If your target is outside that window when you plan to cut over, you should not jump straight to it. Instead, plan a stepped path through supported intermediate releases, each with its own release notes, migrations and rehearsal. The same applies if your current version has already fallen out of the window, because the upgrade then starts from an unsupported base. Check the current release list on LiteLLM's GitHub releases page at planning time, because the window moves as new minor versions ship. Ask your partner to show the path, the number of stops, and what support you have during the interval.
How DeployOpen scopes, runs and supports a LiteLLM upgrade
DeployOpen plans LiteLLM upgrades and database migrations as written, fixed-scope engagements inside your own infrastructure. We read every release note between your current and target versions, rehearse the migration on a copy of your production data, and hand over pinned images, backup evidence and a runbook your team can repeat.
How we scope
- Inventory of current version, target version and every release note in between
- Check of the database engine, Redis use, and number of proxy instances in production
- Estimate of migration lock risk on LiteLLM_SpendLogs based on measured table size
- Written list of pinned image tags, backup method and rollback criteria
How we build
- Rehearsal of the upgrade on a restored copy of production data before any change
- Raised LITELLM_PRISMA_MIGRATE_DEPLOY_TIMEOUT tested against a realistic migration duration
- Controlled rollout order so one pod runs migrations while others wait on the database lock
- Smoke tests for virtual keys, budgets, routing and logging after each stage
How we hand over
- Runbook with exact image tags, commands, expected lock windows and go or no-go checks
- Recorded backup and restore test results kept with the change record
- Rollback procedure written for the forward-only migration, with the point of no return marked
- Walkthrough with your platform and database operators before the production window
How we support
- Fixed-scope engagements with deliverables and timelines agreed in writing before work starts
- Ongoing upgrades, monitoring of new release lines and support available as a retainer
- Support for the next minor release cycle, using the same runbook and test set
- Quote follows from the written scope, so ask for line items covering rehearsal, window support and handover

