๐ keypool.ts โข 4961 bytes
import { t } from '../i18n.js'
import {
loadChatKeyPool, addChatKey, removeChatKey,
loadEmbeddingKeyPool, addEmbeddingKey, removeEmbeddingKey
} from '../apikeys.js'
/** ๅค็ /keypool ๅฝไปค */
export async function handleKeypoolCommand(
args: string[],
color: any,
MUTED: string,
SUCCESS: string,
ERROR: string,
WARN: string,
askPassword: (prompt: string) => Promise<string>,
askQuestion: (prompt: string) => Promise<string>
): Promise<void> {
console.log('')
console.log(` ๐ ${t('keypool.title')}`)
console.log(` ${MUTED}โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ${color.reset}`)
// /keypool list
if (args[0] === 'list' || args.length === 0) {
const chatPool = loadChatKeyPool()
console.log(` Chat API Keys:`)
chatPool.forEach((e, i) => {
console.log(` [${i + 1}] ${e.name} ${e.model} ${e.baseUrl}`)
})
if (chatPool.length === 0) console.log(` (${t('keypool.no_keys')})`)
const embedPool = loadEmbeddingKeyPool()
console.log(` Embedding API Keys:`)
embedPool.forEach((e, i) => {
console.log(` [${i + 1}] ${e.name} ${e.model} ${e.baseUrl}`)
})
if (embedPool.length === 0) console.log(` (${t('keypool.no_keys')})`)
console.log('')
console.log(` ${MUTED}${t('keypool.add_hint')}${color.reset}`)
console.log(` ${MUTED}${t('keypool.remove_hint')}${color.reset}`)
console.log('')
return
}
// /keypool add chat <name> <model> <baseUrl>
if (args[0] === 'add' && args[1] === 'chat') {
const parts = args.slice(2)
if (parts.length < 3) {
console.log('Usage: /keypool add chat <name> <model> <baseUrl>')
console.log('')
return
}
const [name, model, baseUrl] = parts
const apiKey = await askPassword('Enter API Key: ')
if (!apiKey) { console.log('Cancelled\n'); return }
try {
addChatKey(name, model, baseUrl, apiKey)
console.log(` ${SUCCESS}โ ${t('keypool.chat_added')}${color.reset}`)
console.log(` ${MUTED} ${t('keypool.details')}: ${baseUrl}${color.reset}`)
console.log('')
} catch (e: any) { console.log(` ${ERROR}Error: ${e.message}${color.reset}\n`) }
return
}
// /keypool add embed <name> <model> <baseUrl>
if (args[0] === 'add' && (args[1] === 'embed' || args[1] === 'embedding')) {
const parts = args.slice(2)
if (parts.length < 3) {
console.log('Usage: /keypool add embed <name> <model> <baseUrl>')
console.log('')
return
}
const [name, model, baseUrl] = parts
const apiKey = await askPassword('Enter API Key: ')
if (!apiKey) { console.log('Cancelled\n'); return }
try {
addEmbeddingKey(name, model, baseUrl, apiKey)
console.log(` ${SUCCESS}โ ${t('keypool.embed_added')}${color.reset}`)
console.log(` ${MUTED} ${t('keypool.details')}: ${baseUrl}${color.reset}`)
console.log('')
} catch (e: any) { console.log(` ${ERROR}Error: ${e.message}${color.reset}\n`) }
return
}
// /keypool remove chat <name>
if (args[0] === 'remove' && args[1] === 'chat') {
const name = args.slice(2).join(' ')
if (!name) { console.log('Usage: /keypool remove chat <name>\n'); return }
const confirm = await askQuestion(` ${WARN}${t('model.confirm_delete', {name: `Chat ${name}`})} ${color.reset}`)
if (confirm.toLowerCase() !== 'y') { console.log(` ${MUTED}${t('model.cancelled')}${color.reset}\n`); return }
if (removeChatKey(name)) {
console.log(` ${SUCCESS}โ ${t('keypool.chat_deleted')}${color.reset}\n`)
} else {
console.log(` ${ERROR}โ ${t('keypool.not_found')}${color.reset}\n`)
}
return
}
// /keypool remove embed <name>
if (args[0] === 'remove' && (args[1] === 'embed' || args[1] === 'embedding')) {
const name = args.slice(2).join(' ')
if (!name) { console.log('Usage: /keypool remove embed <name>\n'); return }
const confirm = await askQuestion(` ${WARN}${t('model.confirm_delete', {name: `Embedding ${name}`})} ${color.reset}`)
if (confirm.toLowerCase() !== 'y') { console.log(` ${MUTED}${t('model.cancelled')}${color.reset}\n`); return }
if (removeEmbeddingKey(name)) {
console.log(` ${SUCCESS}โ ${t('keypool.embed_deleted')}${color.reset}\n`)
} else {
console.log(` ${ERROR}โ ${t('keypool.not_found')}${color.reset}\n`)
}
return
}
// ๅธฎๅฉ
console.log('Usage:')
console.log(` /keypool list ${t('keypool.help_list')}`)
console.log(` /keypool add chat <name> <model> <url> ${t('keypool.help_add_chat')}`)
console.log(` /keypool add embed <name> <model> <url> ${t('keypool.help_add_embed')}`)
console.log(` /keypool remove chat <name> ${t('keypool.help_del_chat')}`)
console.log(` /keypool remove embed <name> ${t('keypool.help_del_embed')}`)
console.log('')
}