DEV Community

toolfreebie
toolfreebie

Posted on

GitHub Models returns 410 with a JSON body, which is worse than a timeout

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
Enter fullscreen mode Exit fullscreen mode

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."}}
Enter fullscreen mode Exit fullscreen mode

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)