@aeye/openrouter 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +556 -0
- package/dist/__integration__/openrouter.integration.test.d.ts +8 -0
- package/dist/__integration__/openrouter.integration.test.d.ts.map +1 -0
- package/dist/__integration__/openrouter.integration.test.js +203 -0
- package/dist/__integration__/openrouter.integration.test.js.map +1 -0
- package/dist/__integration__/setup.d.ts +7 -0
- package/dist/__integration__/setup.d.ts.map +1 -0
- package/dist/__integration__/setup.js +26 -0
- package/dist/__integration__/setup.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -0
- package/dist/openrouter.d.ts +100 -0
- package/dist/openrouter.d.ts.map +1 -0
- package/dist/openrouter.js +315 -0
- package/dist/openrouter.js.map +1 -0
- package/dist/source.d.ts +34 -0
- package/dist/source.d.ts.map +1 -0
- package/dist/source.js +77 -0
- package/dist/source.js.map +1 -0
- package/dist/types.d.ts +178 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/package.json +57 -0
|
@@ -0,0 +1,315 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OpenRouter Provider
|
|
3
|
+
*
|
|
4
|
+
* Provider for OpenRouter API with provider-specific routing and fallback options.
|
|
5
|
+
*/
|
|
6
|
+
import { detectTier } from '@aeye/ai';
|
|
7
|
+
import { OpenAIProvider } from '@aeye/openai';
|
|
8
|
+
import OpenAI from 'openai';
|
|
9
|
+
import { fetchModels, fetchZDRModels } from './source';
|
|
10
|
+
/**
|
|
11
|
+
* Convert OpenRouter parameter names to our ModelParameter format
|
|
12
|
+
*/
|
|
13
|
+
function convertSupportedParameters(openRouterParams) {
|
|
14
|
+
const paramMap = {
|
|
15
|
+
'max_tokens': 'maxTokens',
|
|
16
|
+
'temperature': 'temperature',
|
|
17
|
+
'top_p': 'topP',
|
|
18
|
+
'frequency_penalty': 'frequencyPenalty',
|
|
19
|
+
'presence_penalty': 'presencePenalty',
|
|
20
|
+
'stop': 'stop',
|
|
21
|
+
'seed': 'seed',
|
|
22
|
+
'response_format': 'responseFormat',
|
|
23
|
+
'structured_outputs': 'structuredOutput',
|
|
24
|
+
'tools': 'tools',
|
|
25
|
+
'tool_choice': 'toolChoice',
|
|
26
|
+
'logit_bias': 'logitBias',
|
|
27
|
+
'logprobs': 'logProbabilities',
|
|
28
|
+
'top_logprobs': 'logProbabilities',
|
|
29
|
+
'reasoning': 'reason',
|
|
30
|
+
'include_reasoning': 'reason',
|
|
31
|
+
};
|
|
32
|
+
const converted = new Set();
|
|
33
|
+
for (const param of openRouterParams) {
|
|
34
|
+
const mapped = paramMap[param];
|
|
35
|
+
if (mapped) {
|
|
36
|
+
converted.add(mapped);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
return Array.from(converted);
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Detect capabilities from input/output modalities
|
|
43
|
+
*/
|
|
44
|
+
function detectCapabilities(model) {
|
|
45
|
+
const capabilities = new Set();
|
|
46
|
+
// Chat capability - if model outputs text
|
|
47
|
+
if (model.architecture.output_modalities.includes('text')) {
|
|
48
|
+
capabilities.add('chat');
|
|
49
|
+
}
|
|
50
|
+
// Image generation - if model outputs images
|
|
51
|
+
if (model.architecture.output_modalities.includes('image')) {
|
|
52
|
+
capabilities.add('image');
|
|
53
|
+
}
|
|
54
|
+
// Vision capability - if model accepts images as input
|
|
55
|
+
if (model.architecture.input_modalities.includes('image')) {
|
|
56
|
+
capabilities.add('vision');
|
|
57
|
+
}
|
|
58
|
+
// Audio/hearing capability - if model accepts audio as input
|
|
59
|
+
if (model.architecture.input_modalities.includes('audio')) {
|
|
60
|
+
capabilities.add('hearing');
|
|
61
|
+
}
|
|
62
|
+
// File handling capability
|
|
63
|
+
if (model.architecture.input_modalities.includes('file')) {
|
|
64
|
+
capabilities.add('vision'); // Files often imply document/vision capabilities
|
|
65
|
+
}
|
|
66
|
+
// Tools/function calling
|
|
67
|
+
if (model.supported_parameters.includes('tools') || model.supported_parameters.includes('tool_choice')) {
|
|
68
|
+
capabilities.add('tools');
|
|
69
|
+
}
|
|
70
|
+
// Reasoning capability
|
|
71
|
+
if (model.supported_parameters.includes('reasoning') || model.supported_parameters.includes('include_reasoning')) {
|
|
72
|
+
capabilities.add('reasoning');
|
|
73
|
+
}
|
|
74
|
+
// JSON output capability
|
|
75
|
+
if (model.supported_parameters.includes('response_format')) {
|
|
76
|
+
capabilities.add('json');
|
|
77
|
+
}
|
|
78
|
+
// Structured output capability
|
|
79
|
+
if (model.supported_parameters.includes('structured_outputs')) {
|
|
80
|
+
capabilities.add('structured');
|
|
81
|
+
}
|
|
82
|
+
// Streaming capability (most models support this)
|
|
83
|
+
capabilities.add('streaming');
|
|
84
|
+
return Array.from(capabilities);
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Convert OpenRouter model to ModelInfo with full details
|
|
88
|
+
*/
|
|
89
|
+
export function convertOpenRouterModel(model, zdrModelIds, metrics) {
|
|
90
|
+
const capabilities = detectCapabilities(model);
|
|
91
|
+
const supportedParameters = convertSupportedParameters(model.supported_parameters);
|
|
92
|
+
const tier = detectTier(model.name);
|
|
93
|
+
// Update ZDR support from ZDR endpoint
|
|
94
|
+
if (zdrModelIds.has(model.id)) {
|
|
95
|
+
capabilities.push('zdr');
|
|
96
|
+
}
|
|
97
|
+
const hasValue = (x) => {
|
|
98
|
+
return x !== undefined && x !== null && x !== '' && x !== '0';
|
|
99
|
+
};
|
|
100
|
+
return {
|
|
101
|
+
provider: 'openrouter',
|
|
102
|
+
id: model.id,
|
|
103
|
+
name: model.name,
|
|
104
|
+
capabilities: new Set(capabilities), // Will be serialized as array
|
|
105
|
+
tier,
|
|
106
|
+
pricing: {
|
|
107
|
+
text: hasValue(model.pricing.prompt) || hasValue(model.pricing.completion) ? {
|
|
108
|
+
input: hasValue(model.pricing.prompt) ? parseFloat(model.pricing.prompt) * 1_000_000 : undefined,
|
|
109
|
+
output: hasValue(model.pricing.completion) ? parseFloat(model.pricing.completion) * 1_000_000 : undefined,
|
|
110
|
+
} : undefined,
|
|
111
|
+
image: hasValue(model.pricing.image) ? {
|
|
112
|
+
input: parseFloat(model.pricing.image) * 1_000_000,
|
|
113
|
+
} : undefined,
|
|
114
|
+
reasoning: hasValue(model.pricing.internal_reasoning) ? {
|
|
115
|
+
output: parseFloat(model.pricing.internal_reasoning) * 1_000_000,
|
|
116
|
+
} : undefined,
|
|
117
|
+
perRequest: hasValue(model.pricing.request)
|
|
118
|
+
? parseFloat(model.pricing.request)
|
|
119
|
+
: undefined,
|
|
120
|
+
},
|
|
121
|
+
contextWindow: model.context_length,
|
|
122
|
+
maxOutputTokens: model.top_provider.max_completion_tokens ?? undefined,
|
|
123
|
+
tokenizer: model.architecture.tokenizer,
|
|
124
|
+
supportedParameters: new Set(supportedParameters), // Will be serialized as array
|
|
125
|
+
metrics: metrics ? {
|
|
126
|
+
timeToFirstToken: metrics.latency,
|
|
127
|
+
tokensPerSecond: metrics.throughput,
|
|
128
|
+
// Store uptime in metadata since it's not a standard metric
|
|
129
|
+
} : undefined,
|
|
130
|
+
metadata: {
|
|
131
|
+
description: model.description,
|
|
132
|
+
defaultParameters: model.default_parameters,
|
|
133
|
+
canonicalSlug: model.canonical_slug,
|
|
134
|
+
huggingFaceId: model.hugging_face_id,
|
|
135
|
+
created: model.created,
|
|
136
|
+
uptime: metrics?.uptime,
|
|
137
|
+
},
|
|
138
|
+
};
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* OpenRouter provider implementation extending base OpenAI-compatible provider
|
|
142
|
+
*/
|
|
143
|
+
export class OpenRouterProvider extends OpenAIProvider {
|
|
144
|
+
name = 'openrouter';
|
|
145
|
+
createClient(config) {
|
|
146
|
+
return new OpenAI({
|
|
147
|
+
apiKey: config.apiKey,
|
|
148
|
+
baseURL: config.baseURL || 'https://openrouter.ai/api/v1',
|
|
149
|
+
project: config.project,
|
|
150
|
+
organization: config.organization,
|
|
151
|
+
defaultHeaders: {
|
|
152
|
+
'HTTP-Referer': config.defaultParams?.siteUrl,
|
|
153
|
+
'X-Title': config.defaultParams?.appName,
|
|
154
|
+
},
|
|
155
|
+
});
|
|
156
|
+
}
|
|
157
|
+
convertModel(model) {
|
|
158
|
+
// This won't be used since we override listModels, but provide implementation
|
|
159
|
+
return {
|
|
160
|
+
provider: 'openrouter',
|
|
161
|
+
id: model.id,
|
|
162
|
+
name: model.id,
|
|
163
|
+
capabilities: new Set(['chat', 'streaming']),
|
|
164
|
+
tier: detectTier(model.id),
|
|
165
|
+
pricing: {},
|
|
166
|
+
contextWindow: 0,
|
|
167
|
+
maxOutputTokens: undefined,
|
|
168
|
+
metadata: {},
|
|
169
|
+
};
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* Augment chat request with OpenRouter-specific parameters
|
|
173
|
+
*/
|
|
174
|
+
augmentChatRequest(params, request, config) {
|
|
175
|
+
// Add reasoning if specified
|
|
176
|
+
if (request.reason) {
|
|
177
|
+
params.reasoning = {
|
|
178
|
+
enabled: true,
|
|
179
|
+
effort: request.reason.effort,
|
|
180
|
+
max_tokens: request.reason.maxTokens,
|
|
181
|
+
};
|
|
182
|
+
}
|
|
183
|
+
// Merge provider parameters from config defaults
|
|
184
|
+
if (config.defaultParams) {
|
|
185
|
+
const dp = config.defaultParams;
|
|
186
|
+
params.provider = {
|
|
187
|
+
allow_fallbacks: dp.providers?.allowFallbacks,
|
|
188
|
+
require_parameters: dp.providers?.requireParameters,
|
|
189
|
+
data_collection: dp.providers?.dataCollection,
|
|
190
|
+
max_price: dp.providers?.maxPrice,
|
|
191
|
+
...dp.providers,
|
|
192
|
+
};
|
|
193
|
+
if (dp.transforms) {
|
|
194
|
+
params.transforms = dp.transforms;
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
/**
|
|
199
|
+
*
|
|
200
|
+
* @param expected
|
|
201
|
+
* @param response
|
|
202
|
+
*/
|
|
203
|
+
augmentChatResponse(expected, response, config) {
|
|
204
|
+
const message = expected.choices?.[0]?.message;
|
|
205
|
+
if (message) {
|
|
206
|
+
if (message.reasoning) {
|
|
207
|
+
response.reasoning = message.reasoning;
|
|
208
|
+
}
|
|
209
|
+
else if (message.reasoning_details) {
|
|
210
|
+
response.reasoning = message.reasoning_details
|
|
211
|
+
.map(rd => [rd.text, rd.summary])
|
|
212
|
+
.flat()
|
|
213
|
+
.filter(Boolean)
|
|
214
|
+
.join('\n');
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
const usage = expected.usage;
|
|
218
|
+
if (usage) {
|
|
219
|
+
if (!response.usage) {
|
|
220
|
+
response.usage = {};
|
|
221
|
+
}
|
|
222
|
+
if (!response.usage.text) {
|
|
223
|
+
response.usage.text = {};
|
|
224
|
+
}
|
|
225
|
+
if (usage.completion_tokens) {
|
|
226
|
+
response.usage.text.output = usage.completion_tokens;
|
|
227
|
+
}
|
|
228
|
+
if (usage.prompt_tokens) {
|
|
229
|
+
response.usage.text.input = usage.prompt_tokens;
|
|
230
|
+
}
|
|
231
|
+
if (usage.cost) {
|
|
232
|
+
response.usage.cost = usage.cost;
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
augmentChatChunk(expected, chunk, config) {
|
|
237
|
+
const usage = expected.usage;
|
|
238
|
+
if (usage) {
|
|
239
|
+
if (!chunk.usage) {
|
|
240
|
+
chunk.usage = {};
|
|
241
|
+
}
|
|
242
|
+
if (!chunk.usage.text) {
|
|
243
|
+
chunk.usage.text = {};
|
|
244
|
+
}
|
|
245
|
+
if (usage.completion_tokens) {
|
|
246
|
+
chunk.usage.text.output = usage.completion_tokens;
|
|
247
|
+
}
|
|
248
|
+
if (usage.prompt_tokens) {
|
|
249
|
+
chunk.usage.text.input = usage.prompt_tokens;
|
|
250
|
+
}
|
|
251
|
+
if (usage.cost) {
|
|
252
|
+
chunk.usage.cost = usage.cost;
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
if (expected.reasoning) {
|
|
256
|
+
chunk.reasoning = expected.reasoning;
|
|
257
|
+
}
|
|
258
|
+
else if (expected.reasoning_details) {
|
|
259
|
+
chunk.reasoning = expected.reasoning_details
|
|
260
|
+
.map(rd => [rd.text, rd.summary])
|
|
261
|
+
.flat()
|
|
262
|
+
.filter(Boolean)
|
|
263
|
+
.join('\n');
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
/**
|
|
267
|
+
* OpenRouter does not support image generation
|
|
268
|
+
*/
|
|
269
|
+
generateImage = undefined;
|
|
270
|
+
/**
|
|
271
|
+
* OpenRouter does not support image generation streaming
|
|
272
|
+
*/
|
|
273
|
+
generateImageStream = undefined;
|
|
274
|
+
/**
|
|
275
|
+
* OpenRouter does not support image editing
|
|
276
|
+
*/
|
|
277
|
+
editImage = undefined;
|
|
278
|
+
/**
|
|
279
|
+
* OpenRouter does not support image editing
|
|
280
|
+
*/
|
|
281
|
+
editImageStream = undefined;
|
|
282
|
+
/**
|
|
283
|
+
* OpenRouter does not support audio transcription
|
|
284
|
+
*/
|
|
285
|
+
transcribe = undefined;
|
|
286
|
+
/**
|
|
287
|
+
* OpenRouter does not support audio transcription streaming
|
|
288
|
+
*/
|
|
289
|
+
transcribeStream = undefined;
|
|
290
|
+
/**
|
|
291
|
+
* OpenRouter does not support speech synthesis
|
|
292
|
+
*/
|
|
293
|
+
speech = undefined;
|
|
294
|
+
/**
|
|
295
|
+
* OpenRouter does not support embeddings
|
|
296
|
+
*/
|
|
297
|
+
embed = undefined;
|
|
298
|
+
/**
|
|
299
|
+
* Override listModels to use OpenRouter's model API with ZDR support
|
|
300
|
+
*/
|
|
301
|
+
async listModels(config) {
|
|
302
|
+
try {
|
|
303
|
+
// Fetch both models and ZDR models in parallel
|
|
304
|
+
const [models, zdrModels] = await Promise.all([
|
|
305
|
+
fetchModels(config.apiKey),
|
|
306
|
+
fetchZDRModels(config.apiKey),
|
|
307
|
+
]);
|
|
308
|
+
return models.map((model) => convertOpenRouterModel(model, zdrModels));
|
|
309
|
+
}
|
|
310
|
+
catch (error) {
|
|
311
|
+
throw new Error(`Failed to list OpenRouter models: ${error}`);
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
//# sourceMappingURL=openrouter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openrouter.js","sourceRoot":"","sources":["../src/openrouter.ts"],"names":[],"mappings":"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"}
|
package/dist/source.d.ts
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OpenRouter Model Source
|
|
3
|
+
*
|
|
4
|
+
* Fetches model information from OpenRouter API to enrich all providers
|
|
5
|
+
* with comprehensive model metadata (pricing, capabilities, ZDR support).
|
|
6
|
+
*/
|
|
7
|
+
import type { ModelInfo, ModelSource } from '@aeye/ai';
|
|
8
|
+
import { OpenRouterModel } from './types';
|
|
9
|
+
/**
|
|
10
|
+
* Configuration for OpenRouter model source
|
|
11
|
+
*/
|
|
12
|
+
export interface OpenRouterSourceConfig {
|
|
13
|
+
apiKey?: string;
|
|
14
|
+
includeZDR?: boolean;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Fetch ZDR (Zero Data Retention) compliant models
|
|
18
|
+
*/
|
|
19
|
+
export declare function fetchZDRModels(apiKey?: string): Promise<Set<string>>;
|
|
20
|
+
/**
|
|
21
|
+
* Fetch all OpenRouter models
|
|
22
|
+
* @returns
|
|
23
|
+
*/
|
|
24
|
+
export declare function fetchModels(apiKey?: string): Promise<OpenRouterModel[]>;
|
|
25
|
+
/**
|
|
26
|
+
* OpenRouter model source implementation
|
|
27
|
+
*/
|
|
28
|
+
export declare class OpenRouterModelSource implements ModelSource {
|
|
29
|
+
readonly name = "openrouter";
|
|
30
|
+
private config;
|
|
31
|
+
constructor(config?: OpenRouterSourceConfig);
|
|
32
|
+
fetchModels(config?: Record<string, unknown>): Promise<ModelInfo[]>;
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=source.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"source.d.ts","sourceRoot":"","sources":["../src/source.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAEvD,OAAO,EAAE,eAAe,EAAY,MAAM,SAAS,CAAC;AAEpD;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED;;GAEG;AACH,wBAAsB,cAAc,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAsB1E;AAED;;;GAGG;AACH,wBAAsB,WAAW,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC,CAa7E;AAED;;GAEG;AACH,qBAAa,qBAAsB,YAAW,WAAW;IACvD,QAAQ,CAAC,IAAI,gBAAgB;IAC7B,OAAO,CAAC,MAAM,CAAyB;gBAE3B,MAAM,GAAE,sBAA2B;IAIzC,WAAW,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;CAiB1E"}
|
package/dist/source.js
ADDED
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OpenRouter Model Source
|
|
3
|
+
*
|
|
4
|
+
* Fetches model information from OpenRouter API to enrich all providers
|
|
5
|
+
* with comprehensive model metadata (pricing, capabilities, ZDR support).
|
|
6
|
+
*/
|
|
7
|
+
import { convertOpenRouterModel } from './openrouter';
|
|
8
|
+
/**
|
|
9
|
+
* Fetch ZDR (Zero Data Retention) compliant models
|
|
10
|
+
*/
|
|
11
|
+
export async function fetchZDRModels(apiKey) {
|
|
12
|
+
try {
|
|
13
|
+
const effectiveKey = apiKey ?? process.env.OPENROUTER_API_KEY;
|
|
14
|
+
const response = await fetch('https://openrouter.ai/api/v1/endpoints/zdr', {
|
|
15
|
+
headers: {
|
|
16
|
+
'Content-Type': 'application/json',
|
|
17
|
+
'Authorization': effectiveKey ? `Bearer ${effectiveKey}` : undefined,
|
|
18
|
+
},
|
|
19
|
+
});
|
|
20
|
+
if (!response.ok) {
|
|
21
|
+
console.warn('Failed to fetch ZDR models from OpenRouter');
|
|
22
|
+
return new Set();
|
|
23
|
+
}
|
|
24
|
+
const data = (await response.json());
|
|
25
|
+
// The model_name field contains the model ID in provider/model format
|
|
26
|
+
return new Set(data.data.map((model) => model.model_name));
|
|
27
|
+
}
|
|
28
|
+
catch (error) {
|
|
29
|
+
console.warn('Error fetching ZDR models:', error);
|
|
30
|
+
return new Set();
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Fetch all OpenRouter models
|
|
35
|
+
* @returns
|
|
36
|
+
*/
|
|
37
|
+
export async function fetchModels(apiKey) {
|
|
38
|
+
const effectiveKey = apiKey ?? process.env.OPENROUTER_API_KEY;
|
|
39
|
+
const response = await fetch('https://openrouter.ai/api/v1/models', {
|
|
40
|
+
headers: {
|
|
41
|
+
'Content-Type': 'application/json',
|
|
42
|
+
'Authorization': effectiveKey ? `Bearer ${effectiveKey}` : undefined,
|
|
43
|
+
},
|
|
44
|
+
});
|
|
45
|
+
if (!response.ok) {
|
|
46
|
+
throw new Error(`Failed to fetch models: ${response.statusText}`);
|
|
47
|
+
}
|
|
48
|
+
const data = (await response.json());
|
|
49
|
+
return data.data;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* OpenRouter model source implementation
|
|
53
|
+
*/
|
|
54
|
+
export class OpenRouterModelSource {
|
|
55
|
+
name = 'openrouter';
|
|
56
|
+
config;
|
|
57
|
+
constructor(config = {}) {
|
|
58
|
+
this.config = config;
|
|
59
|
+
}
|
|
60
|
+
async fetchModels(config) {
|
|
61
|
+
const effectiveConfig = { ...this.config, ...config };
|
|
62
|
+
try {
|
|
63
|
+
// Fetch both models and ZDR models in parallel if ZDR is enabled
|
|
64
|
+
const [models, zdrModels] = await Promise.all([
|
|
65
|
+
fetchModels(effectiveConfig.apiKey),
|
|
66
|
+
effectiveConfig.includeZDR !== false ? fetchZDRModels(effectiveConfig.apiKey) : Promise.resolve(new Set()),
|
|
67
|
+
]);
|
|
68
|
+
// Convert models and update ZDR support
|
|
69
|
+
return models.map((model) => convertOpenRouterModel(model, zdrModels));
|
|
70
|
+
}
|
|
71
|
+
catch (error) {
|
|
72
|
+
console.error('Failed to fetch models from OpenRouter:', error);
|
|
73
|
+
throw error;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
//# sourceMappingURL=source.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"source.js","sourceRoot":"","sources":["../src/source.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
import OpenAI from "openai";
|
|
2
|
+
/**
|
|
3
|
+
* OpenRouter modalities
|
|
4
|
+
*/
|
|
5
|
+
export type OpenRouterModality = 'text->text' | 'text+image->text' | 'text+image->text+image';
|
|
6
|
+
/**
|
|
7
|
+
* OpenRouter input modalities
|
|
8
|
+
*/
|
|
9
|
+
export type OpenRouterInput = 'audio' | 'file' | 'image' | 'text';
|
|
10
|
+
/**
|
|
11
|
+
* OpenRouter output modalities
|
|
12
|
+
*/
|
|
13
|
+
export type OpenRouterOutput = 'image' | 'text';
|
|
14
|
+
/**
|
|
15
|
+
* OpenRouter tokenizer types
|
|
16
|
+
*/
|
|
17
|
+
export type OpenRouterTokenize = 'Other' | 'GPT' | 'Mistral' | 'Llama3' | 'Qwen3' | 'Qwen' | 'Gemini' | 'DeepSeek' | 'Claude' | 'Grok' | 'Llama4' | 'Llama2' | 'Cohere' | 'Nova' | 'Router';
|
|
18
|
+
/**
|
|
19
|
+
* OpenRouter supported parameters
|
|
20
|
+
*/
|
|
21
|
+
export type OpenRouterSupportedParameter = 'max_tokens' | 'temperature' | 'top_p' | 'stop' | 'seed' | 'presence_penalty' | 'frequency_penalty' | 'response_format' | 'top_k' | 'tools' | 'structured_outputs' | 'tool_choice' | 'repetition_penalty' | 'reasoning' | 'include_reasoning' | 'min_p' | 'logit_bias' | 'logprobs' | 'top_a' | 'top_logprobs' | 'web_search_options';
|
|
22
|
+
/**
|
|
23
|
+
* OpenRouter model response from API
|
|
24
|
+
*/
|
|
25
|
+
export interface OpenRouterModel {
|
|
26
|
+
id: string;
|
|
27
|
+
canonical_slug: string;
|
|
28
|
+
hugging_face_id: string;
|
|
29
|
+
name: string;
|
|
30
|
+
created: number;
|
|
31
|
+
description?: string;
|
|
32
|
+
context_length: number;
|
|
33
|
+
architecture: {
|
|
34
|
+
modality: string;
|
|
35
|
+
input_modalities: OpenRouterInput[];
|
|
36
|
+
output_modalities: OpenRouterOutput[];
|
|
37
|
+
tokenizer: OpenRouterTokenize;
|
|
38
|
+
instruct_type: string | null;
|
|
39
|
+
};
|
|
40
|
+
pricing: {
|
|
41
|
+
prompt: string;
|
|
42
|
+
completion: string;
|
|
43
|
+
image?: string;
|
|
44
|
+
request?: string;
|
|
45
|
+
web_search?: string;
|
|
46
|
+
internal_reasoning?: string;
|
|
47
|
+
input_cache_read?: string;
|
|
48
|
+
input_cache_write?: string;
|
|
49
|
+
};
|
|
50
|
+
top_provider: {
|
|
51
|
+
context_length: number;
|
|
52
|
+
max_completion_tokens: number | null;
|
|
53
|
+
is_moderated: boolean;
|
|
54
|
+
};
|
|
55
|
+
supported_parameters: OpenRouterSupportedParameter[];
|
|
56
|
+
default_parameters: {
|
|
57
|
+
frequency_penalty: number;
|
|
58
|
+
temperature: number;
|
|
59
|
+
top_p: number;
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* ZDR model info from OpenRouter ZDR endpoint
|
|
64
|
+
*/
|
|
65
|
+
export interface ZDRModel {
|
|
66
|
+
name: string;
|
|
67
|
+
model_name: string;
|
|
68
|
+
context_length: number;
|
|
69
|
+
pricing: {
|
|
70
|
+
prompt?: string;
|
|
71
|
+
completion?: string;
|
|
72
|
+
request?: string;
|
|
73
|
+
image?: string;
|
|
74
|
+
};
|
|
75
|
+
provider_name: string;
|
|
76
|
+
tag: string;
|
|
77
|
+
quantization: string | null;
|
|
78
|
+
max_completion_tokens: number | null;
|
|
79
|
+
max_prompt_tokens: number | null;
|
|
80
|
+
supported_parameters: OpenRouterSupportedParameter[];
|
|
81
|
+
status: number;
|
|
82
|
+
uptime_last_30m: number | null;
|
|
83
|
+
supports_implicit_caching: boolean;
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* OpenRouter chat request with extensions
|
|
87
|
+
*/
|
|
88
|
+
export type OpenRouterChatRequest = OpenAI.Chat.ChatCompletionCreateParams & {
|
|
89
|
+
reasoning?: {
|
|
90
|
+
enabled: boolean;
|
|
91
|
+
effort?: 'low' | 'medium' | 'high';
|
|
92
|
+
max_tokens?: number;
|
|
93
|
+
};
|
|
94
|
+
provider?: {
|
|
95
|
+
order?: string[];
|
|
96
|
+
allow_fallbacks?: boolean;
|
|
97
|
+
require_parameters?: boolean;
|
|
98
|
+
data_collection?: 'deny' | 'allow';
|
|
99
|
+
zdr?: boolean;
|
|
100
|
+
only?: string[];
|
|
101
|
+
ignore?: string[];
|
|
102
|
+
quantizations?: ('int4' | 'int8' | 'fp4' | 'fp6' | 'fp8' | 'fp16' | 'bf16' | 'fp32' | 'unknown')[];
|
|
103
|
+
sort?: 'price' | 'throughput' | 'latency';
|
|
104
|
+
max_price?: {
|
|
105
|
+
prompt?: number;
|
|
106
|
+
completion?: number;
|
|
107
|
+
image?: number;
|
|
108
|
+
};
|
|
109
|
+
};
|
|
110
|
+
transforms?: string[];
|
|
111
|
+
user?: string;
|
|
112
|
+
models?: string[];
|
|
113
|
+
};
|
|
114
|
+
/**
|
|
115
|
+
* OpenRouter's extended usage information
|
|
116
|
+
*/
|
|
117
|
+
export type OpenRouterUsage = OpenAI.CompletionUsage & {
|
|
118
|
+
completion_tokens?: number;
|
|
119
|
+
completion_tokens_details?: {
|
|
120
|
+
reasoning_tokens?: number;
|
|
121
|
+
};
|
|
122
|
+
cost?: number;
|
|
123
|
+
cost_details?: {
|
|
124
|
+
upstream_inference_cost?: number;
|
|
125
|
+
};
|
|
126
|
+
prompt_tokens?: number;
|
|
127
|
+
prompt_tokens_details?: {
|
|
128
|
+
cached_tokens?: number;
|
|
129
|
+
audio_tokens?: number;
|
|
130
|
+
};
|
|
131
|
+
total_tokens?: number;
|
|
132
|
+
};
|
|
133
|
+
/**
|
|
134
|
+
* OpenRouter reasoning information
|
|
135
|
+
*/
|
|
136
|
+
export type OpenRouterReasoning = {
|
|
137
|
+
reasoning?: string;
|
|
138
|
+
reasoning_details?: OpenRouterReasoningDetails[];
|
|
139
|
+
};
|
|
140
|
+
/**
|
|
141
|
+
* OpenRouter reasoning detail
|
|
142
|
+
*/
|
|
143
|
+
export type OpenRouterReasoningDetails = {
|
|
144
|
+
id?: string | null;
|
|
145
|
+
type: 'reasoning.encrypted' | 'reasoning.summary' | 'reasoning.text';
|
|
146
|
+
format: 'unknown' | 'openai-responses-v1' | 'xai-responses-v1' | 'anthropic-claude-v1';
|
|
147
|
+
index?: number;
|
|
148
|
+
summary?: string;
|
|
149
|
+
text?: string;
|
|
150
|
+
encrypted?: string;
|
|
151
|
+
signature?: string;
|
|
152
|
+
data?: string;
|
|
153
|
+
};
|
|
154
|
+
/**
|
|
155
|
+
* OpenRouter chunk with extended usage info
|
|
156
|
+
*/
|
|
157
|
+
export type OpenRouterChatChunk = OpenAI.Chat.Completions.ChatCompletionChunk & OpenRouterReasoning & {
|
|
158
|
+
usage?: OpenRouterUsage | null;
|
|
159
|
+
};
|
|
160
|
+
/**
|
|
161
|
+
* OpenRouter response with extended usage info
|
|
162
|
+
*/
|
|
163
|
+
export type OpenRouterChatResponse = OpenAI.Chat.ChatCompletion & {
|
|
164
|
+
choices: OpenRouterChoice[];
|
|
165
|
+
usage?: OpenRouterUsage;
|
|
166
|
+
};
|
|
167
|
+
/**
|
|
168
|
+
* OpenRouter message with reasoning info
|
|
169
|
+
*/
|
|
170
|
+
export type OpenRouterMessage = OpenAI.Chat.Completions.ChatCompletionMessage & OpenRouterReasoning;
|
|
171
|
+
/**
|
|
172
|
+
* OpenRouter choice with reasoning info
|
|
173
|
+
*/
|
|
174
|
+
export type OpenRouterChoice = OpenAI.ChatCompletion.Choice & {
|
|
175
|
+
native_finish_reason?: string;
|
|
176
|
+
message: OpenRouterMessage;
|
|
177
|
+
};
|
|
178
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
|