diff options
Diffstat (limited to 'docs/superpowers/specs/2026-08-09-external-providers-design.md')
| -rw-r--r-- | docs/superpowers/specs/2026-08-09-external-providers-design.md | 26 |
1 files changed, 13 insertions, 13 deletions
diff --git a/docs/superpowers/specs/2026-08-09-external-providers-design.md b/docs/superpowers/specs/2026-08-09-external-providers-design.md index 1174ded..cb4a070 100644 --- a/docs/superpowers/specs/2026-08-09-external-providers-design.md +++ b/docs/superpowers/specs/2026-08-09-external-providers-design.md @@ -18,10 +18,10 @@ putting an approximate cost next to the context meter. ## Providers `config.toml` grows a `[providers.*]` table. The local router stops being -special and becomes an ordinary entry named `default`. +special and becomes an ordinary entry named `local`. ```toml -[providers.default] +[providers.local] base_url = "http://localhost:8181" [providers.together] @@ -48,19 +48,19 @@ Per-provider keys, all optional except `base_url`: ### Backward compatibility A top-level `base_url` with no `[providers]` table synthesizes -`[providers.default]` from it. An existing config keeps working untouched +`[providers.local]` from it. An existing config keeps working untouched and nothing needs migrating. If both a top-level `base_url` and an explicit -`[providers.default]` are present, the explicit one wins. +`[providers.local]` are present, the explicit one wins. ### Model identity -Models are addressed as `provider:model`. The `default` provider is the +Models are addressed as `provider:model`. The `local` provider is the exception: its models are shown and stored bare, so the local dropdown reads exactly as it does now and existing sessions keep resolving. A model id containing a colon is therefore ambiguous only in principle; the split is on the first colon, and any provider name that is not configured -falls back to treating the whole string as a `default` model. That keeps an +falls back to treating the whole string as a `local` model. That keeps an old session pointing at a local model working even if the model name itself grows a colon. @@ -71,7 +71,7 @@ together.ai lists roughly 200 models. A model is kept when any filter substring appears in its id, compared case-insensitively. `"qwen"` matches `Qwen/Qwen2.5-72B-Instruct-Turbo`. -The `default` provider is never filtered. +The `local` provider is never filtered. When a provider's filter matches nothing, the status bar reports it by name with the counts, e.g. `together: 0 of 213 models matched filter`. The @@ -123,7 +123,7 @@ Unknown degrades per value: | --- | --- | | `ctx_size` | Meter shows tokens used with no limit and no percentage. Attachment budget uses a fallback. | | `vision` | Treated as unknown, not as false: attaching an image is permitted and no dialog offers to switch models. | -| `price_in` / `price_out` | No cost figure. Shown as blank for `default`, `?` for a provider that has an `api_key`. | +| `price_in` / `price_out` | No cost figure. Shown as blank for `local`, `?` for a provider that has an `api_key`. | The `?` distinguishes "local, free" from "cloud, price not entered". Both would otherwise render as an empty label, which reads as free. @@ -161,7 +161,7 @@ price fields are valid and mean unpriced. Two triggers: - **First selection.** Choosing a model in the dropdown that has no - `models.ini` section and belongs to a provider other than `default` opens + `models.ini` section and belongs to a provider other than `local` opens the dialog once, before anything is typed. Cancel writes `configured = false`. - **On demand.** A button beside the model dropdown opens the dialog for the @@ -256,14 +256,14 @@ usable. Following the project's existing test approach, written before the implementation: -- Config: providers parsed, bare `base_url` synthesizing `default`, explicit - `default` winning over it, filter matching case-insensitively, empty - filter meaning all, `default` never filtered. +- Config: providers parsed, bare `base_url` synthesizing `local`, explicit + `local` winning over it, filter matching case-insensitively, empty + filter meaning all, `local` never filtered. - Key resolution: each prefix form, lazy resolution not firing for local requests, caching after first resolution, timeout and failure paths reported as errors. - Model ids: split on first colon, unknown provider falling back to - `default`, `default` models rendering bare. + `local`, `local` models rendering bare. - Metadata resolution: the three layers in order, unknown values degrading as tabulated, `configured = false` suppressing the dialog. - `models.ini` round trip: written, reread, values preserved. |
