diff --git a/webview-ui/src/components/settings/ModelPicker.tsx b/webview-ui/src/components/settings/ModelPicker.tsx index deb1062fdc..b21b37ef0f 100644 --- a/webview-ui/src/components/settings/ModelPicker.tsx +++ b/webview-ui/src/components/settings/ModelPicker.tsx @@ -40,6 +40,7 @@ interface ModelPickerProps { serviceName: string serviceUrl: string recommendedModel: string + allowCustomModel?: boolean } export const ModelPicker = ({ @@ -52,7 +53,10 @@ export const ModelPicker = ({ serviceName, serviceUrl, recommendedModel, + allowCustomModel = false, }: ModelPickerProps) => { + const [customModelId, setCustomModelId] = useState("") + const [isCustomModel, setIsCustomModel] = useState(false) const [open, setOpen] = useState(false) const [value, setValue] = useState(defaultModelId) const [isDescriptionExpanded, setIsDescriptionExpanded] = useState(false) @@ -70,6 +74,20 @@ export const ModelPicker = ({ [apiConfiguration], ) + const onSelectCustomModel = useCallback( + (modelId: string) => { + setCustomModelId(modelId) + const modelInfo = { id: modelId } + const apiConfig = { ...apiConfiguration, [configKey]: modelId, [infoKey]: modelInfo } + setApiConfiguration(apiConfig) + onUpdateApiConfig(apiConfig) + setValue(modelId) + setOpen(false) + setIsCustomModel(false) + }, + [apiConfiguration, configKey, infoKey, onUpdateApiConfig, setApiConfiguration], + ) + const onSelect = useCallback( (modelId: string) => { const modelInfo = Array.isArray(models) @@ -147,6 +165,17 @@ export const ModelPicker = ({ ))} + {allowCustomModel && ( + + { + setIsCustomModel(true) + setOpen(false) + }}> + + Add custom model + + + )} @@ -168,6 +197,28 @@ export const ModelPicker = ({ onSelect(recommendedModel)}>{recommendedModel}. You can also try searching "free" for no-cost options currently available.

+ {allowCustomModel && isCustomModel && ( +
+
+

Add Custom Model

+ setCustomModelId(e.target.value)} + /> +
+ + +
+
+
+ )} ) } diff --git a/webview-ui/src/components/settings/OpenAiModelPicker.tsx b/webview-ui/src/components/settings/OpenAiModelPicker.tsx index 4b987c7cf9..040da1d421 100644 --- a/webview-ui/src/components/settings/OpenAiModelPicker.tsx +++ b/webview-ui/src/components/settings/OpenAiModelPicker.tsx @@ -19,6 +19,7 @@ const OpenAiModelPicker: React.FC = () => { serviceName="OpenAI" serviceUrl="https://platform.openai.com" recommendedModel="gpt-4-turbo-preview" + allowCustomModel={true} /> ) }