mirror of
https://github.com/CherryHQ/cherry-studio.git
synced 2026-01-08 06:19:05 +08:00
refactor(service-tier): 统一服务层级命名并添加Groq支持
将OpenAIServiceTiers的常量值从大写改为小写以保持命名一致性 新增GroqServiceTiers及相关类型守卫 重构BaseApiClient中的服务层级处理逻辑以支持多供应商
This commit is contained in:
parent
1b231aed1e
commit
b69a9ab03d
@ -13,15 +13,18 @@ import {
|
|||||||
Assistant,
|
Assistant,
|
||||||
FileTypes,
|
FileTypes,
|
||||||
GenerateImageParams,
|
GenerateImageParams,
|
||||||
|
GroqServiceTiers,
|
||||||
|
isGroqServiceTier,
|
||||||
|
isOpenAIServiceTier,
|
||||||
KnowledgeReference,
|
KnowledgeReference,
|
||||||
MCPCallToolResponse,
|
MCPCallToolResponse,
|
||||||
MCPTool,
|
MCPTool,
|
||||||
MCPToolResponse,
|
MCPToolResponse,
|
||||||
MemoryItem,
|
MemoryItem,
|
||||||
Model,
|
Model,
|
||||||
OpenAIServiceTier,
|
|
||||||
OpenAIServiceTiers,
|
OpenAIServiceTiers,
|
||||||
Provider,
|
Provider,
|
||||||
|
SystemProviderIds,
|
||||||
ToolCallResponse,
|
ToolCallResponse,
|
||||||
WebSearchProviderResponse,
|
WebSearchProviderResponse,
|
||||||
WebSearchResponse
|
WebSearchResponse
|
||||||
@ -203,31 +206,31 @@ export abstract class BaseApiClient<
|
|||||||
|
|
||||||
// NOTE: 这个也许可以迁移到OpenAIBaseClient
|
// NOTE: 这个也许可以迁移到OpenAIBaseClient
|
||||||
protected getServiceTier(model: Model) {
|
protected getServiceTier(model: Model) {
|
||||||
if (
|
const serviceTierSetting = this.provider.serviceTier
|
||||||
!isSupportServiceTierProviders(this.provider) ||
|
|
||||||
!isOpenAIModel(model) ||
|
if (!isSupportServiceTierProviders(this.provider) || !isOpenAIModel(model) || !serviceTierSetting) {
|
||||||
model.provider === 'github' ||
|
|
||||||
model.provider === 'copilot'
|
|
||||||
) {
|
|
||||||
return undefined
|
return undefined
|
||||||
}
|
}
|
||||||
|
|
||||||
let serviceTier: OpenAIServiceTier = OpenAIServiceTiers.AUTO
|
// 处理不同供应商需要 fallback 到默认值的情况
|
||||||
const serviceTierSetting = this.provider.serviceTier
|
if (this.provider.id === SystemProviderIds.groq) {
|
||||||
|
if (
|
||||||
if (serviceTierSetting === OpenAIServiceTiers.FLEX) {
|
!isGroqServiceTier(serviceTierSetting) ||
|
||||||
if (isSupportFlexServiceTierModel(model)) {
|
(serviceTierSetting === GroqServiceTiers.flex && !isSupportFlexServiceTierModel(model))
|
||||||
serviceTier = OpenAIServiceTiers.FLEX
|
) {
|
||||||
} else {
|
return GroqServiceTiers.on_demand
|
||||||
serviceTier = OpenAIServiceTiers.AUTO
|
|
||||||
}
|
}
|
||||||
} else if (serviceTierSetting) {
|
|
||||||
serviceTier = serviceTierSetting
|
|
||||||
} else {
|
} else {
|
||||||
// undefined 时使用默认值 auto
|
// 其他 OpenAI 供应商,假设他们的服务层级设置和 OpenAI 完全相同
|
||||||
|
if (
|
||||||
|
!isOpenAIServiceTier(serviceTierSetting) ||
|
||||||
|
(serviceTierSetting === OpenAIServiceTiers.flex && !isSupportFlexServiceTierModel(model))
|
||||||
|
) {
|
||||||
|
return OpenAIServiceTiers.auto
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return serviceTier
|
return serviceTierSetting
|
||||||
}
|
}
|
||||||
|
|
||||||
protected getTimeout(model: Model) {
|
protected getTimeout(model: Model) {
|
||||||
|
|||||||
@ -258,7 +258,7 @@ export const SYSTEM_PROVIDERS_CONFIG: Record<SystemProviderId, SystemProvider> =
|
|||||||
models: SYSTEM_MODELS.openai,
|
models: SYSTEM_MODELS.openai,
|
||||||
isSystem: true,
|
isSystem: true,
|
||||||
enabled: false,
|
enabled: false,
|
||||||
serviceTier: OpenAIServiceTiers.AUTO
|
serviceTier: OpenAIServiceTiers.auto
|
||||||
},
|
},
|
||||||
'azure-openai': {
|
'azure-openai': {
|
||||||
id: 'azure-openai',
|
id: 'azure-openai',
|
||||||
|
|||||||
@ -184,7 +184,7 @@ export type Provider = {
|
|||||||
isNotSupportDeveloperRole?: boolean
|
isNotSupportDeveloperRole?: boolean
|
||||||
/** 是否不支持 service_tier 参数. Only for OpenAI Models. */
|
/** 是否不支持 service_tier 参数. Only for OpenAI Models. */
|
||||||
isNotSupportServiceTier?: boolean
|
isNotSupportServiceTier?: boolean
|
||||||
serviceTier?: OpenAIServiceTier
|
serviceTier?: ServiceTier
|
||||||
|
|
||||||
isVertex?: boolean
|
isVertex?: boolean
|
||||||
notes?: string
|
notes?: string
|
||||||
@ -905,10 +905,10 @@ export interface StoreSyncAction {
|
|||||||
export type OpenAISummaryText = 'auto' | 'concise' | 'detailed' | 'off'
|
export type OpenAISummaryText = 'auto' | 'concise' | 'detailed' | 'off'
|
||||||
|
|
||||||
export const OpenAIServiceTiers = {
|
export const OpenAIServiceTiers = {
|
||||||
AUTO: 'auto',
|
auto: 'auto',
|
||||||
DEFAULT: 'default',
|
default: 'default',
|
||||||
FLEX: 'flex',
|
flex: 'flex',
|
||||||
PRIORITY: 'priority'
|
priority: 'priority'
|
||||||
} as const
|
} as const
|
||||||
|
|
||||||
export type OpenAIServiceTier = (typeof OpenAIServiceTiers)[keyof typeof OpenAIServiceTiers]
|
export type OpenAIServiceTier = (typeof OpenAIServiceTiers)[keyof typeof OpenAIServiceTiers]
|
||||||
@ -919,6 +919,30 @@ export function isOpenAIServiceTier(tier: string): tier is OpenAIServiceTier {
|
|||||||
return openAIServiceTiersValues.some((value) => value === tier)
|
return openAIServiceTiersValues.some((value) => value === tier)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export const GroqServiceTiers = {
|
||||||
|
auto: 'auto',
|
||||||
|
on_demand: 'on_demand',
|
||||||
|
flex: 'flex',
|
||||||
|
performance: 'performance'
|
||||||
|
} as const
|
||||||
|
|
||||||
|
// 从 GroqServiceTiers 对象中提取类型
|
||||||
|
export type GroqServiceTier = (typeof GroqServiceTiers)[keyof typeof GroqServiceTiers]
|
||||||
|
|
||||||
|
// 缓存 Groq 服务等级值数组以提升类型守卫性能
|
||||||
|
const groqServiceTiersValues = Object.values(GroqServiceTiers)
|
||||||
|
|
||||||
|
// Groq 服务等级类型守卫
|
||||||
|
export function isGroqServiceTier(tier: string): tier is GroqServiceTier {
|
||||||
|
return groqServiceTiersValues.some((value) => value === tier)
|
||||||
|
}
|
||||||
|
|
||||||
|
export type ServiceTier = OpenAIServiceTier | GroqServiceTier
|
||||||
|
|
||||||
|
export function isServiceTier(tier: string): tier is ServiceTier {
|
||||||
|
return isGroqServiceTier(tier) || isOpenAIServiceTier(tier)
|
||||||
|
}
|
||||||
|
|
||||||
export type S3Config = {
|
export type S3Config = {
|
||||||
endpoint: string
|
endpoint: string
|
||||||
region: string
|
region: string
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user