diff --git a/src/popup/sections/GeneralPart.jsx b/src/popup/sections/GeneralPart.jsx index 28b51b71e..bf1798b89 100644 --- a/src/popup/sections/GeneralPart.jsx +++ b/src/popup/sections/GeneralPart.jsx @@ -1,7 +1,7 @@ import { useTranslation } from 'react-i18next' import { useLayoutEffect, useRef, useState } from 'react' import FileSaver from 'file-saver' -import { isApiModeSelected, getApiModesFromConfig } from '../../utils/index.mjs' +import { getApiModesFromConfig, modelNameToDesc } from '../../utils/index.mjs' import { isUsingAzureOpenAiApiModel, isUsingClaudeApiModel, @@ -21,7 +21,11 @@ import { config as menuConfig } from '../../content-script/menu-tools' import { PencilIcon } from '@primer/octicons-react' import { importDataIntoStorage } from './import-data-cleanup.mjs' import { resolveOpenAICompatibleRequest } from '../../services/apis/provider-registry.mjs' -import { getApiModeDisplayLabel } from './api-modes-provider-utils.mjs' +import { + getApiModeDisplayLabel, + getSelectedApiModeOptionValue, + UNMATCHED_API_MODE_VALUE, +} from './api-modes-provider-utils.mjs' import { buildProviderOverrideFinalConfigUpdate, createProviderApiKeyDraftSelectionSignature, @@ -107,6 +111,14 @@ export function GeneralPart({ config.apiMode && typeof config.apiMode === 'object' ? { apiMode: config.apiMode } : { modelName: config.modelName } + const selectedApiModeValue = getSelectedApiModeOptionValue(apiModes, config) + const currentApiModeLabel = config.apiMode + ? getApiModeDisplayLabel( + config.apiMode, + t, + Array.isArray(config.customOpenAIProviders) ? config.customOpenAIProviders : [], + ) || t(Models.customModel.desc) + : modelNameToDesc(config.modelName, t, config.customModelName) const selectedProviderRequest = resolveOpenAICompatibleRequest(config, selectedProviderSession) const selectedProviderId = selectedProviderRequest?.providerId || '' const selectedProviderSecretTargetId = resolveProviderSecretTargetId(selectedProviderRequest) @@ -480,15 +492,26 @@ export function GeneralPart({ : undefined } required + value={selectedApiModeValue} onChange={(e) => { + if (e.target.value === UNMATCHED_API_MODE_VALUE) return if (e.target.value === '-1') { updateConfig({ modelName: 'customModel', apiMode: null }) return } - const apiMode = apiModes[e.target.value] - updateConfig({ apiMode: apiMode }) + const apiMode = apiModes[Number(e.target.value)] + if (!apiMode) { + e.currentTarget.value = selectedApiModeValue + return + } + updateConfig({ apiMode }) }} > + {selectedApiModeValue === UNMATCHED_API_MODE_VALUE && ( + + )} {apiModes.map((apiMode, index) => { const desc = getApiModeDisplayLabel( apiMode, @@ -497,15 +520,13 @@ export function GeneralPart({ ) if (desc) { return ( - ) } })} - + {isUsingMultiModeModel(config) && (