Skip to content

Commit 08ab0e8

Browse files
committed
WIP, custom API Modes
1 parent b2ed03d commit 08ab0e8

File tree

8 files changed

+121
-77
lines changed

8 files changed

+121
-77
lines changed

src/components/ConversationCard/index.jsx

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -382,15 +382,15 @@ function ConversationCard(props) {
382382
onChange={(e) => {
383383
let apiMode = null
384384
let modelName = 'customModel'
385-
if (e.target.value !== -1) {
385+
if (e.target.value !== '-1') {
386386
apiMode = apiModes[e.target.value]
387387
modelName = apiModeToModelName(apiMode)
388388
}
389389
const newSession = {
390390
...session,
391391
modelName,
392392
apiMode,
393-
aiName: modelNameToDesc(modelName, t),
393+
aiName: modelNameToDesc(apiMode ? apiModeToModelName(apiMode) : modelName, t),
394394
}
395395
if (config.autoRegenAfterSwitchModel && conversationItemData.length > 0)
396396
getRetryFn(newSession)()
@@ -401,17 +401,14 @@ function ConversationCard(props) {
401401
const modelName = apiModeToModelName(apiMode)
402402
const desc = modelNameToDesc(modelName, t)
403403
if (desc) {
404-
let selected
405-
if (isApiModeSelected(apiMode, session)) selected = true
406-
else selected = session.modelName === modelName
407404
return (
408-
<option value={index} key={index} selected={selected}>
405+
<option value={index} key={index} selected={isApiModeSelected(apiMode, session)}>
409406
{desc}
410407
</option>
411408
)
412409
}
413410
})}
414-
<option value={-1} selected={!config.apiMode && config.modelName === 'customModel'}>
411+
<option value={-1} selected={!session.apiMode && session.modelName === 'customModel'}>
415412
{t(Models.customModel.desc)}
416413
</option>
417414
</select>

src/config/index.mjs

Lines changed: 49 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { defaults } from 'lodash-es'
22
import Browser from 'webextension-polyfill'
33
import { isMobile } from '../utils/is-mobile.mjs'
4-
import { modelNameToDesc } from '../utils/model-name-convert.mjs'
4+
import { isInApiModeGroup, modelNameToDesc } from '../utils/model-name-convert.mjs'
55
import { t } from 'i18next'
66

77
export const TriggerMode = {
@@ -458,51 +458,75 @@ export function getNavigatorLanguage() {
458458
return navigator.language.substring(0, 2)
459459
}
460460

461-
export function isUsingOpenAiApiKey(configOrSession) {
462-
return (
463-
gptApiModelKeys.includes(configOrSession.modelName) ||
464-
chatgptApiModelKeys.includes(configOrSession.modelName)
465-
)
461+
export function isUsingChatgptWebModel(configOrSession) {
462+
return isInApiModeGroup(chatgptWebModelKeys, configOrSession)
463+
}
464+
465+
export function isUsingClaudeWebModel(configOrSession) {
466+
return isInApiModeGroup(claudeWebModelKeys, configOrSession)
467+
}
468+
469+
export function isUsingMoonshotWebModel(configOrSession) {
470+
return isInApiModeGroup(moonshotWebModelKeys, configOrSession)
471+
}
472+
473+
export function isUsingBingWebModel(configOrSession) {
474+
return isInApiModeGroup(bingWebModelKeys, configOrSession)
466475
}
467476

468477
export function isUsingMultiModeModel(configOrSession) {
469-
return bingWebModelKeys.includes(configOrSession.modelName)
478+
return isInApiModeGroup(bingWebModelKeys, configOrSession)
470479
}
471480

472-
export function isUsingCustomModel(configOrSession) {
473-
return customApiModelKeys.includes(configOrSession.modelName)
481+
export function isUsingGeminiWebModel(configOrSession) {
482+
return isInApiModeGroup(bardWebModelKeys, configOrSession)
474483
}
475484

476-
export function isUsingOllamaModel(configOrSession) {
477-
return ollamaApiModelKeys.includes(configOrSession.modelName)
485+
export function isUsingChatgptApiModel(configOrSession) {
486+
return isInApiModeGroup(chatgptApiModelKeys, configOrSession)
478487
}
479488

480-
export function isUsingChatGLMApi(configOrSession) {
481-
return chatglmApiModelKeys.includes(configOrSession.modelName)
489+
export function isUsingGptCompletionApiModel(configOrSession) {
490+
return isInApiModeGroup(gptApiModelKeys, configOrSession)
482491
}
483492

484-
export function isUsingMoonshotApi(configOrSession) {
485-
return moonshotApiModelKeys.includes(configOrSession.modelName)
493+
export function isUsingOpenAiApiModel(configOrSession) {
494+
return isUsingChatgptApiModel(configOrSession) || isUsingGptCompletionApiModel(configOrSession)
486495
}
487496

488-
export function isUsingCustomNameOnlyModel(configOrSession) {
489-
return configOrSession.modelName === 'poeAiWebCustom'
497+
export function isUsingClaudeApiModel(configOrSession) {
498+
return isInApiModeGroup(claudeApiModelKeys, configOrSession)
499+
}
500+
501+
export function isUsingMoonshotApiModel(configOrSession) {
502+
return isInApiModeGroup(moonshotApiModelKeys, configOrSession)
503+
}
504+
505+
export function isUsingChatGLMApiModel(configOrSession) {
506+
return isInApiModeGroup(chatglmApiModelKeys, configOrSession)
507+
}
508+
509+
export function isUsingOllamaApiModel(configOrSession) {
510+
return isInApiModeGroup(ollamaApiModelKeys, configOrSession)
490511
}
491512

492-
export function isUsingAzureOpenAi(configOrSession) {
493-
return azureOpenAiApiModelKeys.includes(configOrSession.modelName)
513+
export function isUsingAzureOpenAiApiModel(configOrSession) {
514+
return isInApiModeGroup(azureOpenAiApiModelKeys, configOrSession)
494515
}
495516

496-
export function isUsingClaudeApi(configOrSession) {
497-
return claudeApiModelKeys.includes(configOrSession.modelName)
517+
export function isUsingGithubThirdPartyApiModel(configOrSession) {
518+
return isInApiModeGroup(githubThirdPartyApiModelKeys, configOrSession)
498519
}
499520

500-
export function isUsingMoonshotWeb(configOrSession) {
501-
return moonshotWebModelKeys.includes(configOrSession.modelName)
521+
export function isUsingCustomModel(configOrSession) {
522+
return isInApiModeGroup(customApiModelKeys, configOrSession)
502523
}
503524

504-
export function isUsingGithubThirdPartyApi(configOrSession) {
505-
return githubThirdPartyApiModelKeys.includes(configOrSession.modelName)
525+
/**
526+
* @deprecated
527+
*/
528+
export function isUsingCustomNameOnlyModel(configOrSession) {
529+
return configOrSession.modelName === 'poeAiWebCustom'
506530
}
507531

508532
export async function getPreferredLanguageKey() {

src/popup/sections/ApiModes.jsx

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ export function ApiModes({ config, updateConfig }) {
5050
])
5151

5252
const updateWhenApiModeDisabled = (apiMode) => {
53-
if (isApiModeSelected(apiMode, config) || config.modelName === apiModeToModelName(apiMode))
53+
if (isApiModeSelected(apiMode, config))
5454
updateConfig({
5555
modelName:
5656
apiModeStringArray.includes(config.modelName) &&
@@ -82,11 +82,7 @@ export function ApiModes({ config, updateConfig }) {
8282
})
8383
} else {
8484
const apiMode = apiModes[editingIndex]
85-
if (
86-
isApiModeSelected(apiMode, config) ||
87-
config.modelName === apiModeToModelName(apiMode) // there is a minor bug here, but it's not a big issue
88-
)
89-
updateConfig({ apiMode: editingApiMode })
85+
if (isApiModeSelected(apiMode, config)) updateConfig({ apiMode: editingApiMode })
9086
const customApiModes = [...apiModes]
9187
customApiModes[editingIndex] = editingApiMode
9288
updateConfig({ activeApiModes: [], customApiModes })

src/popup/sections/GeneralPart.jsx

Lines changed: 26 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -9,19 +9,19 @@ import {
99
apiModeToModelName,
1010
} from '../../utils/index.mjs'
1111
import {
12-
isUsingOpenAiApiKey,
13-
isUsingAzureOpenAi,
14-
isUsingChatGLMApi,
15-
isUsingClaudeApi,
12+
isUsingOpenAiApiModel,
13+
isUsingAzureOpenAiApiModel,
14+
isUsingChatGLMApiModel,
15+
isUsingClaudeApiModel,
1616
isUsingCustomModel,
1717
isUsingCustomNameOnlyModel,
18-
isUsingOllamaModel,
19-
isUsingGithubThirdPartyApi,
18+
isUsingOllamaApiModel,
19+
isUsingGithubThirdPartyApiModel,
2020
isUsingMultiModeModel,
2121
ModelMode,
2222
ThemeMode,
2323
TriggerMode,
24-
isUsingMoonshotApi,
24+
isUsingMoonshotApiModel,
2525
Models,
2626
} from '../../config/index.mjs'
2727
import Browser from 'webextension-polyfill'
@@ -172,20 +172,20 @@ export function GeneralPart({ config, updateConfig, setTabIndex }) {
172172
<span style="display: flex; gap: 15px;">
173173
<select
174174
style={
175-
isUsingOpenAiApiKey(config) ||
175+
isUsingOpenAiApiModel(config) ||
176176
isUsingMultiModeModel(config) ||
177177
isUsingCustomModel(config) ||
178-
isUsingOllamaModel(config) ||
179-
isUsingAzureOpenAi(config) ||
180-
isUsingClaudeApi(config) ||
178+
isUsingOllamaApiModel(config) ||
179+
isUsingAzureOpenAiApiModel(config) ||
180+
isUsingClaudeApiModel(config) ||
181181
isUsingCustomNameOnlyModel(config) ||
182-
isUsingMoonshotApi(config)
182+
isUsingMoonshotApiModel(config)
183183
? 'width: 50%;'
184184
: undefined
185185
}
186186
required
187187
onChange={(e) => {
188-
if (e.target.value === -1) {
188+
if (e.target.value === '-1') {
189189
updateConfig({ modelName: 'customModel', apiMode: null })
190190
return
191191
}
@@ -197,11 +197,8 @@ export function GeneralPart({ config, updateConfig, setTabIndex }) {
197197
const modelName = apiModeToModelName(apiMode)
198198
const desc = modelNameToDesc(modelName, t)
199199
if (desc) {
200-
let selected
201-
if (isApiModeSelected(apiMode, config)) selected = true
202-
else selected = config.modelName === modelName
203200
return (
204-
<option value={index} key={index} selected={selected}>
201+
<option value={index} key={index} selected={isApiModeSelected(apiMode, config)}>
205202
{desc}
206203
</option>
207204
)
@@ -229,7 +226,7 @@ export function GeneralPart({ config, updateConfig, setTabIndex }) {
229226
})}
230227
</select>
231228
)}
232-
{isUsingOpenAiApiKey(config) && (
229+
{isUsingOpenAiApiModel(config) && (
233230
<span style="width: 50%; display: flex; gap: 5px;">
234231
<input
235232
type="password"
@@ -285,7 +282,7 @@ export function GeneralPart({ config, updateConfig, setTabIndex }) {
285282
}}
286283
/>
287284
)}
288-
{isUsingOllamaModel(config) && (
285+
{isUsingOllamaApiModel(config) && (
289286
<input
290287
style="width: 50%;"
291288
type="text"
@@ -297,7 +294,7 @@ export function GeneralPart({ config, updateConfig, setTabIndex }) {
297294
}}
298295
/>
299296
)}
300-
{isUsingAzureOpenAi(config) && (
297+
{isUsingAzureOpenAiApiModel(config) && (
301298
<input
302299
type="password"
303300
style="width: 50%;"
@@ -309,7 +306,7 @@ export function GeneralPart({ config, updateConfig, setTabIndex }) {
309306
}}
310307
/>
311308
)}
312-
{isUsingClaudeApi(config) && (
309+
{isUsingClaudeApiModel(config) && (
313310
<input
314311
type="password"
315312
style="width: 50%;"
@@ -321,7 +318,7 @@ export function GeneralPart({ config, updateConfig, setTabIndex }) {
321318
}}
322319
/>
323320
)}
324-
{isUsingChatGLMApi(config) && (
321+
{isUsingChatGLMApiModel(config) && (
325322
<input
326323
type="password"
327324
style="width: 50%;"
@@ -333,7 +330,7 @@ export function GeneralPart({ config, updateConfig, setTabIndex }) {
333330
}}
334331
/>
335332
)}
336-
{isUsingMoonshotApi(config) && (
333+
{isUsingMoonshotApiModel(config) && (
337334
<span style="width: 50%; display: flex; gap: 5px;">
338335
<input
339336
type="password"
@@ -380,7 +377,7 @@ export function GeneralPart({ config, updateConfig, setTabIndex }) {
380377
}}
381378
/>
382379
)}
383-
{isUsingOllamaModel(config) && (
380+
{isUsingOllamaApiModel(config) && (
384381
<div style={{ display: 'flex', gap: '10px' }}>
385382
{t('Keep-Alive Time') + ':'}
386383
<label>
@@ -421,7 +418,7 @@ export function GeneralPart({ config, updateConfig, setTabIndex }) {
421418
</label>
422419
</div>
423420
)}
424-
{isUsingOllamaModel(config) && (
421+
{isUsingOllamaApiModel(config) && (
425422
<input
426423
type="text"
427424
value={config.ollamaEndpoint}
@@ -432,7 +429,7 @@ export function GeneralPart({ config, updateConfig, setTabIndex }) {
432429
}}
433430
/>
434431
)}
435-
{isUsingOllamaModel(config) && (
432+
{isUsingOllamaApiModel(config) && (
436433
<input
437434
type="password"
438435
value={config.ollamaApiKey}
@@ -443,7 +440,7 @@ export function GeneralPart({ config, updateConfig, setTabIndex }) {
443440
}}
444441
/>
445442
)}
446-
{isUsingAzureOpenAi(config) && (
443+
{isUsingAzureOpenAiApiModel(config) && (
447444
<input
448445
type="password"
449446
value={config.azureEndpoint}
@@ -454,7 +451,7 @@ export function GeneralPart({ config, updateConfig, setTabIndex }) {
454451
}}
455452
/>
456453
)}
457-
{isUsingAzureOpenAi(config) && (
454+
{isUsingAzureOpenAiApiModel(config) && (
458455
<input
459456
type="text"
460457
value={config.azureDeploymentName}
@@ -465,7 +462,7 @@ export function GeneralPart({ config, updateConfig, setTabIndex }) {
465462
}}
466463
/>
467464
)}
468-
{isUsingGithubThirdPartyApi(config) && (
465+
{isUsingGithubThirdPartyApiModel(config) && (
469466
<input
470467
type="text"
471468
value={config.githubThirdPartyUrl}

src/services/init-session.mjs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { v4 as uuidv4 } from 'uuid'
2-
import { modelNameToDesc } from '../utils/model-name-convert.mjs'
2+
import { apiModeToModelName, modelNameToDesc } from '../utils/model-name-convert.mjs'
33
import { t } from 'i18next'
44

55
/**
@@ -57,7 +57,10 @@ export function initSession({
5757
createdAt: new Date().toISOString(),
5858
updatedAt: new Date().toISOString(),
5959

60-
aiName: modelName ? modelNameToDesc(modelName, t) : null,
60+
aiName:
61+
modelName || apiMode
62+
? modelNameToDesc(apiMode ? apiModeToModelName(apiMode) : modelName, t)
63+
: null,
6164
modelName,
6265
apiMode,
6366

src/services/wrappers.mjs

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import {
77
} from '../config/index.mjs'
88
import Browser from 'webextension-polyfill'
99
import { t } from 'i18next'
10-
import { modelNameToDesc } from '../utils/model-name-convert.mjs'
10+
import { apiModeToModelName, modelNameToDesc } from '../utils/model-name-convert.mjs'
1111

1212
export async function getChatGptAccessToken() {
1313
await clearOldAccessToken()
@@ -103,7 +103,12 @@ export function registerPortListener(executor) {
103103
if (!session) return
104104
const config = await getUserConfig()
105105
if (!session.modelName) session.modelName = config.modelName
106-
if (!session.aiName) session.aiName = modelNameToDesc(session.modelName, t)
106+
if (!session.apiMode) session.apiMode = config.apiMode
107+
if (!session.aiName)
108+
session.aiName = modelNameToDesc(
109+
session.apiMode ? apiModeToModelName(session.apiMode) : session.modelName,
110+
t,
111+
)
107112
port.postMessage({ session })
108113
try {
109114
await executor(session, port, config)

0 commit comments

Comments
 (0)