From fc21abb45d7db869b2aae3889c3b40506b345bb9 Mon Sep 17 00:00:00 2001 From: josc146 Date: Mon, 8 May 2023 19:31:29 +0800 Subject: [PATCH] feat: an easier way to use different bing styles (#264) --- src/background/index.mjs | 5 +- src/components/ConversationCard/index.jsx | 28 ++++++--- src/config/index.mjs | 77 +++++++++++++---------- src/popup/sections/ApiModes.jsx | 43 ++++++++----- src/popup/sections/GeneralPart.jsx | 26 +++++--- src/services/apis/bing-web.mjs | 7 ++- 6 files changed, 118 insertions(+), 68 deletions(-) diff --git a/src/background/index.mjs b/src/background/index.mjs index 2e4b8a0..d7862d8 100644 --- a/src/background/index.mjs +++ b/src/background/index.mjs @@ -60,6 +60,7 @@ function setPortProxy(port, proxyTabId) { } async function executeApi(session, port, config) { + console.debug('modelName', session.modelName) if (chatgptWebModelKeys.includes(session.modelName)) { let tabId if ( @@ -78,9 +79,9 @@ async function executeApi(session, port, config) { const accessToken = await getChatGptAccessToken() await generateAnswersWithChatgptWebApi(port, session.question, session, accessToken) } - } else if (bingWebModelKeys.includes(session.modelName)) { + } else if (bingWebModelKeys.some((n) => session.modelName.includes(n))) { const accessToken = await getBingAccessToken() - if (session.modelName === 'bingFreeSydney') + if (session.modelName.includes('bingFreeSydney')) await generateAnswersWithBingWebApi(port, session.question, session, accessToken, true) else await generateAnswersWithBingWebApi(port, session.question, session, accessToken) } else if (gptApiModelKeys.includes(session.modelName)) { diff --git a/src/components/ConversationCard/index.jsx b/src/components/ConversationCard/index.jsx index 213d185..17bedec 100644 --- a/src/components/ConversationCard/index.jsx +++ b/src/components/ConversationCard/index.jsx @@ -10,7 +10,7 @@ import FileSaver from 'file-saver' import { render } from 'preact' import FloatingToolbar from '../FloatingToolbar' import { useClampWindowSize } from '../../hooks/use-clamp-window-size' -import { Models } from '../../config/index.mjs' +import { ModelMode, Models } from '../../config/index.mjs' import { useTranslation } from 'react-i18next' import DeleteButton from '../DeleteButton' import { useConfig } from '../../hooks/use-config.mjs' @@ -233,13 +233,25 @@ function ConversationCard(props) { else setSession(newSession) }} > - {config.activeApiModes.map((key) => { - const model = Models[key] - return ( - - ) + {config.activeApiModes.map((modelName) => { + let desc + if (modelName.includes('-')) { + const splits = modelName.split('-') + if (splits[0] in Models) + desc = `${t(Models[splits[0]].desc)} (${t(ModelMode[splits[1]])})` + } else { + if (modelName in Models) desc = t(Models[modelName].desc) + } + if (desc) + return ( + + ) })} diff --git a/src/config/index.mjs b/src/config/index.mjs index b8522ca..3c95785 100644 --- a/src/config/index.mjs +++ b/src/config/index.mjs @@ -2,6 +2,42 @@ import { defaults } from 'lodash-es' import Browser from 'webextension-polyfill' import { isMobile } from '../utils/is-mobile.mjs' +export const TriggerMode = { + always: 'Always', + questionMark: 'When query ends with question mark (?)', + manually: 'Manually', +} + +export const ThemeMode = { + light: 'Light', + dark: 'Dark', + auto: 'Auto', +} + +export const ModelMode = { + balanced: 'Balanced', + creative: 'Creative', + precise: 'Precise', + fast: 'Fast', +} + +export const chatgptWebModelKeys = ['chatgptFree35', 'chatgptPlus4'] +export const bingWebModelKeys = ['bingFree4', 'bingFreeSydney'] +export const gptApiModelKeys = ['gptApiDavinci'] +export const chatgptApiModelKeys = ['chatgptApi35', 'chatgptApi4_8k', 'chatgptApi4_32k'] +export const customApiModelKeys = ['customModel'] +export const azureOpenAiApiModelKeys = ['azureOpenAi'] +export const githubThirdPartyApiModelKeys = ['waylaidwandererApi'] +export const poeWebModelKeys = [ + 'poeAiWebSage', + 'poeAiWebGPT4', + 'poeAiWebClaudePlus', + 'poeAiWebClaude', + 'poeAiWebCustom', + 'poeAiWebChatGpt', + 'poeAiWebDragonfly', +] + /** * @typedef {object} Model * @property {string} value @@ -31,40 +67,13 @@ export const Models = { poeAiWebDragonfly: { value: 'dragonfly', desc: 'Poe AI (Web, Dragonfly)' }, } -export const chatgptWebModelKeys = ['chatgptFree35', 'chatgptPlus4'] -export const bingWebModelKeys = ['bingFree4', 'bingFreeSydney'] -export const gptApiModelKeys = ['gptApiDavinci'] -export const chatgptApiModelKeys = ['chatgptApi35', 'chatgptApi4_8k', 'chatgptApi4_32k'] -export const customApiModelKeys = ['customModel'] -export const azureOpenAiApiModelKeys = ['azureOpenAi'] -export const githubThirdPartyApiModelKeys = ['waylaidwandererApi'] -export const poeWebModelKeys = [ - 'poeAiWebSage', - 'poeAiWebGPT4', - 'poeAiWebClaudePlus', - 'poeAiWebClaude', - 'poeAiWebCustom', - 'poeAiWebChatGpt', - 'poeAiWebDragonfly', -] - -export const TriggerMode = { - always: 'Always', - questionMark: 'When query ends with question mark (?)', - manually: 'Manually', -} - -export const ThemeMode = { - light: 'Light', - dark: 'Dark', - auto: 'Auto', -} - -export const ModelMode = { - balanced: 'Balanced', - creative: 'Creative', - precise: 'Precise', - fast: 'Fast', +for (const modelName in Models) { + if (isUsingMultiModeModel({ modelName })) + for (const mode in ModelMode) + Models[`${modelName}-${mode}`] = { + value: mode, + desc: `${Models[modelName].desc} (${ModelMode[mode]})`, + } } /** diff --git a/src/popup/sections/ApiModes.jsx b/src/popup/sections/ApiModes.jsx index ef421e1..81aba5f 100644 --- a/src/popup/sections/ApiModes.jsx +++ b/src/popup/sections/ApiModes.jsx @@ -1,6 +1,6 @@ import { useTranslation } from 'react-i18next' import PropTypes from 'prop-types' -import { Models } from '../../config/index.mjs' +import { ModelMode, Models } from '../../config/index.mjs' ApiModes.propTypes = { config: PropTypes.object.isRequired, @@ -12,21 +12,32 @@ export function ApiModes({ config, updateConfig }) { return ( <> - {config.apiModes.map((key) => ( - - ))} + {config.apiModes.map((modelName) => { + let desc + if (modelName.includes('-')) { + const splits = modelName.split('-') + if (splits[0] in Models) + desc = `${t(Models[splits[0]].desc)} (${t(ModelMode[splits[1]])})` + } else { + if (modelName in Models) desc = t(Models[modelName].desc) + } + if (desc) + return ( + + ) + })} ) } diff --git a/src/popup/sections/GeneralPart.jsx b/src/popup/sections/GeneralPart.jsx index 94e7d27..7ebb0ce 100644 --- a/src/popup/sections/GeneralPart.jsx +++ b/src/popup/sections/GeneralPart.jsx @@ -94,13 +94,25 @@ export function GeneralPart({ config, updateConfig }) { updateConfig({ modelName: modelName }) }} > - {config.activeApiModes.map((key) => { - const model = Models[key] - return ( - - ) + {config.activeApiModes.map((modelName) => { + let desc + if (modelName.includes('-')) { + const splits = modelName.split('-') + if (splits[0] in Models) + desc = `${t(Models[splits[0]].desc)} (${t(ModelMode[splits[1]])})` + } else { + if (modelName in Models) desc = t(Models[modelName].desc) + } + if (desc) + return ( + + ) })} {isUsingMultiModeModel(config) && ( diff --git a/src/services/apis/bing-web.mjs b/src/services/apis/bing-web.mjs index ac1bc81..4abbacd 100644 --- a/src/services/apis/bing-web.mjs +++ b/src/services/apis/bing-web.mjs @@ -18,6 +18,11 @@ export async function generateAnswersWithBingWebApi( ) { const { controller, messageListener } = setAbortController(port) const config = await getUserConfig() + let modelMode + if (session.modelName.includes('-')) modelMode = session.modelName.split('-')[1] + else modelMode = config.modelMode + + console.debug('mode', modelMode) const bingAIClient = new BingAIClient({ userToken: accessToken }) if (session.bingWeb_jailbreakConversationCache) @@ -30,7 +35,7 @@ export async function generateAnswersWithBingWebApi( const response = await bingAIClient .sendMessage(question, { abortController: controller, - toneStyle: config.modelMode, + toneStyle: modelMode, jailbreakConversationId: sydneyMode, onProgress: (token) => { answer += token