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