One inference seam, several providers behind it
Provider-agnostic inference seam: adapters, automatic failover, and an empty-success guard. One package so the estate stops carrying copies.
A provider-agnostic seam: adapters, automatic failover, and one namespace for models that live in different places. Written because inference belongs behind an interface — a system whose behaviour changes when a vendor has a bad afternoon is not a system.
`@flashyos/llm-gateway` is a provider-agnostic inference seam: adapters, automatic failover, and an empty-success guard. It takes configuration and an error factory and does not read your environment or import your error class — that boundary is what makes it a package rather than a copy with extra steps.
Cutover is configuration: `provider` selects who serves inference and the other configured provider becomes the automatic fallback, so changing providers is an environment change, never a deploy. One `call()` returns text with token counts, a request id and the provider that served it.
It exists because this code lived twice as byte-identical copies — once in ClaimYour.Gold, once in `apps/ops` — and two copies of the thing every AI call passes through drift expensively.
The seam is verified on demand from an environment that can actually reach the provider — the remote-agent containers cannot, by egress policy, which is why it is a workflow rather than a CI step. The provider key lives only in the repository secret it reads, not in code, artifacts or the workflow file, which is the custody rule enforced by where the secret physically is. Run it yourself from Actions with the optional smoke input to spend one real inference call against staging.
Apache-2.0, read from the package’s own manifest. Embed it in anything, including closed software — that is what makes a spec adoptable and a verifier worth running. FlashyOS’s server side is AGPL-3.0-only instead, and a test in the monorepo asserts the direction between them: AGPL code may consume this, this may never consume AGPL code.