n8n-nodes-jev 0.2.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.
@@ -0,0 +1,355 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.routeProperties = exports.optionsProperty = exports.questionProperties = exports.stateProperties = exports.modelProperty = exports.operationProperty = void 0;
4
+ const showForAsk = { show: { operation: ['ask'] } };
5
+ const showForAll = { show: { operation: ['ask', 'route'] } };
6
+ const showForRoute = { show: { operation: ['route'] } };
7
+ exports.operationProperty = {
8
+ displayName: 'Operation',
9
+ name: 'operation',
10
+ type: 'options',
11
+ noDataExpression: true,
12
+ options: [
13
+ {
14
+ name: 'Ask Questions',
15
+ value: 'ask',
16
+ description: 'Evaluate a state against typed Choice, Score, and Noul questions',
17
+ action: 'Ask questions about a state',
18
+ },
19
+ {
20
+ name: 'Route by Choice',
21
+ value: 'route',
22
+ description: 'Send each item to the output of the route Jev picks for it',
23
+ action: 'Route items by choice',
24
+ },
25
+ ],
26
+ default: 'ask',
27
+ };
28
+ exports.modelProperty = {
29
+ displayName: 'Model',
30
+ name: 'model',
31
+ type: 'resourceLocator',
32
+ default: { mode: 'list', value: 'jev-latest' },
33
+ required: true,
34
+ description: 'The Jev model to use. Aliases like jev-latest move with new releases; pin a version ID to keep answers stable.',
35
+ modes: [
36
+ {
37
+ displayName: 'From List',
38
+ name: 'list',
39
+ type: 'list',
40
+ typeOptions: {
41
+ searchListMethod: 'searchModels',
42
+ searchable: true,
43
+ },
44
+ },
45
+ {
46
+ displayName: 'ID',
47
+ name: 'id',
48
+ type: 'string',
49
+ placeholder: 'e.g. jev-1.13.0',
50
+ },
51
+ ],
52
+ displayOptions: showForAll,
53
+ };
54
+ exports.stateProperties = [
55
+ {
56
+ displayName: 'State Source',
57
+ name: 'stateSource',
58
+ type: 'options',
59
+ noDataExpression: true,
60
+ options: [
61
+ {
62
+ name: 'Text',
63
+ value: 'text',
64
+ description: 'A single message, article, or passage',
65
+ },
66
+ {
67
+ name: 'JSON',
68
+ value: 'json',
69
+ description: 'An object or array with named fields, records, or a conversation',
70
+ },
71
+ {
72
+ name: 'Whole Input Item',
73
+ value: 'inputItem',
74
+ description: "Send the incoming item's JSON as the state",
75
+ },
76
+ ],
77
+ default: 'text',
78
+ description: 'The content Jev evaluates. Every question sees the same state. Objects with descriptive field names usually work best.',
79
+ displayOptions: showForAll,
80
+ },
81
+ {
82
+ displayName: 'State',
83
+ name: 'stateText',
84
+ type: 'string',
85
+ typeOptions: { rows: 4 },
86
+ default: '',
87
+ required: true,
88
+ placeholder: 'e.g. {{ $json.message }}',
89
+ displayOptions: { show: { operation: ['ask', 'route'], stateSource: ['text'] } },
90
+ },
91
+ {
92
+ displayName: 'State (JSON)',
93
+ name: 'stateJson',
94
+ type: 'json',
95
+ default: '{\n "message": ""\n}',
96
+ required: true,
97
+ displayOptions: { show: { operation: ['ask', 'route'], stateSource: ['json'] } },
98
+ },
99
+ ];
100
+ exports.questionProperties = [
101
+ {
102
+ displayName: 'Define Questions',
103
+ name: 'questionMode',
104
+ type: 'options',
105
+ noDataExpression: true,
106
+ options: [
107
+ {
108
+ name: 'Using Fields Below',
109
+ value: 'fields',
110
+ },
111
+ {
112
+ name: 'Using JSON',
113
+ value: 'json',
114
+ description: 'Write the questions map as in the API reference; supports structured instructions and criteria',
115
+ },
116
+ ],
117
+ default: 'fields',
118
+ displayOptions: showForAsk,
119
+ },
120
+ {
121
+ displayName: 'Questions',
122
+ name: 'questions',
123
+ type: 'fixedCollection',
124
+ typeOptions: { multipleValues: true, sortable: true },
125
+ placeholder: 'Add Question',
126
+ default: {},
127
+ description: 'Keep each question atomic: one decision per question. All questions are answered in a single request.',
128
+ displayOptions: { show: { operation: ['ask'], questionMode: ['fields'] } },
129
+ options: [
130
+ {
131
+ name: 'question',
132
+ displayName: 'Question',
133
+ values: [
134
+ {
135
+ displayName: 'Answer Type',
136
+ name: 'type',
137
+ type: 'options',
138
+ options: [
139
+ {
140
+ name: 'Choice',
141
+ value: 'choice',
142
+ description: 'Pick one option from a set. Returns the option, probabilities, and confidence.',
143
+ },
144
+ {
145
+ name: 'Noul (Yes/No)',
146
+ value: 'noul',
147
+ description: 'Returns the probability (0-1) that the answer is yes',
148
+ },
149
+ {
150
+ name: 'Score',
151
+ value: 'score',
152
+ description: 'Rate against ordered levels. Returns a weighted score and confidence.',
153
+ },
154
+ ],
155
+ default: 'noul',
156
+ },
157
+ {
158
+ displayName: 'ID',
159
+ name: 'id',
160
+ type: 'string',
161
+ default: '',
162
+ required: true,
163
+ placeholder: 'e.g. is_urgent',
164
+ description: 'Key the answer is returned under. Not sent to the model.',
165
+ },
166
+ {
167
+ displayName: 'Instructions',
168
+ name: 'instructions',
169
+ type: 'string',
170
+ typeOptions: { rows: 2 },
171
+ default: '',
172
+ required: true,
173
+ placeholder: 'e.g. Does this message convey urgency?',
174
+ description: 'The exact question or condition. Jev reads literally, so state boundary cases explicitly.',
175
+ },
176
+ {
177
+ displayName: 'Levels',
178
+ name: 'scoreLevels',
179
+ type: 'string',
180
+ typeOptions: { rows: 4 },
181
+ default: '',
182
+ required: true,
183
+ placeholder: 'Calm, just stating facts\nFrustrated but civil\nVery angry, strong language',
184
+ description: 'One level description per line, lowest first. At least two. Level numbers start at 0.',
185
+ displayOptions: { show: { type: ['score'] } },
186
+ },
187
+ {
188
+ displayName: 'No Means',
189
+ name: 'falseCriterion',
190
+ type: 'string',
191
+ default: '',
192
+ placeholder: 'e.g. No urgency expressed',
193
+ description: 'Optional: what a no (value near 0) means',
194
+ displayOptions: { show: { type: ['noul'] } },
195
+ },
196
+ {
197
+ displayName: 'Options',
198
+ name: 'choiceOptions',
199
+ type: 'string',
200
+ typeOptions: { rows: 4 },
201
+ default: '',
202
+ required: true,
203
+ placeholder: 'billing: Payments, invoicing, refunds\ntechnical: Bugs, outages, integrations\nsales',
204
+ description: 'One option per line, optionally followed by ": description". At least two.',
205
+ displayOptions: { show: { type: ['choice'] } },
206
+ },
207
+ {
208
+ displayName: 'Yes Means',
209
+ name: 'trueCriterion',
210
+ type: 'string',
211
+ default: '',
212
+ placeholder: 'e.g. Explicitly time-sensitive',
213
+ description: 'Optional: what a yes (value near 1) means',
214
+ displayOptions: { show: { type: ['noul'] } },
215
+ },
216
+ ],
217
+ },
218
+ ],
219
+ },
220
+ {
221
+ displayName: 'Questions (JSON)',
222
+ name: 'questionsJson',
223
+ type: 'json',
224
+ default: '{\n "is_urgent": {\n "type": "noul",\n "instructions": "Does this message convey urgency?"\n }\n}',
225
+ required: true,
226
+ description: 'Map of question ID to question. See https://docs.typesafe.ai/api.',
227
+ displayOptions: { show: { operation: ['ask'], questionMode: ['json'] } },
228
+ },
229
+ ];
230
+ exports.optionsProperty = {
231
+ displayName: 'Options',
232
+ name: 'options',
233
+ type: 'collection',
234
+ placeholder: 'Add Option',
235
+ default: {},
236
+ displayOptions: showForAll,
237
+ options: [
238
+ {
239
+ displayName: 'Include Input Fields',
240
+ name: 'includeInputFields',
241
+ type: 'boolean',
242
+ default: true,
243
+ description: 'Whether to keep the fields of the incoming item next to the answers',
244
+ },
245
+ {
246
+ displayName: 'Max Retries',
247
+ name: 'maxRetries',
248
+ type: 'number',
249
+ typeOptions: { minValue: 0, maxValue: 10 },
250
+ default: 3,
251
+ description: 'How many times to retry when TypeSafe is rate limiting (429) or overloaded (529), with backoff',
252
+ },
253
+ {
254
+ displayName: 'Output Field',
255
+ name: 'outputField',
256
+ type: 'string',
257
+ default: 'jev',
258
+ description: 'Name of the field the answers are written to',
259
+ },
260
+ {
261
+ displayName: 'Simplify Output',
262
+ name: 'simplify',
263
+ type: 'boolean',
264
+ default: true,
265
+ description: 'Whether to return one flat value per question (plus _confidence and _level fields) instead of the full API response with probabilities and usage',
266
+ displayOptions: { show: { '/operation': ['ask'] } },
267
+ },
268
+ {
269
+ displayName: 'Timeout (Ms)',
270
+ name: 'timeout',
271
+ type: 'number',
272
+ typeOptions: { minValue: 1000 },
273
+ default: 60000,
274
+ description: 'How long to wait for a response before failing the request',
275
+ },
276
+ ],
277
+ };
278
+ exports.routeProperties = [
279
+ {
280
+ displayName: 'Instructions',
281
+ name: 'routeInstructions',
282
+ type: 'string',
283
+ typeOptions: { rows: 2 },
284
+ default: '',
285
+ required: true,
286
+ placeholder: 'e.g. Which team should handle this ticket?',
287
+ description: 'What Jev should decide. Jev reads literally, so state boundary cases in the route descriptions.',
288
+ displayOptions: showForRoute,
289
+ },
290
+ {
291
+ displayName: 'Routes',
292
+ name: 'routes',
293
+ type: 'fixedCollection',
294
+ typeOptions: { multipleValues: true, sortable: true },
295
+ placeholder: 'Add Route',
296
+ default: {},
297
+ description: 'Each route becomes an output of this node. Add at least two.',
298
+ displayOptions: showForRoute,
299
+ options: [
300
+ {
301
+ name: 'values',
302
+ displayName: 'Route',
303
+ values: [
304
+ {
305
+ displayName: 'Name',
306
+ name: 'name',
307
+ type: 'string',
308
+ default: '',
309
+ required: true,
310
+ noDataExpression: true,
311
+ placeholder: 'e.g. billing',
312
+ description: 'Option name sent to Jev and label of the output',
313
+ },
314
+ {
315
+ displayName: 'Use When',
316
+ name: 'description',
317
+ type: 'string',
318
+ default: '',
319
+ placeholder: 'e.g. Payments, invoicing, or refunds',
320
+ description: 'Optional: what belongs in this route. Clear, non-overlapping descriptions route best.',
321
+ },
322
+ ],
323
+ },
324
+ ],
325
+ },
326
+ {
327
+ displayName: 'Low Confidence Handling',
328
+ name: 'lowConfidence',
329
+ type: 'options',
330
+ noDataExpression: true,
331
+ options: [
332
+ {
333
+ name: 'Send to Best Route Anyway',
334
+ value: 'bestRoute',
335
+ },
336
+ {
337
+ name: 'Send to Low Confidence Output',
338
+ value: 'extraOutput',
339
+ description: 'Adds an extra output for items Jev is unsure about, e.g. for human review',
340
+ },
341
+ ],
342
+ default: 'extraOutput',
343
+ displayOptions: showForRoute,
344
+ },
345
+ {
346
+ displayName: 'Confidence Threshold',
347
+ name: 'confidenceThreshold',
348
+ type: 'number',
349
+ typeOptions: { minValue: 0, maxValue: 1, numberPrecision: 2 },
350
+ default: 0.5,
351
+ description: 'Items whose confidence is below this go to the Low Confidence output. Use higher values when a wrong route is costly.',
352
+ displayOptions: { show: { operation: ['route'], lowConfidence: ['extraOutput'] } },
353
+ },
354
+ ];
355
+ //# sourceMappingURL=descriptions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"descriptions.js","sourceRoot":"","sources":["../../../../nodes/Jev/shared/descriptions.ts"],"names":[],"mappings":";;;AAEA,MAAM,UAAU,GAAG,EAAE,IAAI,EAAE,EAAE,SAAS,EAAE,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC;AACpD,MAAM,UAAU,GAAG,EAAE,IAAI,EAAE,EAAE,SAAS,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC;AAC7D,MAAM,YAAY,GAAG,EAAE,IAAI,EAAE,EAAE,SAAS,EAAE,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC;AAE3C,QAAA,iBAAiB,GAAoB;IACjD,WAAW,EAAE,WAAW;IACxB,IAAI,EAAE,WAAW;IACjB,IAAI,EAAE,SAAS;IACf,gBAAgB,EAAE,IAAI;IACtB,OAAO,EAAE;QACR;YACC,IAAI,EAAE,eAAe;YACrB,KAAK,EAAE,KAAK;YACZ,WAAW,EAAE,kEAAkE;YAC/E,MAAM,EAAE,6BAA6B;SACrC;QACD;YACC,IAAI,EAAE,iBAAiB;YACvB,KAAK,EAAE,OAAO;YACd,WAAW,EAAE,4DAA4D;YACzE,MAAM,EAAE,uBAAuB;SAC/B;KACD;IACD,OAAO,EAAE,KAAK;CACd,CAAC;AAEW,QAAA,aAAa,GAAoB;IAC7C,WAAW,EAAE,OAAO;IACpB,IAAI,EAAE,OAAO;IACb,IAAI,EAAE,iBAAiB;IACvB,OAAO,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE;IAC9C,QAAQ,EAAE,IAAI;IACd,WAAW,EACV,gHAAgH;IACjH,KAAK,EAAE;QACN;YACC,WAAW,EAAE,WAAW;YACxB,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,MAAM;YACZ,WAAW,EAAE;gBACZ,gBAAgB,EAAE,cAAc;gBAChC,UAAU,EAAE,IAAI;aAChB;SACD;QACD;YACC,WAAW,EAAE,IAAI;YACjB,IAAI,EAAE,IAAI;YACV,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,iBAAiB;SAC9B;KACD;IACD,cAAc,EAAE,UAAU;CAC1B,CAAC;AAEW,QAAA,eAAe,GAAsB;IACjD;QACC,WAAW,EAAE,cAAc;QAC3B,IAAI,EAAE,aAAa;QACnB,IAAI,EAAE,SAAS;QACf,gBAAgB,EAAE,IAAI;QACtB,OAAO,EAAE;YACR;gBACC,IAAI,EAAE,MAAM;gBACZ,KAAK,EAAE,MAAM;gBACb,WAAW,EAAE,uCAAuC;aACpD;YACD;gBACC,IAAI,EAAE,MAAM;gBACZ,KAAK,EAAE,MAAM;gBACb,WAAW,EAAE,kEAAkE;aAC/E;YACD;gBACC,IAAI,EAAE,kBAAkB;gBACxB,KAAK,EAAE,WAAW;gBAClB,WAAW,EAAE,4CAA4C;aACzD;SACD;QACD,OAAO,EAAE,MAAM;QACf,WAAW,EACV,wHAAwH;QACzH,cAAc,EAAE,UAAU;KAC1B;IACD;QACC,WAAW,EAAE,OAAO;QACpB,IAAI,EAAE,WAAW;QACjB,IAAI,EAAE,QAAQ;QACd,WAAW,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE;QACxB,OAAO,EAAE,EAAE;QACX,QAAQ,EAAE,IAAI;QACd,WAAW,EAAE,0BAA0B;QACvC,cAAc,EAAE,EAAE,IAAI,EAAE,EAAE,SAAS,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE,WAAW,EAAE,CAAC,MAAM,CAAC,EAAE,EAAE;KAChF;IACD;QACC,WAAW,EAAE,cAAc;QAC3B,IAAI,EAAE,WAAW;QACjB,IAAI,EAAE,MAAM;QACZ,OAAO,EAAE,uBAAuB;QAChC,QAAQ,EAAE,IAAI;QACd,cAAc,EAAE,EAAE,IAAI,EAAE,EAAE,SAAS,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE,WAAW,EAAE,CAAC,MAAM,CAAC,EAAE,EAAE;KAChF;CACD,CAAC;AAEW,QAAA,kBAAkB,GAAsB;IACpD;QACC,WAAW,EAAE,kBAAkB;QAC/B,IAAI,EAAE,cAAc;QACpB,IAAI,EAAE,SAAS;QACf,gBAAgB,EAAE,IAAI;QACtB,OAAO,EAAE;YACR;gBACC,IAAI,EAAE,oBAAoB;gBAC1B,KAAK,EAAE,QAAQ;aACf;YACD;gBACC,IAAI,EAAE,YAAY;gBAClB,KAAK,EAAE,MAAM;gBACb,WAAW,EACV,gGAAgG;aACjG;SACD;QACD,OAAO,EAAE,QAAQ;QACjB,cAAc,EAAE,UAAU;KAC1B;IACD;QACC,WAAW,EAAE,WAAW;QACxB,IAAI,EAAE,WAAW;QACjB,IAAI,EAAE,iBAAiB;QACvB,WAAW,EAAE,EAAE,cAAc,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE;QACrD,WAAW,EAAE,cAAc;QAC3B,OAAO,EAAE,EAAE;QACX,WAAW,EACV,uGAAuG;QACxG,cAAc,EAAE,EAAE,IAAI,EAAE,EAAE,SAAS,EAAE,CAAC,KAAK,CAAC,EAAE,YAAY,EAAE,CAAC,QAAQ,CAAC,EAAE,EAAE;QAC1E,OAAO,EAAE;YACR;gBACC,IAAI,EAAE,UAAU;gBAChB,WAAW,EAAE,UAAU;gBACvB,MAAM,EAAE;oBACP;wBACC,WAAW,EAAE,aAAa;wBAC1B,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,SAAS;wBACf,OAAO,EAAE;4BACR;gCACC,IAAI,EAAE,QAAQ;gCACd,KAAK,EAAE,QAAQ;gCACf,WAAW,EACV,gFAAgF;6BACjF;4BACD;gCACC,IAAI,EAAE,eAAe;gCACrB,KAAK,EAAE,MAAM;gCACb,WAAW,EAAE,sDAAsD;6BACnE;4BACD;gCACC,IAAI,EAAE,OAAO;gCACb,KAAK,EAAE,OAAO;gCACd,WAAW,EACV,uEAAuE;6BACxE;yBACD;wBACD,OAAO,EAAE,MAAM;qBACf;oBACD;wBACC,WAAW,EAAE,IAAI;wBACjB,IAAI,EAAE,IAAI;wBACV,IAAI,EAAE,QAAQ;wBACd,OAAO,EAAE,EAAE;wBACX,QAAQ,EAAE,IAAI;wBACd,WAAW,EAAE,gBAAgB;wBAC7B,WAAW,EAAE,0DAA0D;qBACvE;oBACD;wBACC,WAAW,EAAE,cAAc;wBAC3B,IAAI,EAAE,cAAc;wBACpB,IAAI,EAAE,QAAQ;wBACd,WAAW,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE;wBACxB,OAAO,EAAE,EAAE;wBACX,QAAQ,EAAE,IAAI;wBACd,WAAW,EAAE,wCAAwC;wBACrD,WAAW,EACV,2FAA2F;qBAC5F;oBACD;wBACC,WAAW,EAAE,QAAQ;wBACrB,IAAI,EAAE,aAAa;wBACnB,IAAI,EAAE,QAAQ;wBACd,WAAW,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE;wBACxB,OAAO,EAAE,EAAE;wBACX,QAAQ,EAAE,IAAI;wBACd,WAAW,EACV,6EAA6E;wBAC9E,WAAW,EACV,uFAAuF;wBACxF,cAAc,EAAE,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,OAAO,CAAC,EAAE,EAAE;qBAC7C;oBACD;wBACC,WAAW,EAAE,UAAU;wBACvB,IAAI,EAAE,gBAAgB;wBACtB,IAAI,EAAE,QAAQ;wBACd,OAAO,EAAE,EAAE;wBACX,WAAW,EAAE,2BAA2B;wBACxC,WAAW,EAAE,0CAA0C;wBACvD,cAAc,EAAE,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,MAAM,CAAC,EAAE,EAAE;qBAC5C;oBACD;wBACC,WAAW,EAAE,SAAS;wBACtB,IAAI,EAAE,eAAe;wBACrB,IAAI,EAAE,QAAQ;wBACd,WAAW,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE;wBACxB,OAAO,EAAE,EAAE;wBACX,QAAQ,EAAE,IAAI;wBACd,WAAW,EACV,sFAAsF;wBACvF,WAAW,EACV,4EAA4E;wBAC7E,cAAc,EAAE,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,QAAQ,CAAC,EAAE,EAAE;qBAC9C;oBACD;wBACC,WAAW,EAAE,WAAW;wBACxB,IAAI,EAAE,eAAe;wBACrB,IAAI,EAAE,QAAQ;wBACd,OAAO,EAAE,EAAE;wBACX,WAAW,EAAE,gCAAgC;wBAC7C,WAAW,EAAE,2CAA2C;wBACxD,cAAc,EAAE,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,MAAM,CAAC,EAAE,EAAE;qBAC5C;iBACD;aACD;SACD;KACD;IACD;QACC,WAAW,EAAE,kBAAkB;QAC/B,IAAI,EAAE,eAAe;QACrB,IAAI,EAAE,MAAM;QACZ,OAAO,EACN,2GAA2G;QAC5G,QAAQ,EAAE,IAAI;QACd,WAAW,EAAE,mEAAmE;QAChF,cAAc,EAAE,EAAE,IAAI,EAAE,EAAE,SAAS,EAAE,CAAC,KAAK,CAAC,EAAE,YAAY,EAAE,CAAC,MAAM,CAAC,EAAE,EAAE;KACxE;CACD,CAAC;AAEW,QAAA,eAAe,GAAoB;IAC/C,WAAW,EAAE,SAAS;IACtB,IAAI,EAAE,SAAS;IACf,IAAI,EAAE,YAAY;IAClB,WAAW,EAAE,YAAY;IACzB,OAAO,EAAE,EAAE;IACX,cAAc,EAAE,UAAU;IAC1B,OAAO,EAAE;QACR;YACC,WAAW,EAAE,sBAAsB;YACnC,IAAI,EAAE,oBAAoB;YAC1B,IAAI,EAAE,SAAS;YACf,OAAO,EAAE,IAAI;YACb,WAAW,EAAE,qEAAqE;SAClF;QACD;YACC,WAAW,EAAE,aAAa;YAC1B,IAAI,EAAE,YAAY;YAClB,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE;YAC1C,OAAO,EAAE,CAAC;YACV,WAAW,EACV,gGAAgG;SACjG;QACD;YACC,WAAW,EAAE,cAAc;YAC3B,IAAI,EAAE,aAAa;YACnB,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE,KAAK;YACd,WAAW,EAAE,8CAA8C;SAC3D;QACD;YACC,WAAW,EAAE,iBAAiB;YAC9B,IAAI,EAAE,UAAU;YAChB,IAAI,EAAE,SAAS;YACf,OAAO,EAAE,IAAI;YACb,WAAW,EACV,kJAAkJ;YACnJ,cAAc,EAAE,EAAE,IAAI,EAAE,EAAE,YAAY,EAAE,CAAC,KAAK,CAAC,EAAE,EAAE;SACnD;QACD;YACC,WAAW,EAAE,cAAc;YAC3B,IAAI,EAAE,SAAS;YACf,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE;YAC/B,OAAO,EAAE,KAAK;YACd,WAAW,EAAE,4DAA4D;SACzE;KACD;CACD,CAAC;AAEW,QAAA,eAAe,GAAsB;IACjD;QACC,WAAW,EAAE,cAAc;QAC3B,IAAI,EAAE,mBAAmB;QACzB,IAAI,EAAE,QAAQ;QACd,WAAW,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE;QACxB,OAAO,EAAE,EAAE;QACX,QAAQ,EAAE,IAAI;QACd,WAAW,EAAE,4CAA4C;QACzD,WAAW,EACV,iGAAiG;QAClG,cAAc,EAAE,YAAY;KAC5B;IACD;QACC,WAAW,EAAE,QAAQ;QACrB,IAAI,EAAE,QAAQ;QACd,IAAI,EAAE,iBAAiB;QACvB,WAAW,EAAE,EAAE,cAAc,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE;QACrD,WAAW,EAAE,WAAW;QACxB,OAAO,EAAE,EAAE;QACX,WAAW,EAAE,8DAA8D;QAC3E,cAAc,EAAE,YAAY;QAC5B,OAAO,EAAE;YACR;gBACC,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,OAAO;gBACpB,MAAM,EAAE;oBACP;wBACC,WAAW,EAAE,MAAM;wBACnB,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,QAAQ;wBACd,OAAO,EAAE,EAAE;wBACX,QAAQ,EAAE,IAAI;wBACd,gBAAgB,EAAE,IAAI;wBACtB,WAAW,EAAE,cAAc;wBAC3B,WAAW,EAAE,iDAAiD;qBAC9D;oBACD;wBACC,WAAW,EAAE,UAAU;wBACvB,IAAI,EAAE,aAAa;wBACnB,IAAI,EAAE,QAAQ;wBACd,OAAO,EAAE,EAAE;wBACX,WAAW,EAAE,sCAAsC;wBACnD,WAAW,EACV,uFAAuF;qBACxF;iBACD;aACD;SACD;KACD;IACD;QACC,WAAW,EAAE,yBAAyB;QACtC,IAAI,EAAE,eAAe;QACrB,IAAI,EAAE,SAAS;QACf,gBAAgB,EAAE,IAAI;QACtB,OAAO,EAAE;YACR;gBACC,IAAI,EAAE,2BAA2B;gBACjC,KAAK,EAAE,WAAW;aAClB;YACD;gBACC,IAAI,EAAE,+BAA+B;gBACrC,KAAK,EAAE,aAAa;gBACpB,WAAW,EAAE,2EAA2E;aACxF;SACD;QACD,OAAO,EAAE,aAAa;QACtB,cAAc,EAAE,YAAY;KAC5B;IACD;QACC,WAAW,EAAE,sBAAsB;QACnC,IAAI,EAAE,qBAAqB;QAC3B,IAAI,EAAE,QAAQ;QACd,WAAW,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,eAAe,EAAE,CAAC,EAAE;QAC7D,OAAO,EAAE,GAAG;QACZ,WAAW,EACV,uHAAuH;QACxH,cAAc,EAAE,EAAE,IAAI,EAAE,EAAE,SAAS,EAAE,CAAC,OAAO,CAAC,EAAE,aAAa,EAAE,CAAC,aAAa,CAAC,EAAE,EAAE;KAClF;CACD,CAAC"}
@@ -0,0 +1,18 @@
1
+ import type { IDataObject } from 'n8n-workflow';
2
+ export type QuestionType = 'noul' | 'choice' | 'score';
3
+ export interface QuestionField {
4
+ id?: string;
5
+ type?: QuestionType;
6
+ instructions?: string;
7
+ choiceOptions?: unknown;
8
+ scoreLevels?: unknown;
9
+ trueCriterion?: string;
10
+ falseCriterion?: string;
11
+ }
12
+ export declare class QuestionDefinitionError extends Error {
13
+ }
14
+ export declare function parseChoiceOptions(value: unknown, id: string): Record<string, string | null>;
15
+ export declare function parseScoreLevels(value: unknown, id: string): string[];
16
+ export declare function buildQuestionsFromFields(fields: QuestionField[]): IDataObject;
17
+ export declare function validateQuestionsJson(value: unknown): IDataObject;
18
+ export declare function simplifyResponse(response: IDataObject): IDataObject;
@@ -0,0 +1,145 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.QuestionDefinitionError = void 0;
4
+ exports.parseChoiceOptions = parseChoiceOptions;
5
+ exports.parseScoreLevels = parseScoreLevels;
6
+ exports.buildQuestionsFromFields = buildQuestionsFromFields;
7
+ exports.validateQuestionsJson = validateQuestionsJson;
8
+ exports.simplifyResponse = simplifyResponse;
9
+ const QUESTION_TYPES = ['noul', 'choice', 'score'];
10
+ class QuestionDefinitionError extends Error {
11
+ }
12
+ exports.QuestionDefinitionError = QuestionDefinitionError;
13
+ function splitLines(text) {
14
+ return text
15
+ .split(/\r?\n/)
16
+ .map((line) => line.trim())
17
+ .filter((line) => line.length > 0);
18
+ }
19
+ function parseChoiceOptions(value, id) {
20
+ const criteria = {};
21
+ if (Array.isArray(value)) {
22
+ for (const option of value)
23
+ criteria[String(option).trim()] = null;
24
+ }
25
+ else if (value && typeof value === 'object') {
26
+ for (const [option, description] of Object.entries(value)) {
27
+ criteria[option] = description === null || description === '' ? null : String(description);
28
+ }
29
+ }
30
+ else {
31
+ for (const line of splitLines(String(value !== null && value !== void 0 ? value : ''))) {
32
+ const colon = line.indexOf(':');
33
+ const option = (colon === -1 ? line : line.slice(0, colon)).trim();
34
+ const description = colon === -1 ? '' : line.slice(colon + 1).trim();
35
+ if (!option)
36
+ throw new QuestionDefinitionError(`Question "${id}" has an option with no name`);
37
+ if (option in criteria) {
38
+ throw new QuestionDefinitionError(`Question "${id}" lists option "${option}" twice`);
39
+ }
40
+ criteria[option] = description || null;
41
+ }
42
+ }
43
+ if (Object.keys(criteria).length < 2) {
44
+ throw new QuestionDefinitionError(`Choice question "${id}" needs at least two options`);
45
+ }
46
+ return criteria;
47
+ }
48
+ function parseScoreLevels(value, id) {
49
+ const levels = Array.isArray(value)
50
+ ? value.map((level) => String(level).trim()).filter((level) => level.length > 0)
51
+ : splitLines(String(value !== null && value !== void 0 ? value : ''));
52
+ if (levels.length < 2) {
53
+ throw new QuestionDefinitionError(`Score question "${id}" needs at least two levels`);
54
+ }
55
+ return levels;
56
+ }
57
+ function buildQuestionsFromFields(fields) {
58
+ var _a, _b, _c, _d, _e;
59
+ if (fields.length === 0)
60
+ throw new QuestionDefinitionError('Add at least one question');
61
+ const questions = {};
62
+ for (const [index, field] of fields.entries()) {
63
+ const id = ((_a = field.id) !== null && _a !== void 0 ? _a : '').trim();
64
+ if (!id)
65
+ throw new QuestionDefinitionError(`Question ${index + 1} has no ID`);
66
+ if (id in questions)
67
+ throw new QuestionDefinitionError(`Question ID "${id}" is used twice`);
68
+ const instructions = ((_b = field.instructions) !== null && _b !== void 0 ? _b : '').trim();
69
+ if (!instructions)
70
+ throw new QuestionDefinitionError(`Question "${id}" has no instructions`);
71
+ const type = (_c = field.type) !== null && _c !== void 0 ? _c : 'noul';
72
+ const question = { type, instructions };
73
+ if (type === 'choice') {
74
+ question.criteria = parseChoiceOptions(field.choiceOptions, id);
75
+ }
76
+ else if (type === 'score') {
77
+ question.criteria = parseScoreLevels(field.scoreLevels, id);
78
+ }
79
+ else {
80
+ const criteria = {};
81
+ if ((_d = field.trueCriterion) === null || _d === void 0 ? void 0 : _d.trim())
82
+ criteria.true = field.trueCriterion.trim();
83
+ if ((_e = field.falseCriterion) === null || _e === void 0 ? void 0 : _e.trim())
84
+ criteria.false = field.falseCriterion.trim();
85
+ if (Object.keys(criteria).length > 0)
86
+ question.criteria = criteria;
87
+ }
88
+ questions[id] = question;
89
+ }
90
+ return questions;
91
+ }
92
+ function validateQuestionsJson(value) {
93
+ if (!value || typeof value !== 'object' || Array.isArray(value)) {
94
+ throw new QuestionDefinitionError('Questions JSON must be an object mapping question IDs to questions');
95
+ }
96
+ const entries = Object.entries(value);
97
+ if (entries.length === 0)
98
+ throw new QuestionDefinitionError('Add at least one question');
99
+ for (const [id, question] of entries) {
100
+ const type = question === null || question === void 0 ? void 0 : question.type;
101
+ if (!QUESTION_TYPES.includes(type)) {
102
+ throw new QuestionDefinitionError(`Question "${id}" must have "type" set to one of: ${QUESTION_TYPES.join(', ')}`);
103
+ }
104
+ }
105
+ return value;
106
+ }
107
+ function mostLikelyLevel(answer) {
108
+ const legend = answer.legend;
109
+ if (!legend)
110
+ return undefined;
111
+ const probabilities = answer.probabilities;
112
+ if (probabilities && Object.keys(probabilities).length > 0) {
113
+ const [best] = Object.entries(probabilities).sort(([, a], [, b]) => b - a)[0];
114
+ return legend[best];
115
+ }
116
+ if (typeof answer.score === 'number')
117
+ return legend[String(Math.round(answer.score))];
118
+ return undefined;
119
+ }
120
+ function simplifyResponse(response) {
121
+ var _a;
122
+ const answers = ((_a = response.answers) !== null && _a !== void 0 ? _a : {});
123
+ const result = {};
124
+ for (const [id, answer] of Object.entries(answers)) {
125
+ switch (answer.type) {
126
+ case 'noul':
127
+ result[id] = answer.noul;
128
+ break;
129
+ case 'choice':
130
+ result[id] = answer.choice;
131
+ result[`${id}_confidence`] = answer.confidence;
132
+ break;
133
+ case 'score':
134
+ result[id] = answer.score;
135
+ result[`${id}_level`] = mostLikelyLevel(answer);
136
+ result[`${id}_confidence`] = answer.confidence;
137
+ break;
138
+ default:
139
+ result[id] = answer;
140
+ }
141
+ }
142
+ result._model = response.model;
143
+ return result;
144
+ }
145
+ //# sourceMappingURL=questions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"questions.js","sourceRoot":"","sources":["../../../../nodes/Jev/shared/questions.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import type { IDataObject } from 'n8n-workflow';
2
+ export declare const ROUTE_QUESTION_ID = "route";
3
+ export declare const LOW_CONFIDENCE_OUTPUT = "Low Confidence";
4
+ export interface RouteField {
5
+ name?: string;
6
+ description?: string;
7
+ }
8
+ export declare const configuredOutputs: (parameters: IDataObject) => {
9
+ type: string;
10
+ displayName: string;
11
+ }[] | {
12
+ type: string;
13
+ }[];
14
+ export declare function buildRouteQuestion(instructions: string, routes: RouteField[]): IDataObject;
15
+ export interface RouteDecision {
16
+ outputIndex: number;
17
+ result: IDataObject;
18
+ }
19
+ export declare function decideRoute(response: IDataObject, routeNames: string[], lowConfidenceOutput: boolean, threshold: number): RouteDecision;
@@ -0,0 +1,63 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.configuredOutputs = exports.LOW_CONFIDENCE_OUTPUT = exports.ROUTE_QUESTION_ID = void 0;
4
+ exports.buildRouteQuestion = buildRouteQuestion;
5
+ exports.decideRoute = decideRoute;
6
+ const questions_1 = require("./questions");
7
+ exports.ROUTE_QUESTION_ID = 'route';
8
+ exports.LOW_CONFIDENCE_OUTPUT = 'Low Confidence';
9
+ const configuredOutputs = (parameters) => {
10
+ if (parameters.operation !== 'route')
11
+ return [{ type: 'main' }];
12
+ const routesParam = (parameters.routes || {});
13
+ const routes = (routesParam.values || []);
14
+ const outputs = routes.map((route, index) => ({
15
+ type: 'main',
16
+ displayName: route.name || 'Route ' + (index + 1),
17
+ }));
18
+ if (parameters.lowConfidence !== 'bestRoute') {
19
+ outputs.push({ type: 'main', displayName: 'Low Confidence' });
20
+ }
21
+ return outputs;
22
+ };
23
+ exports.configuredOutputs = configuredOutputs;
24
+ function buildRouteQuestion(instructions, routes) {
25
+ var _a, _b;
26
+ if (!instructions.trim())
27
+ throw new questions_1.QuestionDefinitionError('Instructions are empty');
28
+ if (routes.length < 2)
29
+ throw new questions_1.QuestionDefinitionError('Add at least two routes');
30
+ const criteria = {};
31
+ for (const [index, route] of routes.entries()) {
32
+ const name = ((_a = route.name) !== null && _a !== void 0 ? _a : '').trim();
33
+ if (!name)
34
+ throw new questions_1.QuestionDefinitionError(`Route ${index + 1} has no name`);
35
+ if (name in criteria)
36
+ throw new questions_1.QuestionDefinitionError(`Route name "${name}" is used twice`);
37
+ criteria[name] = ((_b = route.description) === null || _b === void 0 ? void 0 : _b.trim()) || null;
38
+ }
39
+ return { type: 'choice', instructions: instructions.trim(), criteria };
40
+ }
41
+ function decideRoute(response, routeNames, lowConfidenceOutput, threshold) {
42
+ var _a;
43
+ const answers = ((_a = response.answers) !== null && _a !== void 0 ? _a : {});
44
+ const answer = answers[exports.ROUTE_QUESTION_ID];
45
+ const choice = answer === null || answer === void 0 ? void 0 : answer.choice;
46
+ const routeIndex = choice === undefined ? -1 : routeNames.indexOf(choice);
47
+ if (routeIndex === -1) {
48
+ throw new questions_1.QuestionDefinitionError(`Jev returned route "${String(choice)}", which is not one of the configured routes`);
49
+ }
50
+ const confidence = answer.confidence;
51
+ const isLowConfidence = lowConfidenceOutput && confidence < threshold;
52
+ return {
53
+ outputIndex: isLowConfidence ? routeNames.length : routeIndex,
54
+ result: {
55
+ route: choice,
56
+ confidence,
57
+ lowConfidence: isLowConfidence,
58
+ probabilities: answer.probabilities,
59
+ _model: response.model,
60
+ },
61
+ };
62
+ }
63
+ //# sourceMappingURL=route.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"route.js","sourceRoot":"","sources":["../../../../nodes/Jev/shared/route.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import type { IDataObject, IExecuteFunctions, IHttpRequestMethods, ILoadOptionsFunctions } from 'n8n-workflow';
2
+ export declare const DEFAULT_BASE_URL = "https://api.typesafe.ai";
3
+ export interface JevRequestOptions {
4
+ maxRetries?: number;
5
+ timeout?: number;
6
+ itemIndex?: number;
7
+ }
8
+ export declare function getRetryDelay(attempt: number, retryAfter?: string): number;
9
+ export declare function jevApiRequest(this: IExecuteFunctions | ILoadOptionsFunctions, method: IHttpRequestMethods, endpoint: string, body?: IDataObject, options?: JevRequestOptions): Promise<IDataObject>;