GitHub Models was fully retired on 2026-07-30. That part is well covered. What is less obvious is how it fails now, and it is the annoying kind.
The host still resolves. One command, no token:
curl -i https://models.github.ai/catalog/models
Today that answers HTTP 410 Gone with this body:
{"error":{"code":"github_models_retirement_brownout",
"message":"GitHub Models is temporarily unavailable as part of a scheduled retirement brownout."}}
Two things worth noticing.
It is a well-formed JSON response. Not a connection refused, not a DNS failure, not an HTML error page. Any client that wraps the call in a try/except around response.json() parses this successfully. If your code then does data.get("choices", []) and moves on, the failure is silent — you get empty output and no exception, forever.
The message still says "temporarily". That is leftover brownout copy from the July 16 and July 23 rehearsals, and it is now a month stale. A human reading a log line will reasonably conclude it is a transient outage and retry. It will never succeed.
So the audit is: grep your repos for models.github.ai and models.inference.ai.azure.com, then check whether the calling code inspects response.status_code at all. The base URL being dead is easy to fix. Code that treats a 410 as an empty result is the thing that has been quietly returning nothing since July.
For what it's worth, nothing replaces the specific thing GitHub Models did — a frontier closed model, free, authenticated with a token you already had in CI. Free tiers now are open-weight only.
I wrote up the migration options and current free limits here: GitHub Models is retired: what to use instead
Top comments (0)