@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 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/55b6528a-0f94-4e24-8c98-f47104624651">
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
 
@@ -356,7 +356,7 @@
356
356
  },
357
357
  {
358
358
  "id": "50dc0daeab93f1d7",
359
- "type": "openai-api",
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": "openai-api",
407
+ "type": "OpenAI API",
408
408
  "z": "78b174792ca9efaf",
409
409
  "g": "a08cc5475a20cc70",
410
410
  "name": "create assistant",
@@ -39,7 +39,7 @@
39
39
  },
40
40
  {
41
41
  "id": "72303cea19bd9de9",
42
- "type": "openai-api",
42
+ "type": "OpenAI API",
43
43
  "z": "a8f46f8122644718",
44
44
  "name": "translator",
45
45
  "service": "808a04cb8707d787",
@@ -71,7 +71,7 @@
71
71
  },
72
72
  {
73
73
  "id": "765e638b2f084d76",
74
- "type": "openai-api",
74
+ "type": "OpenAI API",
75
75
  "z": "acd4d3697fd487ee",
76
76
  "name": "chat completion",
77
77
  "service": "71860aa02b1968e3",
@@ -56,7 +56,7 @@
56
56
  },
57
57
  {
58
58
  "id": "5096e563fd5b02cf",
59
- "type": "openai-api",
59
+ "type": "OpenAI API",
60
60
  "z": "70307b6cbfb7a7c8",
61
61
  "name": "create embeddings",
62
62
  "service": "39eba92e93450944",
@@ -56,7 +56,7 @@
56
56
  },
57
57
  {
58
58
  "id": "b2eb824897e04b08",
59
- "type": "openai-api",
59
+ "type": "OpenAI API",
60
60
  "z": "1e45d9e751f7d036",
61
61
  "name": "list files",
62
62
  "service": "",
@@ -56,7 +56,7 @@
56
56
  },
57
57
  {
58
58
  "id": "bdaf36c829550e41",
59
- "type": "openai-api",
59
+ "type": "OpenAI API",
60
60
  "z": "6920fb391b5cefcd",
61
61
  "name": "list fine-tuning jobs",
62
62
  "service": "",
@@ -66,7 +66,7 @@
66
66
  },
67
67
  {
68
68
  "id": "979e1bb6732cc292",
69
- "type": "openai-api",
69
+ "type": "OpenAI API",
70
70
  "z": "8b5b83e806871f8b",
71
71
  "name": "create image",
72
72
  "service": "",
@@ -61,7 +61,7 @@
61
61
  },
62
62
  {
63
63
  "id": "932b2514509c22ea",
64
- "type": "openai-api",
64
+ "type": "OpenAI API",
65
65
  "z": "47d8fb0adff5a6cc",
66
66
  "name": "list messages",
67
67
  "service": "",
@@ -29,7 +29,7 @@
29
29
  },
30
30
  {
31
31
  "id": "535006a3343dacc3",
32
- "type": "openai-api",
32
+ "type": "OpenAI API",
33
33
  "z": "2610fa513fed33f5",
34
34
  "name": "list models",
35
35
  "service": "",
@@ -51,7 +51,7 @@
51
51
  },
52
52
  {
53
53
  "id": "58bfb89e83e4cc78",
54
- "type": "openai-api",
54
+ "type": "OpenAI API",
55
55
  "z": "4e4adf62cc07faa5",
56
56
  "name": "create moderation",
57
57
  "service": "",
@@ -51,7 +51,7 @@
51
51
  },
52
52
  {
53
53
  "id": "bf9fee6ecdfaf14d",
54
- "type": "openai-api",
54
+ "type": "OpenAI API",
55
55
  "z": "1dc20442cfd01082",
56
56
  "name": "list runs",
57
57
  "service": "",
@@ -51,7 +51,7 @@
51
51
  },
52
52
  {
53
53
  "id": "e0bcde3186fc61aa",
54
- "type": "openai-api",
54
+ "type": "OpenAI API",
55
55
  "z": "ec716b03b671e83a",
56
56
  "name": "retrieve thread",
57
57
  "service": "",
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 POST request
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 POST request
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
- var expectedQueryParameters = ['limit', 'order', 'after', 'before'];
396
- var customHeaders = { 'OpenAI-Beta': 'assistants=v1' };
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.messageId;
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.messageId;
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.runId;
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.runId;
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.runId;
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.runId;
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.runId;
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.runId;
558
- const stepId = parameters.stepId;
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.assistantId;
562
+ const assistantId = parameters.body.assistant_id;
563
+ const expectedQueryParameters = ['limit', 'order', 'after', 'before'];
566
564
 
567
- return this.getFromEndpoint(`/assistants/${assistantId}/files`, parameters, null, customHeaders);
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.assistantId;
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.assistantId;
582
- const fileId = parameters.fileId;
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.assistantId;
591
- const fileId = parameters.fileId;
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.messageId;
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, null, customHeaders);
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.messageId;
609
- const fileId = parameters.fileId;
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('openai-api', {
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: "openai-api-service", required: true },
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 || "openai-api";
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="openai-api">
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="openai-api">
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('openai-api-service', {
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="openai-api-service">
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="openai-api-service">
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('openai-api', OpenaiApiNode);
242
- function OpenaiApiServiceNode(n) {
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('openai-api-service', OpenaiApiServiceNode, {
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.1.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
- "file-type": "^16.5.4",
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
+ }