@inductiv/node-red-openai-api 0.1.0 → 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/lib.js CHANGED
@@ -1,615 +1,612 @@
1
- /*jshint -W069 */
2
-
3
- const { threadId } = require('worker_threads');
4
- const { v4: uuidv4 } = require('uuid');
5
- const FileType = require('file-type');
6
-
7
1
  var OpenaiApi = (function () {
8
2
  'use strict';
9
3
 
10
4
  const axios = require('axios');
11
5
  const FormData = require('form-data'); // Only if you handle form data
12
6
 
13
- function OpenaiApi(options) {
14
- var domain = (typeof options === 'object') ? options.domain : options;
15
- this.domain = domain ? domain : 'https://api.openai.com/v1';
16
- if (this.domain.length === 0) {
17
- throw new Error('Domain parameter must be specified as a string.');
7
+ class OpenaiApi {
8
+ constructor(options) {
9
+ this.apiKey = (typeof options === 'object') ? (options.apiKey ? options.apiKey : {}) : {};
18
10
  }
19
- this.apiKey = (typeof options === 'object') ? (options.apiKey ? options.apiKey : {}) : {};
20
- }
11
+ request(method, url, body, headers, queryParameters, form) {
12
+ // Create an instance of axios with default headers
13
+ const axiosInstance = axios.create({
14
+ headers: headers
15
+ });
21
16
 
22
- function mergeQueryParams(parameters, queryParameters) {
23
- if (parameters.$queryParameters) {
24
- Object.keys(parameters.$queryParameters)
25
- .forEach(function (parameterName) {
26
- var parameter = parameters.$queryParameters[parameterName];
27
- queryParameters[parameterName] = parameter;
28
- });
29
- }
30
- return queryParameters;
31
- }
17
+ // Initialize the data to be sent
18
+ let data = body;
32
19
 
33
- OpenaiApi.prototype.request = function (method, url, body, headers, queryParameters, form) {
34
- // Create an instance of axios with default headers
35
- const axiosInstance = axios.create({
36
- headers: headers
37
- });
38
-
39
- // Initialize the data to be sent
40
- let data = body;
41
-
42
- // Handle 'multipart/form-data'
43
- if (Object.keys(form).length > 0 && headers['Content-Type'] === 'multipart/form-data') {
44
- const formData = new FormData();
45
- for (const key of Object.keys(parameters)) {
46
- formData.append(key, parameters.body[key]);
47
- };
48
- data = formData;
49
- } else if (typeof body === 'object' && !(body instanceof Buffer)) {
50
- // Ensure the headers are set for JSON
51
- headers['Content-Type'] = 'application/json';
52
- }
53
-
54
- // Remove body data for GET requests
55
- if (method === "GET") {
56
- data = undefined;
57
- }
58
-
59
- // Make the axios request
60
- return axiosInstance({
61
- method: method,
62
- url: url,
63
- params: queryParameters,
64
- data: data
65
- })
66
- .then(response => {
67
- // Check for JSON response and parse if necessary
68
- if (/^application\/(.*\+)?json/.test(response.headers['content-type'])) {
69
- return { response: response, body: response.data };
70
- } else {
71
- // For non-JSON responses, resolve with the raw response
72
- return { response: response, body: response.data };
73
- }
74
- })
75
- .catch(error => {
76
- // Handle errors
77
- if (error.response) {
78
- // The server responded with a status code that falls out of the range of 2xx
79
- throw { response: error.response, body: error.response.data };
80
- } else if (error.request) {
81
- // The request was made but no response was received
82
- throw new Error('No response received');
83
- } else {
84
- // Something happened in setting up the request that triggered an Error
85
- throw new Error(error.message);
86
- }
87
- });
88
- };
89
-
90
- OpenaiApi.prototype.setApiKey = function (value, headerOrQueryName, isQuery) {
91
- this.apiKey.value = value;
92
- this.apiKey.headerOrQueryName = headerOrQueryName;
93
- this.apiKey.isQuery = isQuery;
94
- };
95
-
96
- OpenaiApi.prototype.setAuthHeaders = function (headerParams) {
97
- var headers = headerParams ? headerParams : {};
98
- if (!this.apiKey.isQuery && this.apiKey.headerOrQueryName) {
99
- headers[this.apiKey.headerOrQueryName] = `Bearer ${this.apiKey.value}`;
100
- }
101
- return headers;
102
- };
103
-
104
- OpenaiApi.prototype.getFromEndpoint = function (path, parameters, expectedQueryParams, customHeaders) {
105
- return new Promise((resolve, reject) => {
106
- // parameters = parameters || {};
107
- var domain = this.domain;
108
- var queryParameters = {}, baseHeaders = {};
109
-
110
- baseHeaders = this.setAuthHeaders(headers);
111
- baseHeaders['Accept'] = 'application/json';
112
-
113
- var headers = {
114
- ...baseHeaders,
115
- ...customHeaders
116
- };
117
-
118
-
119
- // Only add query parameters if they are expected and exist
120
- if (expectedQueryParams) {
121
- expectedQueryParams.forEach(param => {
122
- if (parameters.body[param] !== undefined) {
123
- queryParameters[param] = parameters.body[param];
124
- }
125
- });
20
+ // Handle 'multipart/form-data'
21
+ if (Object.keys(form).length > 0 && headers['Content-Type'] === 'multipart/form-data') {
22
+ const formData = new FormData();
23
+ for (const key of Object.keys(parameters)) {
24
+ formData.append(key, parameters.body[key]);
25
+ };
26
+ data = formData;
27
+ } else if (typeof body === 'object' && !(body instanceof Buffer)) {
28
+ // Ensure the headers are set for JSON
29
+ headers['Content-Type'] = 'application/json';
126
30
  }
127
31
 
128
- // Merge any additional query parameters from the parameters object
129
- queryParameters = mergeQueryParams(parameters, queryParameters);
130
-
131
- // Axios request configuration
132
- const config = {
133
- method: 'GET',
134
- url: domain + path,
135
- headers: headers,
136
- params: queryParameters
137
- };
32
+ // Remove body data for GET requests
33
+ if (method === "GET") {
34
+ data = undefined;
35
+ }
138
36
 
139
- // Axios POST request
140
- axios(config)
37
+ // Make the axios request
38
+ return axiosInstance({
39
+ method: method,
40
+ url: url,
41
+ params: queryParameters,
42
+ data: data
43
+ })
141
44
  .then(response => {
142
- resolve(response);
45
+ // Check for JSON response and parse if necessary
46
+ if (/^application\/(.*\+)?json/.test(response.headers['content-type'])) {
47
+ return { response: response, body: response.data };
48
+ } else {
49
+ // For non-JSON responses, resolve with the raw response
50
+ return { response: response, body: response.data };
51
+ }
143
52
  })
144
53
  .catch(error => {
145
- reject(error);
54
+ // Handle errors
55
+ if (error.response) {
56
+ // The server responded with a status code that falls out of the range of 2xx
57
+ throw { response: error.response, body: error.response.data };
58
+ } else if (error.request) {
59
+ // The request was made but no response was received
60
+ throw new Error('No response received');
61
+ } else {
62
+ // Something happened in setting up the request that triggered an Error
63
+ throw new Error(error.message);
64
+ }
146
65
  });
147
- });
148
- };
149
-
150
-
151
- OpenaiApi.prototype.postToEndpoint = function (path, parameters, expectedQueryParams, contentType, filePath, customHeaders) {
152
- return new Promise((resolve, reject) => {
153
- const _path = require('path');
154
-
155
- parameters = parameters || {};
156
- var domain = this.domain;
157
- var queryParameters = {}, baseHeaders = {}, data;
66
+ }
67
+ setApiKey(value, headerOrQueryName, isQuery) {
68
+ this.apiKey.value = value;
69
+ this.apiKey.headerOrQueryName = headerOrQueryName;
70
+ this.apiKey.isQuery = isQuery;
71
+ }
72
+ setApiBase(apiBase) {
73
+ this.domain = apiBase;
74
+ }
75
+ setAuthHeaders(headerParams) {
76
+ var headers = headerParams ? headerParams : {};
77
+ if (!this.apiKey.isQuery && this.apiKey.headerOrQueryName) {
78
+ headers[this.apiKey.headerOrQueryName] = `Bearer ${this.apiKey.value}`;
79
+ }
80
+ return headers;
81
+ }
82
+ getFromEndpoint(path, parameters, expectedQueryParams, customHeaders) {
83
+ return new Promise((resolve, reject) => {
84
+ var domain = this.domain;
85
+ var queryParameters = {}, baseHeaders = {};
158
86
 
159
- baseHeaders = this.setAuthHeaders({});
160
- baseHeaders['Accept'] = 'application/json';
87
+ baseHeaders = this.setAuthHeaders(headers);
88
+ baseHeaders['Accept'] = 'application/json';
161
89
 
162
- var headers = {
163
- ...baseHeaders,
164
- ...customHeaders
165
- };
90
+ var headers = {
91
+ ...baseHeaders,
92
+ ...customHeaders
93
+ };
166
94
 
167
- // Determine the Content-Type
168
- if (contentType === 'form-data') {
169
- var formData = new FormData();
170
95
 
171
- Object.entries(parameters.body).forEach(([key, value]) => {
172
- if (value instanceof Buffer) {
173
- if (!filePath) {
174
- throw new Error('msg.payload must include a `filename` property.');
96
+ // Only add query parameters if they are expected and exist
97
+ if (expectedQueryParams) {
98
+ expectedQueryParams.forEach(param => {
99
+ if (parameters.body[param] !== undefined) {
100
+ queryParameters[param] = parameters.body[param];
175
101
  }
102
+ });
103
+ }
176
104
 
177
- const filename = _path.basename(filePath);
178
- formData.append(key, value, filename);
179
- } else {
180
- if (parameters.body[key] !== undefined) {
181
- formData.append(key, value);
105
+ // Merge any additional query parameters from the parameters object
106
+ queryParameters = mergeQueryParams(parameters, queryParameters);
107
+
108
+ // Axios request configuration
109
+ const config = {
110
+ method: 'GET',
111
+ url: domain + path,
112
+ headers: headers,
113
+ params: queryParameters
114
+ };
115
+
116
+ // Axios GET request
117
+ axios(config)
118
+ .then(response => {
119
+ resolve(response);
120
+ })
121
+ .catch(error => {
122
+ reject(error);
123
+ });
124
+ });
125
+ }
126
+ postToEndpoint(path, parameters, expectedQueryParams, contentType, filePath, customHeaders) {
127
+ return new Promise((resolve, reject) => {
128
+ const _path = require('path');
129
+
130
+ parameters = parameters || {};
131
+ var domain = this.domain;
132
+ var queryParameters = {}, baseHeaders = {}, data;
133
+
134
+ baseHeaders = this.setAuthHeaders({});
135
+ baseHeaders['Accept'] = 'application/json';
136
+
137
+ var headers = {
138
+ ...baseHeaders,
139
+ ...customHeaders
140
+ };
141
+
142
+ // Determine the Content-Type
143
+ if (contentType === 'form-data') {
144
+ var formData = new FormData();
145
+
146
+ Object.entries(parameters.body).forEach(([key, value]) => {
147
+ if (value instanceof Buffer) {
148
+ if (!filePath) {
149
+ throw new Error('msg.payload must include a `filename` property.');
150
+ }
151
+
152
+ const filename = _path.basename(filePath);
153
+ formData.append(key, value, filename);
154
+ } else {
155
+ if (parameters.body[key] !== undefined) {
156
+ formData.append(key, value);
157
+ }
182
158
  }
183
- }
184
- });
159
+ });
185
160
 
186
- data = formData;
161
+ data = formData;
187
162
 
188
- let formHeaders = formData.getHeaders();
189
- Object.assign(headers, formHeaders);
190
- } else {
191
- // Handle JSON payloads
192
- headers['Content-Type'] = 'application/json';
193
- data = parameters.body || {};
194
- }
163
+ let formHeaders = formData.getHeaders();
164
+ Object.assign(headers, formHeaders);
165
+ } else {
166
+ // Handle JSON payloads
167
+ headers['Content-Type'] = 'application/json';
168
+ data = parameters.body || {};
169
+ }
195
170
 
196
- // Add expected query parameters to the queryParameters object
197
- if (expectedQueryParams) {
198
- expectedQueryParams.forEach(param => {
199
- if (parameters.body[param] !== undefined) {
200
- queryParameters[param] = parameters.body[param];
201
- }
202
- });
203
- }
171
+ // Add expected query parameters to the queryParameters object
172
+ if (expectedQueryParams) {
173
+ expectedQueryParams.forEach(param => {
174
+ if (parameters.body[param] !== undefined) {
175
+ queryParameters[param] = parameters.body[param];
176
+ }
177
+ });
178
+ }
204
179
 
205
- // Merge any additional query parameters from the parameters object
206
- queryParameters = mergeQueryParams(parameters.body, queryParameters);
180
+ // Merge any additional query parameters from the parameters object
181
+ queryParameters = mergeQueryParams(parameters.body, queryParameters);
182
+
183
+ // Axios request configuration
184
+ const config = {
185
+ method: 'POST',
186
+ url: domain + path,
187
+ headers: headers,
188
+ params: queryParameters,
189
+ data: data
190
+ };
191
+
192
+ // Axios POST request
193
+ axios(config)
194
+ .then(response => {
195
+ resolve(response);
196
+ })
197
+ .catch(error => {
198
+ reject(error);
199
+ });
200
+ });
201
+ }
202
+ deleteFromEndpoint(path, parameters, expectedQueryParams, customHeaders) {
203
+ return new Promise((resolve, reject) => {
204
+ parameters = parameters || {};
205
+ var domain = this.domain;
206
+ var queryParameters = {}, baseHeaders = {};
207
+
208
+ baseHeaders = this.setAuthHeaders(headers);
209
+ baseHeaders['Accept'] = 'application/json';
210
+
211
+ var headers = {
212
+ ...baseHeaders,
213
+ ...customHeaders
214
+ };
215
+
216
+ // Only add query parameters if they are expected and exist
217
+ if (expectedQueryParams) {
218
+ expectedQueryParams.forEach(param => {
219
+ if (parameters[param] !== undefined) {
220
+ queryParameters[param] = parameters.body[param];
221
+ }
222
+ });
223
+ }
207
224
 
208
- // Axios request configuration
209
- const config = {
210
- method: 'POST',
211
- url: domain + path,
212
- headers: headers,
213
- params: queryParameters,
214
- data: data
215
- };
225
+ // Merge any additional query parameters from the parameters object
226
+ queryParameters = mergeQueryParams(parameters, queryParameters);
227
+
228
+ // Axios request configuration
229
+ const config = {
230
+ method: 'DELETE',
231
+ url: domain + path,
232
+ headers: headers,
233
+ params: queryParameters
234
+ };
235
+
236
+ // Axios DELETE request
237
+ axios(config)
238
+ .then(response => {
239
+ resolve(response);
240
+ })
241
+ .catch(error => {
242
+ reject(error);
243
+ });
244
+ });
245
+ }
246
+ createChatCompletion(parameters) {
247
+ const response = this.postToEndpoint('/chat/completions', parameters);
248
+ return response;
249
+ }
250
+ createImage(parameters) {
251
+ return this.postToEndpoint('/images/generations', parameters);
252
+ }
253
+ createImageEdit(parameters) {
254
+ const filename = parameters.body.filename;
255
+ delete parameters.body.filename;
216
256
 
217
- // Axios POST request
218
- axios(config)
219
- .then(response => {
220
- resolve(response);
221
- })
222
- .catch(error => {
223
- reject(error);
224
- });
225
- });
226
- };
257
+ return this.postToEndpoint('/images/edits', parameters, null, 'form-data', filename);
258
+ }
259
+ createImageVariation(parameters) {
260
+ const filename = parameters.body.filename;
261
+ delete parameters.body.filename;
227
262
 
228
- OpenaiApi.prototype.deleteFromEndpoint = function (path, parameters, expectedQueryParams, customHeaders) {
229
- return new Promise((resolve, reject) => {
230
- parameters = parameters || {};
231
- var domain = this.domain;
232
- var queryParameters = {}, baseHeaders = {};
263
+ return this.postToEndpoint('/images/variations', parameters, null, 'form-data', filename);
264
+ }
265
+ createEmbedding(parameters) {
266
+ return this.postToEndpoint('/embeddings', parameters);
267
+ }
268
+ createSpeech(parameters) {
269
+ return this.postToEndpoint('/audio/speech', parameters);
270
+ }
271
+ createTranscription(parameters) {
272
+ const filename = parameters.body.filename;
273
+ delete parameters.body.filename;
233
274
 
234
- baseHeaders = this.setAuthHeaders(headers);
235
- baseHeaders['Accept'] = 'application/json';
275
+ return this.postToEndpoint('/audio/transcriptions', parameters, null, 'form-data', filename);
276
+ }
277
+ createTranslation(parameters) {
278
+ const filename = parameters.body.filename;
279
+ delete parameters.body.filename;
236
280
 
237
- var headers = {
238
- ...baseHeaders,
239
- ...customHeaders
240
- }
281
+ return this.postToEndpoint('/audio/translations', parameters, null, 'form-data', filename);
282
+ }
283
+ listFiles(parameters) {
284
+ const expectedQueryParameters = ['purpose'];
285
+ return this.getFromEndpoint('/files', parameters, expectedQueryParameters);
286
+ }
287
+ createFile(parameters) {
288
+ let filename;
241
289
 
242
- // Only add query parameters if they are expected and exist
243
- if (expectedQueryParams) {
244
- expectedQueryParams.forEach(param => {
245
- if (parameters[param] !== undefined) {
246
- queryParameters[param] = parameters.body[param];
247
- }
248
- });
249
- }
290
+ // reference the incoming filename
291
+ filename = parameters.body.filename;
292
+ delete parameters.body.filename;
250
293
 
251
- // Merge any additional query parameters from the parameters object
252
- queryParameters = mergeQueryParams(parameters, queryParameters);
294
+ return this.postToEndpoint('/files', parameters, null, 'form-data', filename);
295
+ }
296
+ deleteFile(parameters) {
297
+ const file_id = parameters.body.file_id;
298
+ return this.deleteFromEndpoint(`/files/${file_id}`, parameters);
299
+ }
300
+ retrieveFile(parameters) {
301
+ const file_id = parameters.body.file_id;
302
+ return this.getFromEndpoint(`/files/${file_id}`, parameters);
303
+ }
304
+ downloadFile(parameters) {
305
+ const file_id = parameters.body.file_id;
306
+ return this.getFromEndpoint(`/files/${file_id}/content`, parameters);
307
+ }
308
+ createFineTuningJob(parameters) {
309
+ return this.postToEndpoint('/fine_tuning/jobs', parameters);
310
+ }
311
+ listPaginatedFineTuningJobs(parameters) {
312
+ const expectedQueryParameters = ['after', 'limit'];
313
+ return this.getFromEndpoint('/fine_tuning/jobs', parameters, expectedQueryParameters);
314
+ }
315
+ retrieveFineTuningJob(parameters) {
316
+ const fine_tuning_job_id = parameters.body.fine_tuning_job_id;
317
+ return this.getFromEndpoint(`/fine_tuning/jobs/${fine_tuning_job_id}`, parameters);
318
+ }
319
+ listFineTuningEvents(parameters) {
320
+ const expectedQueryParameters = ['after', 'limit'];
321
+ const fine_tuning_job_id = parameters.body.fine_tuning_job_id;
253
322
 
254
- // Axios request configuration
255
- const config = {
256
- method: 'DELETE',
257
- url: domain + path,
258
- headers: headers,
259
- params: queryParameters
260
- };
323
+ return this.getFromEndpoint(`/fine_tuning/jobs/${fine_tuning_job_id}/events`, parameters, expectedQueryParameters);
324
+ }
325
+ cancelFineTuningJob(parameters) {
326
+ const fine_tuning_job_id = parameters.body.fine_tuning_job_id;
327
+ return this.postToEndpoint(`/fine_tuning/jobs/${fine_tuning_job_id}/cancel`, parameters);
328
+ }
329
+ listModels(parameters) {
330
+ return this.getFromEndpoint('/models', parameters);
331
+ }
332
+ retrieveModel(parameters) {
333
+ const model = parameters.body.model;
261
334
 
262
- // Axios POST request
263
- axios(config)
264
- .then(response => {
265
- resolve(response);
266
- })
267
- .catch(error => {
268
- reject(error);
269
- });
270
- });
271
- };
335
+ return this.getFromEndpoint(`/models/${model}`, parameters);
336
+ }
337
+ deleteModel(parameters) {
338
+ const model = parameters.body.model;
272
339
 
273
- OpenaiApi.prototype.createChatCompletion = function (parameters) {
274
- const response = this.postToEndpoint('/chat/completions', parameters);
275
- return response;
276
- };
340
+ return this.deleteFromEndpoint(`/models/${model}`, parameters);
341
+ }
342
+ createModeration(parameters) {
343
+ return this.postToEndpoint('/moderations', parameters);
344
+ }
345
+ listAssistants(parameters) {
346
+ const expectedQueryParameters = ['limit', 'order', 'after', 'before'];
347
+ const customHeaders = { 'OpenAI-Beta': 'assistants=v1' };
277
348
 
278
- OpenaiApi.prototype.createImage = function (parameters) {
279
- return this.postToEndpoint('/images/generations', parameters);
280
- };
349
+ return this.getFromEndpoint('/assistants', parameters, expectedQueryParameters, customHeaders);
350
+ }
351
+ createAssistant(parameters) {
352
+ var customHeaders = { 'OpenAI-Beta': 'assistants=v1' };
281
353
 
282
- OpenaiApi.prototype.createImageEdit = function (parameters) {
283
- const filename = parameters.body.filename;
284
- delete parameters.body.filename;
354
+ return this.postToEndpoint('/assistants', parameters, null, null, null, customHeaders);
355
+ }
356
+ getAssistant(parameters) {
357
+ const assistantId = parameters.body.assistant_id;
285
358
 
286
- return this.postToEndpoint('/images/edits', parameters, null, 'form-data', filename);
287
- };
359
+ var customHeaders = { 'OpenAI-Beta': 'assistants=v1' };
288
360
 
289
- OpenaiApi.prototype.createImageVariation = function (parameters) {
290
- const filename = parameters.body.filename;
291
- delete parameters.body.filename;
361
+ return this.getFromEndpoint(`/assistants/${assistantId}`, parameters, null, customHeaders);
362
+ }
363
+ modifyAssistant(parameters) {
292
364
 
293
- return this.postToEndpoint('/images/variations', parameters, null, 'form-data', filename);
294
- };
365
+ const assistant_id = parameters.body.assistant_id;
366
+ const customHeaders = { 'OpenAI-Beta': 'assistants=v1' };
295
367
 
296
- OpenaiApi.prototype.createEmbedding = function (parameters) {
297
- return this.postToEndpoint('/embeddings', parameters);
298
- };
368
+ return this.postToEndpoint(`/assistants/${assistant_id}`, parameters, null, null, null, customHeaders);
369
+ }
370
+ deleteAssistant(parameters) {
371
+ const assistant_id = parameters.body.assistant_id;
372
+ const customHeaders = { 'OpenAI-Beta': 'assistants=v1' };
299
373
 
300
- OpenaiApi.prototype.createSpeech = function (parameters) {
301
- return this.postToEndpoint('/audio/speech', parameters);
302
- };
374
+ return this.deleteFromEndpoint(`/assistants/${assistant_id}`, parameters, null, customHeaders);
375
+ }
376
+ createThread(parameters) {
303
377
 
304
- OpenaiApi.prototype.createTranscription = function (parameters) {
305
- const filename = parameters.body.filename;
306
- delete parameters.body.filename;
307
378
 
308
- return this.postToEndpoint('/audio/transcriptions', parameters, null, 'form-data', filename);
309
- };
379
+ const customHeaders = { 'OpenAI-Beta': 'assistants=v1' };
380
+ return this.postToEndpoint('/threads', parameters, null, null, null, customHeaders);
381
+ }
382
+ getThread(parameters) {
383
+ const threadId = parameters.body.thread_id;
384
+ const customHeaders = { 'OpenAI-Beta': 'assistants=v1' };
310
385
 
311
- OpenaiApi.prototype.createTranslation = function (parameters) {
312
- const filename = parameters.body.filename;
313
- delete parameters.body.filename;
386
+ return this.getFromEndpoint(`/threads/${threadId}`, parameters, null, customHeaders);
387
+ }
388
+ modifyThread(parameters) {
389
+ const threadId = parameters.body.thread_id;
390
+ const customHeaders = { 'OpenAI-Beta': 'assistants=v1' };
314
391
 
315
- return this.postToEndpoint('/audio/translations', parameters, null, 'form-data', filename);
316
- };
392
+ return this.postToEndpoint(`/threads/${threadId}`, parameters, null, null, null, customHeaders);
393
+ }
394
+ deleteThread(parameters) {
395
+ const threadId = parameters.body.thread_id;
396
+ const customHeaders = { 'OpenAI-Beta': 'assistants=v1' };
317
397
 
318
- OpenaiApi.prototype.listFiles = function (parameters) {
319
- const expectedQueryParameters = ['purpose'];
320
- return this.getFromEndpoint('/files', parameters, expectedQueryParameters);
321
- };
398
+ return this.deleteFromEndpoint(`/threads/${threadId}`, parameters, null, customHeaders);
399
+ }
400
+ listMessages(parameters) {
401
+ const threadId = parameters.body.thread_id;
402
+ const customHeaders = { 'OpenAI-Beta': 'assistants=v1' };
322
403
 
323
- OpenaiApi.prototype.createFile = function (parameters) {
324
- let filename;
404
+ const expectedQueryParameters = ['limit', 'order', 'after', 'before'];
325
405
 
326
- // reference the incoming filename
327
- filename = parameters.body.filename;
328
- delete parameters.body.filename;
406
+ return this.getFromEndpoint(`/threads/${threadId}/messages`, parameters, expectedQueryParameters, customHeaders);
407
+ }
408
+ createMessage(parameters) {
409
+ const threadId = parameters.body.thread_id;
410
+ const customHeaders = { 'OpenAI-Beta': 'assistants=v1' };
329
411
 
330
- return this.postToEndpoint('/files', parameters, null, 'form-data', filename);
331
- };
412
+ return this.postToEndpoint(`/threads/${threadId}/messages`, parameters, null, null, null, customHeaders);
413
+ }
414
+ getMessage(parameters) {
332
415
 
333
- OpenaiApi.prototype.deleteFile = function (parameters) {
334
- const file_id = parameters.body.file_id;
335
- return this.deleteFromEndpoint(`/files/${file_id}`, parameters);
336
- };
416
+ const threadId = parameters.body.thread_id;
417
+ const messageId = parameters.body.message_id;
418
+ const customHeaders = { 'OpenAI-Beta': 'assistants=v1' };
337
419
 
338
- OpenaiApi.prototype.retrieveFile = function (parameters) {
339
- const file_id = parameters.body.file_id;
340
- return this.getFromEndpoint(`/files/${file_id}`, parameters);
341
- };
420
+ return this.getFromEndpoint(`/threads/${threadId}/messages/${messageId}`, parameters, null, customHeaders);
421
+ }
422
+ modifyMessage(parameters) {
342
423
 
343
- OpenaiApi.prototype.downloadFile = function (parameters) {
344
- const file_id = parameters.body.file_id;
345
- return this.getFromEndpoint(`/files/${file_id}/content`, parameters);
346
- };
424
+ const threadId = parameters.body.thread_id;
425
+ const messageId = parameters.body.message_id;
426
+ const customHeaders = { 'OpenAI-Beta': 'assistants=v1' };
347
427
 
348
- OpenaiApi.prototype.createFineTuningJob = function (parameters) {
349
- return this.postToEndpoint('/fine_tuning/jobs', parameters);
350
- };
428
+ return this.postToEndpoint(`/threads/${threadId}/messages/${messageId}`, parameters, null, null, null, customHeaders);
429
+ }
430
+ createThreadAndRun(parameters) {
351
431
 
352
- OpenaiApi.prototype.listPaginatedFineTuningJobs = function (parameters) {
353
- const expectedQueryParameters = ['after', 'limit'];
354
- return this.getFromEndpoint('/fine_tuning/jobs', parameters, expectedQueryParameters);
355
- };
432
+ const customHeaders = { 'OpenAI-Beta': 'assistants=v1' };
356
433
 
357
- OpenaiApi.prototype.retrieveFineTuningJob = function (parameters) {
358
- const fine_tuning_job_id = parameters.body.fine_tuning_job_id;
359
- return this.getFromEndpoint(`/fine_tuning/jobs/${fine_tuning_job_id}`, parameters);
360
- };
434
+ return this.postToEndpoint('/threads/runs', parameters, null, null, null, customHeaders);
435
+ }
436
+ listRuns(parameters) {
437
+ const customHeaders = { 'OpenAI-Beta': 'assistants=v1' };
438
+ const expectedQueryParameters = ['limit', 'order', 'after', 'before'];
439
+ const threadId = parameters.body.thread_id;
361
440
 
362
- OpenaiApi.prototype.listFineTuningEvents = function (parameters) {
363
- const expectedQueryParameters = ['after', 'limit'];
364
- const fine_tuning_job_id = parameters.body.fine_tuning_job_id;
441
+ return this.getFromEndpoint(`/threads/${threadId}/runs`, parameters, expectedQueryParameters, customHeaders);
442
+ }
443
+ createRun(parameters) {
444
+ const customHeaders = { 'OpenAI-Beta': 'assistants=v1' };
445
+ const threadId = parameters.body.thread_id;
365
446
 
366
- return this.getFromEndpoint(`/fine_tuning/jobs/${fine_tuning_job_id}/events`, parameters, expectedQueryParameters);
367
- };
447
+ return this.postToEndpoint(`/threads/${threadId}/runs`, parameters, null, null, null, customHeaders);
448
+ }
449
+ getRun(parameters) {
450
+ const customHeaders = { 'OpenAI-Beta': 'assistants=v1' };
451
+ const threadId = parameters.body.thread_id;
452
+ const runId = parameters.body.run_id;
453
+
454
+ return this.getFromEndpoint(`/threads/${threadId}/runs/${runId}`, parameters, null, customHeaders);
455
+ }
456
+ modifyRun(parameters) {
457
+ const customHeaders = { 'OpenAI-Beta': 'assistants=v1' };
458
+ const threadId = parameters.body.thread_id;
459
+ const runId = parameters.body.run_id;
368
460
 
369
- OpenaiApi.prototype.cancelFineTuningJob = function (parameters) {
370
- const fine_tuning_job_id = parameters.body.fine_tuning_job_id;
371
- return this.postToEndpoint(`/fine_tuning/jobs/${fine_tuning_job_id}/cancel`, parameters);
372
- };
461
+ return this.postToEndpoint(`/threads/${threadId}/runs/${runId}`, parameters, null, null, null, customHeaders);
462
+ }
463
+ submitToolOuputsToRun(parameters) {
464
+ const customHeaders = { 'OpenAI-Beta': 'assistants=v1' };
465
+ const threadId = parameters.body.thread_id;
466
+ const runId = parameters.body.run_id;
373
467
 
374
- OpenaiApi.prototype.listModels = function (parameters) {
375
- return this.getFromEndpoint('/models', parameters);
376
- };
468
+ return this.postToEndpoint(`/threads/${threadId}/runs/${runId}/submit_tool_outputs`, parameters, null, null, null, customHeaders);
469
+ }
470
+ cancelRun(parameters) {
471
+ const customHeaders = { 'OpenAI-Beta': 'assistants=v1' };
472
+ const threadId = parameters.body.thread_id;
473
+ const runId = parameters.body.run_id;
377
474
 
378
- OpenaiApi.prototype.retrieveModel = function (parameters) {
379
- const model = parameters.body.model;
475
+ return this.postToEndpoint(`/threads/${threadId}/runs/${runId}/cancel`, parameters, null, null, null, customHeaders);
476
+ }
477
+ listRunSteps(parameters) {
478
+ const customHeaders = { 'OpenAI-Beta': 'assistants=v1' };
479
+ const threadId = parameters.body.thread_id;
480
+ const runId = parameters.body.run_id;
481
+ const expectedQueryParameters = ['limit', 'order', 'after', 'before'];
380
482
 
381
- return this.getFromEndpoint(`/models/${model}`, parameters);
382
- };
483
+ return this.getFromEndpoint(`/threads/${threadId}/runs/${runId}/steps`, parameters, null, customHeaders);
484
+ }
485
+ getRunStep(parameters) {
486
+ const customHeaders = { 'OpenAI-Beta': 'assistants=v1' };
487
+ const threadId = parameters.body.thread_id;
488
+ const runId = parameters.body.run_id;
489
+ const stepId = parameters.body.step_id;
383
490
 
384
- OpenaiApi.prototype.deleteModel = function (parameters) {
385
- const model = parameters.body.model;
491
+ return this.getFromEndpoint(`/threads/${threadId}/runs/${runId}/steps/${stepId}`, parameters, null, customHeaders);
492
+ }
493
+ listAssistantFiles(parameters) {
494
+ const customHeaders = { 'OpenAI-Beta': 'assistants=v1' };
495
+ const assistantId = parameters.body.assistant_id;
496
+ const expectedQueryParameters = ['limit', 'order', 'after', 'before'];
386
497
 
387
- return this.deleteFromEndpoint(`/models/${model}`, parameters);
388
- };
498
+ return this.getFromEndpoint(`/assistants/${assistantId}/files`, parameters, expectedQueryParameters, customHeaders);
499
+ }
500
+ createAssistantFile(parameters) {
389
501
 
390
- OpenaiApi.prototype.createModeration = function (parameters) {
391
- return this.postToEndpoint('/moderations', parameters);
392
- };
502
+ const customHeaders = { 'OpenAI-Beta': 'assistants=v1' };
503
+ const assistantId = parameters.body.assistant_id;
393
504
 
394
- OpenaiApi.prototype.listAssistants = function (parameters) {
395
- var expectedQueryParameters = ['limit', 'order', 'after', 'before'];
396
- var customHeaders = { 'OpenAI-Beta': 'assistants=v1' };
505
+ return this.postToEndpoint(`/assistants/${assistantId}/files`, parameters, null, null, null, customHeaders);
506
+ }
507
+ getAssistantFile(parameters) {
397
508
 
398
- return this.getFromEndpoint('/assistants', parameters, expectedQueryParameters, customHeaders);
399
- };
509
+ const customHeaders = { 'OpenAI-Beta': 'assistants=v1' };
510
+ const assistantId = parameters.body.assistant_id;
511
+ const fileId = parameters.body.file_id;
400
512
 
401
- OpenaiApi.prototype.createAssistant = function (parameters) {
402
- var customHeaders = { 'OpenAI-Beta': 'assistants=v1' };
513
+ return this.getFromEndpoint(`/assistants/${assistantId}/files/${fileId}`, parameters, null, customHeaders);
514
+ }
515
+ deleteAssistantFile(parameters) {
403
516
 
404
- return this.postToEndpoint('/assistants', parameters, null, null, null, customHeaders);
405
- };
517
+ const customHeaders = { 'OpenAI-Beta': 'assistants=v1' };
518
+ const assistantId = parameters.body.assistant_id;
519
+ const fileId = parameters.body.file_id;
406
520
 
407
- OpenaiApi.prototype.getAssistant = function (parameters) {
408
- const assistantId = parameters.body.assistant_id;
521
+ return this.deleteFromEndpoint(`/assistants/${assistantId}/files/${fileId}`, parameters, null, customHeaders);
522
+ }
523
+ listMessageFiles(parameters) {
409
524
 
410
- var customHeaders = { 'OpenAI-Beta': 'assistants=v1' };
525
+ const customHeaders = { 'OpenAI-Beta': 'assistants=v1' };
526
+ const threadId = parameters.body.thread_id;
527
+ const messageId = parameters.body.message_id;
528
+ const expectedQueryParameters = ['limit', 'order', 'after', 'before'];
411
529
 
412
- return this.getFromEndpoint(`/assistants/${assistantId}`, parameters, null, customHeaders);
413
- };
530
+ return this.getFromEndpoint(`/threads/${threadId}/messages/${messageId}/files`, parameters, expectedQueryParameters, customHeaders);
531
+ }
532
+ getMessageFile(parameters) {
533
+ const customHeaders = { 'OpenAI-Beta': 'assistants=v1' };
534
+ const threadId = parameters.body.thread_id;
535
+ const messageId = parameters.body.message_id;
536
+ const fileId = parameters.body.file_id;
414
537
 
415
- OpenaiApi.prototype.modifyAssistant = function (parameters) {
538
+ return this.getFromEndpoint(`/threads/${threadId}/messages/${messageId}/files/${fileId}`, parameters, null, customHeaders);
539
+ }
540
+ }
416
541
 
417
- const assistant_id = parameters.body.assistant_id;
418
- const customHeaders = { 'OpenAI-Beta': 'assistants=v1' };
542
+ function mergeQueryParams(parameters, queryParameters) {
543
+ if (parameters.$queryParameters) {
544
+ Object.keys(parameters.$queryParameters)
545
+ .forEach(function (parameterName) {
546
+ var parameter = parameters.$queryParameters[parameterName];
547
+ queryParameters[parameterName] = parameter;
548
+ });
549
+ }
550
+ return queryParameters;
551
+ }
419
552
 
420
- return this.postToEndpoint(`/assistants/${assistant_id}`, parameters, null, null, null, customHeaders);
421
- };
422
553
 
423
- OpenaiApi.prototype.deleteAssistant = function (parameters) {
424
- const assistant_id = parameters.body.assistant_id;
425
- const customHeaders = { 'OpenAI-Beta': 'assistants=v1' };
426
554
 
427
- return this.deleteFromEndpoint(`/assistants/${assistant_id}`, parameters, null, customHeaders);
428
- };
429
555
 
430
- OpenaiApi.prototype.createThread = function (parameters) {
431
556
 
432
557
 
433
- const customHeaders = { 'OpenAI-Beta': 'assistants=v1' };
434
- return this.postToEndpoint('/threads', parameters, null, null, null, customHeaders);
435
- };
436
558
 
437
- OpenaiApi.prototype.getThread = function (parameters) {
438
- const threadId = parameters.body.thread_id;
439
- const customHeaders = { 'OpenAI-Beta': 'assistants=v1' };
440
559
 
441
- return this.getFromEndpoint(`/threads/${threadId}`, parameters, null, customHeaders);
442
- };
443
560
 
444
- OpenaiApi.prototype.modifyThread = function (parameters) {
445
- const threadId = parameters.body.thread_id;
446
- const customHeaders = { 'OpenAI-Beta': 'assistants=v1' };
447
561
 
448
- return this.postToEndpoint(`/threads/${threadId}`, parameters, null, null, null, customHeaders);
449
- };
450
562
 
451
- OpenaiApi.prototype.deleteThread = function (parameters) {
452
- const threadId = parameters.body.thread_id;
453
- const customHeaders = { 'OpenAI-Beta': 'assistants=v1' };
454
563
 
455
- return this.deleteFromEndpoint(`/threads/${threadId}`, parameters, null, customHeaders);
456
- };
457
564
 
458
- OpenaiApi.prototype.listMessages = function (parameters) {
459
- const threadId = parameters.body.thread_id;
460
- const customHeaders = { 'OpenAI-Beta': 'assistants=v1' };
461
565
 
462
- const expectedQueryParameters = ['limit', 'order', 'after', 'before'];
463
566
 
464
- return this.getFromEndpoint(`/threads/${threadId}/messages`, parameters, expectedQueryParameters, customHeaders);
465
- };
466
567
 
467
- OpenaiApi.prototype.createMessage = function (parameters) {
468
- const threadId = parameters.body.thread_id;
469
- const customHeaders = { 'OpenAI-Beta': 'assistants=v1' };
470
568
 
471
- return this.postToEndpoint(`/threads/${threadId}/messages`, parameters, null, null, null, customHeaders)
472
- };
473
569
 
474
- OpenaiApi.prototype.getMessage = function (parameters) {
475
570
 
476
- const threadId = parameters.body.thread_id;
477
- const messageId = parameters.messageId;
478
- const customHeaders = { 'OpenAI-Beta': 'assistants=v1' };
479
571
 
480
- return this.getFromEndpoint(`/threads/${threadId}/messages/${messageId}`, parameters, null, customHeaders);
481
- };
482
572
 
483
- OpenaiApi.prototype.modifyMessage = function (parameters) {
484
573
 
485
- const threadId = parameters.body.thread_id;
486
- const messageId = parameters.messageId;
487
- const customHeaders = { 'OpenAI-Beta': 'assistants=v1' };
488
574
 
489
- return this.postToEndpoint(`/threads/${threadId}/messages/${messageId}`, parameters, null, null, null, customHeaders);
490
- };
491
575
 
492
- OpenaiApi.prototype.createThreadAndRun = function (parameters) {
493
576
 
494
- const customHeaders = { 'OpenAI-Beta': 'assistants=v1' };
495
577
 
496
- return this.postToEndpoint('/threads/runs', parameters, null, null, null, customHeaders);
497
- };
498
578
 
499
- OpenaiApi.prototype.listRuns = function (parameters) {
500
- const customHeaders = { 'OpenAI-Beta': 'assistants=v1' };
501
- const expectedQueryParameters = ['limit', 'order', 'after', 'before'];
502
- const threadId = parameters.body.thread_id;
503
579
 
504
- return this.getFromEndpoint(`/threads/${threadId}/runs`, parameters, expectedQueryParameters, customHeaders);
505
- };
506
580
 
507
- OpenaiApi.prototype.createRun = function (parameters) {
508
- const customHeaders = { 'OpenAI-Beta': 'assistants=v1' };
509
- const threadId = parameters.body.thread_id;
510
581
 
511
- return this.postToEndpoint(`/threads/${threadId}/runs`, parameters, null, null, null, customHeaders);
512
- };
513
582
 
514
- OpenaiApi.prototype.getRun = function (parameters) {
515
- const customHeaders = { 'OpenAI-Beta': 'assistants=v1' };
516
- const threadId = parameters.body.thread_id;
517
- const runId = parameters.runId;
518
583
 
519
- return this.getFromEndpoint(`/threads/${threadId}/runs/${runId}`, parameters, null, customHeaders);
520
- };
521
584
 
522
- OpenaiApi.prototype.modifyRun = function (parameters) {
523
- const customHeaders = { 'OpenAI-Beta': 'assistants=v1' };
524
- const threadId = parameters.body.thread_id;
525
- const runId = parameters.runId;
526
585
 
527
- return this.postToEndpoint(`/threads/${threadId}/runs/${runId}`, parameters, null, null, null, customHeaders);
528
- };
529
586
 
530
- OpenaiApi.prototype.submitToolOuputsToRun = function (parameters) {
531
- const customHeaders = { 'OpenAI-Beta': 'assistants=v1' };
532
- const threadId = parameters.body.thread_id;
533
- const runId = parameters.runId;
534
587
 
535
- return this.postToEndpoint(`/threads/${threadId}/runs/${runId}/submit_tool_outputs`, parameters, null, null, null, customHeaders);
536
- };
537
588
 
538
- OpenaiApi.prototype.cancelRun = function (parameters) {
539
- const customHeaders = { 'OpenAI-Beta': 'assistants=v1' };
540
- const threadId = parameters.body.thread_id;
541
- const runId = parameters.runId;
542
589
 
543
- return this.postToEndpoint(`/threads/${threadId}/runs/${runId}/cancel`, parameters, null, null, null, customHeaders);
544
- };
545
590
 
546
- OpenaiApi.prototype.listRunSteps = function (parameters) {
547
- const customHeaders = { 'OpenAI-Beta': 'assistants=v1' };
548
- const threadId = parameters.body.thread_id;
549
- const runId = parameters.runId;
550
591
 
551
- return this.getFromEndpoint(`/threads/${threadId}/runs/${runId}/steps`, parameters, null, customHeaders);
552
- };
553
592
 
554
- OpenaiApi.prototype.getRunStep = function (parameters) {
555
- const customHeaders = { 'OpenAI-Beta': 'assistants=v1' };
556
- const threadId = parameters.body.thread_id;
557
- const runId = parameters.runId;
558
- const stepId = parameters.stepId;
559
593
 
560
- return this.getFromEndpoint(`/threads/${threadId}/runs/${runId}/steps/${stepId}`, parameters, null, customHeaders);
561
- };
562
594
 
563
- OpenaiApi.prototype.listAssistantFiles = function (parameters) {
564
- const customHeaders = { 'OpenAI-Beta': 'assistants=v1' };
565
- const assistantId = parameters.assistantId;
566
595
 
567
- return this.getFromEndpoint(`/assistants/${assistantId}/files`, parameters, null, customHeaders);
568
- };
569
596
 
570
- OpenaiApi.prototype.createAssistantFile = function (parameters) {
571
597
 
572
- const customHeaders = { 'OpenAI-Beta': 'assistants=v1' };
573
- const assistantId = parameters.assistantId;
574
598
 
575
- return this.postToEndpoint(`/assistants/${assistantId}/files`, parameters, null, null, null, customHeaders);
576
- };
577
599
 
578
- OpenaiApi.prototype.getAssistantFile = function (parameters) {
579
600
 
580
- const customHeaders = { 'OpenAI-Beta': 'assistants=v1' };
581
- const assistantId = parameters.assistantId;
582
- const fileId = parameters.fileId;
583
601
 
584
- return this.getFromEndpoint(`/assistants/${assistantId}/files/${fileId}`, parameters, null, customHeaders);
585
- };
586
602
 
587
- OpenaiApi.prototype.deleteAssistantFile = function (parameters) {
588
603
 
589
- const customHeaders = { 'OpenAI-Beta': 'assistants=v1' };
590
- const assistantId = parameters.assistantId;
591
- const fileId = parameters.fileId;
592
604
 
593
- return this.deleteFromEndpoint(`/assistants/${assistantId}/files/${fileId}`, parameters, null, customHeaders);
594
- };
595
605
 
596
- OpenaiApi.prototype.listMessageFiles = function (parameters) {
597
606
 
598
- const customHeaders = { 'OpenAI-Beta': 'assistants=v1' };
599
- const threadId = parameters.body.thread_id;
600
- const messageId = parameters.messageId;
601
607
 
602
- return this.getFromEndpoint(`/threads/${threadId}/messages/${messageId}/files`, parameters, null, customHeaders);
603
- };
604
608
 
605
- OpenaiApi.prototype.getMessageFile = function (parameters) {
606
- const customHeaders = { 'OpenAI-Beta': 'assistants=v1' };
607
- const threadId = parameters.body.thread_id;
608
- const messageId = parameters.messageId;
609
- const fileId = parameters.fileId;
610
609
 
611
- return this.getFromEndpoint(`/threads/${threadId}/messages/${messageId}/files/${fileId}`, parameters, null, customHeaders);
612
- };
613
610
 
614
611
  return OpenaiApi;
615
612
  })();