Skip to content

feat(web): add custom providers and models in Settings - #55

Merged
TheGreatAxios merged 2 commits into
cl-11917-a-custom-providers-datafrom
cl-11917-b-custom-providers-ui
Nov 2, 2026
Merged

TheGreatAxios merged 2 commits into
cl-11917-a-custom-providers-datafrom
cl-11917-b-custom-providers-ui

Conversation

@TheGreatAxios

@TheGreatAxios TheGreatAxios commented Nov 1, 2026 •

Copy link
Copy Markdown
Contributor

What changed

Slice (b) of CL-11917, stacked on #54. Existing Settings screens and controls are unchanged.

  • The add-provider dialog has a Custom endpoint tile: name, API type (OpenAI Chat Completions, OpenAI Responses or Anthropic Messages), base URL, key or the Keyless switch with its tooltip, and models (Model ID, optional Name, Context window, Output cap, each labelled).
  • Custom providers sit in the existing Providers list with quiet Edit (same form) and Remove (react-ui ConfirmButton). A bordered-button version is in the screenshots for comparison.
  • Saving tests the connection first. A keyless endpoint is tested with no key header at all; that part is in feat(hub): let people add custom model providers and models #54.
  • Profiles list a custom model by its Name (or its ID when unnamed) under its provider. A custom provider counts as connected once saved, because custom connections are never probed on read; a disabled one shows as unavailable.
  • needsBaseUrl was false on every shipped entry and is removed from the hub, the schema and the web.
  • All wording is in apps/web/src/config.ts. One small layout rule uses existing tokens.

How it was verified

  • Checked by hand on a throwaway stack with a fake endpoint and fake keys: add with a key, add keyless, edit, remove, and save a profile on a custom model and make it active.
  • bun run test (79 pass), the e2e suite, lint, format and typecheck pass.
  • Before and after screenshots are in a comment below.

Refs CL-11917

@linear-code

linear-code Bot commented Nov 1, 2026

Copy link
Copy Markdown

CL-11917

@TheGreatAxios
TheGreatAxios force-pushed the cl-11917-a-custom-providers-data branch from a42b451 to 3b8fa8d Compare November 1, 2026 21:54
@TheGreatAxios
TheGreatAxios force-pushed the cl-11917-b-custom-providers-ui branch from 5dfce67 to e4d68ba Compare November 1, 2026 21:54
@TheGreatAxios

Copy link
Copy Markdown
Contributor Author

Screenshots from a throwaway stack with a fake endpoint and fake keys.

Before/after: Settings → Providers on main, then with two custom providers using the quiet Edit/Remove actions. The bordered version is below for comparison. Which row actions do you prefer?

BeforeAfter

after-row-actions-bordered-desktop

after-edit-names-desktop

after-edit-keyless-on-desktop

after-keyless-tooltip-desktop

after-duplicate-ids-desktop

after-profile-same-id-desktop

after-profile-active-desktop

after-remove-confirm-desktop

after-row-actions-quiet-narrow

@TheGreatAxios
TheGreatAxios force-pushed the cl-11917-b-custom-providers-ui branch from e4d68ba to 571a5e7 Compare November 1, 2026 23:05
@TheGreatAxios

Copy link
Copy Markdown
Contributor Author

The local Tip in apps/web/src/pages/custom-providers.tsx is a stopgap: @corbits/react-ui only offers InfoTooltip on its glyph. CL-11941 adds a general Tooltip to react-ui; once it's released, a follow-up bumps the pin and deletes Tip.

@TheGreatAxios
TheGreatAxios marked this pull request as ready for review November 1, 2026 23:23
@corbits-triage

corbits-triage Bot commented Nov 1, 2026 •

Copy link
Copy Markdown

Triage: Fail

@TheGreatAxios, please address the following:

  • added code matches a code pattern: apps/web/src/pages/providers.tsx:181 Nested ternary; use if statements or a lookup.

Stacked on #54: only this pull request's own changes were checked.

Triage will request changes.

@corbits-triage corbits-triage Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Triage requests changes:

  • Conventions: added code matches a code pattern
  • Invented fallbacks: added code matches a code pattern

@TheGreatAxios
TheGreatAxios force-pushed the cl-11917-b-custom-providers-ui branch from 571a5e7 to 49b9537 Compare November 2, 2026 00:41

@corbits-triage corbits-triage Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Triage requests changes:

  • Conventions: added code matches a code pattern

@TheGreatAxios
TheGreatAxios force-pushed the cl-11917-b-custom-providers-ui branch from 49b9537 to 3a9231d Compare November 2, 2026 00:53

@corbits-triage corbits-triage Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Triage requests changes:

  • Conventions: added code matches a code pattern

@TheGreatAxios
TheGreatAxios merged commit 8e0b959 into cl-11917-a-custom-providers-data Nov 2, 2026
8 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant