From 3a85d45f71dd399b14509aff6e34f34b86e9378d Mon Sep 17 00:00:00 2001 From: seven7763 <246023385+seven7763@users.noreply.github.com> Date: Wed, 9 Sep 2026 05:01:06 +0800 Subject: [PATCH] feat(ai): add DaoXE as a model provider DaoXE (https://daoxe.com) is an OpenAI-compatible multi-model LLM gateway that also serves Anthropic Messages. Register it in the agent provider catalog next to OpenRouter with model discovery on the OpenAI-compatible routes, and add its provider logo using an inline SVG data URI so no binary asset is added to the repository. --- agent/app/provider/catalog.go | 17 +++++++++++++++++ frontend/src/utils/agent-provider-logo.ts | 14 ++++++++++++++ 2 files changed, 31 insertions(+) diff --git a/agent/app/provider/catalog.go b/agent/app/provider/catalog.go index e993b5279ffd..a7d63f30aeae 100644 --- a/agent/app/provider/catalog.go +++ b/agent/app/provider/catalog.go @@ -156,6 +156,22 @@ var catalog = map[string]Meta{ }, Models: []Model{{ID: "openrouter/free", Name: "openrouter/free"}, {ID: "openrouter/auto", Name: "openrouter/auto"}}, }, + // DaoXE (https://daoxe.com): OpenAI-compatible multi-model gateway; also serves Anthropic Messages. + "daoxe": { + Key: "daoxe", DisplayName: "DaoXE", Sort: 57, DefaultAPIType: "openai-completions", EnvKey: "DAOXE_API_KEY", + APIConfigs: []APIConfig{ + { + APIType: "openai-completions", BaseURL: "https://api.daoxe.com/v1", + DiscoverModels: true, + }, + { + APIType: "openai-responses", BaseURL: "https://api.daoxe.com/v1", + DiscoverModels: true, + }, + {APIType: "openai-embeddings", BaseURL: "https://api.daoxe.com/v1"}, + anthropicAPIConfig("https://api.daoxe.com", AuthModeXAPIKey, AuthModeBearer), + }, + }, "anthropic": { Key: "anthropic", DisplayName: "Anthropic", Sort: 60, DefaultAPIType: "anthropic-messages", EnvKey: "ANTHROPIC_API_KEY", APIConfigs: []APIConfig{anthropicAPIConfig("https://api.anthropic.com", AuthModeXAPIKey)}, @@ -473,6 +489,7 @@ var legacyModelPrefixes = map[string][]string{ "kimi-coding": {"kimi-coding"}, "openai": {"openai"}, "anthropic": {"anthropic"}, + "daoxe": {"daoxe"}, "gemini": {"google", "gemini"}, "moonshot": {"moonshot"}, } diff --git a/frontend/src/utils/agent-provider-logo.ts b/frontend/src/utils/agent-provider-logo.ts index cb0bde4a9372..9faa22816e62 100644 --- a/frontend/src/utils/agent-provider-logo.ts +++ b/frontend/src/utils/agent-provider-logo.ts @@ -9,6 +9,12 @@ export interface AgentProviderLogo { const asset = (name: string) => new URL(`../assets/images/ai-providers/${name}`, import.meta.url).href; +// DaoXE brand mark (indigo-to-teal rounded square), inlined as a data URI so no binary +// asset has to be added to the repository. Same 32x32 SVG that daoxe.com uses as favicon. +const daoxeLogoDataUri = + 'data:image/svg+xml;base64,' + + 'PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMiAzMiIgcm9sZT0iaW1nIiBhcmlhLWxhYmVsPSJEYW9YRSI+CiAgPGRlZnM+CiAgICA8bGluZWFyR3JhZGllbnQgaWQ9ImciIHgxPSIwIiB5MT0iMCIgeDI9IjEiIHkyPSIxIj4KICAgICAgPHN0b3Agb2Zmc2V0PSIwIiBzdG9wLWNvbG9yPSIjNjM2NmYxIi8+CiAgICAgIDxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iIzBlYTVhNCIvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICA8L2RlZnM+CiAgPHJlY3QgeD0iMSIgeT0iMSIgd2lkdGg9IjMwIiBoZWlnaHQ9IjMwIiByeD0iOCIgZmlsbD0idXJsKCNnKSIvPgogIDxwYXRoIGQ9Ik0xMC41IDkuNSBMMTYgMTYgTDEwLjUgMjIuNSIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjZmZmZmZmIiBzdHJva2Utd2lkdGg9IjIuNiIKICAgICAgICBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4KICA8cmVjdCB4PSIxNy41IiB5PSIyMC40IiB3aWR0aD0iNi40IiBoZWlnaHQ9IjIuNCIgcng9IjEuMiIgZmlsbD0iI2ZmZmZmZiIvPgo8L3N2Zz4K'; + const aliyunLogo: AgentProviderLogo = { src: asset('aliyun.webp'), mark: 'QW', @@ -112,6 +118,14 @@ const providerLogos: Record = { borderColor: '#dcdfe6', source: 'https://openrouter.ai/', }, + daoxe: { + src: daoxeLogoDataUri, + mark: 'DX', + background: '#ffffff', + color: '#6366f1', + borderColor: '#dcdfe6', + source: 'https://daoxe.com/', + }, anthropic: { src: asset('anthropic.png'), mark: 'A',