Repository navigation
feat(catalog): make the four international vendors selectable when listing a key - #414
Merged
Merged
Conversation
…sting a key
rant 2026-10-16T14:08:13.998860: openai / anthropic / google / xai had
[[models]] rows but no [[providers]] and no [[plans]] row. The listing form
derives its vendor dropdown from the providers that have a plan, so the four
were visible in the model catalogue yet impossible to pick -- their keys could
not be listed at all.
- config/config.example.toml: four [[providers]] (country US) and one
pay-as-you-go [[plans]] per vendor, with each vendor's official base URL
(openai_chat -> {base}/chat/completions, anthropic -> {base}/v1/messages,
responses -> {base}/responses, see src/gateway.rs::resolve_endpoint)
- ui/js/data.js: mirror the four plans in PLANS and add the four vendor labels
- src/catalog_gate.rs: PLAN_COUNT 12 -> 16 (the gate's positive control)
- src/config.rs, src/main.rs: the example-config provider assertions 6 -> 10
- ui/README.md: the listing form's built-in plan roster now names the four
- ui/index.html: bump the data.js cache-bust token
Tests: cargo test 564 passed / 0 failed; cargo fmt --check and clippy clean.
This was referenced Oct 16, 2026
argszero
added a commit
that referenced
this pull request
Oct 18, 2026
Four carriers still described this project as shipping DeepSeek pricing only, with every other vendor left to the reader to configure: - README.md / README.en.md, the "transparent billing" feature line; - docs/user-stories.md, the capability list that mirrors it; - docs/plan-api-matrix.md, which said "DeepSeek pricing built in; other vendors can be configured in the same format" and listed eight provider names, two of which (`bytedance`, `aliyun`) are not the ids the config actually uses. The example config ships ten providers, sixteen plans and twenty-four models, with thirteen rows priced in CNY and eleven in USD: the four international vendors became selectable in #414, and the new-generation rows landed in #415. The old wording was accurate when written; it is incomplete now, and incomplete in the direction that undersells the feature list -- a reader of the front page is told to expect one vendor's prices and to configure the rest themselves. The fix names no counts. Those are owned by the config and by catalog_gate's MODEL_COUNT / PLAN_COUNT, and restating them in prose is the stale-copy family this repo has had to clean up before. The provider roster is spelled with the real ids and checked to be exact in both directions; the model-family roster gains the two families it was missing (Kimi, grok). Docs only: 4 files, +6/-6, no behaviour change. Co-authored-by: argszero <argszero@argszerodeMac-mini.local>
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.
Summary
The four international vendors were in the model catalogue but could not be put
on the shelf. Tracked as rant
2026-10-16T14:08:13.998860.config/config.example.tomlhad[[models]]rows foropenai,anthropic,googleandxaibut no[[providers]]row and no[[plans]]row for any ofthem. The listing form builds its vendor dropdown from the providers that have a
plan (
ui/js/app.js:[...new Set(planList().map((pl) => pl.provider))]), so thefour never appeared in the vendor -> plan -> model cascade and no key for those
models could be listed at all.
Changes
config/config.example.toml: four[[providers]](OpenAI / Anthropic /Google Gemini / xAI,
country = "US") and one pay-as-you-go[[plans]]pervendor, built from each vendor's official base URL. Endpoint paths are the ones
the gateway derives (
src/gateway.rs::resolve_endpoint):openai_chat->{base}/chat/completions,anthropic->{base}/v1/messages,responses->{base}/responses. Base URLs probed 2026-10-16:https://api.openai.com/v1,https://api.anthropic.com,https://generativelanguage.googleapis.com/v1beta/openai,https://api.x.ai/v1.ui/js/data.js: the four plan ids mirrored intoPLANS(the listing form'sfallback table; it must stay equal to the config's plan ids) and the four
display labels into
PROVIDER_LABELS.src/catalog_gate.rs:PLAN_COUNT12 -> 16. This is the consistency gate'spositive control, the number it asks to be updated deliberately whenever the
plan list changes.
src/config.rs/src/main.rs: the example-config provider count assertions6 -> 10.
ui/README.md: the listing form's built-in plan roster now names the four.ui/index.html: bumped thedata.jscache-bust token.No model rows and no prices are touched:
MODEL_COUNTandMARKET_COUNTareunchanged, and the four vendors' models (
gpt-5.6-sol,claude-opus-5,gemini-3.1-pro,grok-4.6/grok-4.7) were already in the catalogue.Related Issue
None — this is tracked as a rant in this deployment's queue rather than as a
GitHub issue.
Tests
cargo test: 564 passed / 0 failed. The count isunchanged; the catalogue consistency gate (
src/catalog_gate.rs) covers theplan-id parity this change exercises, and its
PLAN_COUNTcontrol was updatedwith the data.
cargo fmt --checkclean;cargo clippy --all-targetsclean.