n8n-nodes-openrouter-selector 0.3.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.
Files changed (70) hide show
  1. package/README.md +307 -0
  2. package/dist/credentials/OpenRouterApi.credentials.d.ts +10 -0
  3. package/dist/credentials/OpenRouterApi.credentials.d.ts.map +1 -0
  4. package/dist/credentials/OpenRouterApi.credentials.js +38 -0
  5. package/dist/credentials/OpenRouterApi.credentials.js.map +1 -0
  6. package/dist/credentials/SupabaseModelCatalogApi.credentials.d.ts +10 -0
  7. package/dist/credentials/SupabaseModelCatalogApi.credentials.d.ts.map +1 -0
  8. package/dist/credentials/SupabaseModelCatalogApi.credentials.js +51 -0
  9. package/dist/credentials/SupabaseModelCatalogApi.credentials.js.map +1 -0
  10. package/dist/nodes/OpenRouterChatCompletion/OpenRouterChatCompletion.node.d.ts +11 -0
  11. package/dist/nodes/OpenRouterChatCompletion/OpenRouterChatCompletion.node.d.ts.map +1 -0
  12. package/dist/nodes/OpenRouterChatCompletion/OpenRouterChatCompletion.node.js +300 -0
  13. package/dist/nodes/OpenRouterChatCompletion/OpenRouterChatCompletion.node.js.map +1 -0
  14. package/dist/nodes/OpenRouterChatCompletion/openrouter-chat.svg +13 -0
  15. package/dist/nodes/OpenRouterModelSelector/OpenRouterModelSelector.node.d.ts +14 -0
  16. package/dist/nodes/OpenRouterModelSelector/OpenRouterModelSelector.node.d.ts.map +1 -0
  17. package/dist/nodes/OpenRouterModelSelector/OpenRouterModelSelector.node.js +412 -0
  18. package/dist/nodes/OpenRouterModelSelector/OpenRouterModelSelector.node.js.map +1 -0
  19. package/dist/nodes/OpenRouterModelSelector/modelScoring.d.ts +28 -0
  20. package/dist/nodes/OpenRouterModelSelector/modelScoring.d.ts.map +1 -0
  21. package/dist/nodes/OpenRouterModelSelector/modelScoring.js +384 -0
  22. package/dist/nodes/OpenRouterModelSelector/modelScoring.js.map +1 -0
  23. package/dist/nodes/OpenRouterModelSelector/openrouter-selector.svg +37 -0
  24. package/dist/nodes/OpenRouterModelSelector/taskProfiles.d.ts +39 -0
  25. package/dist/nodes/OpenRouterModelSelector/taskProfiles.d.ts.map +1 -0
  26. package/dist/nodes/OpenRouterModelSelector/taskProfiles.js +271 -0
  27. package/dist/nodes/OpenRouterModelSelector/taskProfiles.js.map +1 -0
  28. package/dist/nodes/OpenRouterModelSelector/types.d.ts +217 -0
  29. package/dist/nodes/OpenRouterModelSelector/types.d.ts.map +1 -0
  30. package/dist/nodes/OpenRouterModelSelector/types.js +44 -0
  31. package/dist/nodes/OpenRouterModelSelector/types.js.map +1 -0
  32. package/dist/nodes/OpenRouterSmartChat/OpenRouterSmartChat.node.d.ts +11 -0
  33. package/dist/nodes/OpenRouterSmartChat/OpenRouterSmartChat.node.d.ts.map +1 -0
  34. package/dist/nodes/OpenRouterSmartChat/OpenRouterSmartChat.node.js +657 -0
  35. package/dist/nodes/OpenRouterSmartChat/OpenRouterSmartChat.node.js.map +1 -0
  36. package/dist/nodes/OpenRouterSmartChat/modelScoring.d.ts +28 -0
  37. package/dist/nodes/OpenRouterSmartChat/modelScoring.d.ts.map +1 -0
  38. package/dist/nodes/OpenRouterSmartChat/modelScoring.js +384 -0
  39. package/dist/nodes/OpenRouterSmartChat/modelScoring.js.map +1 -0
  40. package/dist/nodes/OpenRouterSmartChat/openrouter-smart.svg +11 -0
  41. package/dist/nodes/OpenRouterSmartChat/taskProfiles.d.ts +39 -0
  42. package/dist/nodes/OpenRouterSmartChat/taskProfiles.d.ts.map +1 -0
  43. package/dist/nodes/OpenRouterSmartChat/taskProfiles.js +271 -0
  44. package/dist/nodes/OpenRouterSmartChat/taskProfiles.js.map +1 -0
  45. package/dist/nodes/OpenRouterSmartChat/types.d.ts +217 -0
  46. package/dist/nodes/OpenRouterSmartChat/types.d.ts.map +1 -0
  47. package/dist/nodes/OpenRouterSmartChat/types.js +44 -0
  48. package/dist/nodes/OpenRouterSmartChat/types.js.map +1 -0
  49. package/dist/nodes/OpenRouterSmartEmbedding/OpenRouterEmbeddings.class.d.ts +48 -0
  50. package/dist/nodes/OpenRouterSmartEmbedding/OpenRouterEmbeddings.class.d.ts.map +1 -0
  51. package/dist/nodes/OpenRouterSmartEmbedding/OpenRouterEmbeddings.class.js +265 -0
  52. package/dist/nodes/OpenRouterSmartEmbedding/OpenRouterEmbeddings.class.js.map +1 -0
  53. package/dist/nodes/OpenRouterSmartEmbedding/OpenRouterSmartEmbedding.node.d.ts +16 -0
  54. package/dist/nodes/OpenRouterSmartEmbedding/OpenRouterSmartEmbedding.node.d.ts.map +1 -0
  55. package/dist/nodes/OpenRouterSmartEmbedding/OpenRouterSmartEmbedding.node.js +177 -0
  56. package/dist/nodes/OpenRouterSmartEmbedding/OpenRouterSmartEmbedding.node.js.map +1 -0
  57. package/dist/nodes/OpenRouterSmartEmbedding/openrouter-embed.svg +22 -0
  58. package/dist/nodes/shared/contentAnalyzer.d.ts +16 -0
  59. package/dist/nodes/shared/contentAnalyzer.d.ts.map +1 -0
  60. package/dist/nodes/shared/contentAnalyzer.js +256 -0
  61. package/dist/nodes/shared/contentAnalyzer.js.map +1 -0
  62. package/dist/nodes/shared/embeddingScoring.d.ts +12 -0
  63. package/dist/nodes/shared/embeddingScoring.d.ts.map +1 -0
  64. package/dist/nodes/shared/embeddingScoring.js +329 -0
  65. package/dist/nodes/shared/embeddingScoring.js.map +1 -0
  66. package/dist/nodes/shared/types.d.ts +131 -0
  67. package/dist/nodes/shared/types.d.ts.map +1 -0
  68. package/dist/nodes/shared/types.js +24 -0
  69. package/dist/nodes/shared/types.js.map +1 -0
  70. package/package.json +67 -0
@@ -0,0 +1,412 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.OpenRouterModelSelector = void 0;
4
+ const n8n_workflow_1 = require("n8n-workflow");
5
+ const types_1 = require("./types");
6
+ const taskProfiles_1 = require("./taskProfiles");
7
+ const modelScoring_1 = require("./modelScoring");
8
+ class OpenRouterModelSelector {
9
+ description = {
10
+ displayName: 'OpenRouter Model Selector',
11
+ name: 'openRouterModelSelector',
12
+ icon: 'file:openrouter-selector.svg',
13
+ group: ['transform'],
14
+ version: 1,
15
+ subtitle: '={{$parameter["task"]}} - {{$parameter["budget"]}}',
16
+ description: 'Intelligently select the optimal OpenRouter model based on task, budget, and benchmarks',
17
+ defaults: {
18
+ name: 'OpenRouter Model Selector',
19
+ },
20
+ inputs: ['main'],
21
+ outputs: ['main'],
22
+ credentials: [
23
+ {
24
+ name: 'supabaseModelCatalogApi',
25
+ required: true,
26
+ },
27
+ ],
28
+ properties: [
29
+ // ===========================================================================
30
+ // Task Category
31
+ // ===========================================================================
32
+ {
33
+ displayName: 'Task Category',
34
+ name: 'task',
35
+ type: 'options',
36
+ default: 'chat',
37
+ required: true,
38
+ description: 'What type of task will this model perform?',
39
+ options: (0, taskProfiles_1.getTaskCategories)().map((task) => ({
40
+ name: (0, taskProfiles_1.getTaskDescription)(task),
41
+ value: task,
42
+ })),
43
+ },
44
+ // ===========================================================================
45
+ // Budget Preference
46
+ // ===========================================================================
47
+ {
48
+ displayName: 'Budget',
49
+ name: 'budget',
50
+ type: 'options',
51
+ default: 'balanced',
52
+ required: true,
53
+ description: 'How much are you willing to spend?',
54
+ options: [
55
+ {
56
+ name: 'Cheap - Lowest cost, quality secondary',
57
+ value: 'cheap',
58
+ },
59
+ {
60
+ name: 'Balanced - Good price-performance ratio',
61
+ value: 'balanced',
62
+ },
63
+ {
64
+ name: 'Premium - Best quality, cost no concern',
65
+ value: 'premium',
66
+ },
67
+ ],
68
+ },
69
+ // ===========================================================================
70
+ // Model Override (Dynamic)
71
+ // ===========================================================================
72
+ {
73
+ displayName: 'Model Override',
74
+ name: 'modelOverride',
75
+ type: 'options',
76
+ default: 'default',
77
+ description: 'Override automatic selection with a specific model. Top 5 models for your task/budget are shown.',
78
+ typeOptions: {
79
+ loadOptionsMethod: 'getTopModels',
80
+ },
81
+ },
82
+ // ===========================================================================
83
+ // Filters (Collection)
84
+ // ===========================================================================
85
+ {
86
+ displayName: 'Filters',
87
+ name: 'filters',
88
+ type: 'collection',
89
+ placeholder: 'Add Filter',
90
+ default: {},
91
+ options: [
92
+ {
93
+ displayName: 'Min Context Length',
94
+ name: 'minContextLength',
95
+ type: 'number',
96
+ default: 8000,
97
+ description: 'Minimum context window size (tokens)',
98
+ },
99
+ {
100
+ displayName: 'Require JSON Mode',
101
+ name: 'requireJsonMode',
102
+ type: 'boolean',
103
+ default: false,
104
+ description: 'Only include models that support JSON output mode',
105
+ },
106
+ {
107
+ displayName: 'Require Vision',
108
+ name: 'requireVision',
109
+ type: 'boolean',
110
+ default: false,
111
+ description: 'Only include multimodal models with image input support',
112
+ },
113
+ {
114
+ displayName: 'Max Cost per 1K Tokens',
115
+ name: 'maxCostPerK',
116
+ type: 'number',
117
+ default: 0,
118
+ description: 'Maximum cost in USD per 1K tokens (0 = no limit)',
119
+ },
120
+ {
121
+ displayName: 'Provider Whitelist',
122
+ name: 'providerWhitelist',
123
+ type: 'multiOptions',
124
+ default: [],
125
+ description: 'Only include models from these providers (empty = all)',
126
+ options: [
127
+ { name: 'Anthropic', value: 'anthropic' },
128
+ { name: 'OpenAI', value: 'openai' },
129
+ { name: 'Google', value: 'google' },
130
+ { name: 'DeepSeek', value: 'deepseek' },
131
+ { name: 'Meta Llama', value: 'meta-llama' },
132
+ { name: 'Mistral AI', value: 'mistralai' },
133
+ { name: 'Qwen', value: 'qwen' },
134
+ { name: 'Cohere', value: 'cohere' },
135
+ { name: 'Perplexity', value: 'perplexity' },
136
+ { name: 'xAI', value: 'x-ai' },
137
+ ],
138
+ },
139
+ {
140
+ displayName: 'Provider Blacklist',
141
+ name: 'providerBlacklist',
142
+ type: 'multiOptions',
143
+ default: [],
144
+ description: 'Exclude models from these providers',
145
+ options: [
146
+ { name: 'Anthropic', value: 'anthropic' },
147
+ { name: 'OpenAI', value: 'openai' },
148
+ { name: 'Google', value: 'google' },
149
+ { name: 'DeepSeek', value: 'deepseek' },
150
+ { name: 'Meta Llama', value: 'meta-llama' },
151
+ { name: 'Mistral AI', value: 'mistralai' },
152
+ { name: 'Qwen', value: 'qwen' },
153
+ { name: 'Cohere', value: 'cohere' },
154
+ { name: 'Perplexity', value: 'perplexity' },
155
+ { name: 'xAI', value: 'x-ai' },
156
+ ],
157
+ },
158
+ ],
159
+ },
160
+ // ===========================================================================
161
+ // Options (Collection)
162
+ // ===========================================================================
163
+ {
164
+ displayName: 'Options',
165
+ name: 'options',
166
+ type: 'collection',
167
+ placeholder: 'Add Option',
168
+ default: {},
169
+ options: [
170
+ {
171
+ displayName: 'Alternatives Count',
172
+ name: 'alternativesCount',
173
+ type: 'number',
174
+ default: types_1.DEFAULT_ALTERNATIVES,
175
+ description: 'Number of alternative models to return (1-10)',
176
+ typeOptions: {
177
+ minValue: 1,
178
+ maxValue: types_1.MAX_ALTERNATIVES,
179
+ },
180
+ },
181
+ {
182
+ displayName: 'Output Format',
183
+ name: 'outputFormat',
184
+ type: 'options',
185
+ default: 'full',
186
+ description: 'Level of detail in the output',
187
+ options: [
188
+ {
189
+ name: 'Full - Complete details with reasoning',
190
+ value: 'full',
191
+ },
192
+ {
193
+ name: 'Simple - Essential fields only',
194
+ value: 'simple',
195
+ },
196
+ {
197
+ name: 'Compact - Just model IDs',
198
+ value: 'compact',
199
+ },
200
+ ],
201
+ },
202
+ ],
203
+ },
204
+ ],
205
+ };
206
+ methods = {
207
+ loadOptions: {
208
+ /**
209
+ * Load top models for the dynamic dropdown
210
+ */
211
+ async getTopModels() {
212
+ const task = this.getNodeParameter('task', 'chat');
213
+ const budget = this.getNodeParameter('budget', 'balanced');
214
+ try {
215
+ // Fetch and score models
216
+ const credentials = await this.getCredentials('supabaseModelCatalogApi');
217
+ const models = await fetchModelsWithBenchmarks(credentials.url, credentials.apiKey);
218
+ // Get default filters from task profile
219
+ const filters = {};
220
+ const scoredModels = (0, modelScoring_1.scoreAndRankModels)(models, task, budget, filters, 5);
221
+ // Build options list
222
+ const options = [
223
+ {
224
+ name: 'Default (Auto-Select Best)',
225
+ value: 'default',
226
+ },
227
+ ];
228
+ for (const model of scoredModels) {
229
+ options.push({
230
+ name: `${model.displayName} | Score: ${model.score} | $${model.pricing.promptPerMUsd.toFixed(2)} in / $${model.pricing.completionPerMUsd.toFixed(2)} out /M`,
231
+ value: model.modelId,
232
+ });
233
+ }
234
+ return options;
235
+ }
236
+ catch (error) {
237
+ // On error, return just the default option
238
+ return [
239
+ {
240
+ name: 'Default (Auto-Select Best)',
241
+ value: 'default',
242
+ },
243
+ ];
244
+ }
245
+ },
246
+ },
247
+ };
248
+ async execute() {
249
+ const items = this.getInputData();
250
+ const returnData = [];
251
+ const startTime = Date.now();
252
+ // Get credentials
253
+ const credentials = await this.getCredentials('supabaseModelCatalogApi');
254
+ const supabaseUrl = credentials.url;
255
+ const supabaseKey = credentials.apiKey;
256
+ for (let itemIndex = 0; itemIndex < items.length; itemIndex++) {
257
+ try {
258
+ // Get parameters
259
+ const task = this.getNodeParameter('task', itemIndex);
260
+ const budget = this.getNodeParameter('budget', itemIndex);
261
+ const modelOverride = this.getNodeParameter('modelOverride', itemIndex, 'default');
262
+ const filtersRaw = this.getNodeParameter('filters', itemIndex, {});
263
+ const optionsRaw = this.getNodeParameter('options', itemIndex, {});
264
+ // Build filters
265
+ const filters = {
266
+ minContextLength: filtersRaw.minContextLength ?? 8000,
267
+ requireJsonMode: filtersRaw.requireJsonMode ?? false,
268
+ requireVision: filtersRaw.requireVision ?? false,
269
+ maxCostPerK: filtersRaw.maxCostPerK || undefined,
270
+ providerWhitelist: filtersRaw.providerWhitelist && filtersRaw.providerWhitelist.length > 0
271
+ ? filtersRaw.providerWhitelist
272
+ : undefined,
273
+ providerBlacklist: filtersRaw.providerBlacklist && filtersRaw.providerBlacklist.length > 0
274
+ ? filtersRaw.providerBlacklist
275
+ : undefined,
276
+ };
277
+ const alternativesCount = optionsRaw.alternativesCount ?? types_1.DEFAULT_ALTERNATIVES;
278
+ const outputFormat = optionsRaw.outputFormat ?? 'full';
279
+ // Fetch models from Supabase
280
+ const models = await fetchModelsWithBenchmarks(supabaseUrl, supabaseKey);
281
+ let result;
282
+ if (modelOverride !== 'default') {
283
+ // Manual selection - find the specific model
284
+ const selectedModel = models.find((m) => m.model.model === modelOverride);
285
+ if (!selectedModel) {
286
+ throw new n8n_workflow_1.NodeOperationError(this.getNode(), `Model not found: ${modelOverride}`, { itemIndex });
287
+ }
288
+ const recommended = (0, modelScoring_1.createManualSelection)(selectedModel);
289
+ result = formatOutput(recommended, [], task, budget, models.length, 0, startTime, outputFormat);
290
+ }
291
+ else {
292
+ // Automatic selection with scoring
293
+ const topN = 1 + alternativesCount;
294
+ const scoredModels = (0, modelScoring_1.scoreAndRankModels)(models, task, budget, filters, topN);
295
+ if (scoredModels.length === 0) {
296
+ throw new n8n_workflow_1.NodeOperationError(this.getNode(), 'No models match the specified filters', { itemIndex });
297
+ }
298
+ const [recommended, ...alternatives] = scoredModels;
299
+ result = formatOutput(recommended, alternatives, task, budget, models.length, scoredModels.length, startTime, outputFormat);
300
+ }
301
+ returnData.push({
302
+ json: result,
303
+ pairedItem: { item: itemIndex },
304
+ });
305
+ }
306
+ catch (error) {
307
+ if (this.continueOnFail()) {
308
+ returnData.push({
309
+ json: {
310
+ error: error.message,
311
+ },
312
+ pairedItem: { item: itemIndex },
313
+ });
314
+ continue;
315
+ }
316
+ throw error;
317
+ }
318
+ }
319
+ return [returnData];
320
+ }
321
+ }
322
+ exports.OpenRouterModelSelector = OpenRouterModelSelector;
323
+ // =============================================================================
324
+ // Helper Functions
325
+ // =============================================================================
326
+ /**
327
+ * Fetch models with benchmarks from Supabase
328
+ */
329
+ async function fetchModelsWithBenchmarks(supabaseUrl, supabaseKey) {
330
+ // Fetch models catalog
331
+ const modelsResponse = await fetch(`${supabaseUrl}/rest/v1/models_catalog?select=*`, {
332
+ headers: {
333
+ apikey: supabaseKey,
334
+ Authorization: `Bearer ${supabaseKey}`,
335
+ },
336
+ });
337
+ if (!modelsResponse.ok) {
338
+ throw new Error(`Failed to fetch models: ${modelsResponse.statusText}`);
339
+ }
340
+ const models = (await modelsResponse.json());
341
+ // Fetch benchmarks
342
+ const benchmarksResponse = await fetch(`${supabaseUrl}/rest/v1/model_benchmarks?select=*`, {
343
+ headers: {
344
+ apikey: supabaseKey,
345
+ Authorization: `Bearer ${supabaseKey}`,
346
+ },
347
+ });
348
+ let benchmarks = [];
349
+ if (benchmarksResponse.ok) {
350
+ benchmarks = (await benchmarksResponse.json());
351
+ }
352
+ // Fetch name mappings
353
+ const mappingsResponse = await fetch(`${supabaseUrl}/rest/v1/model_name_mappings?select=*`, {
354
+ headers: {
355
+ apikey: supabaseKey,
356
+ Authorization: `Bearer ${supabaseKey}`,
357
+ },
358
+ });
359
+ let mappings = [];
360
+ if (mappingsResponse.ok) {
361
+ mappings = (await mappingsResponse.json());
362
+ }
363
+ // Build lookup maps
364
+ const benchmarkMap = new Map(benchmarks.map((b) => [b.openrouter_id, b]));
365
+ const mappingMap = new Map(mappings.map((m) => [m.openrouter_id, m]));
366
+ // Combine data
367
+ return models.map((model) => ({
368
+ model,
369
+ benchmarks: benchmarkMap.get(model.model) ?? null,
370
+ mapping: mappingMap.get(model.model) ?? null,
371
+ }));
372
+ }
373
+ /**
374
+ * Format output based on selected format
375
+ */
376
+ function formatOutput(recommended, alternatives, task, budget, totalModels, passingModels, startTime, format) {
377
+ const executionTimeMs = Date.now() - startTime;
378
+ if (format === 'compact') {
379
+ return {
380
+ modelId: recommended.modelId,
381
+ alternativeIds: alternatives.map((a) => a.modelId),
382
+ };
383
+ }
384
+ if (format === 'simple') {
385
+ return {
386
+ modelId: recommended.modelId,
387
+ provider: recommended.provider,
388
+ displayName: recommended.displayName,
389
+ score: recommended.score,
390
+ costPerMTokens: recommended.pricing.combinedPerMUsd,
391
+ alternatives: alternatives.map((a) => ({
392
+ modelId: a.modelId,
393
+ score: a.score,
394
+ costPerMTokens: a.pricing.combinedPerMUsd,
395
+ })),
396
+ };
397
+ }
398
+ // Full format
399
+ return {
400
+ recommended,
401
+ alternatives,
402
+ queryMetadata: {
403
+ task,
404
+ budget,
405
+ totalModelsEvaluated: totalModels,
406
+ modelsPassingFilters: passingModels,
407
+ executionTimeMs,
408
+ dataTimestamp: new Date().toISOString(),
409
+ },
410
+ };
411
+ }
412
+ //# sourceMappingURL=OpenRouterModelSelector.node.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OpenRouterModelSelector.node.js","sourceRoot":"","sources":["../../../nodes/OpenRouterModelSelector/OpenRouterModelSelector.node.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Model Scoring Algorithm
3
+ *
4
+ * Deterministic scoring based on external benchmarks.
5
+ * Formula: score = (benchmark_fit × 0.4) + (task_fit × 0.3) + (budget_fit × 0.2) + (capability_fit × 0.1)
6
+ */
7
+ import type { ModelWithBenchmarks, TaskCategory, BudgetPreference, NodeFilters, ScoredModel, ModelPricing } from './types';
8
+ /**
9
+ * Main scoring function - scores a single model for a given task/budget
10
+ */
11
+ export declare function scoreModel(model: ModelWithBenchmarks, task: TaskCategory, budget: BudgetPreference, filters: NodeFilters): ScoredModel | null;
12
+ /**
13
+ * Score multiple models and return top N
14
+ */
15
+ export declare function scoreAndRankModels(models: ModelWithBenchmarks[], task: TaskCategory, budget: BudgetPreference, filters: NodeFilters, topN: number): ScoredModel[];
16
+ /**
17
+ * Check if model passes all filters
18
+ */
19
+ export declare function passesFilters(model: ModelWithBenchmarks, filters: NodeFilters): boolean;
20
+ /**
21
+ * Calculate pricing from model data
22
+ */
23
+ export declare function calculatePricing(model: ModelWithBenchmarks['model']): ModelPricing;
24
+ /**
25
+ * Create a manually selected model result (bypasses scoring)
26
+ */
27
+ export declare function createManualSelection(model: ModelWithBenchmarks): ScoredModel;
28
+ //# sourceMappingURL=modelScoring.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"modelScoring.d.ts","sourceRoot":"","sources":["../../../nodes/OpenRouterModelSelector/modelScoring.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EACV,mBAAmB,EAEnB,YAAY,EACZ,gBAAgB,EAChB,WAAW,EACX,WAAW,EAEX,YAAY,EAIb,MAAM,SAAS,CAAC;AAIjB;;GAEG;AACH,wBAAgB,UAAU,CACxB,KAAK,EAAE,mBAAmB,EAC1B,IAAI,EAAE,YAAY,EAClB,MAAM,EAAE,gBAAgB,EACxB,OAAO,EAAE,WAAW,GACnB,WAAW,GAAG,IAAI,CA0DpB;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,mBAAmB,EAAE,EAC7B,IAAI,EAAE,YAAY,EAClB,MAAM,EAAE,gBAAgB,EACxB,OAAO,EAAE,WAAW,EACpB,IAAI,EAAE,MAAM,GACX,WAAW,EAAE,CAef;AAED;;GAEG;AACH,wBAAgB,aAAa,CAC3B,KAAK,EAAE,mBAAmB,EAC1B,OAAO,EAAE,WAAW,GACnB,OAAO,CA+CT;AAuND;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,mBAAmB,CAAC,OAAO,CAAC,GAAG,YAAY,CAclF;AA+CD;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,mBAAmB,GACzB,WAAW,CAuBb"}