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