mirror of
https://github.com/wassname/chatGPTBox.git
synced 2026-06-27 18:04:15 +08:00
WIP, custom API Modes
This commit is contained in:
+58
-86
@@ -16,24 +16,23 @@ import { generateAnswersWithClaudeApi } from '../services/apis/claude-api.mjs'
|
||||
import { generateAnswersWithChatGLMApi } from '../services/apis/chatglm-api.mjs'
|
||||
import { generateAnswersWithWaylaidwandererApi } from '../services/apis/waylaidwanderer-api.mjs'
|
||||
import {
|
||||
azureOpenAiApiModelKeys,
|
||||
claudeApiModelKeys,
|
||||
chatglmApiModelKeys,
|
||||
bardWebModelKeys,
|
||||
bingWebModelKeys,
|
||||
chatgptApiModelKeys,
|
||||
chatgptWebModelKeys,
|
||||
claudeWebModelKeys,
|
||||
moonshotWebModelKeys,
|
||||
customApiModelKeys,
|
||||
ollamaApiModelKeys,
|
||||
defaultConfig,
|
||||
getUserConfig,
|
||||
githubThirdPartyApiModelKeys,
|
||||
gptApiModelKeys,
|
||||
poeWebModelKeys,
|
||||
setUserConfig,
|
||||
moonshotApiModelKeys,
|
||||
isUsingChatgptWebModel,
|
||||
isUsingBingWebModel,
|
||||
isUsingGptCompletionApiModel,
|
||||
isUsingChatgptApiModel,
|
||||
isUsingCustomModel,
|
||||
isUsingOllamaApiModel,
|
||||
isUsingAzureOpenAiApiModel,
|
||||
isUsingClaudeApiModel,
|
||||
isUsingChatGLMApiModel,
|
||||
isUsingGithubThirdPartyApiModel,
|
||||
isUsingGeminiWebModel,
|
||||
isUsingClaudeWebModel,
|
||||
isUsingMoonshotApiModel,
|
||||
isUsingMoonshotWebModel,
|
||||
} from '../config/index.mjs'
|
||||
import '../_locales/i18n'
|
||||
import { openUrl } from '../utils/open-url'
|
||||
@@ -50,6 +49,7 @@ import { generateAnswersWithBardWebApi } from '../services/apis/bard-web.mjs'
|
||||
import { generateAnswersWithClaudeWebApi } from '../services/apis/claude-web.mjs'
|
||||
import { generateAnswersWithMoonshotCompletionApi } from '../services/apis/moonshot-api.mjs'
|
||||
import { generateAnswersWithMoonshotWebApi } from '../services/apis/moonshot-web.mjs'
|
||||
import { isUsingModelName } from '../utils/model-name-convert.mjs'
|
||||
|
||||
function setPortProxy(port, proxyTabId) {
|
||||
port.proxy = Browser.tabs.connect(proxyTabId)
|
||||
@@ -77,7 +77,26 @@ function setPortProxy(port, proxyTabId) {
|
||||
async function executeApi(session, port, config) {
|
||||
console.debug('modelName', session.modelName)
|
||||
console.debug('apiMode', session.apiMode)
|
||||
if (chatgptWebModelKeys.includes(session.modelName)) {
|
||||
if (isUsingCustomModel(session)) {
|
||||
if (!session.apiMode)
|
||||
await generateAnswersWithCustomApi(
|
||||
port,
|
||||
session.question,
|
||||
session,
|
||||
config.customModelApiUrl,
|
||||
config.customApiKey,
|
||||
config.customModelName,
|
||||
)
|
||||
else
|
||||
await generateAnswersWithCustomApi(
|
||||
port,
|
||||
session.question,
|
||||
session,
|
||||
session.apiMode.customUrl,
|
||||
session.apiMode.apiKey,
|
||||
session.apiMode.customName,
|
||||
)
|
||||
} else if (isUsingChatgptWebModel(session)) {
|
||||
let tabId
|
||||
if (
|
||||
config.chatgptTabId &&
|
||||
@@ -95,87 +114,40 @@ async function executeApi(session, port, config) {
|
||||
const accessToken = await getChatGptAccessToken()
|
||||
await generateAnswersWithChatgptWebApi(port, session.question, session, accessToken)
|
||||
}
|
||||
} else if (
|
||||
// `.some` for multi mode models. e.g. bingFree4-balanced
|
||||
bingWebModelKeys.some((n) => session.modelName.includes(n))
|
||||
) {
|
||||
} else if (isUsingClaudeWebModel(session)) {
|
||||
const sessionKey = await getClaudeSessionKey()
|
||||
await generateAnswersWithClaudeWebApi(port, session.question, session, sessionKey)
|
||||
} else if (isUsingMoonshotWebModel(session)) {
|
||||
await generateAnswersWithMoonshotWebApi(port, session.question, session, config)
|
||||
} else if (isUsingBingWebModel(session)) {
|
||||
const accessToken = await getBingAccessToken()
|
||||
if (session.modelName.includes('bingFreeSydney'))
|
||||
if (isUsingModelName('bingFreeSydney', session))
|
||||
await generateAnswersWithBingWebApi(port, session.question, session, accessToken, true)
|
||||
else await generateAnswersWithBingWebApi(port, session.question, session, accessToken)
|
||||
} else if (gptApiModelKeys.includes(session.modelName)) {
|
||||
await generateAnswersWithGptCompletionApi(
|
||||
port,
|
||||
session.question,
|
||||
session,
|
||||
config.apiKey,
|
||||
session.modelName,
|
||||
)
|
||||
} else if (chatgptApiModelKeys.includes(session.modelName)) {
|
||||
await generateAnswersWithChatgptApi(
|
||||
port,
|
||||
session.question,
|
||||
session,
|
||||
config.apiKey,
|
||||
session.modelName,
|
||||
)
|
||||
} else if (customApiModelKeys.includes(session.modelName)) {
|
||||
await generateAnswersWithCustomApi(
|
||||
port,
|
||||
session.question,
|
||||
session,
|
||||
config.customApiKey,
|
||||
config.customModelName,
|
||||
)
|
||||
} else if (ollamaApiModelKeys.includes(session.modelName)) {
|
||||
await generateAnswersWithOllamaApi(port, session.question, session)
|
||||
} else if (azureOpenAiApiModelKeys.includes(session.modelName)) {
|
||||
await generateAnswersWithAzureOpenaiApi(port, session.question, session)
|
||||
} else if (claudeApiModelKeys.includes(session.modelName)) {
|
||||
await generateAnswersWithClaudeApi(port, session.question, session)
|
||||
} else if (chatglmApiModelKeys.includes(session.modelName)) {
|
||||
await generateAnswersWithChatGLMApi(port, session.question, session, session.modelName)
|
||||
} else if (githubThirdPartyApiModelKeys.includes(session.modelName)) {
|
||||
await generateAnswersWithWaylaidwandererApi(port, session.question, session)
|
||||
} else if (poeWebModelKeys.includes(session.modelName)) {
|
||||
throw new Error('Due to the new verification, Poe Web API is currently not supported.')
|
||||
// if (session.modelName === 'poeAiWebCustom')
|
||||
// await generateAnswersWithPoeWebApi(port, session.question, session, config.poeCustomBotName)
|
||||
// else
|
||||
// await generateAnswersWithPoeWebApi(
|
||||
// port,
|
||||
// session.question,
|
||||
// session,
|
||||
// Models[session.modelName].value,
|
||||
// )
|
||||
} else if (bardWebModelKeys.includes(session.modelName)) {
|
||||
} else if (isUsingGeminiWebModel(session)) {
|
||||
const cookies = await getBardCookies()
|
||||
await generateAnswersWithBardWebApi(port, session.question, session, cookies)
|
||||
} else if (claudeWebModelKeys.includes(session.modelName)) {
|
||||
const sessionKey = await getClaudeSessionKey()
|
||||
await generateAnswersWithClaudeWebApi(
|
||||
port,
|
||||
session.question,
|
||||
session,
|
||||
sessionKey,
|
||||
session.modelName,
|
||||
)
|
||||
} else if (moonshotApiModelKeys.includes(session.modelName)) {
|
||||
} else if (isUsingChatgptApiModel(session)) {
|
||||
await generateAnswersWithChatgptApi(port, session.question, session, config.apiKey)
|
||||
} else if (isUsingClaudeApiModel(session)) {
|
||||
await generateAnswersWithClaudeApi(port, session.question, session)
|
||||
} else if (isUsingMoonshotApiModel(session)) {
|
||||
await generateAnswersWithMoonshotCompletionApi(
|
||||
port,
|
||||
session.question,
|
||||
session,
|
||||
config.moonshotApiKey,
|
||||
session.modelName,
|
||||
)
|
||||
} else if (moonshotWebModelKeys.includes(session.modelName)) {
|
||||
await generateAnswersWithMoonshotWebApi(
|
||||
port,
|
||||
session.question,
|
||||
session,
|
||||
config,
|
||||
session.modelName,
|
||||
)
|
||||
} else if (isUsingChatGLMApiModel(session)) {
|
||||
await generateAnswersWithChatGLMApi(port, session.question, session)
|
||||
} else if (isUsingOllamaApiModel(session)) {
|
||||
await generateAnswersWithOllamaApi(port, session.question, session)
|
||||
} else if (isUsingAzureOpenAiApiModel(session)) {
|
||||
await generateAnswersWithAzureOpenaiApi(port, session.question, session)
|
||||
} else if (isUsingGptCompletionApiModel(session)) {
|
||||
await generateAnswersWithGptCompletionApi(port, session.question, session, config.apiKey)
|
||||
} else if (isUsingGithubThirdPartyApiModel(session)) {
|
||||
await generateAnswersWithWaylaidwandererApi(port, session.question, session)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -3,6 +3,7 @@ import { getChatSystemPromptBase, pushRecord, setAbortController } from './share
|
||||
import { getConversationPairs } from '../../utils/get-conversation-pairs.mjs'
|
||||
import { fetchSSE } from '../../utils/fetch-sse.mjs'
|
||||
import { isEmpty } from 'lodash-es'
|
||||
import { getModelValue } from '../../utils/model-name-convert.mjs'
|
||||
|
||||
/**
|
||||
* @param {Runtime.Port} port
|
||||
@@ -12,6 +13,8 @@ import { isEmpty } from 'lodash-es'
|
||||
export async function generateAnswersWithAzureOpenaiApi(port, question, session) {
|
||||
const { controller, messageListener, disconnectListener } = setAbortController(port)
|
||||
const config = await getUserConfig()
|
||||
let model = getModelValue(session)
|
||||
if (!model) model = config.azureDeploymentName
|
||||
|
||||
const prompt = getConversationPairs(
|
||||
session.conversationRecords.slice(-config.maxConversationContextLength),
|
||||
@@ -22,9 +25,10 @@ export async function generateAnswersWithAzureOpenaiApi(port, question, session)
|
||||
|
||||
let answer = ''
|
||||
await fetchSSE(
|
||||
`${config.azureEndpoint.replace(/\/$/, '')}/openai/deployments/${
|
||||
config.azureDeploymentName
|
||||
}/chat/completions?api-version=2024-02-01`,
|
||||
`${config.azureEndpoint.replace(
|
||||
/\/$/,
|
||||
'',
|
||||
)}/openai/deployments/${model}/chat/completions?api-version=2024-02-01`,
|
||||
{
|
||||
method: 'POST',
|
||||
signal: controller.signal,
|
||||
|
||||
@@ -6,9 +6,8 @@ import { generateAnswersWithChatgptApiCompat } from './openai-api.mjs'
|
||||
* @param {Runtime.Port} port
|
||||
* @param {string} question
|
||||
* @param {Session} session
|
||||
* @param {string} modelName
|
||||
*/
|
||||
export async function generateAnswersWithChatGLMApi(port, question, session, modelName) {
|
||||
export async function generateAnswersWithChatGLMApi(port, question, session) {
|
||||
const baseUrl = 'https://open.bigmodel.cn/api/paas/v4'
|
||||
const config = await getUserConfig()
|
||||
return generateAnswersWithChatgptApiCompat(
|
||||
@@ -17,6 +16,5 @@ export async function generateAnswersWithChatGLMApi(port, question, session, mod
|
||||
question,
|
||||
session,
|
||||
getToken(config.chatglmApiKey),
|
||||
modelName,
|
||||
)
|
||||
}
|
||||
|
||||
@@ -15,10 +15,18 @@ import { pushRecord, setAbortController } from './shared.mjs'
|
||||
* @param {Browser.Runtime.Port} port
|
||||
* @param {string} question
|
||||
* @param {Session} session
|
||||
* @param {string} apiUrl
|
||||
* @param {string} apiKey
|
||||
* @param {string} modelName
|
||||
*/
|
||||
export async function generateAnswersWithCustomApi(port, question, session, apiKey, modelName) {
|
||||
export async function generateAnswersWithCustomApi(
|
||||
port,
|
||||
question,
|
||||
session,
|
||||
apiUrl,
|
||||
apiKey,
|
||||
modelName,
|
||||
) {
|
||||
const { controller, messageListener, disconnectListener } = setAbortController(port)
|
||||
|
||||
const config = await getUserConfig()
|
||||
@@ -28,7 +36,6 @@ export async function generateAnswersWithCustomApi(port, question, session, apiK
|
||||
)
|
||||
// prompt.unshift({ role: 'system', content: await getCustomApiPromptBase() })
|
||||
prompt.push({ role: 'user', content: question })
|
||||
const apiUrl = config.customModelApiUrl
|
||||
|
||||
let answer = ''
|
||||
let finished = false
|
||||
|
||||
@@ -5,15 +5,8 @@ import { generateAnswersWithChatgptApiCompat } from './openai-api.mjs'
|
||||
* @param {string} question
|
||||
* @param {Session} session
|
||||
* @param {string} apiKey
|
||||
* @param {string} modelName
|
||||
*/
|
||||
export async function generateAnswersWithMoonshotCompletionApi(
|
||||
port,
|
||||
question,
|
||||
session,
|
||||
apiKey,
|
||||
modelName,
|
||||
) {
|
||||
export async function generateAnswersWithMoonshotCompletionApi(port, question, session, apiKey) {
|
||||
const baseUrl = 'https://api.moonshot.cn/v1'
|
||||
return generateAnswersWithChatgptApiCompat(baseUrl, port, question, session, apiKey, modelName)
|
||||
return generateAnswersWithChatgptApiCompat(baseUrl, port, question, session, apiKey)
|
||||
}
|
||||
|
||||
@@ -14,10 +14,6 @@ export async function generateAnswersWithOllamaApi(port, question, session) {
|
||||
question,
|
||||
session,
|
||||
config.ollamaApiKey,
|
||||
'ollamaModel',
|
||||
{
|
||||
model: config.ollamaModelName,
|
||||
},
|
||||
).then(() =>
|
||||
fetch(config.ollamaEndpoint + '/api/generate', {
|
||||
method: 'POST',
|
||||
|
||||
@@ -99,9 +99,8 @@ export async function generateAnswersWithGptCompletionApi(port, question, sessio
|
||||
* @param {string} question
|
||||
* @param {Session} session
|
||||
* @param {string} apiKey
|
||||
* @param {string} modelName
|
||||
*/
|
||||
export async function generateAnswersWithChatgptApi(port, question, session, apiKey, modelName) {
|
||||
export async function generateAnswersWithChatgptApi(port, question, session, apiKey) {
|
||||
const config = await getUserConfig()
|
||||
return generateAnswersWithChatgptApiCompat(
|
||||
config.customOpenAiApiUrl + '/v1',
|
||||
@@ -109,7 +108,6 @@ export async function generateAnswersWithChatgptApi(port, question, session, api
|
||||
question,
|
||||
session,
|
||||
apiKey,
|
||||
modelName,
|
||||
)
|
||||
}
|
||||
|
||||
@@ -119,7 +117,6 @@ export async function generateAnswersWithChatgptApiCompat(
|
||||
question,
|
||||
session,
|
||||
apiKey,
|
||||
modelName,
|
||||
extraBody = {},
|
||||
) {
|
||||
const { controller, messageListener, disconnectListener } = setAbortController(port)
|
||||
|
||||
Reference in New Issue
Block a user