chore(deps): ai-ration v0.2.1 — the chain's Groq link was entirely dead - #352
Merged
Conversation
Companion to #350. That PR fixed FleetCrown's own direct Groq calls; this one fixes the shared chain underneath Loki. `ai-ration` is the package that exists BECAUSE a single pinned free model is a scheduled outage. It had the same disease: checked against the live catalogues, four of its nine default ids were gone. groq llama-3.3-70b-versatile GONE groq llama-3.1-8b-instant GONE <- whole vendor dead openrouter openai/gpt-oss-20b:free GONE <- was FIRST in the list openrouter nvidia/nemotron-3-nano-30b-... GONE So Loki's chain burned two Groq 404s and then a third on its preferred OpenRouter fallback before reaching a model that could answer. Not an outage — OpenRouter's remaining links carried it — but the fastest vendor and the whole 100k/day Groq budget were unreachable. Checked the direction that costs money: every OpenRouter link carries `:free`, so nothing had silently moved to paid. Upstream (bitbaum/ai-kit#4, tag v0.2.1) replaces the dead pins with `openai/gpt-oss-120b` / `openai/gpt-oss-20b` — probed with a real tool call, not guessed — and adds `checkCatalog()`: a zero-token existence check, three-state (present / retired / could-not-read), cheap enough to run on a schedule. The existing `probe:models` costs real tokens and so could never be scheduled, which is why five rots in a row went unnoticed. ── one test changed, and it was pinning a dead model ──────────────────────── `scripts/test/agent-name-lookup.ts` asserted the chain still contains `llama-3.1-8b-instant` — "a model verified to drive the loop". That model is one of the four the vendor retired. The guard was correct in intent and anchored to a single rotting id, so it failed because its one EXAMPLE died, not because the property broke. A rot-detector anchored to one pinned id reproduces the exact failure it is watching for. It now asserts the property against a set of models actually probed for tool-calling, with the probe date and an instruction not to add a model you have not run. Mutation-proven: emptying the verified set turns it red (exit 1). Verified end-to-end rather than assumed: the installed copy reports 0.2.1, resolves to 07c492c, and its dist/chain.js carries the live ids. The lockfile diff is exactly one dependency — no incidental churn. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
chore(deps): ai-ration v0.2.1 — the chain's Groq link was entirely dead
Companion to #350. That PR fixed FleetCrown's own direct Groq calls; this one
fixes the shared chain underneath Loki.
ai-rationis the package that exists BECAUSE a single pinned free model is ascheduled outage. It had the same disease: checked against the live catalogues,
four of its nine default ids were gone.
So Loki's chain burned two Groq 404s and then a third on its preferred
OpenRouter fallback before reaching a model that could answer. Not an outage —
OpenRouter's remaining links carried it — but the fastest vendor and the whole
100k/day Groq budget were unreachable. Checked the direction that costs money:
every OpenRouter link carries
:free, so nothing had silently moved to paid.Upstream (bitbaum/ai-kit#4, tag v0.2.1) replaces the dead pins with
openai/gpt-oss-120b/openai/gpt-oss-20b— probed with a real tool call, notguessed — and adds
checkCatalog(): a zero-token existence check, three-state(present / retired / could-not-read), cheap enough to run on a schedule. The
existing
probe:modelscosts real tokens and so could never be scheduled, whichis why five rots in a row went unnoticed.
── one test changed, and it was pinning a dead model ────────────────────────
scripts/test/agent-name-lookup.tsasserted the chain still containsllama-3.1-8b-instant— "a model verified to drive the loop". That model is oneof the four the vendor retired. The guard was correct in intent and anchored to
a single rotting id, so it failed because its one EXAMPLE died, not because the
property broke. A rot-detector anchored to one pinned id reproduces the exact
failure it is watching for.
It now asserts the property against a set of models actually probed for
tool-calling, with the probe date and an instruction not to add a model you have
not run. Mutation-proven: emptying the verified set turns it red (exit 1).
Verified end-to-end rather than assumed: the installed copy reports 0.2.1,
resolves to 07c492c, and its dist/chain.js carries the live ids. The lockfile
diff is exactly one dependency — no incidental churn.
Co-Authored-By: Claude Opus 5 noreply@anthropic.com