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
package/README.md
ADDED
|
@@ -0,0 +1,307 @@
|
|
|
1
|
+
# n8n-nodes-openrouter-selector
|
|
2
|
+
|
|
3
|
+
n8n community node for intelligent OpenRouter model selection based on task, budget, and benchmarks.
|
|
4
|
+
|
|
5
|
+
## Features
|
|
6
|
+
|
|
7
|
+
- **Task-Based Selection**: Optimized model recommendations for:
|
|
8
|
+
- Translation (Chinese ↔ English optimized)
|
|
9
|
+
- Coding & Development
|
|
10
|
+
- Data Analysis & Reasoning
|
|
11
|
+
- Vision & Image Analysis
|
|
12
|
+
- Conversational Chat
|
|
13
|
+
- Text Embedding
|
|
14
|
+
- Summarization
|
|
15
|
+
- Mathematical Reasoning
|
|
16
|
+
|
|
17
|
+
- **Budget Awareness**: Three budget tiers:
|
|
18
|
+
- **Cheap**: Lowest cost, quality secondary
|
|
19
|
+
- **Balanced**: Good price-performance ratio
|
|
20
|
+
- **Premium**: Best quality, cost no concern
|
|
21
|
+
|
|
22
|
+
- **Benchmark-Based Scoring**: Uses external benchmark data:
|
|
23
|
+
- Artificial Analysis (Intelligence, Coding, Math indices)
|
|
24
|
+
- LMSYS Chatbot Arena (Elo ratings)
|
|
25
|
+
- LiveBench (Coding, Math, Reasoning scores)
|
|
26
|
+
|
|
27
|
+
- **Dynamic Model Override**: Select specific models with real-time scoring preview
|
|
28
|
+
|
|
29
|
+
- **Flexible Filtering**:
|
|
30
|
+
- Minimum context length
|
|
31
|
+
- JSON mode requirement
|
|
32
|
+
- Vision/multimodal requirement
|
|
33
|
+
- Cost limits
|
|
34
|
+
- Provider whitelist/blacklist
|
|
35
|
+
|
|
36
|
+
## Installation
|
|
37
|
+
|
|
38
|
+
### In n8n
|
|
39
|
+
|
|
40
|
+
1. Go to **Settings** → **Community Nodes**
|
|
41
|
+
2. Click **Install a community node**
|
|
42
|
+
3. Enter: `n8n-nodes-openrouter-selector`
|
|
43
|
+
4. Click **Install**
|
|
44
|
+
|
|
45
|
+
### Manual Installation
|
|
46
|
+
|
|
47
|
+
```bash
|
|
48
|
+
# In your n8n custom nodes directory
|
|
49
|
+
cd ~/.n8n/custom
|
|
50
|
+
npm install n8n-nodes-openrouter-selector
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
### Development Installation
|
|
54
|
+
|
|
55
|
+
```bash
|
|
56
|
+
git clone https://github.com/ecolights/n8n-nodes-openrouter-selector.git
|
|
57
|
+
cd n8n-nodes-openrouter-selector
|
|
58
|
+
pnpm install
|
|
59
|
+
pnpm build
|
|
60
|
+
|
|
61
|
+
# Link to n8n
|
|
62
|
+
cd ~/.n8n/custom
|
|
63
|
+
npm link /path/to/n8n-nodes-openrouter-selector
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
## Prerequisites
|
|
67
|
+
|
|
68
|
+
This node requires:
|
|
69
|
+
|
|
70
|
+
1. **Supabase Database** with the benchmark schema (see [docs/BENCHMARK_SYSTEM.md](docs/BENCHMARK_SYSTEM.md)):
|
|
71
|
+
- `models_catalog` - OpenRouter model data (synced via separate workflow)
|
|
72
|
+
- `model_name_mappings` - Master mapping table (manually maintained)
|
|
73
|
+
- `model_benchmarks` - Benchmark scores (auto-synced weekly)
|
|
74
|
+
- `task_profiles` - Task-specific scoring weights
|
|
75
|
+
- `unmatched_models` - Review queue for new models
|
|
76
|
+
|
|
77
|
+
2. **n8n Workflow**: `TN_benchmark_sync_artificial_analysis` for weekly benchmark sync
|
|
78
|
+
|
|
79
|
+
3. **Credentials**: Supabase URL and API key (service role for write access)
|
|
80
|
+
|
|
81
|
+
### Quick Schema Setup
|
|
82
|
+
|
|
83
|
+
The full schema with triggers, functions, and RLS policies is documented in [docs/BENCHMARK_SYSTEM.md](docs/BENCHMARK_SYSTEM.md).
|
|
84
|
+
|
|
85
|
+
**Core Tables Overview**:
|
|
86
|
+
|
|
87
|
+
```sql
|
|
88
|
+
-- Model name mappings (Source of Truth - manually maintained)
|
|
89
|
+
CREATE TABLE model_name_mappings (
|
|
90
|
+
openrouter_id TEXT UNIQUE NOT NULL, -- e.g. "anthropic/claude-sonnet-4"
|
|
91
|
+
canonical_name TEXT NOT NULL, -- Display name
|
|
92
|
+
aa_name TEXT, -- Artificial Analysis name
|
|
93
|
+
aa_slug TEXT, -- AA URL slug
|
|
94
|
+
provider TEXT, -- anthropic, openai, google, etc.
|
|
95
|
+
verified BOOLEAN DEFAULT false
|
|
96
|
+
);
|
|
97
|
+
|
|
98
|
+
-- Benchmark scores (auto-filled by sync workflow)
|
|
99
|
+
CREATE TABLE model_benchmarks (
|
|
100
|
+
openrouter_id TEXT REFERENCES model_name_mappings(openrouter_id),
|
|
101
|
+
-- Artificial Analysis
|
|
102
|
+
aa_intelligence_index DECIMAL(5,2),
|
|
103
|
+
aa_coding_index DECIMAL(5,2),
|
|
104
|
+
aa_math_index DECIMAL(5,2),
|
|
105
|
+
-- LMSYS Arena
|
|
106
|
+
lmsys_elo INTEGER,
|
|
107
|
+
-- LiveBench
|
|
108
|
+
livebench_overall DECIMAL(5,2),
|
|
109
|
+
livebench_coding DECIMAL(5,2),
|
|
110
|
+
-- Computed composites (via trigger)
|
|
111
|
+
composite_general DECIMAL(5,2),
|
|
112
|
+
composite_code DECIMAL(5,2),
|
|
113
|
+
composite_math DECIMAL(5,2)
|
|
114
|
+
);
|
|
115
|
+
|
|
116
|
+
-- Task-specific scoring weights
|
|
117
|
+
CREATE TABLE task_profiles (
|
|
118
|
+
task_name TEXT UNIQUE NOT NULL, -- general, code, translation, etc.
|
|
119
|
+
weight_aa_intelligence DECIMAL(3,2),
|
|
120
|
+
weight_aa_coding DECIMAL(3,2),
|
|
121
|
+
weight_lmsys_elo DECIMAL(3,2),
|
|
122
|
+
weight_livebench DECIMAL(3,2),
|
|
123
|
+
boost_anthropic DECIMAL(3,2),
|
|
124
|
+
boost_openai DECIMAL(3,2),
|
|
125
|
+
boost_deepseek DECIMAL(3,2)
|
|
126
|
+
);
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
## Usage
|
|
130
|
+
|
|
131
|
+
### Basic Usage
|
|
132
|
+
|
|
133
|
+
1. Add the **OpenRouter Model Selector** node to your workflow
|
|
134
|
+
2. Configure credentials (Supabase URL + API Key)
|
|
135
|
+
3. Select a **Task Category** (e.g., "coding")
|
|
136
|
+
4. Select a **Budget** (e.g., "balanced")
|
|
137
|
+
5. Execute to get the recommended model
|
|
138
|
+
|
|
139
|
+
### Output Format
|
|
140
|
+
|
|
141
|
+
**Full Output** (default):
|
|
142
|
+
```json
|
|
143
|
+
{
|
|
144
|
+
"recommended": {
|
|
145
|
+
"modelId": "anthropic/claude-sonnet-4",
|
|
146
|
+
"provider": "anthropic",
|
|
147
|
+
"displayName": "Claude Sonnet 4",
|
|
148
|
+
"contextLength": 200000,
|
|
149
|
+
"supportsJson": true,
|
|
150
|
+
"modality": "text+image->text",
|
|
151
|
+
"pricing": {
|
|
152
|
+
"promptPer1kUsd": 0.003,
|
|
153
|
+
"completionPer1kUsd": 0.015,
|
|
154
|
+
"combinedPer1kUsd": 0.009
|
|
155
|
+
},
|
|
156
|
+
"score": 87.5,
|
|
157
|
+
"scoreBreakdown": {
|
|
158
|
+
"benchmarkFit": 38,
|
|
159
|
+
"taskFit": 28,
|
|
160
|
+
"budgetFit": 18,
|
|
161
|
+
"capabilityFit": 9,
|
|
162
|
+
"providerBonus": 1.5
|
|
163
|
+
},
|
|
164
|
+
"reasoning": "Excellent benchmark performance for Coding & Development, ideal balanced pricing, anthropic provider bonus (+15%)."
|
|
165
|
+
},
|
|
166
|
+
"alternatives": [...],
|
|
167
|
+
"queryMetadata": {
|
|
168
|
+
"task": "coding",
|
|
169
|
+
"budget": "balanced",
|
|
170
|
+
"totalModelsEvaluated": 313,
|
|
171
|
+
"modelsPassingFilters": 187,
|
|
172
|
+
"executionTimeMs": 245
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
### Using the Selected Model
|
|
178
|
+
|
|
179
|
+
Connect the output to an HTTP Request node or OpenRouter integration:
|
|
180
|
+
|
|
181
|
+
```
|
|
182
|
+
[OpenRouter Model Selector] → [HTTP Request to OpenRouter API]
|
|
183
|
+
URL: https://openrouter.ai/api/v1/chat/completions
|
|
184
|
+
Body: { "model": "={{$json.recommended.modelId}}", ... }
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
## Scoring Algorithm
|
|
188
|
+
|
|
189
|
+
The scoring formula is deterministic and based on external benchmarks:
|
|
190
|
+
|
|
191
|
+
```
|
|
192
|
+
score = (benchmark_fit × 0.4) + (task_fit × 0.3) + (budget_fit × 0.2) + (capability_fit × 0.1) × provider_boost
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
### Components
|
|
196
|
+
|
|
197
|
+
| Component | Weight | Description |
|
|
198
|
+
|-----------|--------|-------------|
|
|
199
|
+
| Benchmark Fit | 40% | Score from external benchmarks (AA, LMSYS, LiveBench) |
|
|
200
|
+
| Task Fit | 30% | How well the model matches task requirements |
|
|
201
|
+
| Budget Fit | 20% | Cost alignment with budget preference |
|
|
202
|
+
| Capability Fit | 10% | Context length, JSON support, verification status |
|
|
203
|
+
| Provider Boost | ×1.0-1.2 | Task-specific provider bonuses |
|
|
204
|
+
|
|
205
|
+
### Provider Boosts by Task
|
|
206
|
+
|
|
207
|
+
| Task | Provider Boosts |
|
|
208
|
+
|------|-----------------|
|
|
209
|
+
| Translation | DeepSeek +20%, Qwen +15%, Anthropic +10% |
|
|
210
|
+
| Coding | Anthropic +15%, OpenAI +10%, DeepSeek +8% |
|
|
211
|
+
| Analysis | Anthropic +15%, OpenAI +10%, Google +5% |
|
|
212
|
+
| Vision | OpenAI +15%, Google +12%, Anthropic +8% |
|
|
213
|
+
| Math | DeepSeek +15%, Qwen +12%, OpenAI +10% |
|
|
214
|
+
|
|
215
|
+
## Configuration
|
|
216
|
+
|
|
217
|
+
### Node Parameters
|
|
218
|
+
|
|
219
|
+
| Parameter | Type | Description |
|
|
220
|
+
|-----------|------|-------------|
|
|
221
|
+
| Task Category | Dropdown | Type of task (coding, translation, etc.) |
|
|
222
|
+
| Budget | Dropdown | Cost preference (cheap, balanced, premium) |
|
|
223
|
+
| Model Override | Dynamic Dropdown | Override with specific model |
|
|
224
|
+
| Filters | Collection | Advanced filtering options |
|
|
225
|
+
| Options | Collection | Output configuration |
|
|
226
|
+
|
|
227
|
+
### Filter Options
|
|
228
|
+
|
|
229
|
+
| Filter | Type | Default | Description |
|
|
230
|
+
|--------|------|---------|-------------|
|
|
231
|
+
| Min Context Length | Number | 8000 | Minimum tokens |
|
|
232
|
+
| Require JSON Mode | Boolean | false | Only JSON-capable models |
|
|
233
|
+
| Require Vision | Boolean | false | Only multimodal models |
|
|
234
|
+
| Max Cost per 1K | Number | 0 | Cost limit (0 = no limit) |
|
|
235
|
+
| Provider Whitelist | Multi-select | [] | Include only these providers |
|
|
236
|
+
| Provider Blacklist | Multi-select | [] | Exclude these providers |
|
|
237
|
+
|
|
238
|
+
## Benchmark Sync Workflow
|
|
239
|
+
|
|
240
|
+
The node requires benchmark data to be synced weekly via n8n workflow.
|
|
241
|
+
|
|
242
|
+
### n8n Workflow: `TN_benchmark_sync_artificial_analysis`
|
|
243
|
+
|
|
244
|
+
**Trigger**: Weekly (Sunday 03:00 UTC) + Manual + Webhook
|
|
245
|
+
|
|
246
|
+
**Data Flow**:
|
|
247
|
+
```
|
|
248
|
+
[1. Fetch Artificial Analysis] ──────┐
|
|
249
|
+
│
|
|
250
|
+
[2. Fetch OpenRouter Catalog] ────────┼──► [4. Merge All Data]
|
|
251
|
+
│ │
|
|
252
|
+
[3. Fetch Existing Mappings] ────────┘ ▼
|
|
253
|
+
[5. Process & Match Models]
|
|
254
|
+
│
|
|
255
|
+
┌──────────────┴──────────────┐
|
|
256
|
+
▼ ▼
|
|
257
|
+
[6. Upsert Benchmarks] [7. Store Unmatched]
|
|
258
|
+
│ │
|
|
259
|
+
└──────────────┬──────────────┘
|
|
260
|
+
▼
|
|
261
|
+
[8. Merge Results]
|
|
262
|
+
│
|
|
263
|
+
▼
|
|
264
|
+
[9. Telegram Notification]
|
|
265
|
+
```
|
|
266
|
+
|
|
267
|
+
**Detailed Documentation**: See [docs/BENCHMARK_SYSTEM.md](docs/BENCHMARK_SYSTEM.md)
|
|
268
|
+
|
|
269
|
+
### Manual Sync Trigger
|
|
270
|
+
|
|
271
|
+
```bash
|
|
272
|
+
# Via n8n Webhook
|
|
273
|
+
curl -X POST https://n8n.dev.ecolights.de/webhook/benchmark-sync
|
|
274
|
+
```
|
|
275
|
+
|
|
276
|
+
## Development
|
|
277
|
+
|
|
278
|
+
```bash
|
|
279
|
+
# Install dependencies
|
|
280
|
+
pnpm install
|
|
281
|
+
|
|
282
|
+
# Build
|
|
283
|
+
pnpm build
|
|
284
|
+
|
|
285
|
+
# Watch mode
|
|
286
|
+
pnpm dev
|
|
287
|
+
|
|
288
|
+
# Lint
|
|
289
|
+
pnpm lint
|
|
290
|
+
|
|
291
|
+
# Format
|
|
292
|
+
pnpm format
|
|
293
|
+
```
|
|
294
|
+
|
|
295
|
+
## License
|
|
296
|
+
|
|
297
|
+
MIT
|
|
298
|
+
|
|
299
|
+
## Author
|
|
300
|
+
|
|
301
|
+
EcoLights (dev@ecolights.de)
|
|
302
|
+
|
|
303
|
+
## Links
|
|
304
|
+
|
|
305
|
+
- [OpenRouter](https://openrouter.ai)
|
|
306
|
+
- [n8n Community Nodes](https://docs.n8n.io/integrations/community-nodes/)
|
|
307
|
+
- [Supabase](https://supabase.com)
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { IAuthenticateGeneric, ICredentialTestRequest, ICredentialType, INodeProperties } from 'n8n-workflow';
|
|
2
|
+
export declare class OpenRouterApi implements ICredentialType {
|
|
3
|
+
name: string;
|
|
4
|
+
displayName: string;
|
|
5
|
+
documentationUrl: string;
|
|
6
|
+
properties: INodeProperties[];
|
|
7
|
+
authenticate: IAuthenticateGeneric;
|
|
8
|
+
test: ICredentialTestRequest;
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=OpenRouterApi.credentials.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"OpenRouterApi.credentials.d.ts","sourceRoot":"","sources":["../../credentials/OpenRouterApi.credentials.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,oBAAoB,EACpB,sBAAsB,EACtB,eAAe,EACf,eAAe,EAChB,MAAM,cAAc,CAAC;AAEtB,qBAAa,aAAc,YAAW,eAAe;IACnD,IAAI,SAAmB;IACvB,WAAW,SAAoB;IAC/B,gBAAgB,SAA+C;IAC/D,UAAU,EAAE,eAAe,EAAE,CAY3B;IAEF,YAAY,EAAE,oBAAoB,CAOhC;IAEF,IAAI,EAAE,sBAAsB,CAM1B;CACH"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.OpenRouterApi = void 0;
|
|
4
|
+
class OpenRouterApi {
|
|
5
|
+
name = 'openRouterApi';
|
|
6
|
+
displayName = 'OpenRouter API';
|
|
7
|
+
documentationUrl = 'https://openrouter.ai/docs#authentication';
|
|
8
|
+
properties = [
|
|
9
|
+
{
|
|
10
|
+
displayName: 'API Key',
|
|
11
|
+
name: 'apiKey',
|
|
12
|
+
type: 'string',
|
|
13
|
+
typeOptions: {
|
|
14
|
+
password: true,
|
|
15
|
+
},
|
|
16
|
+
default: '',
|
|
17
|
+
required: true,
|
|
18
|
+
description: 'Your OpenRouter API key from openrouter.ai/keys',
|
|
19
|
+
},
|
|
20
|
+
];
|
|
21
|
+
authenticate = {
|
|
22
|
+
type: 'generic',
|
|
23
|
+
properties: {
|
|
24
|
+
headers: {
|
|
25
|
+
Authorization: '=Bearer {{$credentials.apiKey}}',
|
|
26
|
+
},
|
|
27
|
+
},
|
|
28
|
+
};
|
|
29
|
+
test = {
|
|
30
|
+
request: {
|
|
31
|
+
baseURL: 'https://openrouter.ai/api/v1',
|
|
32
|
+
url: '/models',
|
|
33
|
+
method: 'GET',
|
|
34
|
+
},
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
exports.OpenRouterApi = OpenRouterApi;
|
|
38
|
+
//# sourceMappingURL=OpenRouterApi.credentials.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"OpenRouterApi.credentials.js","sourceRoot":"","sources":["../../credentials/OpenRouterApi.credentials.ts"],"names":[],"mappings":";;;AAOA,MAAa,aAAa;IACxB,IAAI,GAAG,eAAe,CAAC;IACvB,WAAW,GAAG,gBAAgB,CAAC;IAC/B,gBAAgB,GAAG,2CAA2C,CAAC;IAC/D,UAAU,GAAsB;QAC9B;YACE,WAAW,EAAE,SAAS;YACtB,IAAI,EAAE,QAAQ;YACd,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE;gBACX,QAAQ,EAAE,IAAI;aACf;YACD,OAAO,EAAE,EAAE;YACX,QAAQ,EAAE,IAAI;YACd,WAAW,EAAE,iDAAiD;SAC/D;KACF,CAAC;IAEF,YAAY,GAAyB;QACnC,IAAI,EAAE,SAAS;QACf,UAAU,EAAE;YACV,OAAO,EAAE;gBACP,aAAa,EAAE,iCAAiC;aACjD;SACF;KACF,CAAC;IAEF,IAAI,GAA2B;QAC7B,OAAO,EAAE;YACP,OAAO,EAAE,8BAA8B;YACvC,GAAG,EAAE,SAAS;YACd,MAAM,EAAE,KAAK;SACd;KACF,CAAC;CACH;AAlCD,sCAkCC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { IAuthenticateGeneric, ICredentialTestRequest, ICredentialType, INodeProperties } from 'n8n-workflow';
|
|
2
|
+
export declare class SupabaseModelCatalogApi implements ICredentialType {
|
|
3
|
+
name: string;
|
|
4
|
+
displayName: string;
|
|
5
|
+
documentationUrl: string;
|
|
6
|
+
properties: INodeProperties[];
|
|
7
|
+
authenticate: IAuthenticateGeneric;
|
|
8
|
+
test: ICredentialTestRequest;
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=SupabaseModelCatalogApi.credentials.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SupabaseModelCatalogApi.credentials.d.ts","sourceRoot":"","sources":["../../credentials/SupabaseModelCatalogApi.credentials.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,oBAAoB,EACpB,sBAAsB,EACtB,eAAe,EACf,eAAe,EAChB,MAAM,cAAc,CAAC;AAEtB,qBAAa,uBAAwB,YAAW,eAAe;IAC7D,IAAI,SAA6B;IACjC,WAAW,SAAgC;IAC3C,gBAAgB,SAA0C;IAC1D,UAAU,EAAE,eAAe,EAAE,CAsB3B;IAEF,YAAY,EAAE,oBAAoB,CAQhC;IAEF,IAAI,EAAE,sBAAsB,CAS1B;CACH"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SupabaseModelCatalogApi = void 0;
|
|
4
|
+
class SupabaseModelCatalogApi {
|
|
5
|
+
name = 'supabaseModelCatalogApi';
|
|
6
|
+
displayName = 'Supabase Model Catalog API';
|
|
7
|
+
documentationUrl = 'https://supabase.com/docs/guides/api';
|
|
8
|
+
properties = [
|
|
9
|
+
{
|
|
10
|
+
displayName: 'Supabase URL',
|
|
11
|
+
name: 'url',
|
|
12
|
+
type: 'string',
|
|
13
|
+
default: '',
|
|
14
|
+
placeholder: 'https://your-project.supabase.co',
|
|
15
|
+
description: 'Your Supabase project URL',
|
|
16
|
+
required: true,
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
displayName: 'API Key',
|
|
20
|
+
name: 'apiKey',
|
|
21
|
+
type: 'string',
|
|
22
|
+
typeOptions: {
|
|
23
|
+
password: true,
|
|
24
|
+
},
|
|
25
|
+
default: '',
|
|
26
|
+
description: 'Your Supabase anon/public key. Found in Project Settings > API.',
|
|
27
|
+
required: true,
|
|
28
|
+
},
|
|
29
|
+
];
|
|
30
|
+
authenticate = {
|
|
31
|
+
type: 'generic',
|
|
32
|
+
properties: {
|
|
33
|
+
headers: {
|
|
34
|
+
apikey: '={{$credentials.apiKey}}',
|
|
35
|
+
Authorization: '=Bearer {{$credentials.apiKey}}',
|
|
36
|
+
},
|
|
37
|
+
},
|
|
38
|
+
};
|
|
39
|
+
test = {
|
|
40
|
+
request: {
|
|
41
|
+
baseURL: '={{$credentials.url}}',
|
|
42
|
+
url: '/rest/v1/models_catalog?select=model&limit=1',
|
|
43
|
+
headers: {
|
|
44
|
+
apikey: '={{$credentials.apiKey}}',
|
|
45
|
+
Authorization: '=Bearer {{$credentials.apiKey}}',
|
|
46
|
+
},
|
|
47
|
+
},
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
exports.SupabaseModelCatalogApi = SupabaseModelCatalogApi;
|
|
51
|
+
//# sourceMappingURL=SupabaseModelCatalogApi.credentials.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SupabaseModelCatalogApi.credentials.js","sourceRoot":"","sources":["../../credentials/SupabaseModelCatalogApi.credentials.ts"],"names":[],"mappings":";;;AAOA,MAAa,uBAAuB;IAClC,IAAI,GAAG,yBAAyB,CAAC;IACjC,WAAW,GAAG,4BAA4B,CAAC;IAC3C,gBAAgB,GAAG,sCAAsC,CAAC;IAC1D,UAAU,GAAsB;QAC9B;YACE,WAAW,EAAE,cAAc;YAC3B,IAAI,EAAE,KAAK;YACX,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE,EAAE;YACX,WAAW,EAAE,kCAAkC;YAC/C,WAAW,EAAE,2BAA2B;YACxC,QAAQ,EAAE,IAAI;SACf;QACD;YACE,WAAW,EAAE,SAAS;YACtB,IAAI,EAAE,QAAQ;YACd,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE;gBACX,QAAQ,EAAE,IAAI;aACf;YACD,OAAO,EAAE,EAAE;YACX,WAAW,EACT,iEAAiE;YACnE,QAAQ,EAAE,IAAI;SACf;KACF,CAAC;IAEF,YAAY,GAAyB;QACnC,IAAI,EAAE,SAAS;QACf,UAAU,EAAE;YACV,OAAO,EAAE;gBACP,MAAM,EAAE,0BAA0B;gBAClC,aAAa,EAAE,iCAAiC;aACjD;SACF;KACF,CAAC;IAEF,IAAI,GAA2B;QAC7B,OAAO,EAAE;YACP,OAAO,EAAE,uBAAuB;YAChC,GAAG,EAAE,8CAA8C;YACnD,OAAO,EAAE;gBACP,MAAM,EAAE,0BAA0B;gBAClC,aAAa,EAAE,iCAAiC;aACjD;SACF;KACF,CAAC;CACH;AAhDD,0DAgDC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { IExecuteFunctions, ILoadOptionsFunctions, INodeExecutionData, INodePropertyOptions, INodeType, INodeTypeDescription } from 'n8n-workflow';
|
|
2
|
+
export declare class OpenRouterChatCompletion implements INodeType {
|
|
3
|
+
description: INodeTypeDescription;
|
|
4
|
+
methods: {
|
|
5
|
+
loadOptions: {
|
|
6
|
+
getModels(this: ILoadOptionsFunctions): Promise<INodePropertyOptions[]>;
|
|
7
|
+
};
|
|
8
|
+
};
|
|
9
|
+
execute(this: IExecuteFunctions): Promise<INodeExecutionData[][]>;
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=OpenRouterChatCompletion.node.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"OpenRouterChatCompletion.node.d.ts","sourceRoot":"","sources":["../../../nodes/OpenRouterChatCompletion/OpenRouterChatCompletion.node.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,iBAAiB,EACjB,qBAAqB,EACrB,kBAAkB,EAClB,oBAAoB,EACpB,SAAS,EACT,oBAAoB,EAErB,MAAM,cAAc,CAAC;AAyCtB,qBAAa,wBAAyB,YAAW,SAAS;IACxD,WAAW,EAAE,oBAAoB,CAgK/B;IAEF,OAAO;;4BAEmB,qBAAqB,GAAG,OAAO,CAAC,oBAAoB,EAAE,CAAC;;MA0C/E;IAEI,OAAO,CAAC,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC,kBAAkB,EAAE,EAAE,CAAC;CAuHxE"}
|