| 1 | # Provider catalog |
| 2 | |
| 3 | The desktop preset picker has one entry per provider brand. Account platform, |
| 4 | access plan and API format select a concrete existing preset. Only combinations |
| 5 | registered by the host are offered. OpenCode Go and Zen remain separate plans; |
| 6 | model-scoped routes remain selectable inside their plan. |
| 7 | |
| 8 | Adding a preset keeps its existing ID, credentials, model overrides and install |
| 9 | conflict checks. Browsing the catalog does not modify installed connections. |
| 10 | Existing custom endpoints, connection names and session references are retained. |
| 11 | You can edit the address and model list after adding, or use Custom provider to |
| 12 | create another connection with its own name and credentials. |
| 13 | |
| 14 | The API format selector names Anthropic Messages, Chat Completions and Responses |
| 15 | explicitly. During an explicit format change, known preset addresses follow the |
| 16 | matching registered route. Standard request suffixes can be updated for custom |
| 17 | connections; custom paths and query-bearing exact URL overrides are preserved. |
| 18 | Protocol changes may change request serialization and provider cache reuse. |
| 19 | |
| 20 | ## Added providers |
| 21 | |
| 22 | OpenAI (Responses and Chat Completions), Anthropic, Google Gemini (OpenAI |
| 23 | compatibility), SiliconFlow, OpenRouter, Groq, Mistral AI, local Ollama and |
| 24 | LM Studio. Example model names are editable starting points, not guarantees of |
| 25 | account access or local installation. Fetch or enter the actual models after |
| 26 | adding. Native Anthropic server tools are not enabled by the preset. Gemini's |
| 27 | native API, OAuth-only services, Azure deployment setup and other special |
| 28 | protocols are not implied by this catalog expansion. |
| 29 | |
| 30 | ## Sources |
| 31 | |
| 32 | These definitions are maintained independently from Cherry Studio source code. |
| 33 | Endpoint sources: |
| 34 | |
| 35 | - [OpenAI API](https://platform.openai.com/docs/api-reference/introduction) |
| 36 | - [Anthropic Messages](https://platform.claude.com/docs/en/api/http/messages/create) |
| 37 | - [Gemini OpenAI compatibility](https://ai.google.dev/gemini-api/docs/openai) |
| 38 | - [SiliconFlow quickstart](https://docs.siliconflow.cn/docs/userguide/quickstart) |
| 39 | - [OpenRouter quickstart](https://openrouter.ai/docs/quickstart) |
| 40 | - [Groq OpenAI compatibility](https://console.groq.com/docs/openai) |
| 41 | - [Mistral API](https://docs.mistral.ai/api) |
| 42 | - [Ollama OpenAI compatibility](https://docs.ollama.com/api/openai-compatibility) |
| 43 | - [LM Studio OpenAI compatibility](https://lmstudio.ai/docs/developer/openai-compat) |
| 44 | |
| 45 | Bundled brand icons come from LobeHub Icons under MIT. The pinned source revision |
| 46 | and full license are in `desktop/frontend/public/provider-icons/`. Brands without |
| 47 | a bundled icon use an initial. No third-party scripts or remote icon requests are |
| 48 | needed at runtime. |
| 49 | |
| 50 | ## Maintenance and compatibility |
| 51 | |
| 52 | `internal/config/provider_catalog.go` owns brand/platform/plan metadata. Protocol |
| 53 | and default URL come from the preset's actual entries. After a catalog or added |
| 54 | preset change, regenerate browser fixtures from the repository root: |
| 55 | |
| 56 | ```sh |
| 57 | go run scripts/generate-provider-catalog.go |
| 58 | ``` |
| 59 | |
| 60 | | Contract | Behavior | |
| 61 | | --- | --- | |
| 62 | | Saved provider TOML and credentials | Unchanged; no migration or automatic rewrite | |
| 63 | | Existing preset IDs | Preserved | |
| 64 | | Desktop `ProviderPresetView.catalog` | Additive display metadata; old clients ignore it | |
| 65 | | New frontend with older host | Generated known-ID fallback; unknown presets remain individually accessible | |
| 66 | | Provider request prefix | No catalog metadata is added to model requests | |
| 67 | |
| 68 | ## Connection display names |
| 69 | |
| 70 | Optional `display_name` is UI metadata; `name` remains the stable connection, |
| 71 | model-reference and credential identity. Lists, details and model pickers prefer |
| 72 | the label, falling back to the existing name when empty. New presets initialize |
| 73 | it from their title. Duplicate labels never merge connections. The field is not |
| 74 | added to requests or prompts, and renaming does not rewrite historical sessions. |
| 75 | |
| 76 | | Scenario | Behavior | |
| 77 | | --- | --- | |
| 78 | | Old configuration without the field | Existing display; no migration | |
| 79 | | Current writer and restart | Label and stable references preserved | |
| 80 | | Older frontend omits displayName | Current backend preserves the label | |
| 81 | | Explicit empty string | Clears the label and restores fallback | |
| 82 | | Older application reads and rewrites config | Connection remains readable; its writer may lose the label | |
| 83 | |
| 84 | Connection details offer inline title editing: Enter saves, Escape cancels, and |
| 85 | blur does not submit. The dedicated rename operation changes only the label; |
| 86 | the detail configuration editor omits that field so stale drafts cannot overwrite it. |
| 87 | |
| 88 | Built-in and custom connections share the same detail editor. Built-in entries |
| 89 | provide initial defaults; protocol, endpoint, credentials and models remain |
| 90 | editable. The detail layout does not depend on creation source. Actual endpoint |
| 91 | and model metadata continue to determine service capabilities. |
| 92 | |
| 93 | Model editing uses one selection list, with comma-separated IDs supported in |
| 94 | manual addition. Discovery merges candidates without changing selection or |
| 95 | saving configuration. Context overrides live in per-model settings. |
| 96 | Refreshing verifies model discovery only, not inference; no redundant check button is shown. Keys are saved |
| 97 | separately; checks and discovery do not save keys or enable models automatically. |
| 98 | |
| 99 | Keys normally show status with Change and a more-actions menu for source, sharing and removal. Refresh and Add sit beside the model heading. |
| 100 | |
| 101 | ### Compact connection editor |
| 102 | |
| 103 | Connection fields share one aligned form. Model selection, refresh and manual additions share one toolbar. Adding and editing models share a modal with context-window and output-token overrides. Text input/output are fixed; image input can be overridden or restored to automatic detection. Video and PDF remain unavailable until the request pipeline supports them. Applying the modal updates the configuration draft; saving the connection persists it. Connection identity and the footer occupy fixed layout slots; navigation and configuration content scroll independently without an additional model-list scroller. The save footer distinguishes clean and unsaved states, and failed saves retain the draft. Credentials remain independently saved. |
| 104 | |
| 105 | With the frontend running, `/dev/provider-layout-preview.html` provides an isolated preview using the production components and in-memory data; it never writes real connections or credentials. See root `design-qa.md` for visual verification. |
| 106 | |
| 107 | ### AMD GPU Cloud |
| 108 | |
| 109 | Added independently maintained preset `amd-gpu-cloud`, OpenAI Chat Completions, |
| 110 | base URL `https://developer.amd.com.cn/radeon/v1`, and case-sensitive model IDs |
| 111 | from Cherry Studio's registry: |
| 112 | https://github.com/CherryHQ/cherry-studio/blob/main/packages/provider-registry/src/providers/radeon-cloud.ts |
| 113 | |
| 114 | API key/account portal: https://developer.amd.com.cn/radeon/tokenfactory |
| 115 | Model availability and promotional quotas are account-dependent; refresh models |
| 116 | after connecting. No live authenticated AMD request was performed. |
| 117 | AMD icon is from Simple Icons (CC0), https://github.com/simple-icons/simple-icons/blob/develop/icons/amd.svg; |
| 118 | the AMD trademark remains its owner's property. |
| 119 | |
| 120 | ### Additional inference platforms |
| 121 | |
| 122 | Added eight brands: Doubao (Chat/Responses), Baidu Qianfan, PPIO, |
| 123 | Qiniu, xAI (Chat/Responses), Cerebras, Together, Fireworks |
| 124 | (Chat/Anthropic/Responses). These twelve editable route templates share brand |
| 125 | identity across protocols. Adding a template still creates an independent connection. |
| 126 | |
| 127 | Sources checked against Cherry Studio's provider registry: |
| 128 | https://github.com/CherryHQ/cherry-studio/tree/main/packages/provider-registry/src/providers |
| 129 | Also: https://docs.fireworks.ai/tools-sdks/openai-compatibility |
| 130 | https://docs.fireworks.ai/getting-started/quickstart |
| 131 | https://docs.fireworks.ai/guides/response-api |
| 132 | https://docs.together.ai/docs/inference/openai-compatibility |
| 133 | https://cloud.baidu.com/doc/qianfan/s/rmh4stp0j |
| 134 | https://models.dev/api.json (Cerebras, xAI, Qiniu model identifiers). |
| 135 | |
| 136 | Defaults are starting points; account access can vary. Web search is off and |
| 137 | no unverified reasoning overrides are added. These are protocol presets, not |
| 138 | certification of every model's agent/tool/reasoning capabilities. Model discovery, |
| 139 | tool calls and thinking require authenticated platform verification; none was |
| 140 | performed in this batch. Icons use the existing pinned LobeHub MIT source. |
| 141 |