Home / AI & GenAI

AI & GenAIHow-toIntermediate

Stop surprise model upgrades in Azure OpenAI - versionUpgradeOption, the Models API lifecycle fields and a weekly retirement report

When gpt-4o 2024-05-13 retires on 9 December 2026, Standard deployments get auto-upgraded to gpt-5.6-sol. Decide per deployment whether that's what you want with versionUpgradeOption, and use the Models API's lifecycleStatus and deprecation fields to report what's coming - remembering the API's status names don't match the portal's.

Deepak Bhardwaj3 min read

Applies toAzure OpenAI in Microsoft Foundry; Standard, Global Standard and Data Zone Standard deployments; Azure Resource Manager Models API (api-version 2024-10-01); Azure CLI

The example that matters this quarter

From Microsoft's lifecycle documentation: when gpt-4o version 2024-05-13 retires on 2026-12-09, the service automatically upgrades Standard deployments of it to gpt-5.6-sol, adding that model to regions where it isn't yet available on Standard. Microsoft notes that the replacement and date can change, so check the schedule before relying on it.

That's convenient if you're unprepared, and risky if your application depends on the old model's behaviour.

1. Decide the upgrade policy per deployment

Each Standard deployment has a versionUpgradeOption:

Value Behaviour Use when
OnceNewDefaultVersionAvailable Upgrades when Microsoft sets a new default version Low-risk uses (internal chat, drafts)
OnceCurrentVersionExpired Upgrades only at retirement Default for most production apps, combined with your own earlier migration
NoAutoUpgrade Never upgrades; stops working at retirement Only if you have a firm migration plan and alerting

Set it with the CLI (check --help for the parameter name on your CLI version) or through ARM/Bicep:

resource dep 'Microsoft.CognitiveServices/accounts/deployments@2024-10-01' = {
  parent: aoai
  name: 'chat-prod'
  sku: { name: 'Standard', capacity: 50 }
  properties: {
    model: { format: 'OpenAI', name: 'gpt-4o', version: '2024-11-20' }
    versionUpgradeOption: 'OnceCurrentVersionExpired'
  }
}

Provisioned deployments never auto-upgrade; they need a manual migration.

2. Ask the Models API what's coming

az rest --method get \
  --url "https://management.azure.com/subscriptions/$SUB/providers/Microsoft.CognitiveServices/locations/swedencentral/models?api-version=2024-10-01" \
  --query "value[?model.format=='OpenAI'].{name:model.name, version:model.version, status:model.lifecycleStatus, retire:model.deprecation.inference}" -o table

Warning

The API's status names don't match the portal. lifecycleStatus: "Deprecating" means deprecated (still works, closed to new customers). lifecycleStatus: "Deprecated" means retired (returns 410). Also treat any model whose deprecation.inference date is in the past as retired, even if the status hasn't caught up.

3. A weekly retirement report

Join your deployments with the Models API and flag anything retiring in the next 120 days:

import datetime as dt, subprocess, json

def az(*args):
    return json.loads(subprocess.check_output(["az", *args, "-o", "json"]))

SUB = "<subscription-id>"
soon = dt.date.today() + dt.timedelta(days=120)
rows = []
for acct in az("cognitiveservices", "account", "list"):
    if acct["kind"] not in ("OpenAI", "AIServices"):
        continue
    loc = acct["location"]
    models = az("rest", "--method", "get", "--url",
        f"https://management.azure.com/subscriptions/{SUB}/providers/Microsoft.CognitiveServices/locations/{loc}/models?api-version=2024-10-01")["value"]
    retire = {(m["model"]["name"], m["model"]["version"]): m["model"].get("deprecation", {}).get("inference")
              for m in models}
    for d in az("cognitiveservices", "account", "deployment", "list", "-g", acct["resourceGroup"], "-n", acct["name"]):
        key = (d["properties"]["model"]["name"], d["properties"]["model"]["version"])
        date = retire.get(key)
        if date and dt.date.fromisoformat(date[:10]) <= soon:
            rows.append((acct["name"], d["name"], *key, date[:10], d["sku"]["name"],
                         d["properties"].get("versionUpgradeOption")))

for r in sorted(rows, key=lambda r: r[4]):
    print(*r, sep="\t")

Send the output to the owning teams (tag accounts with an owner), and track each line until it's migrated.

4. Add the official notices

Microsoft emails subscription owners at least 60 days before a GA model retires and posts a Service Health advisory. Make sure those reach the right people: a Service Health alert for Azure OpenAI Service health advisories routed to the AI platform team. See Service Health alerts.

Checklist

  • Every Standard deployment has a deliberate versionUpgradeOption
  • gpt-4o 2024-05-13 deployments migrated or knowingly left to auto-upgrade before 9 Dec 2026
  • Weekly report from the Models API with the status-name mapping applied
  • Owners notified per deployment
  • Service Health advisories for Azure OpenAI Service routed to the platform team

Sources