import Ai360ModelLogo from '@renderer/assets/images/models/360.png' import Ai360ModelLogoDark from '@renderer/assets/images/models/360_dark.png' import AdeptModelLogo from '@renderer/assets/images/models/adept.png' import AdeptModelLogoDark from '@renderer/assets/images/models/adept_dark.png' import Ai21ModelLogo from '@renderer/assets/images/models/ai21.png' import Ai21ModelLogoDark from '@renderer/assets/images/models/ai21_dark.png' import AimassModelLogo from '@renderer/assets/images/models/aimass.png' import AimassModelLogoDark from '@renderer/assets/images/models/aimass_dark.png' import AisingaporeModelLogo from '@renderer/assets/images/models/aisingapore.png' import AisingaporeModelLogoDark from '@renderer/assets/images/models/aisingapore_dark.png' import BaichuanModelLogo from '@renderer/assets/images/models/baichuan.png' import BaichuanModelLogoDark from '@renderer/assets/images/models/baichuan_dark.png' import BgeModelLogo from '@renderer/assets/images/models/bge.webp' import BigcodeModelLogo from '@renderer/assets/images/models/bigcode.webp' import BigcodeModelLogoDark from '@renderer/assets/images/models/bigcode_dark.webp' import ChatGLMModelLogo from '@renderer/assets/images/models/chatglm.png' import ChatGLMModelLogoDark from '@renderer/assets/images/models/chatglm_dark.png' import ChatGptModelLogo from '@renderer/assets/images/models/chatgpt.jpeg' import ClaudeModelLogo from '@renderer/assets/images/models/claude.png' import ClaudeModelLogoDark from '@renderer/assets/images/models/claude_dark.png' import CodegeexModelLogo from '@renderer/assets/images/models/codegeex.png' import CodegeexModelLogoDark from '@renderer/assets/images/models/codegeex_dark.png' import CohereModelLogo from '@renderer/assets/images/models/cohere.png' import CohereModelLogoDark from '@renderer/assets/images/models/cohere_dark.png' import CopilotModelLogo from '@renderer/assets/images/models/copilot.png' import CopilotModelLogoDark from '@renderer/assets/images/models/copilot_dark.png' import DalleModelLogo from '@renderer/assets/images/models/dalle.png' import DalleModelLogoDark from '@renderer/assets/images/models/dalle_dark.png' import DbrxModelLogo from '@renderer/assets/images/models/dbrx.png' import DeepSeekModelLogo from '@renderer/assets/images/models/deepseek.png' import DeepSeekModelLogoDark from '@renderer/assets/images/models/deepseek_dark.png' import DianxinModelLogo from '@renderer/assets/images/models/dianxin.png' import DianxinModelLogoDark from '@renderer/assets/images/models/dianxin_dark.png' import DoubaoModelLogo from '@renderer/assets/images/models/doubao.png' import DoubaoModelLogoDark from '@renderer/assets/images/models/doubao_dark.png' import EmbeddingModelLogo from '@renderer/assets/images/models/embedding.png' import EmbeddingModelLogoDark from '@renderer/assets/images/models/embedding.png' import FlashaudioModelLogo from '@renderer/assets/images/models/flashaudio.png' import FlashaudioModelLogoDark from '@renderer/assets/images/models/flashaudio_dark.png' import FluxModelLogo from '@renderer/assets/images/models/flux.png' import FluxModelLogoDark from '@renderer/assets/images/models/flux_dark.png' import GeminiModelLogo from '@renderer/assets/images/models/gemini.png' import GeminiModelLogoDark from '@renderer/assets/images/models/gemini_dark.png' import GemmaModelLogo from '@renderer/assets/images/models/gemma.png' import GemmaModelLogoDark from '@renderer/assets/images/models/gemma_dark.png' import GoogleModelLogo from '@renderer/assets/images/models/google.png' import GoogleModelLogoDark from '@renderer/assets/images/models/google.png' import ChatGPT35ModelLogo from '@renderer/assets/images/models/gpt_3.5.png' import ChatGPT4ModelLogo from '@renderer/assets/images/models/gpt_4.png' import ChatGptModelLogoDakr from '@renderer/assets/images/models/gpt_dark.png' import ChatGPT35ModelLogoDark from '@renderer/assets/images/models/gpt_dark.png' import ChatGPT4ModelLogoDark from '@renderer/assets/images/models/gpt_dark.png' import ChatGPTo1ModelLogoDark from '@renderer/assets/images/models/gpt_dark.png' import ChatGPTo1ModelLogo from '@renderer/assets/images/models/gpt_o1.png' import GrokModelLogo from '@renderer/assets/images/models/grok.png' import GrokModelLogoDark from '@renderer/assets/images/models/grok_dark.png' import GrypheModelLogo from '@renderer/assets/images/models/gryphe.png' import GrypheModelLogoDark from '@renderer/assets/images/models/gryphe_dark.png' import HailuoModelLogo from '@renderer/assets/images/models/hailuo.png' import HailuoModelLogoDark from '@renderer/assets/images/models/hailuo_dark.png' import HuggingfaceModelLogo from '@renderer/assets/images/models/huggingface.png' import HuggingfaceModelLogoDark from '@renderer/assets/images/models/huggingface_dark.png' import HunyuanModelLogo from '@renderer/assets/images/models/hunyuan.png' import HunyuanModelLogoDark from '@renderer/assets/images/models/hunyuan_dark.png' import IbmModelLogo from '@renderer/assets/images/models/ibm.png' import IbmModelLogoDark from '@renderer/assets/images/models/ibm_dark.png' import InternlmModelLogo from '@renderer/assets/images/models/internlm.png' import InternlmModelLogoDark from '@renderer/assets/images/models/internlm_dark.png' import JinaModelLogo from '@renderer/assets/images/models/jina.png' import JinaModelLogoDark from '@renderer/assets/images/models/jina_dark.png' import KeLingModelLogo from '@renderer/assets/images/models/keling.png' import KeLingModelLogoDark from '@renderer/assets/images/models/keling_dark.png' import LlamaModelLogo from '@renderer/assets/images/models/llama.png' import LlamaModelLogoDark from '@renderer/assets/images/models/llama_dark.png' import LLavaModelLogo from '@renderer/assets/images/models/llava.png' import LLavaModelLogoDark from '@renderer/assets/images/models/llava_dark.png' import LumaModelLogo from '@renderer/assets/images/models/luma.png' import LumaModelLogoDark from '@renderer/assets/images/models/luma_dark.png' import MagicModelLogo from '@renderer/assets/images/models/magic.png' import MagicModelLogoDark from '@renderer/assets/images/models/magic_dark.png' import MediatekModelLogo from '@renderer/assets/images/models/mediatek.png' import MediatekModelLogoDark from '@renderer/assets/images/models/mediatek_dark.png' import MicrosoftModelLogo from '@renderer/assets/images/models/microsoft.png' import MicrosoftModelLogoDark from '@renderer/assets/images/models/microsoft_dark.png' import MidjourneyModelLogo from '@renderer/assets/images/models/midjourney.png' import MidjourneyModelLogoDark from '@renderer/assets/images/models/midjourney_dark.png' import MinicpmModelLogo from '@renderer/assets/images/models/minicpm.webp' import MinicpmModelLogoDark from '@renderer/assets/images/models/minicpm.webp' import MinimaxModelLogo from '@renderer/assets/images/models/minimax.png' import MinimaxModelLogoDark from '@renderer/assets/images/models/minimax_dark.png' import MistralModelLogo from '@renderer/assets/images/models/mixtral.png' import MistralModelLogoDark from '@renderer/assets/images/models/mixtral_dark.png' import MoonshotModelLogo from '@renderer/assets/images/models/moonshot.png' import MoonshotModelLogoDark from '@renderer/assets/images/models/moonshot_dark.png' import NousResearchModelLogo from '@renderer/assets/images/models/nousresearch.png' import NousResearchModelLogoDark from '@renderer/assets/images/models/nousresearch.png' import NvidiaModelLogo from '@renderer/assets/images/models/nvidia.png' import NvidiaModelLogoDark from '@renderer/assets/images/models/nvidia_dark.png' import PalmModelLogo from '@renderer/assets/images/models/palm.png' import PalmModelLogoDark from '@renderer/assets/images/models/palm_dark.png' import PixtralModelLogo from '@renderer/assets/images/models/pixtral.png' import PixtralModelLogoDark from '@renderer/assets/images/models/pixtral_dark.png' import QwenModelLogo from '@renderer/assets/images/models/qwen.png' import QwenModelLogoDark from '@renderer/assets/images/models/qwen_dark.png' import RakutenaiModelLogo from '@renderer/assets/images/models/rakutenai.png' import RakutenaiModelLogoDark from '@renderer/assets/images/models/rakutenai_dark.png' import SparkDeskModelLogo from '@renderer/assets/images/models/sparkdesk.png' import SparkDeskModelLogoDark from '@renderer/assets/images/models/sparkdesk_dark.png' import StabilityModelLogo from '@renderer/assets/images/models/stability.png' import StabilityModelLogoDark from '@renderer/assets/images/models/stability_dark.png' import StepModelLogo from '@renderer/assets/images/models/step.png' import StepModelLogoDark from '@renderer/assets/images/models/step_dark.png' import SunoModelLogo from '@renderer/assets/images/models/suno.png' import SunoModelLogoDark from '@renderer/assets/images/models/suno_dark.png' import TeleModelLogo from '@renderer/assets/images/models/tele.png' import TeleModelLogoDark from '@renderer/assets/images/models/tele_dark.png' import UpstageModelLogo from '@renderer/assets/images/models/upstage.png' import UpstageModelLogoDark from '@renderer/assets/images/models/upstage_dark.png' import ViduModelLogo from '@renderer/assets/images/models/vidu.png' import ViduModelLogoDark from '@renderer/assets/images/models/vidu_dark.png' import WenxinModelLogo from '@renderer/assets/images/models/wenxin.png' import WenxinModelLogoDark from '@renderer/assets/images/models/wenxin_dark.png' import YiModelLogo from '@renderer/assets/images/models/yi.png' import YiModelLogoDark from '@renderer/assets/images/models/yi_dark.png' import { getProviderByModel } from '@renderer/services/AssistantService' import { Model } from '@renderer/types' import OpenAI from 'openai' import { getWebSearchTools } from './tools' const visionAllowedModels = [ 'llava', 'moondream', 'minicpm', 'gemini-1\\.5', 'gemini-exp', 'claude-3', 'vision', 'glm-4v', 'qwen-vl', 'qwen2-vl', 'internvl2', 'grok-vision-beta', 'pixtral', 'gpt-4(?:-[\\w-]+)', 'gpt-4o(?:-[\\w-]+)?', 'chatgpt-4o(?:-[\\w-]+)?', 'o1(?:-[\\w-]+)?' ] const visionExcludedModels = ['gpt-4-\\d+-preview', 'gpt-4-turbo-preview', 'gpt-4-32k', 'gpt-4-\\d+'] export const VISION_REGEX = new RegExp( `\\b(?!(?:${visionExcludedModels.join('|')})\\b)(${visionAllowedModels.join('|')})\\b`, 'i' ) export const TEXT_TO_IMAGE_REGEX = /flux|diffusion|stabilityai|sd-|dall|cogview|janus/i export const REASONING_REGEX = /^(o\d+(?:-[\w-]+)?|.*\breasoner\b.*|.*-[rR]\d+.*)$/i export const EMBEDDING_REGEX = /(?:^text-|embed|rerank|davinci|babbage|bge-|e5-|LLM2Vec|retrieval|uae-|gte-|jina)/i export const NOT_SUPPORTED_REGEX = /(?:^tts|rerank|whisper|speech)/i export function getModelLogo(modelId: string) { const isLight = true if (!modelId) { return undefined } const logoMap = { pixtral: isLight ? PixtralModelLogo : PixtralModelLogoDark, jina: isLight ? JinaModelLogo : JinaModelLogoDark, abab: isLight ? MinimaxModelLogo : MinimaxModelLogoDark, o3: isLight ? ChatGPTo1ModelLogo : ChatGPTo1ModelLogoDark, o1: isLight ? ChatGPTo1ModelLogo : ChatGPTo1ModelLogoDark, 'gpt-3': isLight ? ChatGPT35ModelLogo : ChatGPT35ModelLogoDark, 'gpt-4': isLight ? ChatGPT4ModelLogo : ChatGPT4ModelLogoDark, gpts: isLight ? ChatGPT4ModelLogo : ChatGPT4ModelLogoDark, 'text-moderation': isLight ? ChatGptModelLogo : ChatGptModelLogoDakr, 'babbage-': isLight ? ChatGptModelLogo : ChatGptModelLogoDakr, 'sora-': isLight ? ChatGptModelLogo : ChatGptModelLogoDakr, 'omni-': isLight ? ChatGptModelLogo : ChatGptModelLogoDakr, 'text-embedding': isLight ? ChatGptModelLogo : ChatGptModelLogoDakr, 'davinci-': isLight ? ChatGptModelLogo : ChatGptModelLogoDakr, glm: isLight ? ChatGLMModelLogo : ChatGLMModelLogoDark, deepseek: isLight ? DeepSeekModelLogo : DeepSeekModelLogoDark, qwen: isLight ? QwenModelLogo : QwenModelLogoDark, gemma: isLight ? GemmaModelLogo : GemmaModelLogoDark, 'yi-': isLight ? YiModelLogo : YiModelLogoDark, llama: isLight ? LlamaModelLogo : LlamaModelLogoDark, mixtral: isLight ? MistralModelLogo : MistralModelLogo, mistral: isLight ? MistralModelLogo : MistralModelLogoDark, moonshot: isLight ? MoonshotModelLogo : MoonshotModelLogoDark, phi: isLight ? MicrosoftModelLogo : MicrosoftModelLogoDark, baichuan: isLight ? BaichuanModelLogo : BaichuanModelLogoDark, claude: isLight ? ClaudeModelLogo : ClaudeModelLogoDark, gemini: isLight ? GeminiModelLogo : GeminiModelLogoDark, bison: isLight ? PalmModelLogo : PalmModelLogoDark, palm: isLight ? PalmModelLogo : PalmModelLogoDark, step: isLight ? StepModelLogo : StepModelLogoDark, hailuo: isLight ? HailuoModelLogo : HailuoModelLogoDark, doubao: isLight ? DoubaoModelLogo : DoubaoModelLogoDark, 'ep-202': isLight ? DoubaoModelLogo : DoubaoModelLogoDark, cohere: isLight ? CohereModelLogo : CohereModelLogoDark, command: isLight ? CohereModelLogo : CohereModelLogoDark, minicpm: isLight ? MinicpmModelLogo : MinicpmModelLogoDark, '360': isLight ? Ai360ModelLogo : Ai360ModelLogoDark, aimass: isLight ? AimassModelLogo : AimassModelLogoDark, codegeex: isLight ? CodegeexModelLogo : CodegeexModelLogoDark, copilot: isLight ? CopilotModelLogo : CopilotModelLogoDark, creative: isLight ? CopilotModelLogo : CopilotModelLogoDark, balanced: isLight ? CopilotModelLogo : CopilotModelLogoDark, precise: isLight ? CopilotModelLogo : CopilotModelLogoDark, dalle: isLight ? DalleModelLogo : DalleModelLogoDark, 'dall-e': isLight ? DalleModelLogo : DalleModelLogoDark, dbrx: isLight ? DbrxModelLogo : DbrxModelLogo, flashaudio: isLight ? FlashaudioModelLogo : FlashaudioModelLogoDark, flux: isLight ? FluxModelLogo : FluxModelLogoDark, grok: isLight ? GrokModelLogo : GrokModelLogoDark, hunyuan: isLight ? HunyuanModelLogo : HunyuanModelLogoDark, internlm: isLight ? InternlmModelLogo : InternlmModelLogoDark, llava: isLight ? LLavaModelLogo : LLavaModelLogoDark, magic: isLight ? MagicModelLogo : MagicModelLogoDark, midjourney: isLight ? MidjourneyModelLogo : MidjourneyModelLogoDark, 'mj-': isLight ? MidjourneyModelLogo : MidjourneyModelLogoDark, 'tao-': isLight ? WenxinModelLogo : WenxinModelLogoDark, 'ernie-': isLight ? WenxinModelLogo : WenxinModelLogoDark, voice: isLight ? FlashaudioModelLogo : FlashaudioModelLogoDark, 'tts-1': isLight ? ChatGptModelLogo : ChatGptModelLogoDakr, 'whisper-': isLight ? ChatGptModelLogo : ChatGptModelLogoDakr, 'stable-': isLight ? StabilityModelLogo : StabilityModelLogoDark, sd2: isLight ? StabilityModelLogo : StabilityModelLogoDark, sd3: isLight ? StabilityModelLogo : StabilityModelLogoDark, sdxl: isLight ? StabilityModelLogo : StabilityModelLogoDark, sparkdesk: isLight ? SparkDeskModelLogo : SparkDeskModelLogoDark, generalv: isLight ? SparkDeskModelLogo : SparkDeskModelLogoDark, wizardlm: isLight ? MicrosoftModelLogo : MicrosoftModelLogoDark, microsoft: isLight ? MicrosoftModelLogo : MicrosoftModelLogoDark, hermes: isLight ? NousResearchModelLogo : NousResearchModelLogoDark, gryphe: isLight ? GrypheModelLogo : GrypheModelLogoDark, suno: isLight ? SunoModelLogo : SunoModelLogoDark, chirp: isLight ? SunoModelLogo : SunoModelLogoDark, luma: isLight ? LumaModelLogo : LumaModelLogoDark, keling: isLight ? KeLingModelLogo : KeLingModelLogoDark, 'vidu-': isLight ? ViduModelLogo : ViduModelLogoDark, ai21: isLight ? Ai21ModelLogo : Ai21ModelLogoDark, 'jamba-': isLight ? Ai21ModelLogo : Ai21ModelLogoDark, mythomax: isLight ? GrypheModelLogo : GrypheModelLogoDark, nvidia: isLight ? NvidiaModelLogo : NvidiaModelLogoDark, dianxin: isLight ? DianxinModelLogo : DianxinModelLogoDark, tele: isLight ? TeleModelLogo : TeleModelLogoDark, adept: isLight ? AdeptModelLogo : AdeptModelLogoDark, aisingapore: isLight ? AisingaporeModelLogo : AisingaporeModelLogoDark, bigcode: isLight ? BigcodeModelLogo : BigcodeModelLogoDark, mediatek: isLight ? MediatekModelLogo : MediatekModelLogoDark, upstage: isLight ? UpstageModelLogo : UpstageModelLogoDark, rakutenai: isLight ? RakutenaiModelLogo : RakutenaiModelLogoDark, ibm: isLight ? IbmModelLogo : IbmModelLogoDark, 'google/': isLight ? GoogleModelLogo : GoogleModelLogoDark, hugging: isLight ? HuggingfaceModelLogo : HuggingfaceModelLogoDark, embedding: isLight ? EmbeddingModelLogo : EmbeddingModelLogoDark, 'bge-': BgeModelLogo } for (const key in logoMap) { if (modelId.toLowerCase().includes(key)) { return logoMap[key] } } return undefined } export const SYSTEM_MODELS: Record = { qwenlm: [ { id: 'qwen-plus-latest', provider: 'qwenlm', name: 'Qwen2.5-Plus', group: 'Qwen 2.5' }, { id: 'qvq-72b-preview', provider: 'qwenlm', name: 'QVQ-72B-Preview', group: 'QVQ' }, { id: 'qwq-32b-preview', provider: 'qwenlm', name: 'QwQ-32B-Preview', group: 'QVQ' }, { id: 'qwen2.5-coder-32b-instruct', provider: 'qwenlm', name: 'Qwen2.5-Coder-32B-Instruct', group: 'Qwen 2.5' }, { id: 'qwen-vl-max-latest', provider: 'qwenlm', name: 'Qwen2-VL-Max', group: 'Qwen 2' }, { id: 'qwen-turbo-latest', provider: 'qwenlm', name: 'Qwen2.5-Turbo', group: 'Qwen 2.5' }, { id: 'qwen2.5-72b-instruct', provider: 'qwenlm', name: 'Qwen2.5-72B-Instruct', group: 'Qwen 2.5' }, { id: 'qwen2.5-32b-instruct', provider: 'qwenlm', name: 'Qwen2.5-32B-Instruct', group: 'Qwen 2.5' } ], aihubmix: [ { id: 'gpt-4o', provider: 'aihubmix', name: 'GPT-4o', group: 'GPT-4o' }, { id: 'claude-3-5-sonnet-latest', provider: 'aihubmix', name: 'Claude 3.5 Sonnet', group: 'Claude 3.5' }, { id: 'gemini-2.0-flash-exp-search', provider: 'aihubmix', name: 'Gemini 2.0 Flash Exp Search', group: 'Gemini 2.0' }, { id: 'deepseek-chat', provider: 'aihubmix', name: 'DeepSeek Chat', group: 'DeepSeek Chat' }, { id: 'aihubmix-Llama-3-3-70B-Instruct', provider: 'aihubmix', name: 'Llama-3.3-70b', group: 'Llama 3.3' }, { id: 'Qwen/QVQ-72B-Preview', provider: 'aihubmix', name: 'Qwen/QVQ-72B', group: 'Qwen' } ], ollama: [], silicon: [ { id: 'deepseek-ai/DeepSeek-R1', name: 'deepseek-ai/DeepSeek-R1', provider: 'silicon', group: 'deepseek-ai' }, { id: 'Qwen/Qwen2.5-7B-Instruct', provider: 'silicon', name: 'Qwen2.5-7B-Instruct', group: 'Qwen' }, { id: 'meta-llama/Llama-3.3-70B-Instruct', name: 'meta-llama/Llama-3.3-70B-Instruct', provider: 'silicon', group: 'meta-llama' } ], openai: [ { id: 'gpt-4o', provider: 'openai', name: ' GPT-4o', group: 'GPT 4o' }, { id: 'gpt-4o-mini', provider: 'openai', name: ' GPT-4o-mini', group: 'GPT 4o' }, { id: 'o1-mini', provider: 'openai', name: ' o1-mini', group: 'o1' }, { id: 'o1-preview', provider: 'openai', name: ' o1-preview', group: 'o1' } ], 'azure-openai': [ { id: 'gpt-4o', provider: 'azure-openai', name: ' GPT-4o', group: 'GPT 4o' }, { id: 'gpt-4o-mini', provider: 'azure-openai', name: ' GPT-4o-mini', group: 'GPT 4o' } ], gemini: [ { id: 'gemini-1.5-flash', provider: 'gemini', name: 'Gemini 1.5 Flash', group: 'Gemini 1.5' }, { id: 'gemini-1.5-pro', name: 'Gemini 1.5 Pro', provider: 'gemini', group: 'gemini-1.5' } ], anthropic: [ { id: 'claude-3-5-sonnet-latest', provider: 'anthropic', name: 'Claude 3.5 Sonnet', group: 'Claude 3.5' }, { id: 'claude-3-opus-latest', provider: 'anthropic', name: 'Claude 3 Opus', group: 'Claude 3' }, { id: 'claude-3-sonnet-20240229', provider: 'anthropic', name: 'Claude 3 Sonnet', group: 'Claude 3' }, { id: 'claude-3-haiku-20240307', provider: 'anthropic', name: 'Claude 3 Haiku', group: 'Claude 3' } ], deepseek: [ { id: 'deepseek-chat', provider: 'deepseek', name: 'DeepSeek Chat', group: 'DeepSeek Chat' }, { id: 'deepseek-reasoner', provider: 'deepseek', name: 'DeepSeek Reasoner', group: 'DeepSeek Reasoner' } ], together: [ { id: 'meta-llama/Llama-3.2-11B-Vision-Instruct-Turbo', provider: 'together', name: 'Llama-3.2-11B-Vision', group: 'Llama-3.2' }, { id: 'meta-llama/Llama-3.2-90B-Vision-Instruct-Turbo', provider: 'together', name: 'Llama-3.2-90B-Vision', group: 'Llama-3.2' }, { id: 'google/gemma-2-27b-it', provider: 'together', name: 'gemma-2-27b-it', group: 'Gemma' }, { id: 'google/gemma-2-9b-it', provider: 'together', name: 'gemma-2-9b-it', group: 'Gemma' } ], ocoolai: [ { id: 'gpt-4o', provider: 'ocoolai', name: 'gpt-4o', group: 'OpenAI' }, { id: 'gpt-4o-all', provider: 'ocoolai', name: 'gpt-4o-all', group: 'OpenAI' }, { id: 'gpt-4-all', provider: 'ocoolai', name: 'gpt-4-all', group: 'OpenAI' }, { id: 'gpt-4o-mini', provider: 'ocoolai', name: 'gpt-4o-mini', group: 'OpenAI' }, { id: 'gpt-4', provider: 'ocoolai', name: 'gpt-4', group: 'OpenAI' }, { id: 'gpt-4-turbo', provider: 'ocoolai', name: 'gpt-4-turbo', group: 'OpenAI' }, { id: 'o1-preview', provider: 'ocoolai', name: 'o1-preview', group: 'OpenAI' }, { id: 'o1-mini', provider: 'ocoolai', name: 'o1-mini', group: 'OpenAI' }, { id: 'gpt-3.5-turbo', provider: 'ocoolai', name: 'gpt-3.5-turbo', group: 'OpenAI' }, { id: 'claude-3-5-sonnet-20240620', provider: 'ocoolai', name: 'claude-3-5-sonnet-20240620', group: 'Anthropic' }, { id: 'claude-3-opus-20240229', provider: 'ocoolai', name: 'claude-3-opus-20240229', group: 'Anthropic' }, { id: 'claude-3-sonnet-20240229', provider: 'ocoolai', name: 'claude-3-sonnet-20240229', group: 'Anthropic' }, { id: 'claude-3-haiku-20240307', provider: 'ocoolai', name: 'claude-3-haiku-20240307', group: 'Anthropic' }, { id: 'gemini-pro', provider: 'ocoolai', name: 'gemini-pro', group: 'Gemini' }, { id: 'gemini-1.5-pro', provider: 'ocoolai', name: 'gemini-1.5-pro', group: 'Gemini' }, { id: 'meta-llama/Llama-3.2-90B-Vision-Instruct-Turbo', provider: 'ocoolai', name: 'Llama-3.2-90B-Vision-Instruct-Turbo', group: 'Llama-3.2' }, { id: 'meta-llama/Llama-3.2-11B-Vision-Instruct-Turbo', provider: 'ocoolai', name: 'Llama-3.2-11B-Vision-Instruct-Turbo', group: 'Llama-3.2' }, { id: 'meta-llama/Llama-3.2-3B-Vision-Instruct-Turbo', provider: 'ocoolai', name: 'Llama-3.2-3B-Vision-Instruct-Turbo', group: 'Llama-3.2' }, { id: 'google/gemma-2-27b-it', provider: 'ocoolai', name: 'gemma-2-27b-it', group: 'Gemma' }, { id: 'google/gemma-2-9b-it', provider: 'ocoolai', name: 'gemma-2-9b-it', group: 'Gemma' } ], github: [ { id: 'gpt-4o', provider: 'github', name: 'OpenAI GPT-4o', group: 'OpenAI' } ], yi: [ { id: 'yi-lightning', name: 'yi-lightning', provider: 'yi', group: 'yi-lightning', owned_by: '01.ai' }, { id: 'yi-medium', name: 'yi-medium', provider: 'yi', group: 'yi-medium', owned_by: '01.ai' }, { id: 'yi-large', name: 'yi-large', provider: 'yi', group: 'yi-large', owned_by: '01.ai' }, { id: 'yi-vision', name: 'yi-vision', provider: 'yi', group: 'yi-vision', owned_by: '01.ai' } ], zhipu: [ { id: 'glm-zero-preview', provider: 'zhipu', name: 'GLM-Zero-Preview', group: 'GLM-Zero' }, { id: 'glm-4-0520', provider: 'zhipu', name: 'GLM-4-0520', group: 'GLM-4' }, { id: 'glm-4-long', provider: 'zhipu', name: 'GLM-4-Long', group: 'GLM-4' }, { id: 'glm-4-plus', provider: 'zhipu', name: 'GLM-4-Plus', group: 'GLM-4' }, { id: 'glm-4-air', provider: 'zhipu', name: 'GLM-4-Air', group: 'GLM-4' }, { id: 'glm-4-airx', provider: 'zhipu', name: 'GLM-4-AirX', group: 'GLM-4' }, { id: 'glm-4-flash', provider: 'zhipu', name: 'GLM-4-Flash', group: 'GLM-4' }, { id: 'glm-4-flashx', provider: 'zhipu', name: 'GLM-4-FlashX', group: 'GLM-4' }, { id: 'glm-4v', provider: 'zhipu', name: 'GLM 4V', group: 'GLM-4v' }, { id: 'glm-4v-plus', provider: 'zhipu', name: 'GLM-4V-Plus', group: 'GLM-4v' }, { id: 'glm-4-alltools', provider: 'zhipu', name: 'GLM-4-AllTools', group: 'GLM-4-AllTools' }, { id: 'embedding-3', provider: 'zhipu', name: 'Embedding-3', group: 'Embedding' } ], moonshot: [ { id: 'moonshot-v1-auto', name: 'moonshot-v1-auto', provider: 'moonshot', group: 'moonshot-v1', owned_by: 'moonshot' } ], baichuan: [ { id: 'Baichuan4', provider: 'baichuan', name: 'Baichuan4', group: 'Baichuan4' }, { id: 'Baichuan3-Turbo', provider: 'baichuan', name: 'Baichuan3 Turbo', group: 'Baichuan3' }, { id: 'Baichuan3-Turbo-128k', provider: 'baichuan', name: 'Baichuan3 Turbo 128k', group: 'Baichuan3' } ], bailian: [ { id: 'qwen-vl-plus', name: 'qwen-vl-plus', provider: 'dashscope', group: 'qwen-vl', owned_by: 'system' }, { id: 'qwen-coder-plus', name: 'qwen-coder-plus', provider: 'dashscope', group: 'qwen-coder', owned_by: 'system' }, { id: 'qwen-turbo', name: 'qwen-turbo', provider: 'dashscope', group: 'qwen-turbo', owned_by: 'system' }, { id: 'qwen-plus', name: 'qwen-plus', provider: 'dashscope', group: 'qwen-plus', owned_by: 'system' }, { id: 'qwen-max', name: 'qwen-max', provider: 'dashscope', group: 'qwen-max', owned_by: 'system' } ], stepfun: [ { id: 'step-1-8k', provider: 'stepfun', name: 'Step 1 8K', group: 'Step 1' }, { id: 'step-1-flash', provider: 'stepfun', name: 'Step 1 Flash', group: 'Step 1' } ], doubao: [], minimax: [ { id: 'abab6.5s-chat', provider: 'minimax', name: 'abab6.5s', group: 'abab6' }, { id: 'abab6.5g-chat', provider: 'minimax', name: 'abab6.5g', group: 'abab6' }, { id: 'abab6.5t-chat', provider: 'minimax', name: 'abab6.5t', group: 'abab6' }, { id: 'abab5.5s-chat', provider: 'minimax', name: 'abab5.5s', group: 'abab5' }, { id: 'minimax-text-01', provider: 'minimax', name: 'minimax-01', group: 'minimax-01' } ], hyperbolic: [ { id: 'Qwen/Qwen2-VL-72B-Instruct', provider: 'hyperbolic', name: 'Qwen2-VL-72B-Instruct', group: 'Qwen2-VL' }, { id: 'Qwen/Qwen2-VL-7B-Instruct', provider: 'hyperbolic', name: 'Qwen2-VL-7B-Instruct', group: 'Qwen2-VL' }, { id: 'mistralai/Pixtral-12B-2409', provider: 'hyperbolic', name: 'Pixtral-12B-2409', group: 'Pixtral' }, { id: 'meta-llama/Meta-Llama-3.1-405B', provider: 'hyperbolic', name: 'Meta-Llama-3.1-405B', group: 'Meta-Llama-3.1' } ], grok: [ { id: 'grok-beta', provider: 'grok', name: 'Grok Beta', group: 'Grok' }, { id: 'grok-vision-beta', provider: 'grok', name: 'Grok Vision Beta', group: 'Grok' } ], mistral: [ { id: 'pixtral-12b-2409', provider: 'mistral', name: 'Pixtral-12B-2409', group: 'Pixtral' }, { id: 'open-mistral-nemo', provider: 'mistral', name: 'Open-Mistral-Nemo', group: 'Mistral' } ], jina: [ { id: 'jina-clip-v1', provider: 'jina', name: 'jina-clip-v1', group: 'Jina Clip' }, { id: 'jina-clip-v2', provider: 'jina', name: 'jina-clip-v2', group: 'Jina Clip' }, { id: 'jina-embeddings-v2-base-en', provider: 'jina', name: 'jina-embeddings-v2-base-en', group: 'Jina Embeddings V2' }, { id: 'jina-embeddings-v2-base-es', provider: 'jina', name: 'jina-embeddings-v2-base-es', group: 'Jina Embeddings V2' }, { id: 'jina-embeddings-v2-base-de', provider: 'jina', name: 'jina-embeddings-v2-base-de', group: 'Jina Embeddings V2' }, { id: 'jina-embeddings-v2-base-zh', provider: 'jina', name: 'jina-embeddings-v2-base-zh', group: 'Jina Embeddings V2' }, { id: 'jina-embeddings-v2-base-code', provider: 'jina', name: 'jina-embeddings-v2-base-code', group: 'Jina Embeddings V2' }, { id: 'jina-embeddings-v3', provider: 'jina', name: 'jina-embeddings-v3', group: 'Jina Embeddings V3' } ], fireworks: [ { id: 'accounts/fireworks/models/mythomax-l2-13b', provider: 'fireworks', name: 'mythomax-l2-13b', group: 'Gryphe' }, { id: 'accounts/fireworks/models/llama-v3-70b-instruct', provider: 'fireworks', name: 'Llama-3-70B-Instruct', group: 'Llama3' } ], zhinao: [ { id: '360gpt-pro', provider: 'zhinao', name: '360gpt-pro', group: '360Gpt' }, { id: '360gpt-turbo', provider: 'zhinao', name: '360gpt-turbo', group: '360Gpt' } ], hunyuan: [ { id: 'hunyuan-pro', provider: 'hunyuan', name: 'hunyuan-pro', group: 'Hunyuan' }, { id: 'hunyuan-standard', provider: 'hunyuan', name: 'hunyuan-standard', group: 'Hunyuan' }, { id: 'hunyuan-lite', provider: 'hunyuan', name: 'hunyuan-lite', group: 'Hunyuan' }, { id: 'hunyuan-standard-256k', provider: 'hunyuan', name: 'hunyuan-standard-256k', group: 'Hunyuan' }, { id: 'hunyuan-vision', provider: 'hunyuan', name: 'hunyuan-vision', group: 'Hunyuan' }, { id: 'hunyuan-code', provider: 'hunyuan', name: 'hunyuan-code', group: 'Hunyuan' }, { id: 'hunyuan-role', provider: 'hunyuan', name: 'hunyuan-role', group: 'Hunyuan' }, { id: 'hunyuan-turbo', provider: 'hunyuan', name: 'hunyuan-turbo', group: 'Hunyuan' } ], nvidia: [ { id: '01-ai/yi-large', provider: 'nvidia', name: 'yi-large', group: 'Yi' }, { id: 'meta/llama-3.1-405b-instruct', provider: 'nvidia', name: 'llama-3.1-405b-instruct', group: 'llama-3.1' } ], openrouter: [ { id: 'google/gemma-2-9b-it:free', provider: 'openrouter', name: 'Google: Gemma 2 9B', group: 'Gemma' }, { id: 'microsoft/phi-3-mini-128k-instruct:free', provider: 'openrouter', name: 'Phi-3 Mini 128K Instruct', group: 'Phi' }, { id: 'microsoft/phi-3-medium-128k-instruct:free', provider: 'openrouter', name: 'Phi-3 Medium 128K Instruct', group: 'Phi' }, { id: 'meta-llama/llama-3-8b-instruct:free', provider: 'openrouter', name: 'Meta: Llama 3 8B Instruct', group: 'Llama3' }, { id: 'mistralai/mistral-7b-instruct:free', provider: 'openrouter', name: 'Mistral: Mistral 7B Instruct', group: 'Mistral' } ], groq: [ { id: 'llama3-8b-8192', provider: 'groq', name: 'LLaMA3 8B', group: 'Llama3' }, { id: 'llama3-70b-8192', provider: 'groq', name: 'LLaMA3 70B', group: 'Llama3' }, { id: 'mixtral-8x7b-32768', provider: 'groq', name: 'Mixtral 8x7B', group: 'Mixtral' }, { id: 'gemma-7b-it', provider: 'groq', name: 'Gemma 7B', group: 'Gemma' } ] } export const TEXT_TO_IMAGES_MODELS = [ { id: 'black-forest-labs/FLUX.1-schnell', provider: 'silicon', name: 'FLUX.1 Schnell', group: 'FLUX' }, { id: 'black-forest-labs/FLUX.1-dev', provider: 'silicon', name: 'FLUX.1 Dev', group: 'FLUX' }, { id: 'black-forest-labs/FLUX.1-pro', provider: 'silicon', name: 'FLUX.1 Pro', group: 'FLUX' }, { id: 'Pro/black-forest-labs/FLUX.1-schnell', provider: 'silicon', name: 'FLUX.1 Schnell Pro', group: 'FLUX' }, { id: 'LoRA/black-forest-labs/FLUX.1-dev', provider: 'silicon', name: 'FLUX.1 Dev LoRA', group: 'FLUX' }, { id: 'deepseek-ai/Janus-Pro-7B', provider: 'silicon', name: 'Janus-Pro-7B', group: 'deepseek-ai' }, { id: 'stabilityai/stable-diffusion-3-5-large', provider: 'silicon', name: 'Stable Diffusion 3.5 Large', group: 'Stable Diffusion' }, { id: 'stabilityai/stable-diffusion-3-5-large-turbo', provider: 'silicon', name: 'Stable Diffusion 3.5 Large Turbo', group: 'Stable Diffusion' }, { id: 'stabilityai/stable-diffusion-3-medium', provider: 'silicon', name: 'Stable Diffusion 3 Medium', group: 'Stable Diffusion' }, { id: 'stabilityai/stable-diffusion-2-1', provider: 'silicon', name: 'Stable Diffusion 2.1', group: 'Stable Diffusion' }, { id: 'stabilityai/stable-diffusion-xl-base-1.0', provider: 'silicon', name: 'Stable Diffusion XL Base 1.0', group: 'Stable Diffusion' } ] export const TEXT_TO_IMAGES_MODELS_SUPPORT_IMAGE_ENHANCEMENT = [ 'stabilityai/stable-diffusion-2-1', 'stabilityai/stable-diffusion-xl-base-1.0' ] export function isTextToImageModel(model: Model): boolean { return TEXT_TO_IMAGE_REGEX.test(model.id) } export function isEmbeddingModel(model: Model): boolean { if (!model) { return false } if (['anthropic'].includes(model?.provider)) { return false } return EMBEDDING_REGEX.test(model.id) || model.type?.includes('embedding') || false } export function isVisionModel(model: Model): boolean { if (!model) { return false } return VISION_REGEX.test(model.id) || model.type?.includes('vision') || false } export function isReasoningModel(model: Model): boolean { if (!model) { return false } return REASONING_REGEX.test(model.id) || model.type?.includes('reasoning') || false } export function isSupportedModel(model: OpenAI.Models.Model): boolean { if (!model) { return false } return !NOT_SUPPORTED_REGEX.test(model.id) } export function isWebSearchModel(model: Model): boolean { if (!model) { return false } const provider = getProviderByModel(model) if (!provider) { return false } if (provider?.type === 'openai') { if (model?.id?.includes('gemini-2.0-flash-exp')) { return true } } if (provider.id === 'gemini' || provider?.type === 'gemini') { return model?.id === 'gemini-2.0-flash-exp' } if (provider.id === 'hunyuan') { return model?.id !== 'hunyuan-lite' } if (provider.id === 'aihubmix') { return model?.id === 'gemini-2.0-flash-exp-search' } if (provider.id === 'zhipu') { return model?.id?.startsWith('glm-4-') } return false } export function getOpenAIWebSearchParams(model: Model): Record { if (isWebSearchModel(model)) { const webSearchTools = getWebSearchTools(model) if (model.provider === 'hunyuan') { return { enable_enhancement: true } } return { tools: webSearchTools } } return {} }