mirror of
https://github.com/CherryHQ/cherry-studio.git
synced 2025-12-26 03:31:24 +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 ZeroOneProviderLogo from '@renderer/assets/images/providers/zero-one.png'
|
||||
import ZhipuProviderLogo from '@renderer/assets/images/providers/zhipu.png'
|
||||
import { SYSTEM_PROVIDERS } from '@renderer/store/llm'
|
||||
import { Provider, SystemProvider } from '@renderer/types'
|
||||
import { Provider } from '@renderer/types'
|
||||
|
||||
import { TOKENFLUX_HOST } from './constant'
|
||||
|
||||
@ -755,12 +754,3 @@ const SUPPORT_QWEN3_ENABLE_THINKING_PROVIDER = ['dashscope', 'modelscope']
|
||||
export const isSupportQwen3EnableThinkingProvider = (provider: Provider) => {
|
||||
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 { isSystemProvider } from '@renderer/config/providers'
|
||||
import { useAppDispatch, useAppSelector } from '@renderer/store'
|
||||
import {
|
||||
addModel,
|
||||
@ -10,7 +9,7 @@ import {
|
||||
updateProvider,
|
||||
updateProviders
|
||||
} from '@renderer/store/llm'
|
||||
import { Assistant, Model, Provider } from '@renderer/types'
|
||||
import { Assistant, isSystemProvider, Model, Provider } from '@renderer/types'
|
||||
|
||||
import { useDefaultModel } from './useAssistant'
|
||||
|
||||
|
||||
@ -1,8 +1,7 @@
|
||||
import InfoTooltip from '@renderer/components/InfoTooltip'
|
||||
import { HStack } from '@renderer/components/Layout'
|
||||
import { isSystemProvider } from '@renderer/config/providers'
|
||||
import { useProvider } from '@renderer/hooks/useProvider'
|
||||
import { Provider } from '@renderer/types'
|
||||
import { isSystemProvider, Provider } from '@renderer/types'
|
||||
import { Collapse, Flex, Switch } from 'antd'
|
||||
import { startTransition, useCallback, useMemo } from 'react'
|
||||
import { useTranslation } from 'react-i18next'
|
||||
|
||||
@ -1,11 +1,11 @@
|
||||
import { loggerService } from '@logger'
|
||||
import { DraggableVirtualList } from '@renderer/components/DraggableList'
|
||||
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 { getProviderLabel } from '@renderer/i18n/label'
|
||||
import ImageStorage from '@renderer/services/ImageStorage'
|
||||
import { Provider, ProviderType } from '@renderer/types'
|
||||
import { isSystemProvider, Provider, ProviderType } from '@renderer/types'
|
||||
import {
|
||||
generateColorFromChar,
|
||||
getFancyProviderName,
|
||||
|
||||
@ -7,12 +7,20 @@ import { TRANSLATE_PROMPT } from '@renderer/config/prompts'
|
||||
import {
|
||||
isSupportArrayContentProvider,
|
||||
isSupportDeveloperRoleProvider,
|
||||
isSupportStreamOptionsProvider,
|
||||
isSystemProvider
|
||||
isSupportStreamOptionsProvider
|
||||
} from '@renderer/config/providers'
|
||||
import db from '@renderer/databases'
|
||||
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 { defaultByPassRules, UpgradeChannel } from '@shared/config/constant'
|
||||
import { isEmpty } from 'lodash'
|
||||
|
||||
@ -192,65 +192,83 @@ export type Provider = {
|
||||
extra_headers?: Record<string, string>
|
||||
}
|
||||
|
||||
export type SystemProviderId =
|
||||
| 'silicon'
|
||||
| 'aihubmix'
|
||||
| 'ocoolai'
|
||||
| 'deepseek'
|
||||
| 'ppio'
|
||||
| 'alayanew'
|
||||
| 'qiniu'
|
||||
| 'dmxapi'
|
||||
| 'burncloud'
|
||||
| 'tokenflux'
|
||||
| '302ai'
|
||||
| 'cephalon'
|
||||
| 'lanyun'
|
||||
| 'ph8'
|
||||
| 'openrouter'
|
||||
| 'ollama'
|
||||
| 'new-api'
|
||||
| 'lmstudio'
|
||||
| 'anthropic'
|
||||
| 'openai'
|
||||
| 'azure-openai'
|
||||
| 'gemini'
|
||||
| 'vertexai'
|
||||
| 'github'
|
||||
| 'copilot'
|
||||
| 'zhipu'
|
||||
| 'yi'
|
||||
| 'moonshot'
|
||||
| 'baichuan'
|
||||
| 'dashscope'
|
||||
| 'stepfun'
|
||||
| 'doubao'
|
||||
| 'infini'
|
||||
| 'minimax'
|
||||
| 'groq'
|
||||
| 'together'
|
||||
| 'fireworks'
|
||||
| 'nvidia'
|
||||
| 'grok'
|
||||
| 'hyperbolic'
|
||||
| 'mistral'
|
||||
| 'jina'
|
||||
| 'perplexity'
|
||||
| 'modelscope'
|
||||
| 'xirang'
|
||||
| 'hunyuan'
|
||||
| 'tencent-cloud-ti'
|
||||
| 'baidu-cloud'
|
||||
| 'gpustack'
|
||||
| 'voyageai'
|
||||
| 'aws-bedrock'
|
||||
| 'poe'
|
||||
export const SystemProviderIds = {
|
||||
silicon: 'silicon',
|
||||
aihubmix: 'aihubmix',
|
||||
ocoolai: 'ocoolai',
|
||||
deepseek: 'deepseek',
|
||||
ppio: 'ppio',
|
||||
alayanew: 'alayanew',
|
||||
qiniu: 'qiniu',
|
||||
dmxapi: 'dmxapi',
|
||||
burncloud: 'burncloud',
|
||||
tokenflux: 'tokenflux',
|
||||
'302ai': '302ai',
|
||||
cephalon: 'cephalon',
|
||||
lanyun: 'lanyun',
|
||||
ph8: 'ph8',
|
||||
openrouter: 'openrouter',
|
||||
ollama: 'ollama',
|
||||
'new-api': 'new-api',
|
||||
lmstudio: 'lmstudio',
|
||||
anthropic: 'anthropic',
|
||||
openai: 'openai',
|
||||
'azure-openai': 'azure-openai',
|
||||
gemini: 'gemini',
|
||||
vertexai: 'vertexai',
|
||||
github: 'github',
|
||||
copilot: 'copilot',
|
||||
zhipu: 'zhipu',
|
||||
yi: 'yi',
|
||||
moonshot: 'moonshot',
|
||||
baichuan: 'baichuan',
|
||||
dashscope: 'dashscope',
|
||||
stepfun: 'stepfun',
|
||||
doubao: 'doubao',
|
||||
infini: 'infini',
|
||||
minimax: 'minimax',
|
||||
groq: 'groq',
|
||||
together: 'together',
|
||||
fireworks: 'fireworks',
|
||||
nvidia: 'nvidia',
|
||||
grok: 'grok',
|
||||
hyperbolic: 'hyperbolic',
|
||||
mistral: 'mistral',
|
||||
jina: 'jina',
|
||||
perplexity: 'perplexity',
|
||||
modelscope: 'modelscope',
|
||||
xirang: 'xirang',
|
||||
hunyuan: 'hunyuan',
|
||||
'tencent-cloud-ti': 'tencent-cloud-ti',
|
||||
'baidu-cloud': 'baidu-cloud',
|
||||
gpustack: 'gpustack',
|
||||
voyageai: 'voyageai',
|
||||
'aws-bedrock': 'aws-bedrock',
|
||||
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 & {
|
||||
id: SystemProviderId
|
||||
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 & {
|
||||
isSupportServiceTier: true
|
||||
serviceTier: OpenAIServiceTier
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
import { getProviderLabel } from '@renderer/i18n/label'
|
||||
import { Model, Provider } from '@renderer/types'
|
||||
import { isSystemProvider, Model, Provider } from '@renderer/types'
|
||||
|
||||
/**
|
||||
* 判断一个字符串是否包含由另一个字符串表示的 keywords
|
||||
@ -64,8 +64,7 @@ export function matchKeywordsInModel(keywords: string | string[], model: Model,
|
||||
* @returns 搜索字符串
|
||||
*/
|
||||
function getProviderSearchString(provider: Provider) {
|
||||
// FIXME: 无法在这里使用 isSystemProvider,但我不清楚为什么
|
||||
return provider.isSystem ? `${getProviderLabel(provider.id)} ${provider.id}` : provider.name
|
||||
return isSystemProvider(provider) ? `${getProviderLabel(provider.id)} ${provider.id}` : provider.name
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
import { getProviderLabel } from '@renderer/i18n/label'
|
||||
import { Provider } from '@renderer/types'
|
||||
import { isSystemProvider, Provider } from '@renderer/types'
|
||||
|
||||
/**
|
||||
* 从模型 ID 中提取默认组名。
|
||||
@ -82,8 +82,7 @@ export const getLowerBaseModelName = (id: string, delimiter: string = '/'): stri
|
||||
* @returns 描述性的名字
|
||||
*/
|
||||
export const getFancyProviderName = (provider: Provider) => {
|
||||
// FIXME: 无法在这里使用 isSystemProvider,但我不清楚为什么
|
||||
return provider.isSystem ? getProviderLabel(provider.id) : provider.name
|
||||
return isSystemProvider(provider) ? getProviderLabel(provider.id) : provider.name
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Loading…
Reference in New Issue
Block a user