Advertise the full Chat model catalog, not just the SDK enum - #18
Conversation
/v1/models and `og-veil models` were both derived from the SDK's TEE_LLM enum. That enum ships on the SDK's release cadence and lags the network: at the pinned 1.1.1 it was missing ten models the gateway already serves and the Chat app already offers -- the GPT-5.6 trio, Claude Sonnet 5 / Opus 5 / Fable 5, Gemini 3.6 Flash and 3.5 Flash Lite, and Grok 4.5 / 4.3 -- so an agent probing /v1/models never learned they existed. Add veil/models.py, a curated catalog mirroring the Chat app's lib/constants/models.ts: same models, same display names, same order, with bare wire ids (the gateway is sent `claude-opus-5`, not `anthropic/claude-opus-5`, matching both the SDK and the Chat app). The enum is folded in on top, so anything a later SDK adds still shows up and nothing that used to be listed can regress -- 42 ids advertised before, 59 now, none dropped. - /v1/models reports the provider as `owned_by` instead of a flat "opengradient", and keeps superseded ids listed so an agent already configured for one keeps working. - `og-veil models` groups by provider with descriptions; `--all` adds superseded and SDK-only ids. - `og-veil test` defaulted to `--model gpt-4.1`, which is not a model the network serves (the enum has gpt-4.1-nano / -mini / -2025-04-14). Default to claude-haiku-4-5, the Chat app's own free-tier default. - README gains a model table and drops the superseded claude-sonnet-4-6 from its examples.
Two accuracy gaps in the models docs the previous commit added. Generated image bytes ride out-of-band and are not signed -- the enclave hashes the assistant text (see the SDK's response_content_for_hash). The request is OHTTP-sealed exactly as a text prompt is, so privacy is unchanged, but `X-OpenGradient-Verified: true` on an image-generation response attests the exchange, not the pixels. Worth stating plainly in a README whose whole subject is what the verification covers. And note the absence of video. Chat's Video Studio (Veo, Kling, Seedance, Wan) doesn't run over this path: those requests go to chat-api, which holds the fal/BytePlus/Atlas keys and calls the providers directly -- no enclave, no OHTTP, no signature. Listing those models here would advertise a guarantee that doesn't exist, so the README says so rather than leaving the omission to be guessed at.
|
Follow-up commit, prompted by "what about image and video models?" -- both worth answering in the README rather than leaving implicit. Image models are in (they were in the first commit): But the guarantee is narrower than the surrounding README implies, so it now says so: generated image bytes ride out-of-band and are not signed. From the SDK's
The request is OHTTP-sealed exactly as a text prompt is, so privacy is unchanged. But Video models are deliberately out. Chat's Video Studio doesn't run over this path at all:
No HPKE sealing, no attestation, no signature anywhere in that chain. Listing those ids in |
Why
/v1/modelsandog-veil modelswere both derived from the SDK'sTEE_LLMenum. That enum ships on the SDK's release cadence and lags the network. At the pinnedopengradient1.1.1 it is missing ten models the gateway already serves and the Chat app already offers:gpt-5.6-luna·gpt-5.6-terra·gpt-5.6-sol·claude-sonnet-5·claude-opus-5·claude-fable-5·gemini-3.6-flash·gemini-3.5-flash-lite·grok-4.5·grok-4.3So an agent probing
/v1/modelsnever learned they existed. Bumping the SDK doesn't fix it -- 1.1.3 is missing the same ten.What
veil/models.py, a curated catalog mirroring the Chat app'slib/constants/models.ts: same models, same display names, same order within a provider. Ids are the bare wire names (the gateway is sentclaude-opus-5, notanthropic/claude-opus-5) -- matching both the SDK (model.split("/")[1]) and the Chat app (modelToGatewayModel).The enum is still folded in on top of the catalog, so anything a later SDK adds shows up without an edit here, and nothing that used to be listed can regress. 42 ids advertised before, 59 now, none dropped.
Neither list gates anything: the gateway stays the source of truth for what's routable, and Veil forwards whatever
modelthe agent sends. This is a listing, so it errs toward completeness.Also in here:
/v1/modelsreports the upstream provider asowned_byinstead of a flat"opengradient", and keeps superseded ids listed so an agent already configured for one keeps working.og-veil modelsgroups by provider with descriptions instead of printing one flat sorted list;--alladds superseded and SDK-only ids.og-veil testdefaulted to--model gpt-4.1, which is not a model the network serves (the enum hasgpt-4.1-nano/-mini/-2025-04-14, no baregpt-4.1). Now defaults toclaude-haiku-4-5, the Chat app's own free-tier default -- cheap, fast, and available on every account.claude-sonnet-4-6from its examples./v1/chat/completionsendpoint, which is how the Chat app's Image Studio reaches them.og-veil modelsTesting
make checkandmake testboth clean. Newtests/test_models.pycovers the invariants that matter: ids are bare, the catalog covers the ten the enum lagged on, andknown_model_ids()is a superset of the enum -- so the listing can only ever grow.Follow-up, not in this PR
Keeping this catalog and the Chat app's in sync is manual. If the tee-gateway grows a model-registry endpoint, both should read from it instead. The
opengradientfloor is also still>=1.1.1while 1.1.3 is out; bumping it gains nothing here (the union already covers it) so I left it alone.