mirror of
https://github.com/CherryHQ/cherry-studio.git
synced 2026-01-06 05:09:09 +08:00
refactor(types): 将 isSystemProvider 移动到 types 模块并重构系统提供商 ID 定义
将 isSystemProvider 函数从 config/providers.ts 移动到 types/index.ts 以更好组织代码 重构系统提供商 ID 为 SystemProviderIds 常量对象并添加类型检查函数 更新所有引用 isSystemProvider 的导入路径
This commit is contained in:
parent
9b28ad7191
commit
9492c84b54
@ -52,8 +52,7 @@ import VoyageAIProviderLogo from '@renderer/assets/images/providers/voyageai.png
|
|||||||
import XirangProviderLogo from '@renderer/assets/images/providers/xirang.png'
|
import XirangProviderLogo from '@renderer/assets/images/providers/xirang.png'
|
||||||
import ZeroOneProviderLogo from '@renderer/assets/images/providers/zero-one.png'
|
import ZeroOneProviderLogo from '@renderer/assets/images/providers/zero-one.png'
|
||||||
import ZhipuProviderLogo from '@renderer/assets/images/providers/zhipu.png'
|
import ZhipuProviderLogo from '@renderer/assets/images/providers/zhipu.png'
|
||||||
import { SYSTEM_PROVIDERS } from '@renderer/store/llm'
|
import { Provider } from '@renderer/types'
|
||||||
import { Provider, SystemProvider } from '@renderer/types'
|
|
||||||
|
|
||||||
import { TOKENFLUX_HOST } from './constant'
|
import { TOKENFLUX_HOST } from './constant'
|
||||||
|
|
||||||
@ -755,12 +754,3 @@ const SUPPORT_QWEN3_ENABLE_THINKING_PROVIDER = ['dashscope', 'modelscope']
|
|||||||
export const isSupportQwen3EnableThinkingProvider = (provider: Provider) => {
|
export const isSupportQwen3EnableThinkingProvider = (provider: Provider) => {
|
||||||
return SUPPORT_QWEN3_ENABLE_THINKING_PROVIDER.includes(provider.id)
|
return SUPPORT_QWEN3_ENABLE_THINKING_PROVIDER.includes(provider.id)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* 判断是否为系统内置的提供商。比直接使用`provider.isSystem`更好,因为该数据字段不会随着版本更新而变化。
|
|
||||||
* @param provider - Provider对象,包含提供商的信息
|
|
||||||
* @returns 是否为系统内置提供商
|
|
||||||
*/
|
|
||||||
export const isSystemProvider = (provider: Provider): provider is SystemProvider => {
|
|
||||||
return SYSTEM_PROVIDERS.some((p) => p.id === provider.id)
|
|
||||||
}
|
|
||||||
|
|||||||
@ -1,5 +1,4 @@
|
|||||||
import { createSelector } from '@reduxjs/toolkit'
|
import { createSelector } from '@reduxjs/toolkit'
|
||||||
import { isSystemProvider } from '@renderer/config/providers'
|
|
||||||
import { useAppDispatch, useAppSelector } from '@renderer/store'
|
import { useAppDispatch, useAppSelector } from '@renderer/store'
|
||||||
import {
|
import {
|
||||||
addModel,
|
addModel,
|
||||||
@ -10,7 +9,7 @@ import {
|
|||||||
updateProvider,
|
updateProvider,
|
||||||
updateProviders
|
updateProviders
|
||||||
} from '@renderer/store/llm'
|
} from '@renderer/store/llm'
|
||||||
import { Assistant, Model, Provider } from '@renderer/types'
|
import { Assistant, isSystemProvider, Model, Provider } from '@renderer/types'
|
||||||
|
|
||||||
import { useDefaultModel } from './useAssistant'
|
import { useDefaultModel } from './useAssistant'
|
||||||
|
|
||||||
|
|||||||
@ -1,8 +1,7 @@
|
|||||||
import InfoTooltip from '@renderer/components/InfoTooltip'
|
import InfoTooltip from '@renderer/components/InfoTooltip'
|
||||||
import { HStack } from '@renderer/components/Layout'
|
import { HStack } from '@renderer/components/Layout'
|
||||||
import { isSystemProvider } from '@renderer/config/providers'
|
|
||||||
import { useProvider } from '@renderer/hooks/useProvider'
|
import { useProvider } from '@renderer/hooks/useProvider'
|
||||||
import { Provider } from '@renderer/types'
|
import { isSystemProvider, Provider } from '@renderer/types'
|
||||||
import { Collapse, Flex, Switch } from 'antd'
|
import { Collapse, Flex, Switch } from 'antd'
|
||||||
import { startTransition, useCallback, useMemo } from 'react'
|
import { startTransition, useCallback, useMemo } from 'react'
|
||||||
import { useTranslation } from 'react-i18next'
|
import { useTranslation } from 'react-i18next'
|
||||||
|
|||||||
@ -1,11 +1,11 @@
|
|||||||
import { loggerService } from '@logger'
|
import { loggerService } from '@logger'
|
||||||
import { DraggableVirtualList } from '@renderer/components/DraggableList'
|
import { DraggableVirtualList } from '@renderer/components/DraggableList'
|
||||||
import { DeleteIcon, EditIcon } from '@renderer/components/Icons'
|
import { DeleteIcon, EditIcon } from '@renderer/components/Icons'
|
||||||
import { getProviderLogo, isSystemProvider } from '@renderer/config/providers'
|
import { getProviderLogo } from '@renderer/config/providers'
|
||||||
import { useAllProviders, useProviders } from '@renderer/hooks/useProvider'
|
import { useAllProviders, useProviders } from '@renderer/hooks/useProvider'
|
||||||
import { getProviderLabel } from '@renderer/i18n/label'
|
import { getProviderLabel } from '@renderer/i18n/label'
|
||||||
import ImageStorage from '@renderer/services/ImageStorage'
|
import ImageStorage from '@renderer/services/ImageStorage'
|
||||||
import { Provider, ProviderType } from '@renderer/types'
|
import { isSystemProvider, Provider, ProviderType } from '@renderer/types'
|
||||||
import {
|
import {
|
||||||
generateColorFromChar,
|
generateColorFromChar,
|
||||||
getFancyProviderName,
|
getFancyProviderName,
|
||||||
|
|||||||
@ -7,12 +7,20 @@ import { TRANSLATE_PROMPT } from '@renderer/config/prompts'
|
|||||||
import {
|
import {
|
||||||
isSupportArrayContentProvider,
|
isSupportArrayContentProvider,
|
||||||
isSupportDeveloperRoleProvider,
|
isSupportDeveloperRoleProvider,
|
||||||
isSupportStreamOptionsProvider,
|
isSupportStreamOptionsProvider
|
||||||
isSystemProvider
|
|
||||||
} from '@renderer/config/providers'
|
} from '@renderer/config/providers'
|
||||||
import db from '@renderer/databases'
|
import db from '@renderer/databases'
|
||||||
import i18n from '@renderer/i18n'
|
import i18n from '@renderer/i18n'
|
||||||
import { Assistant, LanguageCode, Model, Provider, WebSearchProvider } from '@renderer/types'
|
import {
|
||||||
|
Assistant,
|
||||||
|
isSystemProvider,
|
||||||
|
LanguageCode,
|
||||||
|
Model,
|
||||||
|
OpenAIServiceTiers,
|
||||||
|
Provider,
|
||||||
|
SystemProviderIds,
|
||||||
|
WebSearchProvider
|
||||||
|
} from '@renderer/types'
|
||||||
import { getDefaultGroupName, getLeadingEmoji, runAsyncFunction, uuid } from '@renderer/utils'
|
import { getDefaultGroupName, getLeadingEmoji, runAsyncFunction, uuid } from '@renderer/utils'
|
||||||
import { defaultByPassRules, UpgradeChannel } from '@shared/config/constant'
|
import { defaultByPassRules, UpgradeChannel } from '@shared/config/constant'
|
||||||
import { isEmpty } from 'lodash'
|
import { isEmpty } from 'lodash'
|
||||||
|
|||||||
@ -192,65 +192,83 @@ export type Provider = {
|
|||||||
extra_headers?: Record<string, string>
|
extra_headers?: Record<string, string>
|
||||||
}
|
}
|
||||||
|
|
||||||
export type SystemProviderId =
|
export const SystemProviderIds = {
|
||||||
| 'silicon'
|
silicon: 'silicon',
|
||||||
| 'aihubmix'
|
aihubmix: 'aihubmix',
|
||||||
| 'ocoolai'
|
ocoolai: 'ocoolai',
|
||||||
| 'deepseek'
|
deepseek: 'deepseek',
|
||||||
| 'ppio'
|
ppio: 'ppio',
|
||||||
| 'alayanew'
|
alayanew: 'alayanew',
|
||||||
| 'qiniu'
|
qiniu: 'qiniu',
|
||||||
| 'dmxapi'
|
dmxapi: 'dmxapi',
|
||||||
| 'burncloud'
|
burncloud: 'burncloud',
|
||||||
| 'tokenflux'
|
tokenflux: 'tokenflux',
|
||||||
| '302ai'
|
'302ai': '302ai',
|
||||||
| 'cephalon'
|
cephalon: 'cephalon',
|
||||||
| 'lanyun'
|
lanyun: 'lanyun',
|
||||||
| 'ph8'
|
ph8: 'ph8',
|
||||||
| 'openrouter'
|
openrouter: 'openrouter',
|
||||||
| 'ollama'
|
ollama: 'ollama',
|
||||||
| 'new-api'
|
'new-api': 'new-api',
|
||||||
| 'lmstudio'
|
lmstudio: 'lmstudio',
|
||||||
| 'anthropic'
|
anthropic: 'anthropic',
|
||||||
| 'openai'
|
openai: 'openai',
|
||||||
| 'azure-openai'
|
'azure-openai': 'azure-openai',
|
||||||
| 'gemini'
|
gemini: 'gemini',
|
||||||
| 'vertexai'
|
vertexai: 'vertexai',
|
||||||
| 'github'
|
github: 'github',
|
||||||
| 'copilot'
|
copilot: 'copilot',
|
||||||
| 'zhipu'
|
zhipu: 'zhipu',
|
||||||
| 'yi'
|
yi: 'yi',
|
||||||
| 'moonshot'
|
moonshot: 'moonshot',
|
||||||
| 'baichuan'
|
baichuan: 'baichuan',
|
||||||
| 'dashscope'
|
dashscope: 'dashscope',
|
||||||
| 'stepfun'
|
stepfun: 'stepfun',
|
||||||
| 'doubao'
|
doubao: 'doubao',
|
||||||
| 'infini'
|
infini: 'infini',
|
||||||
| 'minimax'
|
minimax: 'minimax',
|
||||||
| 'groq'
|
groq: 'groq',
|
||||||
| 'together'
|
together: 'together',
|
||||||
| 'fireworks'
|
fireworks: 'fireworks',
|
||||||
| 'nvidia'
|
nvidia: 'nvidia',
|
||||||
| 'grok'
|
grok: 'grok',
|
||||||
| 'hyperbolic'
|
hyperbolic: 'hyperbolic',
|
||||||
| 'mistral'
|
mistral: 'mistral',
|
||||||
| 'jina'
|
jina: 'jina',
|
||||||
| 'perplexity'
|
perplexity: 'perplexity',
|
||||||
| 'modelscope'
|
modelscope: 'modelscope',
|
||||||
| 'xirang'
|
xirang: 'xirang',
|
||||||
| 'hunyuan'
|
hunyuan: 'hunyuan',
|
||||||
| 'tencent-cloud-ti'
|
'tencent-cloud-ti': 'tencent-cloud-ti',
|
||||||
| 'baidu-cloud'
|
'baidu-cloud': 'baidu-cloud',
|
||||||
| 'gpustack'
|
gpustack: 'gpustack',
|
||||||
| 'voyageai'
|
voyageai: 'voyageai',
|
||||||
| 'aws-bedrock'
|
'aws-bedrock': 'aws-bedrock',
|
||||||
| 'poe'
|
poe: 'poe'
|
||||||
|
} as const
|
||||||
|
|
||||||
|
export type SystemProviderId = (typeof SystemProviderIds)[keyof typeof SystemProviderIds]
|
||||||
|
|
||||||
|
const systemProviderIdValues = Object.values(SystemProviderIds)
|
||||||
|
|
||||||
|
export const isSystemProviderId = (id: string): id is SystemProviderId => {
|
||||||
|
return systemProviderIdValues.some((sid) => sid === id)
|
||||||
|
}
|
||||||
|
|
||||||
export type SystemProvider = Provider & {
|
export type SystemProvider = Provider & {
|
||||||
id: SystemProviderId
|
id: SystemProviderId
|
||||||
isSystem: true
|
isSystem: true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 判断是否为系统内置的提供商。比直接使用`provider.isSystem`更好,因为该数据字段不会随着版本更新而变化。
|
||||||
|
* @param provider - Provider对象,包含提供商的信息
|
||||||
|
* @returns 是否为系统内置提供商
|
||||||
|
*/
|
||||||
|
export const isSystemProvider = (provider: Provider): provider is SystemProvider => {
|
||||||
|
return isSystemProviderId(provider.id) && !!provider.isSystem
|
||||||
|
}
|
||||||
|
|
||||||
export type ProviderSupportedServiceTier = Provider & {
|
export type ProviderSupportedServiceTier = Provider & {
|
||||||
isSupportServiceTier: true
|
isSupportServiceTier: true
|
||||||
serviceTier: OpenAIServiceTier
|
serviceTier: OpenAIServiceTier
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
import { getProviderLabel } from '@renderer/i18n/label'
|
import { getProviderLabel } from '@renderer/i18n/label'
|
||||||
import { Model, Provider } from '@renderer/types'
|
import { isSystemProvider, Model, Provider } from '@renderer/types'
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 判断一个字符串是否包含由另一个字符串表示的 keywords
|
* 判断一个字符串是否包含由另一个字符串表示的 keywords
|
||||||
@ -64,8 +64,7 @@ export function matchKeywordsInModel(keywords: string | string[], model: Model,
|
|||||||
* @returns 搜索字符串
|
* @returns 搜索字符串
|
||||||
*/
|
*/
|
||||||
function getProviderSearchString(provider: Provider) {
|
function getProviderSearchString(provider: Provider) {
|
||||||
// FIXME: 无法在这里使用 isSystemProvider,但我不清楚为什么
|
return isSystemProvider(provider) ? `${getProviderLabel(provider.id)} ${provider.id}` : provider.name
|
||||||
return provider.isSystem ? `${getProviderLabel(provider.id)} ${provider.id}` : provider.name
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
import { getProviderLabel } from '@renderer/i18n/label'
|
import { getProviderLabel } from '@renderer/i18n/label'
|
||||||
import { Provider } from '@renderer/types'
|
import { isSystemProvider, Provider } from '@renderer/types'
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 从模型 ID 中提取默认组名。
|
* 从模型 ID 中提取默认组名。
|
||||||
@ -82,8 +82,7 @@ export const getLowerBaseModelName = (id: string, delimiter: string = '/'): stri
|
|||||||
* @returns 描述性的名字
|
* @returns 描述性的名字
|
||||||
*/
|
*/
|
||||||
export const getFancyProviderName = (provider: Provider) => {
|
export const getFancyProviderName = (provider: Provider) => {
|
||||||
// FIXME: 无法在这里使用 isSystemProvider,但我不清楚为什么
|
return isSystemProvider(provider) ? getProviderLabel(provider.id) : provider.name
|
||||||
return provider.isSystem ? getProviderLabel(provider.id) : provider.name
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user