From 4a75f85eac3eef13fb65f65a744a617d8541f1d8 Mon Sep 17 00:00:00 2001 From: dairui1 Date: Sat, 25 Jan 2025 16:48:21 +0800 Subject: [PATCH 1/2] feat: Add openRouterBaseUrl option --- src/api/providers/openrouter.ts | 2 +- src/core/webview/ClineProvider.ts | 6 +++ src/shared/api.ts | 1 + .../src/components/settings/ApiOptions.tsx | 39 ++++++++++++++++--- 4 files changed, 41 insertions(+), 7 deletions(-) diff --git a/src/api/providers/openrouter.ts b/src/api/providers/openrouter.ts index f28d74b9a64..14a650f3c53 100644 --- a/src/api/providers/openrouter.ts +++ b/src/api/providers/openrouter.ts @@ -26,7 +26,7 @@ export class OpenRouterHandler implements ApiHandler, SingleCompletionHandler { constructor(options: ApiHandlerOptions) { this.options = options this.client = new OpenAI({ - baseURL: "https://openrouter.ai/api/v1", + baseURL: this.options.openRouterBaseUrl, apiKey: this.options.openRouterApiKey, defaultHeaders: { "HTTP-Referer": "https://github.com/RooVetGit/Roo-Cline", diff --git a/src/core/webview/ClineProvider.ts b/src/core/webview/ClineProvider.ts index 4cd34b87667..45368e0ffc8 100644 --- a/src/core/webview/ClineProvider.ts +++ b/src/core/webview/ClineProvider.ts @@ -93,6 +93,7 @@ type GlobalStateKey = | "openAiStreamingEnabled" | "openRouterModelId" | "openRouterModelInfo" + | "openRouterBaseUrl" | "openRouterUseMiddleOutTransform" | "allowedCommands" | "soundEnabled" @@ -1293,6 +1294,7 @@ export class ClineProvider implements vscode.WebviewViewProvider { azureApiVersion, openAiStreamingEnabled, openRouterModelId, + openRouterBaseUrl, openRouterModelInfo, openRouterUseMiddleOutTransform, vsCodeLmModelSelector, @@ -1331,6 +1333,7 @@ export class ClineProvider implements vscode.WebviewViewProvider { await this.updateGlobalState("openAiStreamingEnabled", openAiStreamingEnabled) await this.updateGlobalState("openRouterModelId", openRouterModelId) await this.updateGlobalState("openRouterModelInfo", openRouterModelInfo) + await this.updateGlobalState("openRouterBaseUrl", openRouterBaseUrl) await this.updateGlobalState("openRouterUseMiddleOutTransform", openRouterUseMiddleOutTransform) await this.updateGlobalState("vsCodeLmModelSelector", vsCodeLmModelSelector) await this.storeSecret("mistralApiKey", mistralApiKey) @@ -1954,6 +1957,7 @@ export class ClineProvider implements vscode.WebviewViewProvider { openAiStreamingEnabled, openRouterModelId, openRouterModelInfo, + openRouterBaseUrl, openRouterUseMiddleOutTransform, lastShownAnnouncementId, customInstructions, @@ -2022,6 +2026,7 @@ export class ClineProvider implements vscode.WebviewViewProvider { this.getGlobalState("openAiStreamingEnabled") as Promise, this.getGlobalState("openRouterModelId") as Promise, this.getGlobalState("openRouterModelInfo") as Promise, + this.getGlobalState("openRouterBaseUrl") as Promise, this.getGlobalState("openRouterUseMiddleOutTransform") as Promise, this.getGlobalState("lastShownAnnouncementId") as Promise, this.getGlobalState("customInstructions") as Promise, @@ -2107,6 +2112,7 @@ export class ClineProvider implements vscode.WebviewViewProvider { openAiStreamingEnabled, openRouterModelId, openRouterModelInfo, + openRouterBaseUrl, openRouterUseMiddleOutTransform, vsCodeLmModelSelector, }, diff --git a/src/shared/api.ts b/src/shared/api.ts index 0b22183bdde..950b94b051d 100644 --- a/src/shared/api.ts +++ b/src/shared/api.ts @@ -26,6 +26,7 @@ export interface ApiHandlerOptions { openRouterApiKey?: string openRouterModelId?: string openRouterModelInfo?: ModelInfo + openRouterBaseUrl?: string awsAccessKey?: string awsSecretKey?: string awsSessionToken?: string diff --git a/webview-ui/src/components/settings/ApiOptions.tsx b/webview-ui/src/components/settings/ApiOptions.tsx index 6be06718933..63fce609ec5 100644 --- a/webview-ui/src/components/settings/ApiOptions.tsx +++ b/webview-ui/src/components/settings/ApiOptions.tsx @@ -51,6 +51,7 @@ const ApiOptions = ({ apiErrorMessage, modelIdErrorMessage }: ApiOptionsProps) = const [vsCodeLmModels, setVsCodeLmModels] = useState([]) const [anthropicBaseUrlSelected, setAnthropicBaseUrlSelected] = useState(!!apiConfiguration?.anthropicBaseUrl) const [azureApiVersionSelected, setAzureApiVersionSelected] = useState(!!apiConfiguration?.azureApiVersion) + const [openRouterBaseUrlSelected, setOpenRouterBaseUrlSelected] = useState(!!apiConfiguration?.openRouterBaseUrl) const [isDescriptionExpanded, setIsDescriptionExpanded] = useState(false) const { selectedProvider, selectedModelId, selectedModelInfo } = useMemo(() => { @@ -303,12 +304,38 @@ const ApiOptions = ({ apiErrorMessage, modelIdErrorMessage }: ApiOptionsProps) = OpenRouter API Key {!apiConfiguration?.openRouterApiKey && ( - - Get OpenRouter API Key - +

+ + Get OpenRouter API Key + +

+ )} + { + setOpenRouterBaseUrlSelected(checked) + if (!checked) { + handleInputChange("openRouterBaseUrl")({ + target: { + value: "", + }, + }) + } + }}> + Use custom base URL + + + {openRouterBaseUrlSelected && ( + )}

Date: Sun, 26 Jan 2025 00:31:53 -0500 Subject: [PATCH 2/2] Fix --- src/api/providers/openrouter.ts | 2 +- webview-ui/src/components/settings/ApiOptions.tsx | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/api/providers/openrouter.ts b/src/api/providers/openrouter.ts index 14a650f3c53..117a6379966 100644 --- a/src/api/providers/openrouter.ts +++ b/src/api/providers/openrouter.ts @@ -26,7 +26,7 @@ export class OpenRouterHandler implements ApiHandler, SingleCompletionHandler { constructor(options: ApiHandlerOptions) { this.options = options this.client = new OpenAI({ - baseURL: this.options.openRouterBaseUrl, + baseURL: this.options.openRouterBaseUrl || "https://openrouter.ai/api/v1", apiKey: this.options.openRouterApiKey, defaultHeaders: { "HTTP-Referer": "https://github.com/RooVetGit/Roo-Cline", diff --git a/webview-ui/src/components/settings/ApiOptions.tsx b/webview-ui/src/components/settings/ApiOptions.tsx index 63fce609ec5..1be00c74e14 100644 --- a/webview-ui/src/components/settings/ApiOptions.tsx +++ b/webview-ui/src/components/settings/ApiOptions.tsx @@ -330,7 +330,7 @@ const ApiOptions = ({ apiErrorMessage, modelIdErrorMessage }: ApiOptionsProps) = {openRouterBaseUrlSelected && (