@inductiv/node-red-openai-api 0.1.0 → 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.
- package/README.md +2 -2
- package/examples/assistants.json +2 -2
- package/examples/audio.json +1 -1
- package/examples/chat.json +1 -1
- package/examples/embeddings.json +1 -1
- package/examples/files.json +1 -1
- package/examples/fine-tuning.json +1 -1
- package/examples/images.json +1 -1
- package/examples/messages.json +1 -1
- package/examples/models.json +1 -1
- package/examples/moderations.json +1 -1
- package/examples/runs.json +1 -1
- package/examples/threads.json +1 -1
- package/lib.js +27 -28
- package/node.html +8 -8
- package/node.js +3 -3
- package/package.json +3 -10
package/README.md
CHANGED
|
@@ -41,9 +41,9 @@ npm i @inductiv/node-red-openai-api
|
|
|
41
41
|
|
|
42
42
|
## Usage
|
|
43
43
|
|
|
44
|
-
Find your _@inductiv/node-red-openai-api_ node in the **AI** palette category.
|
|
44
|
+
Find your _@inductiv/node-red-openai-api_ node in the **AI** palette category, labeled "OpenAI API.
|
|
45
45
|
|
|
46
|
-
<img width="122" alt="inductiv-node-red-openai-api-node" src="https://github.com/allanbunch/node-red-openai-api/assets/4503640/
|
|
46
|
+
<img width="122" alt="inductiv-node-red-openai-api-node" src="https://github.com/allanbunch/node-red-openai-api/assets/4503640/1ca1ef14-1839-4355-9f1e-ba4f94cfd2a6">
|
|
47
47
|
|
|
48
48
|
You'll find a set of example implementation flows in the [examples](./examples/) directory.
|
|
49
49
|
|
package/examples/assistants.json
CHANGED
|
@@ -356,7 +356,7 @@
|
|
|
356
356
|
},
|
|
357
357
|
{
|
|
358
358
|
"id": "50dc0daeab93f1d7",
|
|
359
|
-
"type": "
|
|
359
|
+
"type": "OpenAI API",
|
|
360
360
|
"z": "78b174792ca9efaf",
|
|
361
361
|
"g": "6ada9879e91ef156",
|
|
362
362
|
"name": "upload files",
|
|
@@ -404,7 +404,7 @@
|
|
|
404
404
|
},
|
|
405
405
|
{
|
|
406
406
|
"id": "43d56c48fd18dd0b",
|
|
407
|
-
"type": "
|
|
407
|
+
"type": "OpenAI API",
|
|
408
408
|
"z": "78b174792ca9efaf",
|
|
409
409
|
"g": "a08cc5475a20cc70",
|
|
410
410
|
"name": "create assistant",
|
package/examples/audio.json
CHANGED
package/examples/chat.json
CHANGED
package/examples/embeddings.json
CHANGED
package/examples/files.json
CHANGED
package/examples/images.json
CHANGED
package/examples/messages.json
CHANGED
package/examples/models.json
CHANGED
package/examples/runs.json
CHANGED
package/examples/threads.json
CHANGED
package/lib.js
CHANGED
|
@@ -1,8 +1,5 @@
|
|
|
1
1
|
/*jshint -W069 */
|
|
2
2
|
|
|
3
|
-
const { threadId } = require('worker_threads');
|
|
4
|
-
const { v4: uuidv4 } = require('uuid');
|
|
5
|
-
const FileType = require('file-type');
|
|
6
3
|
|
|
7
4
|
var OpenaiApi = (function () {
|
|
8
5
|
'use strict';
|
|
@@ -103,7 +100,6 @@ var OpenaiApi = (function () {
|
|
|
103
100
|
|
|
104
101
|
OpenaiApi.prototype.getFromEndpoint = function (path, parameters, expectedQueryParams, customHeaders) {
|
|
105
102
|
return new Promise((resolve, reject) => {
|
|
106
|
-
// parameters = parameters || {};
|
|
107
103
|
var domain = this.domain;
|
|
108
104
|
var queryParameters = {}, baseHeaders = {};
|
|
109
105
|
|
|
@@ -136,7 +132,7 @@ var OpenaiApi = (function () {
|
|
|
136
132
|
params: queryParameters
|
|
137
133
|
};
|
|
138
134
|
|
|
139
|
-
// Axios
|
|
135
|
+
// Axios GET request
|
|
140
136
|
axios(config)
|
|
141
137
|
.then(response => {
|
|
142
138
|
resolve(response);
|
|
@@ -259,7 +255,7 @@ var OpenaiApi = (function () {
|
|
|
259
255
|
params: queryParameters
|
|
260
256
|
};
|
|
261
257
|
|
|
262
|
-
// Axios
|
|
258
|
+
// Axios DELETE request
|
|
263
259
|
axios(config)
|
|
264
260
|
.then(response => {
|
|
265
261
|
resolve(response);
|
|
@@ -392,8 +388,8 @@ var OpenaiApi = (function () {
|
|
|
392
388
|
};
|
|
393
389
|
|
|
394
390
|
OpenaiApi.prototype.listAssistants = function (parameters) {
|
|
395
|
-
|
|
396
|
-
|
|
391
|
+
const expectedQueryParameters = ['limit', 'order', 'after', 'before'];
|
|
392
|
+
const customHeaders = { 'OpenAI-Beta': 'assistants=v1' };
|
|
397
393
|
|
|
398
394
|
return this.getFromEndpoint('/assistants', parameters, expectedQueryParameters, customHeaders);
|
|
399
395
|
};
|
|
@@ -474,7 +470,7 @@ var OpenaiApi = (function () {
|
|
|
474
470
|
OpenaiApi.prototype.getMessage = function (parameters) {
|
|
475
471
|
|
|
476
472
|
const threadId = parameters.body.thread_id;
|
|
477
|
-
const messageId = parameters.
|
|
473
|
+
const messageId = parameters.body.message_id;
|
|
478
474
|
const customHeaders = { 'OpenAI-Beta': 'assistants=v1' };
|
|
479
475
|
|
|
480
476
|
return this.getFromEndpoint(`/threads/${threadId}/messages/${messageId}`, parameters, null, customHeaders);
|
|
@@ -483,7 +479,7 @@ var OpenaiApi = (function () {
|
|
|
483
479
|
OpenaiApi.prototype.modifyMessage = function (parameters) {
|
|
484
480
|
|
|
485
481
|
const threadId = parameters.body.thread_id;
|
|
486
|
-
const messageId = parameters.
|
|
482
|
+
const messageId = parameters.body.message_id;
|
|
487
483
|
const customHeaders = { 'OpenAI-Beta': 'assistants=v1' };
|
|
488
484
|
|
|
489
485
|
return this.postToEndpoint(`/threads/${threadId}/messages/${messageId}`, parameters, null, null, null, customHeaders);
|
|
@@ -514,7 +510,7 @@ var OpenaiApi = (function () {
|
|
|
514
510
|
OpenaiApi.prototype.getRun = function (parameters) {
|
|
515
511
|
const customHeaders = { 'OpenAI-Beta': 'assistants=v1' };
|
|
516
512
|
const threadId = parameters.body.thread_id;
|
|
517
|
-
const runId = parameters.
|
|
513
|
+
const runId = parameters.body.run_id;
|
|
518
514
|
|
|
519
515
|
return this.getFromEndpoint(`/threads/${threadId}/runs/${runId}`, parameters, null, customHeaders);
|
|
520
516
|
};
|
|
@@ -522,7 +518,7 @@ var OpenaiApi = (function () {
|
|
|
522
518
|
OpenaiApi.prototype.modifyRun = function (parameters) {
|
|
523
519
|
const customHeaders = { 'OpenAI-Beta': 'assistants=v1' };
|
|
524
520
|
const threadId = parameters.body.thread_id;
|
|
525
|
-
const runId = parameters.
|
|
521
|
+
const runId = parameters.body.run_id;
|
|
526
522
|
|
|
527
523
|
return this.postToEndpoint(`/threads/${threadId}/runs/${runId}`, parameters, null, null, null, customHeaders);
|
|
528
524
|
};
|
|
@@ -530,7 +526,7 @@ var OpenaiApi = (function () {
|
|
|
530
526
|
OpenaiApi.prototype.submitToolOuputsToRun = function (parameters) {
|
|
531
527
|
const customHeaders = { 'OpenAI-Beta': 'assistants=v1' };
|
|
532
528
|
const threadId = parameters.body.thread_id;
|
|
533
|
-
const runId = parameters.
|
|
529
|
+
const runId = parameters.body.run_id;
|
|
534
530
|
|
|
535
531
|
return this.postToEndpoint(`/threads/${threadId}/runs/${runId}/submit_tool_outputs`, parameters, null, null, null, customHeaders);
|
|
536
532
|
};
|
|
@@ -538,7 +534,7 @@ var OpenaiApi = (function () {
|
|
|
538
534
|
OpenaiApi.prototype.cancelRun = function (parameters) {
|
|
539
535
|
const customHeaders = { 'OpenAI-Beta': 'assistants=v1' };
|
|
540
536
|
const threadId = parameters.body.thread_id;
|
|
541
|
-
const runId = parameters.
|
|
537
|
+
const runId = parameters.body.run_id;
|
|
542
538
|
|
|
543
539
|
return this.postToEndpoint(`/threads/${threadId}/runs/${runId}/cancel`, parameters, null, null, null, customHeaders);
|
|
544
540
|
};
|
|
@@ -546,7 +542,8 @@ var OpenaiApi = (function () {
|
|
|
546
542
|
OpenaiApi.prototype.listRunSteps = function (parameters) {
|
|
547
543
|
const customHeaders = { 'OpenAI-Beta': 'assistants=v1' };
|
|
548
544
|
const threadId = parameters.body.thread_id;
|
|
549
|
-
const runId = parameters.
|
|
545
|
+
const runId = parameters.body.run_id;
|
|
546
|
+
const expectedQueryParameters = ['limit', 'order', 'after', 'before'];
|
|
550
547
|
|
|
551
548
|
return this.getFromEndpoint(`/threads/${threadId}/runs/${runId}/steps`, parameters, null, customHeaders);
|
|
552
549
|
};
|
|
@@ -554,23 +551,24 @@ var OpenaiApi = (function () {
|
|
|
554
551
|
OpenaiApi.prototype.getRunStep = function (parameters) {
|
|
555
552
|
const customHeaders = { 'OpenAI-Beta': 'assistants=v1' };
|
|
556
553
|
const threadId = parameters.body.thread_id;
|
|
557
|
-
const runId = parameters.
|
|
558
|
-
const stepId = parameters.
|
|
554
|
+
const runId = parameters.body.run_id;
|
|
555
|
+
const stepId = parameters.body.step_id;
|
|
559
556
|
|
|
560
557
|
return this.getFromEndpoint(`/threads/${threadId}/runs/${runId}/steps/${stepId}`, parameters, null, customHeaders);
|
|
561
558
|
};
|
|
562
559
|
|
|
563
560
|
OpenaiApi.prototype.listAssistantFiles = function (parameters) {
|
|
564
561
|
const customHeaders = { 'OpenAI-Beta': 'assistants=v1' };
|
|
565
|
-
const assistantId = parameters.
|
|
562
|
+
const assistantId = parameters.body.assistant_id;
|
|
563
|
+
const expectedQueryParameters = ['limit', 'order', 'after', 'before'];
|
|
566
564
|
|
|
567
|
-
return this.getFromEndpoint(`/assistants/${assistantId}/files`, parameters,
|
|
565
|
+
return this.getFromEndpoint(`/assistants/${assistantId}/files`, parameters, expectedQueryParameters, customHeaders);
|
|
568
566
|
};
|
|
569
567
|
|
|
570
568
|
OpenaiApi.prototype.createAssistantFile = function (parameters) {
|
|
571
569
|
|
|
572
570
|
const customHeaders = { 'OpenAI-Beta': 'assistants=v1' };
|
|
573
|
-
const assistantId = parameters.
|
|
571
|
+
const assistantId = parameters.body.assistant_id;
|
|
574
572
|
|
|
575
573
|
return this.postToEndpoint(`/assistants/${assistantId}/files`, parameters, null, null, null, customHeaders);
|
|
576
574
|
};
|
|
@@ -578,8 +576,8 @@ var OpenaiApi = (function () {
|
|
|
578
576
|
OpenaiApi.prototype.getAssistantFile = function (parameters) {
|
|
579
577
|
|
|
580
578
|
const customHeaders = { 'OpenAI-Beta': 'assistants=v1' };
|
|
581
|
-
const assistantId = parameters.
|
|
582
|
-
const fileId = parameters.
|
|
579
|
+
const assistantId = parameters.body.assistant_id;
|
|
580
|
+
const fileId = parameters.body.file_id;
|
|
583
581
|
|
|
584
582
|
return this.getFromEndpoint(`/assistants/${assistantId}/files/${fileId}`, parameters, null, customHeaders);
|
|
585
583
|
};
|
|
@@ -587,8 +585,8 @@ var OpenaiApi = (function () {
|
|
|
587
585
|
OpenaiApi.prototype.deleteAssistantFile = function (parameters) {
|
|
588
586
|
|
|
589
587
|
const customHeaders = { 'OpenAI-Beta': 'assistants=v1' };
|
|
590
|
-
const assistantId = parameters.
|
|
591
|
-
const fileId = parameters.
|
|
588
|
+
const assistantId = parameters.body.assistant_id;
|
|
589
|
+
const fileId = parameters.body.file_id;
|
|
592
590
|
|
|
593
591
|
return this.deleteFromEndpoint(`/assistants/${assistantId}/files/${fileId}`, parameters, null, customHeaders);
|
|
594
592
|
};
|
|
@@ -597,16 +595,17 @@ var OpenaiApi = (function () {
|
|
|
597
595
|
|
|
598
596
|
const customHeaders = { 'OpenAI-Beta': 'assistants=v1' };
|
|
599
597
|
const threadId = parameters.body.thread_id;
|
|
600
|
-
const messageId = parameters.
|
|
598
|
+
const messageId = parameters.body.message_id;
|
|
599
|
+
const expectedQueryParameters = ['limit', 'order', 'after', 'before'];
|
|
601
600
|
|
|
602
|
-
return this.getFromEndpoint(`/threads/${threadId}/messages/${messageId}/files`, parameters,
|
|
601
|
+
return this.getFromEndpoint(`/threads/${threadId}/messages/${messageId}/files`, parameters, expectedQueryParameters, customHeaders);
|
|
603
602
|
};
|
|
604
603
|
|
|
605
604
|
OpenaiApi.prototype.getMessageFile = function (parameters) {
|
|
606
605
|
const customHeaders = { 'OpenAI-Beta': 'assistants=v1' };
|
|
607
606
|
const threadId = parameters.body.thread_id;
|
|
608
|
-
const messageId = parameters.
|
|
609
|
-
const fileId = parameters.
|
|
607
|
+
const messageId = parameters.body.message_id;
|
|
608
|
+
const fileId = parameters.body.file_id;
|
|
610
609
|
|
|
611
610
|
return this.getFromEndpoint(`/threads/${threadId}/messages/${messageId}/files/${fileId}`, parameters, null, customHeaders);
|
|
612
611
|
};
|
package/node.html
CHANGED
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
<script type="text/javascript">
|
|
2
|
-
RED.nodes.registerType('
|
|
2
|
+
RED.nodes.registerType('OpenAI API', {
|
|
3
3
|
category: 'AI',
|
|
4
4
|
color: '#B8B1FB',
|
|
5
5
|
defaults: {
|
|
6
6
|
name: { value: "" },
|
|
7
|
-
service: { value: "", type: "
|
|
7
|
+
service: { value: "", type: "OpenAI Auth", required: true },
|
|
8
8
|
method: { value: "", required: true }
|
|
9
9
|
},
|
|
10
10
|
inputs: 1,
|
|
11
11
|
outputs: 1,
|
|
12
12
|
icon: 'icon.png',
|
|
13
13
|
label: function () {
|
|
14
|
-
return this.name || this.method || "
|
|
14
|
+
return this.name || this.method || "OpenAI API";
|
|
15
15
|
},
|
|
16
16
|
labelStyle: function () {
|
|
17
17
|
return this.name ? "node_label_italic" : "";
|
|
@@ -27,7 +27,7 @@
|
|
|
27
27
|
});
|
|
28
28
|
</script>
|
|
29
29
|
|
|
30
|
-
<script type="text/html" data-template-name="
|
|
30
|
+
<script type="text/html" data-template-name="OpenAI API">
|
|
31
31
|
<div class="form-row">
|
|
32
32
|
<label for="node-input-name"><i class="fa fa-tag"></i> <span data-i18n="node-red:common.label.name"></span></label>
|
|
33
33
|
<input type="text" id="node-input-name" data-i18n="[placeholder]node-red:common.label.name">
|
|
@@ -120,7 +120,7 @@
|
|
|
120
120
|
</div>
|
|
121
121
|
</script>
|
|
122
122
|
|
|
123
|
-
<script type="text/html" data-help-name="
|
|
123
|
+
<script type="text/html" data-help-name="OpenAI API">
|
|
124
124
|
<p>OpenAI Platform Services API. Please see the <a href="https://platform.openai.com/docs/api-reference" target="_blank">OpenAI API Reference</a> for more details.</p>
|
|
125
125
|
<p><b>Reference</b></p>
|
|
126
126
|
|
|
@@ -710,7 +710,7 @@
|
|
|
710
710
|
</script>
|
|
711
711
|
|
|
712
712
|
<script type="text/javascript">
|
|
713
|
-
RED.nodes.registerType('
|
|
713
|
+
RED.nodes.registerType('OpenAI Auth', {
|
|
714
714
|
category: 'config',
|
|
715
715
|
defaults: {
|
|
716
716
|
|
|
@@ -740,7 +740,7 @@
|
|
|
740
740
|
});
|
|
741
741
|
</script>
|
|
742
742
|
|
|
743
|
-
<script type="text/html" data-template-name="
|
|
743
|
+
<script type="text/html" data-template-name="OpenAI Auth">
|
|
744
744
|
|
|
745
745
|
<div class="form-row">
|
|
746
746
|
<label id="node-config-input-secureApiKeyHeaderOrQueryName-label" for="node-config-input-secureApiKeyHeaderOrQueryName"><i class="fa fa-list"></i> <span data-i18n="OpenaiApi.label.header"></span></label>
|
|
@@ -764,7 +764,7 @@
|
|
|
764
764
|
</div>
|
|
765
765
|
</script>
|
|
766
766
|
|
|
767
|
-
<script type="text/html" data-help-name="
|
|
767
|
+
<script type="text/html" data-help-name="OpenAI Auth">
|
|
768
768
|
|
|
769
769
|
<p><b>Header</b>: Variable name to set API key</p>
|
|
770
770
|
<p><b>Value</b>: Value of API key</p>
|
package/node.js
CHANGED
|
@@ -238,8 +238,8 @@ module.exports = function (RED) {
|
|
|
238
238
|
});
|
|
239
239
|
}
|
|
240
240
|
|
|
241
|
-
RED.nodes.registerType('
|
|
242
|
-
function
|
|
241
|
+
RED.nodes.registerType('OpenAI API', OpenaiApiNode);
|
|
242
|
+
function OAIAuthNode(n) {
|
|
243
243
|
RED.nodes.createNode(this, n);
|
|
244
244
|
|
|
245
245
|
this.secureApiKeyValue = n.secureApiKeyValue;
|
|
@@ -247,7 +247,7 @@ module.exports = function (RED) {
|
|
|
247
247
|
this.secureApiKeyIsQuery = n.secureApiKeyIsQuery;
|
|
248
248
|
}
|
|
249
249
|
|
|
250
|
-
RED.nodes.registerType('
|
|
250
|
+
RED.nodes.registerType('OpenAI Auth', OAIAuthNode, {
|
|
251
251
|
credentials: {
|
|
252
252
|
secureApiKeyValue: { type: 'password' },
|
|
253
253
|
temp: { type: 'text' }
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@inductiv/node-red-openai-api",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.0",
|
|
4
4
|
"description": "Node-RED node for interfacing with OpenAI platform services",
|
|
5
5
|
"main": "node.js",
|
|
6
6
|
"engines": {
|
|
@@ -27,14 +27,7 @@
|
|
|
27
27
|
],
|
|
28
28
|
"dependencies": {
|
|
29
29
|
"axios": "^1.6.0",
|
|
30
|
-
"
|
|
31
|
-
"form-data": "^4.0.0",
|
|
32
|
-
"uuid": "^9.0.1"
|
|
33
|
-
},
|
|
34
|
-
"devDependencies": {
|
|
35
|
-
"mocha": "9.2.1",
|
|
36
|
-
"node-red": "2.2.2",
|
|
37
|
-
"node-red-node-test-helper": "0.2.7"
|
|
30
|
+
"form-data": "^4.0.0"
|
|
38
31
|
},
|
|
39
32
|
"author": "Allan Bunch",
|
|
40
33
|
"license": "MIT",
|
|
@@ -42,4 +35,4 @@
|
|
|
42
35
|
"type": "git",
|
|
43
36
|
"url": "git+https://github.com/allanbunch/node-red-openai-api.git"
|
|
44
37
|
}
|
|
45
|
-
}
|
|
38
|
+
}
|