fix: Reimplement settings variable for openRouter base url, it should be seperate from Ollama.

- Mimic the way codebaseIndexOpenRouterSpecificProvider is done, but for the base url setting
This commit is contained in:
Toray Altas 2025-12-28 13:29:52 -05:00
parent 289553fa4a
commit 8694b5bdf8
8 changed files with 25 additions and 11 deletions

View file

@ -49,6 +49,7 @@ export const codebaseIndexConfigSchema = z.object({
codebaseIndexBedrockRegion: z.string().optional(),
codebaseIndexBedrockProfile: z.string().optional(),
// OpenRouter specific fields
codebaseIndexOpenRouterEmbedderBaseUrl: z.string().optional(),
codebaseIndexOpenRouterSpecificProvider: z.string().optional(),
})

View file

@ -205,7 +205,6 @@ const claudeCodeSchema = apiModelIdProviderModelSchema.extend({})
const openRouterSchema = baseProviderSettingsSchema.extend({
openRouterApiKey: z.string().optional(),
openRouterModelId: z.string().optional(),
openRouterBaseUrl: z.string().optional(),
openRouterSpecificProvider: z.string().optional(),
})

View file

@ -2046,6 +2046,7 @@ export class ClineProvider
codebaseIndexBedrockRegion: codebaseIndexConfig?.codebaseIndexBedrockRegion,
codebaseIndexBedrockProfile: codebaseIndexConfig?.codebaseIndexBedrockProfile,
codebaseIndexOpenRouterSpecificProvider: codebaseIndexConfig?.codebaseIndexOpenRouterSpecificProvider,
codebaseIndexOpenRouterEmbedderBaseUrl: codebaseIndexConfig?.codebaseIndexOpenRouterEmbedderBaseUrl,
},
// Only set mdmCompliant if there's an actual MDM policy
// undefined means no MDM policy, true means compliant, false means non-compliant
@ -2292,6 +2293,8 @@ export class ClineProvider
codebaseIndexSearchMinScore: stateValues.codebaseIndexConfig?.codebaseIndexSearchMinScore,
codebaseIndexBedrockRegion: stateValues.codebaseIndexConfig?.codebaseIndexBedrockRegion,
codebaseIndexBedrockProfile: stateValues.codebaseIndexConfig?.codebaseIndexBedrockProfile,
codebaseIndexOpenRouterEmbedderBaseUrl:
stateValues.codebaseIndexConfig?.codebaseIndexOpenRouterEmbedderBaseUrl,
codebaseIndexOpenRouterSpecificProvider:
stateValues.codebaseIndexConfig?.codebaseIndexOpenRouterSpecificProvider,
},

View file

@ -2451,6 +2451,7 @@ export const webviewMessageHandler = async (
codebaseIndexSearchMaxResults: settings.codebaseIndexSearchMaxResults,
codebaseIndexSearchMinScore: settings.codebaseIndexSearchMinScore,
codebaseIndexOpenRouterSpecificProvider: settings.codebaseIndexOpenRouterSpecificProvider,
codebaseIndexOpenRouterEmbedderBaseUrl: settings.codebaseIndexOpenRouterEmbedderBaseUrl,
}
// Save global state first

View file

@ -78,6 +78,7 @@ export class CodeIndexConfigManager {
const bedrockRegion = codebaseIndexConfig.codebaseIndexBedrockRegion ?? "us-east-1"
const bedrockProfile = codebaseIndexConfig.codebaseIndexBedrockProfile ?? ""
const openRouterApiKey = this.contextProxy?.getSecret("codebaseIndexOpenRouterApiKey") ?? ""
const openRouterEmbedderBaseUrl = codebaseIndexConfig.codebaseIndexOpenRouterEmbedderBaseUrl ?? ""
const openRouterSpecificProvider = codebaseIndexConfig.codebaseIndexOpenRouterSpecificProvider ?? ""
// Update instance variables with configuration
@ -144,7 +145,7 @@ export class CodeIndexConfigManager {
this.openRouterOptions = openRouterApiKey
? {
apiKey: openRouterApiKey,
openRouterBaseUrl: codebaseIndexEmbedderBaseUrl,
openRouterBaseUrl: openRouterEmbedderBaseUrl,
specificProvider: openRouterSpecificProvider || undefined,
}
: undefined
@ -359,8 +360,8 @@ export class CodeIndexConfigManager {
const currentBedrockRegion = this.bedrockOptions?.region ?? ""
const currentBedrockProfile = this.bedrockOptions?.profile ?? ""
const currentOpenRouterApiKey = this.openRouterOptions?.apiKey ?? ""
const currentOpenRouterSpecificProvider = this.openRouterOptions?.specificProvider ?? ""
const currentOpenRouterBaseUrl = this.openRouterOptions?.openRouterBaseUrl ?? ""
const currentOpenRouterSpecificProvider = this.openRouterOptions?.specificProvider ?? ""
const currentQdrantUrl = this.qdrantUrl ?? ""
const currentQdrantApiKey = this.qdrantApiKey ?? ""

View file

@ -255,6 +255,7 @@ export interface WebviewMessage {
codebaseIndexBedrockProfile?: string
codebaseIndexSearchMaxResults?: number
codebaseIndexSearchMinScore?: number
codebaseIndexOpenRouterEmbedderBaseUrl?: string
codebaseIndexOpenRouterSpecificProvider?: string // OpenRouter provider routing
// Secret settings

View file

@ -84,6 +84,7 @@ interface LocalCodeIndexSettings {
codebaseIndexMistralApiKey?: string
codebaseIndexVercelAiGatewayApiKey?: string
codebaseIndexOpenRouterApiKey?: string
codebaseIndexOpenRouterEmbedderBaseUrl?: string
codebaseIndexOpenRouterSpecificProvider?: string
}
@ -228,6 +229,7 @@ export const CodeIndexPopover: React.FC<CodeIndexPopoverProps> = ({
codebaseIndexMistralApiKey: "",
codebaseIndexVercelAiGatewayApiKey: "",
codebaseIndexOpenRouterApiKey: "",
codebaseIndexOpenRouterEmbedderBaseUrl: "",
codebaseIndexOpenRouterSpecificProvider: "",
})
@ -267,6 +269,8 @@ export const CodeIndexPopover: React.FC<CodeIndexPopoverProps> = ({
codebaseIndexMistralApiKey: "",
codebaseIndexVercelAiGatewayApiKey: "",
codebaseIndexOpenRouterApiKey: "",
codebaseIndexOpenRouterEmbedderBaseUrl:
codebaseIndexConfig.codebaseIndexOpenRouterEmbedderBaseUrl || "",
codebaseIndexOpenRouterSpecificProvider:
codebaseIndexConfig.codebaseIndexOpenRouterSpecificProvider || "",
}
@ -1327,28 +1331,32 @@ export const CodeIndexPopover: React.FC<CodeIndexPopoverProps> = ({
{t("settings:codeIndex.openRouterBaseUrlLabel")}
</label>
<VSCodeTextField
value={currentSettings.codebaseIndexEmbedderBaseUrl || ""}
value={currentSettings.codebaseIndexOpenRouterEmbedderBaseUrl || ""}
onInput={(e: any) =>
updateSetting("codebaseIndexEmbedderBaseUrl", e.target.value)
updateSetting(
"codebaseIndexOpenRouterEmbedderBaseUrl",
e.target.value,
)
}
onBlur={(e: any) => {
// Set default OpenRouter URL if field is empty
if (!e.target.value.trim()) {
e.target.value = DEFAULT_OPENROUTER_URL
updateSetting(
"codebaseIndexEmbedderBaseUrl",
"codebaseIndexOpenRouterEmbedderBaseUrl",
DEFAULT_OPENROUTER_URL,
)
}
}}
placeholder={t("settings:codeIndex.openRouterUrlPlaceholder")}
placeholder={t("settings:codeIndex.openRouterBaseUrlPlaceholder")}
className={cn("w-full", {
"border-red-500": formErrors.codebaseIndexEmbedderBaseUrl,
"border-red-500":
formErrors.codebaseIndexOpenRouterEmbedderBaseUrl,
})}
/>
{formErrors.codebaseIndexEmbedderBaseUrl && (
{formErrors.codebaseIndexOpenRouterEmbedderBaseUrl && (
<p className="text-xs text-vscode-errorForeground mt-1 mb-0">
{formErrors.codebaseIndexEmbedderBaseUrl}
{formErrors.codebaseIndexOpenRouterEmbedderBaseUrl}
</p>
)}
</div>

View file

@ -107,7 +107,7 @@
"openRouterProviderRoutingLabel": "OpenRouter Provider Routing",
"openRouterProviderRoutingDescription": "OpenRouter routes requests to the best available providers for your embedding model. By default, requests are load balanced across the top providers to maximize uptime. However, you can choose a specific provider to use for this model.",
"openRouterBaseUrlLabel": "OpenRouter Base URL",
"openRouterUrlPlaceholder": "https://openrouter.ai/api/v1",
"openRouterBaseUrlPlaceholder": "https://openrouter.ai/api/v1",
"openaiCompatibleProvider": "OpenAI Compatible",
"openAiKeyLabel": "OpenAI API Key",
"openAiKeyPlaceholder": "Enter your OpenAI API key",