Skip to content

Commit 1d8bcce

Browse files
committed
WIP, custom API Modes
1 parent 3d89ddd commit 1d8bcce

File tree

7 files changed

+78
-111
lines changed

7 files changed

+78
-111
lines changed

src/background/index.mjs

Lines changed: 58 additions & 86 deletions
Original file line numberDiff line numberDiff line change
@@ -16,24 +16,23 @@ import { generateAnswersWithClaudeApi } from '../services/apis/claude-api.mjs'
1616
import { generateAnswersWithChatGLMApi } from '../services/apis/chatglm-api.mjs'
1717
import { generateAnswersWithWaylaidwandererApi } from '../services/apis/waylaidwanderer-api.mjs'
1818
import {
19-
azureOpenAiApiModelKeys,
20-
claudeApiModelKeys,
21-
chatglmApiModelKeys,
22-
bardWebModelKeys,
23-
bingWebModelKeys,
24-
chatgptApiModelKeys,
25-
chatgptWebModelKeys,
26-
claudeWebModelKeys,
27-
moonshotWebModelKeys,
28-
customApiModelKeys,
29-
ollamaApiModelKeys,
3019
defaultConfig,
3120
getUserConfig,
32-
githubThirdPartyApiModelKeys,
33-
gptApiModelKeys,
34-
poeWebModelKeys,
3521
setUserConfig,
36-
moonshotApiModelKeys,
22+
isUsingChatgptWebModel,
23+
isUsingBingWebModel,
24+
isUsingGptCompletionApiModel,
25+
isUsingChatgptApiModel,
26+
isUsingCustomModel,
27+
isUsingOllamaApiModel,
28+
isUsingAzureOpenAiApiModel,
29+
isUsingClaudeApiModel,
30+
isUsingChatGLMApiModel,
31+
isUsingGithubThirdPartyApiModel,
32+
isUsingGeminiWebModel,
33+
isUsingClaudeWebModel,
34+
isUsingMoonshotApiModel,
35+
isUsingMoonshotWebModel,
3736
} from '../config/index.mjs'
3837
import '../_locales/i18n'
3938
import { openUrl } from '../utils/open-url'
@@ -50,6 +49,7 @@ import { generateAnswersWithBardWebApi } from '../services/apis/bard-web.mjs'
5049
import { generateAnswersWithClaudeWebApi } from '../services/apis/claude-web.mjs'
5150
import { generateAnswersWithMoonshotCompletionApi } from '../services/apis/moonshot-api.mjs'
5251
import { generateAnswersWithMoonshotWebApi } from '../services/apis/moonshot-web.mjs'
52+
import { isUsingModelName } from '../utils/model-name-convert.mjs'
5353

5454
function setPortProxy(port, proxyTabId) {
5555
port.proxy = Browser.tabs.connect(proxyTabId)
@@ -77,7 +77,26 @@ function setPortProxy(port, proxyTabId) {
7777
async function executeApi(session, port, config) {
7878
console.debug('modelName', session.modelName)
7979
console.debug('apiMode', session.apiMode)
80-
if (chatgptWebModelKeys.includes(session.modelName)) {
80+
if (isUsingCustomModel(session)) {
81+
if (!session.apiMode)
82+
await generateAnswersWithCustomApi(
83+
port,
84+
session.question,
85+
session,
86+
config.customModelApiUrl,
87+
config.customApiKey,
88+
config.customModelName,
89+
)
90+
else
91+
await generateAnswersWithCustomApi(
92+
port,
93+
session.question,
94+
session,
95+
session.apiMode.customUrl,
96+
session.apiMode.apiKey,
97+
session.apiMode.customName,
98+
)
99+
} else if (isUsingChatgptWebModel(session)) {
81100
let tabId
82101
if (
83102
config.chatgptTabId &&
@@ -95,87 +114,40 @@ async function executeApi(session, port, config) {
95114
const accessToken = await getChatGptAccessToken()
96115
await generateAnswersWithChatgptWebApi(port, session.question, session, accessToken)
97116
}
98-
} else if (
99-
// `.some` for multi mode models. e.g. bingFree4-balanced
100-
bingWebModelKeys.some((n) => session.modelName.includes(n))
101-
) {
117+
} else if (isUsingClaudeWebModel(session)) {
118+
const sessionKey = await getClaudeSessionKey()
119+
await generateAnswersWithClaudeWebApi(port, session.question, session, sessionKey)
120+
} else if (isUsingMoonshotWebModel(session)) {
121+
await generateAnswersWithMoonshotWebApi(port, session.question, session, config)
122+
} else if (isUsingBingWebModel(session)) {
102123
const accessToken = await getBingAccessToken()
103-
if (session.modelName.includes('bingFreeSydney'))
124+
if (isUsingModelName('bingFreeSydney', session))
104125
await generateAnswersWithBingWebApi(port, session.question, session, accessToken, true)
105126
else await generateAnswersWithBingWebApi(port, session.question, session, accessToken)
106-
} else if (gptApiModelKeys.includes(session.modelName)) {
107-
await generateAnswersWithGptCompletionApi(
108-
port,
109-
session.question,
110-
session,
111-
config.apiKey,
112-
session.modelName,
113-
)
114-
} else if (chatgptApiModelKeys.includes(session.modelName)) {
115-
await generateAnswersWithChatgptApi(
116-
port,
117-
session.question,
118-
session,
119-
config.apiKey,
120-
session.modelName,
121-
)
122-
} else if (customApiModelKeys.includes(session.modelName)) {
123-
await generateAnswersWithCustomApi(
124-
port,
125-
session.question,
126-
session,
127-
config.customApiKey,
128-
config.customModelName,
129-
)
130-
} else if (ollamaApiModelKeys.includes(session.modelName)) {
131-
await generateAnswersWithOllamaApi(port, session.question, session)
132-
} else if (azureOpenAiApiModelKeys.includes(session.modelName)) {
133-
await generateAnswersWithAzureOpenaiApi(port, session.question, session)
134-
} else if (claudeApiModelKeys.includes(session.modelName)) {
135-
await generateAnswersWithClaudeApi(port, session.question, session)
136-
} else if (chatglmApiModelKeys.includes(session.modelName)) {
137-
await generateAnswersWithChatGLMApi(port, session.question, session, session.modelName)
138-
} else if (githubThirdPartyApiModelKeys.includes(session.modelName)) {
139-
await generateAnswersWithWaylaidwandererApi(port, session.question, session)
140-
} else if (poeWebModelKeys.includes(session.modelName)) {
141-
throw new Error('Due to the new verification, Poe Web API is currently not supported.')
142-
// if (session.modelName === 'poeAiWebCustom')
143-
// await generateAnswersWithPoeWebApi(port, session.question, session, config.poeCustomBotName)
144-
// else
145-
// await generateAnswersWithPoeWebApi(
146-
// port,
147-
// session.question,
148-
// session,
149-
// Models[session.modelName].value,
150-
// )
151-
} else if (bardWebModelKeys.includes(session.modelName)) {
127+
} else if (isUsingGeminiWebModel(session)) {
152128
const cookies = await getBardCookies()
153129
await generateAnswersWithBardWebApi(port, session.question, session, cookies)
154-
} else if (claudeWebModelKeys.includes(session.modelName)) {
155-
const sessionKey = await getClaudeSessionKey()
156-
await generateAnswersWithClaudeWebApi(
157-
port,
158-
session.question,
159-
session,
160-
sessionKey,
161-
session.modelName,
162-
)
163-
} else if (moonshotApiModelKeys.includes(session.modelName)) {
130+
} else if (isUsingChatgptApiModel(session)) {
131+
await generateAnswersWithChatgptApi(port, session.question, session, config.apiKey)
132+
} else if (isUsingClaudeApiModel(session)) {
133+
await generateAnswersWithClaudeApi(port, session.question, session)
134+
} else if (isUsingMoonshotApiModel(session)) {
164135
await generateAnswersWithMoonshotCompletionApi(
165136
port,
166137
session.question,
167138
session,
168139
config.moonshotApiKey,
169-
session.modelName,
170-
)
171-
} else if (moonshotWebModelKeys.includes(session.modelName)) {
172-
await generateAnswersWithMoonshotWebApi(
173-
port,
174-
session.question,
175-
session,
176-
config,
177-
session.modelName,
178140
)
141+
} else if (isUsingChatGLMApiModel(session)) {
142+
await generateAnswersWithChatGLMApi(port, session.question, session)
143+
} else if (isUsingOllamaApiModel(session)) {
144+
await generateAnswersWithOllamaApi(port, session.question, session)
145+
} else if (isUsingAzureOpenAiApiModel(session)) {
146+
await generateAnswersWithAzureOpenaiApi(port, session.question, session)
147+
} else if (isUsingGptCompletionApiModel(session)) {
148+
await generateAnswersWithGptCompletionApi(port, session.question, session, config.apiKey)
149+
} else if (isUsingGithubThirdPartyApiModel(session)) {
150+
await generateAnswersWithWaylaidwandererApi(port, session.question, session)
179151
}
180152
}
181153

src/services/apis/azure-openai-api.mjs

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import { getChatSystemPromptBase, pushRecord, setAbortController } from './share
33
import { getConversationPairs } from '../../utils/get-conversation-pairs.mjs'
44
import { fetchSSE } from '../../utils/fetch-sse.mjs'
55
import { isEmpty } from 'lodash-es'
6+
import { getModelValue } from '../../utils/model-name-convert.mjs'
67

78
/**
89
* @param {Runtime.Port} port
@@ -12,6 +13,8 @@ import { isEmpty } from 'lodash-es'
1213
export async function generateAnswersWithAzureOpenaiApi(port, question, session) {
1314
const { controller, messageListener, disconnectListener } = setAbortController(port)
1415
const config = await getUserConfig()
16+
let model = getModelValue(session)
17+
if (!model) model = config.azureDeploymentName
1518

1619
const prompt = getConversationPairs(
1720
session.conversationRecords.slice(-config.maxConversationContextLength),
@@ -22,9 +25,10 @@ export async function generateAnswersWithAzureOpenaiApi(port, question, session)
2225

2326
let answer = ''
2427
await fetchSSE(
25-
`${config.azureEndpoint.replace(/\/$/, '')}/openai/deployments/${
26-
config.azureDeploymentName
27-
}/chat/completions?api-version=2024-02-01`,
28+
`${config.azureEndpoint.replace(
29+
/\/$/,
30+
'',
31+
)}/openai/deployments/${model}/chat/completions?api-version=2024-02-01`,
2832
{
2933
method: 'POST',
3034
signal: controller.signal,

src/services/apis/chatglm-api.mjs

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,8 @@ import { generateAnswersWithChatgptApiCompat } from './openai-api.mjs'
66
* @param {Runtime.Port} port
77
* @param {string} question
88
* @param {Session} session
9-
* @param {string} modelName
109
*/
11-
export async function generateAnswersWithChatGLMApi(port, question, session, modelName) {
10+
export async function generateAnswersWithChatGLMApi(port, question, session) {
1211
const baseUrl = 'https://open.bigmodel.cn/api/paas/v4'
1312
const config = await getUserConfig()
1413
return generateAnswersWithChatgptApiCompat(
@@ -17,6 +16,5 @@ export async function generateAnswersWithChatGLMApi(port, question, session, mod
1716
question,
1817
session,
1918
getToken(config.chatglmApiKey),
20-
modelName,
2119
)
2220
}

src/services/apis/custom-api.mjs

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,18 @@ import { pushRecord, setAbortController } from './shared.mjs'
1515
* @param {Browser.Runtime.Port} port
1616
* @param {string} question
1717
* @param {Session} session
18+
* @param {string} apiUrl
1819
* @param {string} apiKey
1920
* @param {string} modelName
2021
*/
21-
export async function generateAnswersWithCustomApi(port, question, session, apiKey, modelName) {
22+
export async function generateAnswersWithCustomApi(
23+
port,
24+
question,
25+
session,
26+
apiUrl,
27+
apiKey,
28+
modelName,
29+
) {
2230
const { controller, messageListener, disconnectListener } = setAbortController(port)
2331

2432
const config = await getUserConfig()
@@ -28,7 +36,6 @@ export async function generateAnswersWithCustomApi(port, question, session, apiK
2836
)
2937
// prompt.unshift({ role: 'system', content: await getCustomApiPromptBase() })
3038
prompt.push({ role: 'user', content: question })
31-
const apiUrl = config.customModelApiUrl
3239

3340
let answer = ''
3441
let finished = false

src/services/apis/moonshot-api.mjs

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,8 @@ import { generateAnswersWithChatgptApiCompat } from './openai-api.mjs'
55
* @param {string} question
66
* @param {Session} session
77
* @param {string} apiKey
8-
* @param {string} modelName
98
*/
10-
export async function generateAnswersWithMoonshotCompletionApi(
11-
port,
12-
question,
13-
session,
14-
apiKey,
15-
modelName,
16-
) {
9+
export async function generateAnswersWithMoonshotCompletionApi(port, question, session, apiKey) {
1710
const baseUrl = 'https://api.moonshot.cn/v1'
18-
return generateAnswersWithChatgptApiCompat(baseUrl, port, question, session, apiKey, modelName)
11+
return generateAnswersWithChatgptApiCompat(baseUrl, port, question, session, apiKey)
1912
}

src/services/apis/ollama-api.mjs

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,6 @@ export async function generateAnswersWithOllamaApi(port, question, session) {
1414
question,
1515
session,
1616
config.ollamaApiKey,
17-
'ollamaModel',
18-
{
19-
model: config.ollamaModelName,
20-
},
2117
).then(() =>
2218
fetch(config.ollamaEndpoint + '/api/generate', {
2319
method: 'POST',

src/services/apis/openai-api.mjs

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -99,17 +99,15 @@ export async function generateAnswersWithGptCompletionApi(port, question, sessio
9999
* @param {string} question
100100
* @param {Session} session
101101
* @param {string} apiKey
102-
* @param {string} modelName
103102
*/
104-
export async function generateAnswersWithChatgptApi(port, question, session, apiKey, modelName) {
103+
export async function generateAnswersWithChatgptApi(port, question, session, apiKey) {
105104
const config = await getUserConfig()
106105
return generateAnswersWithChatgptApiCompat(
107106
config.customOpenAiApiUrl + '/v1',
108107
port,
109108
question,
110109
session,
111110
apiKey,
112-
modelName,
113111
)
114112
}
115113

@@ -119,7 +117,6 @@ export async function generateAnswersWithChatgptApiCompat(
119117
question,
120118
session,
121119
apiKey,
122-
modelName,
123120
extraBody = {},
124121
) {
125122
const { controller, messageListener, disconnectListener } = setAbortController(port)

0 commit comments

Comments
 (0)