From b6e9e65bb8eaf2b84179d47c5b70704a7d74bb4c Mon Sep 17 00:00:00 2001 From: pablonyx Date: Wed, 5 Mar 2025 09:57:39 -0800 Subject: [PATCH] =?UTF-8?q?*=20Replaces=20Amazon=20and=20Anthropic=20Icons?= =?UTF-8?q?=20with=20version=20better=20suitable=20fo=E2=80=A6=20(#4190)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * * Replaces Amazon and Anthropic Icons with version better suitable for both Dark and Light modes; * Adds icon for DeepSeek; * Simplify logic on icon selection; * Adds entries for Phi-4, Claude 3.7, Ministral and Gemini 2.0 models * nit * k * k --------- Co-authored-by: Emerson Gomes --- web/public/Amazon.svg | 2 +- web/public/Anthropic.svg | 9 +--- web/public/Deepseek.svg | 1 + .../app/admin/configuration/llm/interfaces.ts | 43 +++++++++---------- web/src/components/icons/icons.tsx | 8 ++++ web/src/lib/hooks.ts | 13 +++++- web/src/lib/llm/utils.ts | 4 ++ 7 files changed, 47 insertions(+), 33 deletions(-) create mode 100644 web/public/Deepseek.svg diff --git a/web/public/Amazon.svg b/web/public/Amazon.svg index 1d9deec75..2a8e7dddb 100755 --- a/web/public/Amazon.svg +++ b/web/public/Amazon.svg @@ -1 +1 @@ - \ No newline at end of file +Nova \ No newline at end of file diff --git a/web/public/Anthropic.svg b/web/public/Anthropic.svg index da352fb54..853a243c6 100644 --- a/web/public/Anthropic.svg +++ b/web/public/Anthropic.svg @@ -1,8 +1 @@ - - - Anthropic - - - - - + \ No newline at end of file diff --git a/web/public/Deepseek.svg b/web/public/Deepseek.svg new file mode 100644 index 000000000..3fc230240 --- /dev/null +++ b/web/public/Deepseek.svg @@ -0,0 +1 @@ +DeepSeek \ No newline at end of file diff --git a/web/src/app/admin/configuration/llm/interfaces.ts b/web/src/app/admin/configuration/llm/interfaces.ts index 897bfb896..01baa99d6 100644 --- a/web/src/app/admin/configuration/llm/interfaces.ts +++ b/web/src/app/admin/configuration/llm/interfaces.ts @@ -7,14 +7,12 @@ import { MicrosoftIconSVG, MistralIcon, MetaIcon, - OpenAIIcon, GeminiIcon, - OpenSourceIcon, AnthropicSVG, IconProps, OpenAIISVG, + DeepseekIcon, } from "@/components/icons/icons"; -import { FaRobot } from "react-icons/fa"; export interface CustomConfigKey { name: string; @@ -76,30 +74,31 @@ export interface LLMProviderDescriptor { } export const getProviderIcon = (providerName: string, modelName?: string) => { + const modelIconMap: Record< + string, + ({ size, className }: IconProps) => JSX.Element + > = { + amazon: AmazonIcon, + phi: MicrosoftIconSVG, + mistral: MistralIcon, + ministral: MistralIcon, + llama: MetaIcon, + gemini: GeminiIcon, + deepseek: DeepseekIcon, + claude: AnthropicIcon, + }; + const modelNameToIcon = ( modelName: string, fallbackIcon: ({ size, className }: IconProps) => JSX.Element ): (({ size, className }: IconProps) => JSX.Element) => { - if (modelName?.toLowerCase().includes("amazon")) { - return AmazonIcon; - } - if (modelName?.toLowerCase().includes("phi")) { - return MicrosoftIconSVG; - } - if (modelName?.toLowerCase().includes("mistral")) { - return MistralIcon; - } - if (modelName?.toLowerCase().includes("llama")) { - return MetaIcon; - } - if (modelName?.toLowerCase().includes("gemini")) { - return GeminiIcon; - } - if (modelName?.toLowerCase().includes("claude")) { - return AnthropicIcon; - } else { - return fallbackIcon; + const lowerModelName = modelName?.toLowerCase(); + for (const [key, icon] of Object.entries(modelIconMap)) { + if (lowerModelName?.includes(key)) { + return icon; + } } + return fallbackIcon; }; switch (providerName) { diff --git a/web/src/components/icons/icons.tsx b/web/src/components/icons/icons.tsx index a6b413b21..cd02e94f9 100644 --- a/web/src/components/icons/icons.tsx +++ b/web/src/components/icons/icons.tsx @@ -38,6 +38,7 @@ import { SiBookstack } from "react-icons/si"; import Image, { StaticImageData } from "next/image"; import jiraSVG from "../../../public/Jira.svg"; import confluenceSVG from "../../../public/Confluence.svg"; +import deepseekSVG from "../../../public/Deepseek.svg"; import openAISVG from "../../../public/Openai.svg"; import amazonSVG from "../../../public/Amazon.svg"; import geminiSVG from "../../../public/Gemini.svg"; @@ -1149,6 +1150,13 @@ export const MetaIcon = ({ className = defaultTailwindCSS, }: IconProps) => ; +export const DeepseekIcon = ({ + size = 16, + className = defaultTailwindCSS, +}: IconProps) => ( + +); + export const MicrosoftIconSVG = ({ size = 16, className = defaultTailwindCSS, diff --git a/web/src/lib/hooks.ts b/web/src/lib/hooks.ts index 984da34ec..6de7aaf52 100644 --- a/web/src/lib/hooks.ts +++ b/web/src/lib/hooks.ts @@ -706,6 +706,10 @@ const MODEL_DISPLAY_NAMES: { [key: string]: string } = { "phi-3.5-mini-instruct": "Phi 3.5 Mini", "phi-3.5-moe-instruct": "Phi 3.5 MoE", "phi-3.5-vision-instruct": "Phi 3.5 Vision", + "phi-4": "Phi 4", + + // Deepseek Models + "deepseek-r1": "DeepSeek R1", // Anthropic models "claude-3-opus-20240229": "Claude 3 Opus", @@ -722,6 +726,8 @@ const MODEL_DISPLAY_NAMES: { [key: string]: string } = { "claude-3-5-haiku-20241022": "Claude 3.5 Haiku", "claude-3-5-haiku@20241022": "Claude 3.5 Haiku", "claude-3.5-haiku@20241022": "Claude 3.5 Haiku", + "claude-3.7-sonnet@202502019": "Claude 3.7 Sonnet", + "claude-3-7-sonnet-202502019": "Claude 3.7 Sonnet", // Google Models "gemini-1.5-pro": "Gemini 1.5 Pro", @@ -730,14 +736,17 @@ const MODEL_DISPLAY_NAMES: { [key: string]: string } = { "gemini-1.5-flash-001": "Gemini 1.5 Flash", "gemini-1.5-pro-002": "Gemini 1.5 Pro (v2)", "gemini-1.5-flash-002": "Gemini 1.5 Flash (v2)", + "gemini-2.0-flash-exp": "Gemini 2.0 Flash (Experimental)", "gemini-2.0-flash-001": "Gemini 2.0 Flash", + "gemini-2.0-flash-lite-preview-02-05": "Gemini 2.0 Flash Lite (Prv)", + "gemini-2.0-flash-thinking-exp-01-02": "Gemini 2.0 Flash Thinking (Exp)", + "gemini-2.0-pro-exp-02-05": "Gemini 2.0 Pro (Exp)", "gemini-2.0-flash": "Gemini 2.0 Flash", - "gemini-2.0-pro-exp-02-05": "Gemini 2.0 Pro", "gemini-2.0-flash-thinking-exp-01-21": "Gemini 2.0 Flash Thinking", - // Mistral Models "mistral-large-2411": "Mistral Large 24.11", "mistral-large@2411": "Mistral Large 24.11", + "ministral-3b": "Ministral 3B", // Bedrock models "meta.llama3-1-70b-instruct-v1:0": "Llama 3.1 70B", diff --git a/web/src/lib/llm/utils.ts b/web/src/lib/llm/utils.ts index 7627a8e54..9eff361b4 100644 --- a/web/src/lib/llm/utils.ts +++ b/web/src/lib/llm/utils.ts @@ -90,6 +90,8 @@ const MODEL_NAMES_SUPPORTING_IMAGE_INPUT = [ "anthropic.claude-3-5-sonnet-20240620-v1:0", "anthropic.claude-3-5-sonnet-20241022-v2:0", "anthropic.claude-3-7-sonnet-20250219-v1:0", + "claude-3.7-sonnet@202502019", + "claude-3-7-sonnet-202502019", // google gemini model names "gemini-1.5-pro", "gemini-1.5-flash", @@ -98,6 +100,8 @@ const MODEL_NAMES_SUPPORTING_IMAGE_INPUT = [ "gemini-1.5-pro-002", "gemini-1.5-flash-002", "gemini-2.0-flash-exp", + "gemini-2.0-flash-001", + "gemini-2.0-pro-exp-02-05", // amazon models "amazon.nova-lite@v1", "amazon.nova-pro@v1",