Skip to content

feat(catalog): make the four international vendors selectable when listing a key - #414

Merged
argszero merged 1 commit into
mainfrom
feat/catalog-international-providers
Oct 16, 2026
Merged

argszero merged 1 commit into
mainfrom
feat/catalog-international-providers

Conversation

@argszero

Copy link
Copy Markdown
Owner

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.toml had [[models]] rows for openai, anthropic,
google and xai but no [[providers]] row and no [[plans]] row for any of
them. 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 the
four 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]] per
    vendor, 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 into PLANS (the listing form's
    fallback table; it must stay equal to the config's plan ids) and the four
    display labels into PROVIDER_LABELS.
  • src/catalog_gate.rs: PLAN_COUNT 12 -> 16. This is the consistency gate's
    positive 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 assertions
    6 -> 10.
  • ui/README.md: the listing form's built-in plan roster now names the four.
  • ui/index.html: bumped the data.js cache-bust token.

No model rows and no prices are touched: MODEL_COUNT and MARKET_COUNT are
unchanged, 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

  • Existing tests pass — cargo test: 564 passed / 0 failed. The count is
    unchanged; the catalogue consistency gate (src/catalog_gate.rs) covers the
    plan-id parity this change exercises, and its PLAN_COUNT control was updated
    with the data.
  • cargo fmt --check clean; cargo clippy --all-targets clean.

…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.
@argszero
argszero merged commit 983111c into main Oct 16, 2026
2 checks passed
@argszero
argszero deleted the feat/catalog-international-providers branch October 16, 2026 18:17
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>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant