Skip to content

Remove provider setup templates: named OpenAI-compatible hosts should be ordinary providers #6289

Description

@Hmbown

The decision

Founder, 2026-09-16: the ProviderSetupTemplate layer "was never supposed to
happen — they should be normal providers like everyone else."

SenseNova, Baseten, Groq, Cerebras, Command Code and friends are currently
special-cased as named setup templates. They are ordinary OpenAI-compatible
Chat Completions hosts and should be configured the way every other custom
route already is.

Deleting this loses no capability

A full generic named-custom-provider mechanism already exists in
crates/config/src/lib.rs: parse_custom_provider_config_key (:1073),
named_custom_provider_id (:2795), named_custom_provider_table (:2802),
named_custom_provider_config (:2830), custom_provider_table_mut (:2843),
set_custom_provider_value (:2858). Any host with a base URL, a model and a
key env is already expressible as [providers.<name>].

Templates only pre-fill those three values for ten named vendors and put them
in a picker. That is a convenience list, not a capability — which is exactly
why it should not be a compiled-in enum of blessed vendors.

The module's own doc already concedes the architecture: "Hosted Chat
Completions backends are descriptor rows — not new enum variants and not
compiled model rosters. Live GET /v1/models and the Codewhale catalog are the
offering list." The templates are the last place that rule is not followed.

Blast radius (measured, not estimated)

crates/config/src/provider_templates.rs is 543 lines with 10 template rows.
Fourteen files reference the concept:

File Notes
crates/config/src/provider_templates.rs the module itself
crates/tui/src/tui/provider_picker.rs 188 mentions — the picker flow is the bulk of the work
crates/tui/src/tui/ui/apply.rs AppAction::OpenTemplateSetup, new_for_template_list, new_for_template_setup
crates/tui/src/tui/app/types.rs the AppAction variant
crates/tui/src/tui/views/mod.rs, model_picker.rs view plumbing
crates/tui/src/commands/groups/core/provider.rs, setup.rs /provider and /setup entry points
crates/config/src/lib.rs, settings_schema.rs config surface
crates/tui/src/client.rs, pricing.rs, provider_catalog_live.rs, provider_lake.rs route/pricing lookups

docs/PROVIDERS.md carries a table headed Template that goes with it.

What replaces it

/provider and /setup keep a path for "paste a Base URL and a key" — that is
the generic route, and it is what these vendors always were. The vendor list
becomes documentation (a table of known-good base URLs, models and key env
names) rather than compiled-in rows and a picker.

Sequencing

Not one sweep. provider_picker.rs is the bulk and should move on its own,
after the config-side rows are gone and the docs say what to do instead.

Related

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions