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