diff --git a/apps/nextjs/src/app/[locale]/manage/assistant/_components/assistant-configuration.tsx b/apps/nextjs/src/app/[locale]/manage/assistant/_components/assistant-configuration.tsx index 6a100de9a..e9fe5a983 100644 --- a/apps/nextjs/src/app/[locale]/manage/assistant/_components/assistant-configuration.tsx +++ b/apps/nextjs/src/app/[locale]/manage/assistant/_components/assistant-configuration.tsx @@ -64,11 +64,23 @@ type CredentialFlow = "idle" | "replace" | "remove"; type AssistantProviderOption = AssistantProvider | "homarr"; const ProviderIcon = ({ providerId, size = 20 }: { providerId: AssistantProviderOption; size?: number }) => { - const iconUrl = providerId === "homarr" ? "/logo/logo.png" : assistantProviderPresets[providerId].iconUrl; - return iconUrl ? ( - - ) : ( - + if (providerId === "homarr") { + return ; + } + + const preset = assistantProviderPresets[providerId]; + if (!preset.iconUrl) return ; + + const darkIconUrl = "darkIconUrl" in preset ? preset.darkIconUrl : null; + if (!darkIconUrl) { + return ; + } + + return ( + <> + + + ); }; diff --git a/packages/api/src/test/assistant-providers.spec.ts b/packages/api/src/test/assistant-providers.spec.ts index a04bc4ee2..751a2f5db 100644 --- a/packages/api/src/test/assistant-providers.spec.ts +++ b/packages/api/src/test/assistant-providers.spec.ts @@ -30,7 +30,7 @@ describe("assistant provider presets", () => { }); test.each(assistantProviderIds.filter((provider) => provider !== "custom"))( - "%s has a Dashboard Icons provider mark", + "%s has a valid provider mark", (provider) => { const iconUrl = assistantProviderPresets[provider].iconUrl; expect(iconUrl).not.toBeNull(); @@ -38,6 +38,12 @@ describe("assistant provider presets", () => { }, ); + test("uses Groq's high-contrast LobeHub mark in dark mode", () => { + expect(assistantProviderPresets.groq.darkIconUrl).toBe( + "https://cdn.jsdelivr.net/npm/@lobehub/icons-static-png@latest/dark/groq.png", + ); + }); + test("keeps the display label separate from the provider model ID", () => { const model = { id: "deepseek/deepseek-v4-pro", diff --git a/packages/definitions/src/assistant.ts b/packages/definitions/src/assistant.ts index 32fa7de89..0220711a8 100644 --- a/packages/definitions/src/assistant.ts +++ b/packages/definitions/src/assistant.ts @@ -39,6 +39,7 @@ interface AssistantProviderPreset { category: AssistantProviderCategory; discoveryAuthentication: "bearer" | "anthropic"; iconUrl: string | null; + darkIconUrl?: string; } export const assistantProviderPresets = { @@ -89,6 +90,7 @@ export const assistantProviderPresets = { category: "hosted", discoveryAuthentication: "bearer", iconUrl: `${providerIconBaseUrl}/groq.svg`, + darkIconUrl: "https://cdn.jsdelivr.net/npm/@lobehub/icons-static-png@latest/dark/groq.png", }, mistral: { baseUrl: "https://api.mistral.ai/v1",