Path: blob/main/extensions/copilot/src/extension/byok/vscode-node/openRouterProvider.ts
13399 views
/*---------------------------------------------------------------------------------------------1* Copyright (c) Microsoft Corporation. All rights reserved.2* Licensed under the MIT License. See License.txt in the project root for license information.3*--------------------------------------------------------------------------------------------*/4import { IConfigurationService } from '../../../platform/configuration/common/configurationService';5import { ILogService } from '../../../platform/log/common/logService';6import { IFetcherService } from '../../../platform/networking/common/fetcherService';7import { IExperimentationService } from '../../../platform/telemetry/common/nullExperimentationService';8import { IInstantiationService } from '../../../util/vs/platform/instantiation/common/instantiation';9import { BYOKModelCapabilities } from '../common/byokProvider';10import { AbstractOpenAICompatibleLMProvider } from './abstractLanguageModelChatProvider';11import { IBYOKStorageService } from './byokStorageService';1213interface OpenRouterModelData {14id: string;15name: string;16supported_parameters?: string[];17architecture?: {18input_modalities?: string[];19};20top_provider: {21context_length: number;22};23}2425export class OpenRouterLMProvider extends AbstractOpenAICompatibleLMProvider {26public static readonly providerName = 'OpenRouter';27constructor(28byokStorageService: IBYOKStorageService,29@IFetcherService fetcherService: IFetcherService,30@ILogService logService: ILogService,31@IInstantiationService instantiationService: IInstantiationService,32@IConfigurationService configurationService: IConfigurationService,33@IExperimentationService expService: IExperimentationService34) {35super(36OpenRouterLMProvider.providerName.toLowerCase(),37OpenRouterLMProvider.providerName,38undefined,39byokStorageService,40fetcherService,41logService,42instantiationService,43configurationService,44expService45);46}4748protected override getModelsBaseUrl(): string | undefined {49return 'https://openrouter.ai/api/v1';50}5152protected override getModelsDiscoveryUrl(modelsBaseUrl: string): string {53return `${modelsBaseUrl}/models?supported_parameters=tools`;54}5556protected override resolveModelCapabilities(modelData: unknown): BYOKModelCapabilities | undefined {57const openRouterModelData = modelData as OpenRouterModelData;58return {59name: openRouterModelData.name,60toolCalling: openRouterModelData.supported_parameters?.includes('tools') ?? false,61vision: openRouterModelData.architecture?.input_modalities?.includes('image') ?? false,62maxInputTokens: openRouterModelData.top_provider.context_length - 16000,63maxOutputTokens: 1600064};65}6667}6869