mirror of
https://github.com/CherryHQ/cherry-studio.git
synced 2025-12-27 21:01:32 +08:00
feat(providerConfig): implement API key rotation logic for providers
- Added a new function to handle rotating API keys for providers, reusing legacy multi-key logic. - Updated the providerToAiSdkConfig function to utilize the new key rotation mechanism. - Enhanced TranslateService imports for better organization.
This commit is contained in:
parent
e39e349dd3
commit
e74c5a8ba3
@ -23,6 +23,32 @@ import { getAiSdkProviderId } from './factory'
|
||||
|
||||
const logger = loggerService.withContext('ProviderConfigProcessor')
|
||||
|
||||
/**
|
||||
* 获取轮询的API key
|
||||
* 复用legacy架构的多key轮询逻辑
|
||||
*/
|
||||
function getRotatedApiKey(provider: Provider): string {
|
||||
const keys = provider.apiKey.split(',').map((key) => key.trim())
|
||||
const keyName = `provider:${provider.id}:last_used_key`
|
||||
|
||||
if (keys.length === 1) {
|
||||
return keys[0]
|
||||
}
|
||||
|
||||
const lastUsedKey = window.keyv.get(keyName)
|
||||
if (!lastUsedKey) {
|
||||
window.keyv.set(keyName, keys[0])
|
||||
return keys[0]
|
||||
}
|
||||
|
||||
const currentIndex = keys.indexOf(lastUsedKey)
|
||||
const nextIndex = (currentIndex + 1) % keys.length
|
||||
const nextKey = keys[nextIndex]
|
||||
window.keyv.set(keyName, nextKey)
|
||||
|
||||
return nextKey
|
||||
}
|
||||
|
||||
/**
|
||||
* 处理特殊provider的转换逻辑
|
||||
*/
|
||||
@ -88,7 +114,7 @@ export function providerToAiSdkConfig(
|
||||
// 构建基础配置
|
||||
const baseConfig = {
|
||||
baseURL: actualProvider.apiHost,
|
||||
apiKey: actualProvider.apiKey
|
||||
apiKey: getRotatedApiKey(actualProvider)
|
||||
}
|
||||
// 处理OpenAI模式
|
||||
const extraOptions: any = {}
|
||||
|
||||
@ -1,13 +1,19 @@
|
||||
import { loggerService } from '@logger'
|
||||
import { db } from '@renderer/databases'
|
||||
import { CustomTranslateLanguage, TranslateHistory, TranslateLanguage, TranslateLanguageCode } from '@renderer/types'
|
||||
import {
|
||||
CustomTranslateLanguage,
|
||||
FetchChatCompletionOptions,
|
||||
TranslateHistory,
|
||||
TranslateLanguage,
|
||||
TranslateLanguageCode
|
||||
} from '@renderer/types'
|
||||
import { Chunk, ChunkType } from '@renderer/types/chunk'
|
||||
import { uuid } from '@renderer/utils'
|
||||
import { readyToAbort } from '@renderer/utils/abortController'
|
||||
import { formatErrorMessage, isAbortError } from '@renderer/utils/error'
|
||||
import { t } from 'i18next'
|
||||
|
||||
import { fetchChatCompletion, FetchChatCompletionOptions } from './ApiService'
|
||||
import { fetchChatCompletion } from './ApiService'
|
||||
import { getDefaultTranslateAssistant } from './AssistantService'
|
||||
|
||||
const logger = loggerService.withContext('TranslateService')
|
||||
|
||||
Loading…
Reference in New Issue
Block a user