diff --git a/webview-ui/src/components/settings/ApiOptions.tsx b/webview-ui/src/components/settings/ApiOptions.tsx
index 32cbaa45a1..aff3627d0f 100644
--- a/webview-ui/src/components/settings/ApiOptions.tsx
+++ b/webview-ui/src/components/settings/ApiOptions.tsx
@@ -12,13 +12,11 @@ import {
mainlandQwenModels,
ModelInfo,
nebiusModels,
- sapAiCoreModels,
} from "@shared/api"
import { EmptyRequest, StringRequest } from "@shared/proto/common"
-import { OpenAiModelsRequest, UpdateApiConfigurationRequest } from "@shared/proto/models"
+import { UpdateApiConfigurationRequest } from "@shared/proto/models"
import { convertApiConfigurationToProto } from "@shared/proto-conversions/models/api-configuration-conversion"
import {
- VSCodeButton,
VSCodeCheckbox,
VSCodeDropdown,
VSCodeLink,
@@ -27,7 +25,7 @@ import {
VSCodeRadioGroup,
VSCodeTextField,
} from "@vscode/webview-ui-toolkit/react"
-import { Fragment, memo, useCallback, useEffect, useMemo, useRef, useState } from "react"
+import { Fragment, memo, useCallback, useEffect, useMemo, useState } from "react"
import { useInterval } from "react-use"
import styled from "styled-components"
import * as vscodemodels from "vscode"
@@ -56,6 +54,7 @@ import { FireworksProvider } from "./providers/FireworksProvider"
import { XaiProvider } from "./providers/XaiProvider"
import { CerebrasProvider } from "./providers/CerebrasProvider"
import { OllamaProvider } from "./providers/OllamaProvider"
+import { SapAiCoreProvider } from "./providers/SapAiCoreProvider"
interface ApiOptionsProps {
showModelOptions: boolean
@@ -1174,69 +1173,13 @@ const ApiOptions = ({
/>
)}
- {selectedProvider === "sapaicore" && (
-
-
- AI Core Client Id
-
- {apiConfiguration?.sapAiCoreClientId && (
-
- Client Id is set. To change it, please re-enter the value.
-
- )}
-
- AI Core Client Secret
-
- {apiConfiguration?.sapAiCoreClientSecret && (
-
- Client Secret is set. To change it, please re-enter the value.
-
- )}
-
- AI Core Base URL
-
-
- AI Core Auth URL
-
-
- AI Core Resource Group
-
-
- These credentials are stored locally and only used to make API requests from this extension.
-
- You can find more information about SAP AI Core API access here.
-
-
-
+ {apiConfiguration && selectedProvider === "sapaicore" && (
+
)}
{apiErrorMessage && (
@@ -1323,6 +1266,7 @@ const ApiOptions = ({
selectedProvider !== "fireworks" &&
selectedProvider !== "xai" &&
selectedProvider !== "cerebras" &&
+ selectedProvider !== "sapaicore" &&
showModelOptions && (
<>
@@ -1335,7 +1279,6 @@ const ApiOptions = ({
apiConfiguration?.qwenApiLine === "china" ? mainlandQwenModels : internationalQwenModels,
)}
{selectedProvider === "nebius" && createDropdown(nebiusModels)}
- {selectedProvider === "sapaicore" && createDropdown(sapAiCoreModels)}
{SUPPORTED_THINKING_MODELS[selectedProvider]?.includes(selectedModelId) && (
diff --git a/webview-ui/src/components/settings/providers/SapAiCoreProvider.tsx b/webview-ui/src/components/settings/providers/SapAiCoreProvider.tsx
new file mode 100644
index 0000000000..1dd195b92b
--- /dev/null
+++ b/webview-ui/src/components/settings/providers/SapAiCoreProvider.tsx
@@ -0,0 +1,105 @@
+import { ApiConfiguration, sapAiCoreModels } from "@shared/api"
+import { VSCodeTextField, VSCodeLink } from "@vscode/webview-ui-toolkit/react"
+import { ModelSelector } from "../common/ModelSelector"
+import { ModelInfoView } from "../common/ModelInfoView"
+import { normalizeApiConfiguration } from "../utils/providerUtils"
+
+/**
+ * Props for the SapAiCoreProvider component
+ */
+interface SapAiCoreProviderProps {
+ apiConfiguration: ApiConfiguration
+ handleInputChange: (field: keyof ApiConfiguration) => (event: any) => void
+ showModelOptions: boolean
+ isPopup?: boolean
+}
+
+/**
+ * The SAP AI Core provider configuration component
+ */
+export const SapAiCoreProvider = ({ apiConfiguration, handleInputChange, showModelOptions, isPopup }: SapAiCoreProviderProps) => {
+ const { selectedModelId, selectedModelInfo } = normalizeApiConfiguration(apiConfiguration)
+
+ return (
+
+
+ AI Core Client Id
+
+ {apiConfiguration?.sapAiCoreClientId && (
+
+ Client Id is set. To change it, please re-enter the value.
+
+ )}
+
+
+ AI Core Client Secret
+
+ {apiConfiguration?.sapAiCoreClientSecret && (
+
+ Client Secret is set. To change it, please re-enter the value.
+
+ )}
+
+
+ AI Core Base URL
+
+
+
+ AI Core Auth URL
+
+
+
+ AI Core Resource Group
+
+
+
+ These credentials are stored locally and only used to make API requests from this extension.
+
+ You can find more information about SAP AI Core API access here.
+
+
+
+ {showModelOptions && (
+ <>
+
+
+
+ >
+ )}
+
+ )
+}