Skip to content

Commit fc21abb

Browse files
committed
feat: an easier way to use different bing styles (#264)
1 parent e6cc1fe commit fc21abb

File tree

6 files changed

+118
-68
lines changed

6 files changed

+118
-68
lines changed

src/background/index.mjs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@ function setPortProxy(port, proxyTabId) {
6060
}
6161

6262
async function executeApi(session, port, config) {
63+
console.debug('modelName', session.modelName)
6364
if (chatgptWebModelKeys.includes(session.modelName)) {
6465
let tabId
6566
if (
@@ -78,9 +79,9 @@ async function executeApi(session, port, config) {
7879
const accessToken = await getChatGptAccessToken()
7980
await generateAnswersWithChatgptWebApi(port, session.question, session, accessToken)
8081
}
81-
} else if (bingWebModelKeys.includes(session.modelName)) {
82+
} else if (bingWebModelKeys.some((n) => session.modelName.includes(n))) {
8283
const accessToken = await getBingAccessToken()
83-
if (session.modelName === 'bingFreeSydney')
84+
if (session.modelName.includes('bingFreeSydney'))
8485
await generateAnswersWithBingWebApi(port, session.question, session, accessToken, true)
8586
else await generateAnswersWithBingWebApi(port, session.question, session, accessToken)
8687
} else if (gptApiModelKeys.includes(session.modelName)) {

src/components/ConversationCard/index.jsx

Lines changed: 20 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import FileSaver from 'file-saver'
1010
import { render } from 'preact'
1111
import FloatingToolbar from '../FloatingToolbar'
1212
import { useClampWindowSize } from '../../hooks/use-clamp-window-size'
13-
import { Models } from '../../config/index.mjs'
13+
import { ModelMode, Models } from '../../config/index.mjs'
1414
import { useTranslation } from 'react-i18next'
1515
import DeleteButton from '../DeleteButton'
1616
import { useConfig } from '../../hooks/use-config.mjs'
@@ -233,13 +233,25 @@ function ConversationCard(props) {
233233
else setSession(newSession)
234234
}}
235235
>
236-
{config.activeApiModes.map((key) => {
237-
const model = Models[key]
238-
return (
239-
<option value={key} key={key} selected={key === session.modelName}>
240-
{t(model.desc)}
241-
</option>
242-
)
236+
{config.activeApiModes.map((modelName) => {
237+
let desc
238+
if (modelName.includes('-')) {
239+
const splits = modelName.split('-')
240+
if (splits[0] in Models)
241+
desc = `${t(Models[splits[0]].desc)} (${t(ModelMode[splits[1]])})`
242+
} else {
243+
if (modelName in Models) desc = t(Models[modelName].desc)
244+
}
245+
if (desc)
246+
return (
247+
<option
248+
value={modelName}
249+
key={modelName}
250+
selected={modelName === session.modelName}
251+
>
252+
{desc}
253+
</option>
254+
)
243255
})}
244256
</select>
245257
</span>

src/config/index.mjs

Lines changed: 43 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,42 @@ import { defaults } from 'lodash-es'
22
import Browser from 'webextension-polyfill'
33
import { isMobile } from '../utils/is-mobile.mjs'
44

5+
export const TriggerMode = {
6+
always: 'Always',
7+
questionMark: 'When query ends with question mark (?)',
8+
manually: 'Manually',
9+
}
10+
11+
export const ThemeMode = {
12+
light: 'Light',
13+
dark: 'Dark',
14+
auto: 'Auto',
15+
}
16+
17+
export const ModelMode = {
18+
balanced: 'Balanced',
19+
creative: 'Creative',
20+
precise: 'Precise',
21+
fast: 'Fast',
22+
}
23+
24+
export const chatgptWebModelKeys = ['chatgptFree35', 'chatgptPlus4']
25+
export const bingWebModelKeys = ['bingFree4', 'bingFreeSydney']
26+
export const gptApiModelKeys = ['gptApiDavinci']
27+
export const chatgptApiModelKeys = ['chatgptApi35', 'chatgptApi4_8k', 'chatgptApi4_32k']
28+
export const customApiModelKeys = ['customModel']
29+
export const azureOpenAiApiModelKeys = ['azureOpenAi']
30+
export const githubThirdPartyApiModelKeys = ['waylaidwandererApi']
31+
export const poeWebModelKeys = [
32+
'poeAiWebSage',
33+
'poeAiWebGPT4',
34+
'poeAiWebClaudePlus',
35+
'poeAiWebClaude',
36+
'poeAiWebCustom',
37+
'poeAiWebChatGpt',
38+
'poeAiWebDragonfly',
39+
]
40+
541
/**
642
* @typedef {object} Model
743
* @property {string} value
@@ -31,40 +67,13 @@ export const Models = {
3167
poeAiWebDragonfly: { value: 'dragonfly', desc: 'Poe AI (Web, Dragonfly)' },
3268
}
3369

34-
export const chatgptWebModelKeys = ['chatgptFree35', 'chatgptPlus4']
35-
export const bingWebModelKeys = ['bingFree4', 'bingFreeSydney']
36-
export const gptApiModelKeys = ['gptApiDavinci']
37-
export const chatgptApiModelKeys = ['chatgptApi35', 'chatgptApi4_8k', 'chatgptApi4_32k']
38-
export const customApiModelKeys = ['customModel']
39-
export const azureOpenAiApiModelKeys = ['azureOpenAi']
40-
export const githubThirdPartyApiModelKeys = ['waylaidwandererApi']
41-
export const poeWebModelKeys = [
42-
'poeAiWebSage',
43-
'poeAiWebGPT4',
44-
'poeAiWebClaudePlus',
45-
'poeAiWebClaude',
46-
'poeAiWebCustom',
47-
'poeAiWebChatGpt',
48-
'poeAiWebDragonfly',
49-
]
50-
51-
export const TriggerMode = {
52-
always: 'Always',
53-
questionMark: 'When query ends with question mark (?)',
54-
manually: 'Manually',
55-
}
56-
57-
export const ThemeMode = {
58-
light: 'Light',
59-
dark: 'Dark',
60-
auto: 'Auto',
61-
}
62-
63-
export const ModelMode = {
64-
balanced: 'Balanced',
65-
creative: 'Creative',
66-
precise: 'Precise',
67-
fast: 'Fast',
70+
for (const modelName in Models) {
71+
if (isUsingMultiModeModel({ modelName }))
72+
for (const mode in ModelMode)
73+
Models[`${modelName}-${mode}`] = {
74+
value: mode,
75+
desc: `${Models[modelName].desc} (${ModelMode[mode]})`,
76+
}
6877
}
6978

7079
/**

src/popup/sections/ApiModes.jsx

Lines changed: 27 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { useTranslation } from 'react-i18next'
22
import PropTypes from 'prop-types'
3-
import { Models } from '../../config/index.mjs'
3+
import { ModelMode, Models } from '../../config/index.mjs'
44

55
ApiModes.propTypes = {
66
config: PropTypes.object.isRequired,
@@ -12,21 +12,32 @@ export function ApiModes({ config, updateConfig }) {
1212

1313
return (
1414
<>
15-
{config.apiModes.map((key) => (
16-
<label key={key}>
17-
<input
18-
type="checkbox"
19-
checked={config.activeApiModes.includes(key)}
20-
onChange={(e) => {
21-
const checked = e.target.checked
22-
const activeApiModes = config.activeApiModes.filter((i) => i !== key)
23-
if (checked) activeApiModes.push(key)
24-
updateConfig({ activeApiModes })
25-
}}
26-
/>
27-
{t(Models[key].desc)}
28-
</label>
29-
))}
15+
{config.apiModes.map((modelName) => {
16+
let desc
17+
if (modelName.includes('-')) {
18+
const splits = modelName.split('-')
19+
if (splits[0] in Models)
20+
desc = `${t(Models[splits[0]].desc)} (${t(ModelMode[splits[1]])})`
21+
} else {
22+
if (modelName in Models) desc = t(Models[modelName].desc)
23+
}
24+
if (desc)
25+
return (
26+
<label key={modelName}>
27+
<input
28+
type="checkbox"
29+
checked={config.activeApiModes.includes(modelName)}
30+
onChange={(e) => {
31+
const checked = e.target.checked
32+
const activeApiModes = config.activeApiModes.filter((i) => i !== modelName)
33+
if (checked) activeApiModes.push(modelName)
34+
updateConfig({ activeApiModes })
35+
}}
36+
/>
37+
{desc}
38+
</label>
39+
)
40+
})}
3041
</>
3142
)
3243
}

src/popup/sections/GeneralPart.jsx

Lines changed: 19 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -94,13 +94,25 @@ export function GeneralPart({ config, updateConfig }) {
9494
updateConfig({ modelName: modelName })
9595
}}
9696
>
97-
{config.activeApiModes.map((key) => {
98-
const model = Models[key]
99-
return (
100-
<option value={key} key={key} selected={key === config.modelName}>
101-
{t(model.desc)}
102-
</option>
103-
)
97+
{config.activeApiModes.map((modelName) => {
98+
let desc
99+
if (modelName.includes('-')) {
100+
const splits = modelName.split('-')
101+
if (splits[0] in Models)
102+
desc = `${t(Models[splits[0]].desc)} (${t(ModelMode[splits[1]])})`
103+
} else {
104+
if (modelName in Models) desc = t(Models[modelName].desc)
105+
}
106+
if (desc)
107+
return (
108+
<option
109+
value={modelName}
110+
key={modelName}
111+
selected={modelName === config.modelName}
112+
>
113+
{desc}
114+
</option>
115+
)
104116
})}
105117
</select>
106118
{isUsingMultiModeModel(config) && (

src/services/apis/bing-web.mjs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,11 @@ export async function generateAnswersWithBingWebApi(
1818
) {
1919
const { controller, messageListener } = setAbortController(port)
2020
const config = await getUserConfig()
21+
let modelMode
22+
if (session.modelName.includes('-')) modelMode = session.modelName.split('-')[1]
23+
else modelMode = config.modelMode
24+
25+
console.debug('mode', modelMode)
2126

2227
const bingAIClient = new BingAIClient({ userToken: accessToken })
2328
if (session.bingWeb_jailbreakConversationCache)
@@ -30,7 +35,7 @@ export async function generateAnswersWithBingWebApi(
3035
const response = await bingAIClient
3136
.sendMessage(question, {
3237
abortController: controller,
33-
toneStyle: config.modelMode,
38+
toneStyle: modelMode,
3439
jailbreakConversationId: sydneyMode,
3540
onProgress: (token) => {
3641
answer += token

0 commit comments

Comments
 (0)