diff --git a/src/config/index.mjs b/src/config/index.mjs index e52fdfe..53927c6 100644 --- a/src/config/index.mjs +++ b/src/config/index.mjs @@ -169,7 +169,7 @@ export const Models = { chatgptApi35: { value: 'gpt-3.5-turbo', desc: 'ChatGPT (GPT-3.5-turbo)' }, chatgptApi35_16k: { value: 'gpt-3.5-turbo-16k', desc: 'ChatGPT (GPT-3.5-turbo-16k)' }, - chatgptApi4o_128k: { value: 'gpt-4o', desc: 'ChatGPT (GPT-4o)' }, + chatgptApi4o_128k: { value: 'gpt-4o', desc: 'ChatGPT (GPT-4o, 128k)' }, chatgptApi4oMini: { value: 'gpt-4o-mini', desc: 'ChatGPT (GPT-4o mini)' }, chatgptApi4_8k: { value: 'gpt-4', desc: 'ChatGPT (GPT-4-8k)' }, chatgptApi4_32k: { value: 'gpt-4-32k', desc: 'ChatGPT (GPT-4-32k)' }, @@ -341,10 +341,13 @@ export const defaultConfig = { // others alwaysCreateNewConversationWindow: false, + // The handling of activeApiModes and customApiModes is somewhat complex. + // It does not directly convert activeApiModes into customApiModes, which is for compatibility considerations. + // It allows the content of activeApiModes to change with version updates when the user has not customized ApiModes. + // If it were directly written into customApiModes, the value would become fixed, even if the user has not made any customizations. activeApiModes: [ 'chatgptFree35', 'chatgptFree4o', - 'chatgptPlus4', 'chatgptApi35', 'chatgptApi4o_128k', 'claude2WebFree', @@ -354,7 +357,6 @@ export const defaultConfig = { 'moonshot_v1_8k', 'chatglmTurbo', 'customModel', - 'ollamaModel', 'azureOpenAi', ], customApiModes: [ diff --git a/src/popup/sections/ApiModes.jsx b/src/popup/sections/ApiModes.jsx index 9f6d297..d6d57f5 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 { apiModeToModelName, modelNameToDesc } from '../../utils/index.mjs' +import { apiModeToModelName, modelNameToApiMode, modelNameToDesc } from '../../utils/index.mjs' import { PencilIcon, TrashIcon } from '@primer/octicons-react' import { useState } from 'react' import { @@ -31,6 +31,20 @@ export function ApiModes({ config, updateConfig }) { const [editingApiMode, setEditingApiMode] = useState(defaultApiMode) const [editingIndex, setEditingIndex] = useState(-1) + const stringApiModes = config.customApiModes.map(apiModeToModelName) + const originalApiModes = config.activeApiModes + .map((modelName) => { + // 'customModel' is always active + if (stringApiModes.includes(modelName) || modelName === 'customModel') { + return + } + if (modelName === 'azureOpenAi') modelName += '-' + config.azureDeploymentName + if (modelName === 'ollama') modelName += '-' + config.ollamaModelName + return modelNameToApiMode(modelName) + }) + .filter((apiMode) => apiMode) + const apiModes = [...originalApiModes, ...config.customApiModes] + const editingComponent = (