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.
- package/README.md +307 -0
- package/dist/credentials/OpenRouterApi.credentials.d.ts +10 -0
- package/dist/credentials/OpenRouterApi.credentials.d.ts.map +1 -0
- package/dist/credentials/OpenRouterApi.credentials.js +38 -0
- package/dist/credentials/OpenRouterApi.credentials.js.map +1 -0
- package/dist/credentials/SupabaseModelCatalogApi.credentials.d.ts +10 -0
- package/dist/credentials/SupabaseModelCatalogApi.credentials.d.ts.map +1 -0
- package/dist/credentials/SupabaseModelCatalogApi.credentials.js +51 -0
- package/dist/credentials/SupabaseModelCatalogApi.credentials.js.map +1 -0
- package/dist/nodes/OpenRouterChatCompletion/OpenRouterChatCompletion.node.d.ts +11 -0
- package/dist/nodes/OpenRouterChatCompletion/OpenRouterChatCompletion.node.d.ts.map +1 -0
- package/dist/nodes/OpenRouterChatCompletion/OpenRouterChatCompletion.node.js +300 -0
- package/dist/nodes/OpenRouterChatCompletion/OpenRouterChatCompletion.node.js.map +1 -0
- package/dist/nodes/OpenRouterChatCompletion/openrouter-chat.svg +13 -0
- package/dist/nodes/OpenRouterModelSelector/OpenRouterModelSelector.node.d.ts +14 -0
- package/dist/nodes/OpenRouterModelSelector/OpenRouterModelSelector.node.d.ts.map +1 -0
- package/dist/nodes/OpenRouterModelSelector/OpenRouterModelSelector.node.js +412 -0
- package/dist/nodes/OpenRouterModelSelector/OpenRouterModelSelector.node.js.map +1 -0
- package/dist/nodes/OpenRouterModelSelector/modelScoring.d.ts +28 -0
- package/dist/nodes/OpenRouterModelSelector/modelScoring.d.ts.map +1 -0
- package/dist/nodes/OpenRouterModelSelector/modelScoring.js +384 -0
- package/dist/nodes/OpenRouterModelSelector/modelScoring.js.map +1 -0
- package/dist/nodes/OpenRouterModelSelector/openrouter-selector.svg +37 -0
- package/dist/nodes/OpenRouterModelSelector/taskProfiles.d.ts +39 -0
- package/dist/nodes/OpenRouterModelSelector/taskProfiles.d.ts.map +1 -0
- package/dist/nodes/OpenRouterModelSelector/taskProfiles.js +271 -0
- package/dist/nodes/OpenRouterModelSelector/taskProfiles.js.map +1 -0
- package/dist/nodes/OpenRouterModelSelector/types.d.ts +217 -0
- package/dist/nodes/OpenRouterModelSelector/types.d.ts.map +1 -0
- package/dist/nodes/OpenRouterModelSelector/types.js +44 -0
- package/dist/nodes/OpenRouterModelSelector/types.js.map +1 -0
- package/dist/nodes/OpenRouterSmartChat/OpenRouterSmartChat.node.d.ts +11 -0
- package/dist/nodes/OpenRouterSmartChat/OpenRouterSmartChat.node.d.ts.map +1 -0
- package/dist/nodes/OpenRouterSmartChat/OpenRouterSmartChat.node.js +657 -0
- package/dist/nodes/OpenRouterSmartChat/OpenRouterSmartChat.node.js.map +1 -0
- package/dist/nodes/OpenRouterSmartChat/modelScoring.d.ts +28 -0
- package/dist/nodes/OpenRouterSmartChat/modelScoring.d.ts.map +1 -0
- package/dist/nodes/OpenRouterSmartChat/modelScoring.js +384 -0
- package/dist/nodes/OpenRouterSmartChat/modelScoring.js.map +1 -0
- package/dist/nodes/OpenRouterSmartChat/openrouter-smart.svg +11 -0
- package/dist/nodes/OpenRouterSmartChat/taskProfiles.d.ts +39 -0
- package/dist/nodes/OpenRouterSmartChat/taskProfiles.d.ts.map +1 -0
- package/dist/nodes/OpenRouterSmartChat/taskProfiles.js +271 -0
- package/dist/nodes/OpenRouterSmartChat/taskProfiles.js.map +1 -0
- package/dist/nodes/OpenRouterSmartChat/types.d.ts +217 -0
- package/dist/nodes/OpenRouterSmartChat/types.d.ts.map +1 -0
- package/dist/nodes/OpenRouterSmartChat/types.js +44 -0
- package/dist/nodes/OpenRouterSmartChat/types.js.map +1 -0
- package/dist/nodes/OpenRouterSmartEmbedding/OpenRouterEmbeddings.class.d.ts +48 -0
- package/dist/nodes/OpenRouterSmartEmbedding/OpenRouterEmbeddings.class.d.ts.map +1 -0
- package/dist/nodes/OpenRouterSmartEmbedding/OpenRouterEmbeddings.class.js +265 -0
- package/dist/nodes/OpenRouterSmartEmbedding/OpenRouterEmbeddings.class.js.map +1 -0
- package/dist/nodes/OpenRouterSmartEmbedding/OpenRouterSmartEmbedding.node.d.ts +16 -0
- package/dist/nodes/OpenRouterSmartEmbedding/OpenRouterSmartEmbedding.node.d.ts.map +1 -0
- package/dist/nodes/OpenRouterSmartEmbedding/OpenRouterSmartEmbedding.node.js +177 -0
- package/dist/nodes/OpenRouterSmartEmbedding/OpenRouterSmartEmbedding.node.js.map +1 -0
- package/dist/nodes/OpenRouterSmartEmbedding/openrouter-embed.svg +22 -0
- package/dist/nodes/shared/contentAnalyzer.d.ts +16 -0
- package/dist/nodes/shared/contentAnalyzer.d.ts.map +1 -0
- package/dist/nodes/shared/contentAnalyzer.js +256 -0
- package/dist/nodes/shared/contentAnalyzer.js.map +1 -0
- package/dist/nodes/shared/embeddingScoring.d.ts +12 -0
- package/dist/nodes/shared/embeddingScoring.d.ts.map +1 -0
- package/dist/nodes/shared/embeddingScoring.js +329 -0
- package/dist/nodes/shared/embeddingScoring.js.map +1 -0
- package/dist/nodes/shared/types.d.ts +131 -0
- package/dist/nodes/shared/types.d.ts.map +1 -0
- package/dist/nodes/shared/types.js +24 -0
- package/dist/nodes/shared/types.js.map +1 -0
- 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"}
|