From 21ba044570bcd2d272b759de56c8a2be33ec80db Mon Sep 17 00:00:00 2001 From: Allan Bunch <4503640+allanbunch@users.noreply.github.com> Date: Wed, 28 May 2025 18:01:22 -0400 Subject: [PATCH 1/5] Fixes #34 vector store method call failures. --- lib.js | 40 +++++++++--------------- node.html | 29 +++++------------ src/vector-store-file-batches/methods.js | 10 +++--- src/vector-store-files/methods.js | 14 +++------ src/vector-stores/methods.js | 16 +++------- src/vector-stores/template.html | 29 +++++------------ 6 files changed, 42 insertions(+), 96 deletions(-) diff --git a/lib.js b/lib.js index 909fdbd..936752b 100644 --- a/lib.js +++ b/lib.js @@ -16530,7 +16530,7 @@ var require_methods18 = __commonJS({ async function createVectorStoreFileBatch(parameters) { const openai = new OpenAI(this.clientParams); const { vector_store_id, ...params } = parameters.payload; - const response = await openai.beta.vectorStores.fileBatches.create( + const response = await openai.vectorStores.fileBatches.create( vector_store_id, params ); @@ -16539,7 +16539,7 @@ var require_methods18 = __commonJS({ async function retrieveVectorStoreFileBatch(parameters) { const openai = new OpenAI(this.clientParams); const { vector_store_id, batch_id, ...params } = parameters.payload; - const response = await openai.beta.vectorStores.fileBatches.retrieve( + const response = await openai.vectorStores.fileBatches.retrieve( vector_store_id, batch_id, params @@ -16549,7 +16549,7 @@ var require_methods18 = __commonJS({ async function cancelVectorStoreFileBatch(parameters) { const openai = new OpenAI(this.clientParams); const { vector_store_id, batch_id, ...params } = parameters.payload; - const response = await openai.beta.vectorStores.fileBatches.retrieve( + const response = await openai.vectorStores.fileBatches.retrieve( vector_store_id, batch_id, params @@ -16559,7 +16559,7 @@ var require_methods18 = __commonJS({ async function listVectorStoreBatchFiles(parameters) { const openai = new OpenAI(this.clientParams); const { vector_store_id, batch_id, ...params } = parameters.payload; - const list = await openai.beta.vectorStores.fileBatches.listFiles( + const list = await openai.vectorStores.fileBatches.listFiles( vector_store_id, batch_id, params @@ -16579,7 +16579,7 @@ var require_methods18 = __commonJS({ } }); const fileStreams = files2.map((path) => fs.createReadStream(path)); - const response = await openai.beta.vectorStores.fileBatches.uploadAndPoll( + const response = await openai.vectorStores.fileBatches.uploadAndPoll( vector_store_id, { files: fileStreams, fileIds: file_ids }, params @@ -16603,7 +16603,7 @@ var require_methods19 = __commonJS({ async function createVectorStoreFile(parameters) { const openai = new OpenAI(this.clientParams); const { vector_store_id, ...params } = parameters.payload; - const response = await openai.beta.vectorStores.files.create( + const response = await openai.vectorStores.files.create( vector_store_id, params ); @@ -16612,25 +16612,19 @@ var require_methods19 = __commonJS({ async function listVectorStoreFiles(parameters) { const openai = new OpenAI(this.clientParams); const { vector_store_id, ...params } = parameters.payload; - const list = await openai.beta.vectorStores.files.list( - vector_store_id, - params - ); + const list = await openai.vectorStores.files.list(vector_store_id, params); return [...list.data]; } async function retrieveVectorStoreFile(parameters) { const openai = new OpenAI(this.clientParams); const { vector_store_id, file_id } = parameters.payload; - const response = openai.beta.vectorStores.files.retrieve( - vector_store_id, - file_id - ); + const response = openai.vectorStores.files.retrieve(vector_store_id, file_id); return response; } async function deleteVectorStoreFile(parameters) { const openai = new OpenAI(this.clientParams); const { vector_store_id, file_id, ...params } = parameters.payload; - const response = openai.beta.vectorStores.files.del( + const response = openai.vectorStores.files.del( vector_store_id, file_id, params @@ -16652,37 +16646,31 @@ var require_methods20 = __commonJS({ var OpenAI = require_openai().OpenAI; async function createVectorStore(parameters) { const openai = new OpenAI(this.clientParams); - const response = await openai.beta.vectorStores.create(parameters.payload); + const response = await openai.vectorStores.create(parameters.payload); return response; } async function listVectorStores(parameters) { const openai = new OpenAI(this.clientParams); - const list = await openai.beta.vectorStores.list(parameters.payload); + const list = await openai.vectorStores.list(parameters.payload); const vectorStores2 = [...list.data]; return vectorStores2; } async function retrieveVectorStore(parameters) { const openai = new OpenAI(this.clientParams); const { vector_store_id, ...params } = parameters.payload; - const response = await openai.beta.vectorStores.retrieve( - vector_store_id, - params - ); + const response = await openai.vectorStores.retrieve(vector_store_id, params); return response; } async function modifyVectorStore(parameters) { const openai = new OpenAI(this.clientParams); const { vector_store_id, ...params } = parameters.payload; - const response = await openai.beta.vectorStores.update( - vector_store_id, - params - ); + const response = await openai.vectorStores.update(vector_store_id, params); return response; } async function deleteVectorStore(parameters) { const openai = new OpenAI(this.clientParams); const { vector_store_id, ...params } = parameters.payload; - const response = await openai.beta.vectorStores.del(vector_store_id, params); + const response = await openai.vectorStores.del(vector_store_id, params); return response; } module2.exports = { diff --git a/node.html b/node.html index 9bae2c8..eafc085 100644 --- a/node.html +++ b/node.html @@ -394,28 +394,13 @@ data-i18n="OpenaiApi.parameters.cancelUpload" > - - - - - - - + + + + + + + - - - - - - \ No newline at end of file + + + + + + + \ No newline at end of file From d692eb17ac588e35d85cdff6ded23623b718c574 Mon Sep 17 00:00:00 2001 From: Allan Bunch <4503640+allanbunch@users.noreply.github.com> Date: Wed, 28 May 2025 18:40:27 -0400 Subject: [PATCH 2/5] Fixed missing `messages` methods ref. --- lib.js | 83 ++++++++++++++++++++++++++++++++++++++++++------------ src/lib.js | 2 ++ 2 files changed, 67 insertions(+), 18 deletions(-) diff --git a/lib.js b/lib.js index 936752b..a674254 100644 --- a/lib.js +++ b/lib.js @@ -16148,8 +16148,53 @@ var require_methods11 = __commonJS({ } }); -// src/models/methods.js +// src/messages/methods.js var require_methods12 = __commonJS({ + "src/messages/methods.js"(exports2, module2) { + var OpenAI = require_openai().OpenAI; + async function listMessages(parameters) { + const openai = new OpenAI(this.clientParams); + const { thread_id, ...params } = parameters.payload; + const list = await openai.beta.threads.messages.list(thread_id, params); + return [...list.data]; + } + async function createMessage(parameters) { + const openai = new OpenAI(this.clientParams); + const { thread_id, ...params } = parameters.payload; + const response = await openai.beta.threads.messages.create(thread_id, params); + return response; + } + async function getMessage(parameters) { + const openai = new OpenAI(this.clientParams); + const { thread_id, message_id, ...params } = parameters.payload; + const response = await openai.beta.threads.messages.retrieve( + thread_id, + message_id, + params + ); + return response; + } + async function modifyMessage(parameters) { + const openai = new OpenAI(this.clientParams); + const { thread_id, message_id, ...params } = parameters.payload; + const response = await openai.beta.threads.messages.update( + thread_id, + message_id, + params + ); + return response; + } + module2.exports = { + listMessages, + createMessage, + getMessage, + modifyMessage + }; + } +}); + +// src/models/methods.js +var require_methods13 = __commonJS({ "src/models/methods.js"(exports2, module2) { var OpenAI = require_openai().OpenAI; async function listModels(parameters) { @@ -16178,7 +16223,7 @@ var require_methods12 = __commonJS({ }); // src/moderations/methods.js -var require_methods13 = __commonJS({ +var require_methods14 = __commonJS({ "src/moderations/methods.js"(exports2, module2) { var OpenAI = require_openai().OpenAI; async function createModeration(parameters) { @@ -16193,7 +16238,7 @@ var require_methods13 = __commonJS({ }); // src/responses/methods.js -var require_methods14 = __commonJS({ +var require_methods15 = __commonJS({ "src/responses/methods.js"(exports2, module2) { var OpenAI = require_openai().OpenAI; async function createModelResponse(parameters) { @@ -16245,7 +16290,7 @@ var require_methods14 = __commonJS({ }); // src/runs/methods.js -var require_methods15 = __commonJS({ +var require_methods16 = __commonJS({ "src/runs/methods.js"(exports2, module2) { var OpenAI = require_openai().OpenAI; async function createThreadAndRun(parameters) { @@ -16389,7 +16434,7 @@ var require_methods15 = __commonJS({ }); // src/threads/methods.js -var require_methods16 = __commonJS({ +var require_methods17 = __commonJS({ "src/threads/methods.js"(exports2, module2) { var OpenAI = require_openai().OpenAI; async function createThread(parameters) { @@ -16425,7 +16470,7 @@ var require_methods16 = __commonJS({ }); // src/uploads/methods.js -var require_methods17 = __commonJS({ +var require_methods18 = __commonJS({ "src/uploads/methods.js"(exports2, module2) { var OpenAI = require_openai().OpenAI; async function createUpload(parameters) { @@ -16523,7 +16568,7 @@ var require_methods17 = __commonJS({ }); // src/vector-store-file-batches/methods.js -var require_methods18 = __commonJS({ +var require_methods19 = __commonJS({ "src/vector-store-file-batches/methods.js"(exports2, module2) { var OpenAI = require_openai().OpenAI; var fs = require("fs"); @@ -16597,7 +16642,7 @@ var require_methods18 = __commonJS({ }); // src/vector-store-files/methods.js -var require_methods19 = __commonJS({ +var require_methods20 = __commonJS({ "src/vector-store-files/methods.js"(exports2, module2) { var OpenAI = require_openai().OpenAI; async function createVectorStoreFile(parameters) { @@ -16641,7 +16686,7 @@ var require_methods19 = __commonJS({ }); // src/vector-stores/methods.js -var require_methods20 = __commonJS({ +var require_methods21 = __commonJS({ "src/vector-stores/methods.js"(exports2, module2) { var OpenAI = require_openai().OpenAI; async function createVectorStore(parameters) { @@ -16694,15 +16739,16 @@ var embeddings = require_methods8(); var files = require_methods9(); var fine_tuning = require_methods10(); var images = require_methods11(); -var models = require_methods12(); -var moderations = require_methods13(); -var responses = require_methods14(); -var runs = require_methods15(); -var threads = require_methods16(); -var uploads = require_methods17(); -var vectorStoreFileBatches = require_methods18(); -var vectorStoreFiles = require_methods19(); -var vectorStores = require_methods20(); +var messages = require_methods12(); +var models = require_methods13(); +var moderations = require_methods14(); +var responses = require_methods15(); +var runs = require_methods16(); +var threads = require_methods17(); +var uploads = require_methods18(); +var vectorStoreFileBatches = require_methods19(); +var vectorStoreFiles = require_methods20(); +var vectorStores = require_methods21(); var OpenaiApi = class { constructor(apiKey, baseURL, organization) { this.clientParams = { @@ -16724,6 +16770,7 @@ Object.assign( files, fine_tuning, images, + messages, models, moderations, responses, diff --git a/src/lib.js b/src/lib.js index 1d4d758..7e7301f 100644 --- a/src/lib.js +++ b/src/lib.js @@ -10,6 +10,7 @@ const embeddings = require("./embeddings/methods.js"); const files = require("./files/methods.js"); const fine_tuning = require("./fine-tuning/methods.js"); const images = require("./images/methods.js"); +const messages = require("./messages/methods.js"); const models = require("./models/methods.js"); const moderations = require("./moderations/methods.js"); const responses = require("./responses/methods.js"); @@ -43,6 +44,7 @@ Object.assign( files, fine_tuning, images, + messages, models, moderations, responses, From c774918a535182d6243540a61941404aab892ad6 Mon Sep 17 00:00:00 2001 From: Allan Bunch <4503640+allanbunch@users.noreply.github.com> Date: Wed, 28 May 2025 18:51:52 -0400 Subject: [PATCH 3/5] Bumped patch version --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 7b5e59b..e38ba93 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@inductiv/node-red-openai-api", - "version": "1.103.0", + "version": "1.103.0-patch.1", "description": "Enhance your Node-RED projects with advanced AI capabilities.", "main": "node.js", "engines": { From e7990e4be133b4e76c4a2b0ff6692988e728fc42 Mon Sep 17 00:00:00 2001 From: Allan Bunch <4503640+allanbunch@users.noreply.github.com> Date: Wed, 28 May 2025 19:18:56 -0400 Subject: [PATCH 4/5] Added `delete message` method to `messages` interface --- lib.js | 13 +++++++++- locales/en-US/node.json | 1 + node.html | 49 ++++++++++++++++++++++---------------- src/messages/help.html | 24 +++++++++++++++++-- src/messages/methods.js | 13 ++++++++++ src/messages/template.html | 25 ++++++------------- 6 files changed, 84 insertions(+), 41 deletions(-) diff --git a/lib.js b/lib.js index a674254..997882b 100644 --- a/lib.js +++ b/lib.js @@ -16184,11 +16184,22 @@ var require_methods12 = __commonJS({ ); return response; } + async function deleteMessage(parameters) { + const openai = new OpenAI(this.clientParams); + const { thread_id, message_id, ...params } = parameters.payload; + const response = await openai.beta.threads.messages.del( + thread_id, + message_id, + params + ); + return response; + } module2.exports = { listMessages, createMessage, getMessage, - modifyMessage + modifyMessage, + deleteMessage }; } }); diff --git a/locales/en-US/node.json b/locales/en-US/node.json index 5ac57fe..2f4b03b 100644 --- a/locales/en-US/node.json +++ b/locales/en-US/node.json @@ -130,6 +130,7 @@ "getMessage": "retrieve message", "message_id": "message id", "modifyMessage": "modify message", + "deleteMessage": "delete message", "createUpload": "create upload", "addUploadPart": "add upload part", "completeUpload": "complete upload", diff --git a/node.html b/node.html index eafc085..c68f79e 100644 --- a/node.html +++ b/node.html @@ -260,24 +260,13 @@ data-i18n="OpenaiApi.parameters.createImageVariation" > - - - - - - + + + + + + + - - - - - \ No newline at end of file + + + + + + + \ No newline at end of file From 9cd1072daf5954399d9cf5f62066454663ac538b Mon Sep 17 00:00:00 2001 From: Allan Bunch <4503640+allanbunch@users.noreply.github.com> Date: Wed, 28 May 2025 19:24:45 -0400 Subject: [PATCH 5/5] Updated README --- README.md | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 3d245c0..ce8012a 100644 --- a/README.md +++ b/README.md @@ -40,7 +40,11 @@ After installation, find your node in the **AI** palette category labeled "OpenA - **Configurable and Flexible**: Adapt to a wide range of project requirements, making it easy to integrate AI into your IoT solutions. - **Powerful Combinations**: Utilize Node-RED's diverse nodes to build complex, AI-driven IoT workflows with ease. -## Release Notes (v1.103.0) +## Release Notes (v1.103.0-patch.1) + +### Fixed Issues + +- Reaolves issue [#34](https://github.com/allanbunch/node-red-openai-api/issues/34) ### Ehancements @@ -48,6 +52,7 @@ After installation, find your node in the **AI** palette category labeled "OpenA ### Notable Features & Changes +- Added missing `delete` method to the `messages` API. - Full Model Context Protocol (MCP) tool support for the `responses` API. - Added support for the new `container` endpoint. - Added support for the new `containerFiles` endpoint.