mirror of
https://github.com/ikechan8370/chatgpt-plugin.git
synced 2025-12-16 13:27:08 +00:00
feat: simple random load balance for claude api key
This commit is contained in:
parent
7d83c34e98
commit
3b5a26ce62
2 changed files with 54 additions and 15 deletions
|
|
@ -46,7 +46,10 @@ const BASEURL = 'https://api.anthropic.com'
|
|||
* input_tokens: number,
|
||||
* output_tokens: number,
|
||||
* }>} usage
|
||||
*
|
||||
* @property {{
|
||||
* type: string,
|
||||
* message: string,
|
||||
* }} error
|
||||
* Claude响应的基本格式
|
||||
*/
|
||||
|
||||
|
|
@ -172,6 +175,10 @@ export class ClaudeAPIClient extends BaseClient {
|
|||
if (this.debug) {
|
||||
console.log(JSON.stringify(response))
|
||||
}
|
||||
if (response.type === 'error') {
|
||||
logger.error(response.error.message)
|
||||
throw new Error(response.error.type)
|
||||
}
|
||||
await this.upsertMessage(thisMessage)
|
||||
const respMessage = Object.assign(response, {
|
||||
id: idModel,
|
||||
|
|
|
|||
|
|
@ -424,20 +424,52 @@ class Core {
|
|||
return await this.chatGPTApi.sendMessage(prompt, conversation)
|
||||
} else if (use === 'claude') {
|
||||
// slack已经不可用,移除
|
||||
const client = new ClaudeAPIClient({
|
||||
key: Config.claudeApiKey,
|
||||
model: Config.claudeApiModel || 'claude-3-sonnet-20240229',
|
||||
debug: true,
|
||||
baseUrl: Config.claudeApiBaseUrl
|
||||
// temperature: Config.claudeApiTemperature || 0.5
|
||||
})
|
||||
let rsp = await client.sendMessage(prompt, {
|
||||
stream: false,
|
||||
parentMessageId: conversation.parentMessageId,
|
||||
conversationId: conversation.conversationId,
|
||||
system: Config.claudeSystemPrompt
|
||||
})
|
||||
return rsp
|
||||
let keys = Config.claudeApiKey?.split(/[,;]/).map(key => key.trim()).filter(key => key)
|
||||
let choiceIndex = Math.floor(Math.random() * keys.length)
|
||||
let key = keys[choiceIndex]
|
||||
logger.info(`使用API Key:${key}`)
|
||||
while (keys.length >= 0) {
|
||||
let errorMessage = ''
|
||||
const client = new ClaudeAPIClient({
|
||||
key,
|
||||
model: Config.claudeApiModel || 'claude-3-sonnet-20240229',
|
||||
debug: true,
|
||||
baseUrl: Config.claudeApiBaseUrl
|
||||
// temperature: Config.claudeApiTemperature || 0.5
|
||||
})
|
||||
try {
|
||||
let rsp = await client.sendMessage(prompt, {
|
||||
stream: false,
|
||||
parentMessageId: conversation.parentMessageId,
|
||||
conversationId: conversation.conversationId,
|
||||
system: Config.claudeSystemPrompt
|
||||
})
|
||||
return rsp
|
||||
} catch (err) {
|
||||
errorMessage = err.message
|
||||
switch (err.message) {
|
||||
case 'rate_limit_error': {
|
||||
// api没钱了或者当月/日/时/分额度耗尽
|
||||
// throw new Error('claude API额度耗尽或触发速率限制')
|
||||
break
|
||||
}
|
||||
case 'authentication_error': {
|
||||
// 无效的key
|
||||
// throw new Error('claude API key无效')
|
||||
break
|
||||
}
|
||||
default:
|
||||
}
|
||||
logger.warn(`claude api 错误:[${key}] ${errorMessage}`)
|
||||
}
|
||||
if (keys.length === 0) {
|
||||
throw new Error(errorMessage)
|
||||
}
|
||||
keys.splice(choiceIndex, 1)
|
||||
choiceIndex = Math.floor(Math.random() * keys.length)
|
||||
key = keys[choiceIndex]
|
||||
logger.info(`使用API Key:${key}`)
|
||||
}
|
||||
} else if (use === 'claude2') {
|
||||
let { conversationId } = conversation
|
||||
let client = new ClaudeAIClient({
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue