From 09db08aace55f4cd969e5b29361911391255fd14 Mon Sep 17 00:00:00 2001 From: chungyau97 Date: Wed, 10 May 2023 19:54:29 +0700 Subject: [PATCH 1/4] add Azure Chat OpenAI --- .../chatmodels/AzureChatOpenAI/Azure.svg | 5 + .../AzureChatOpenAI/AzureChatOpenAI.ts | 98 +++++++++++++++++++ 2 files changed, 103 insertions(+) create mode 100644 packages/components/nodes/chatmodels/AzureChatOpenAI/Azure.svg create mode 100644 packages/components/nodes/chatmodels/AzureChatOpenAI/AzureChatOpenAI.ts diff --git a/packages/components/nodes/chatmodels/AzureChatOpenAI/Azure.svg b/packages/components/nodes/chatmodels/AzureChatOpenAI/Azure.svg new file mode 100644 index 00000000..51eb6253 --- /dev/null +++ b/packages/components/nodes/chatmodels/AzureChatOpenAI/Azure.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/packages/components/nodes/chatmodels/AzureChatOpenAI/AzureChatOpenAI.ts b/packages/components/nodes/chatmodels/AzureChatOpenAI/AzureChatOpenAI.ts new file mode 100644 index 00000000..8692885d --- /dev/null +++ b/packages/components/nodes/chatmodels/AzureChatOpenAI/AzureChatOpenAI.ts @@ -0,0 +1,98 @@ +import { INode, INodeData, INodeParams } from '../../../src/Interface' +import { getBaseClasses } from '../../../src/utils' +import { AzureOpenAIInput, ChatOpenAI } from 'langchain/chat_models/openai' + +class AzureChatOpenAI_ChatModels implements INode { + label: string + name: string + type: string + icon: string + category: string + description: string + baseClasses: string[] + inputs: INodeParams[] + + constructor() { + this.label = 'Azure ChatOpenAI' + this.name = 'azureChatOpenAI' + this.type = 'AzureChatOpenAI' + this.icon = 'Azure.svg' + this.category = 'Chat Models' + this.description = 'Wrapper around Azure OpenAI large language models that use the Chat endpoint' + this.baseClasses = [this.type, ...getBaseClasses(ChatOpenAI)] + this.inputs = [ + { + label: 'Azure OpenAI Api Key', + name: 'azureOpenAIApiKey', + type: 'password' + }, + { + label: 'Temperature', + name: 'temperature', + type: 'number', + default: 0.9, + optional: true + }, + { + label: 'Azure OpenAI Api Instance Name', + name: 'azureOpenAIApiInstanceName', + type: 'string', + placeholder: 'YOUR-INSTANCE-NAME' + }, + { + label: 'Azure OpenAI Api Deployment Name', + name: 'azureOpenAIApiDeploymentName', + type: 'string', + placeholder: 'YOUR-DEPLOYMENT-NAME' + }, + { + label: 'Azure OpenAI Api Version', + name: 'azureOpenAIApiVersion', + type: 'string', + placeholder: 'YOUR-API-VERSION' + }, + { + label: 'Azure OpenAIApi Embeddings Deployment Name', + name: 'azureOpenAIApiEmbeddingsDeploymentName', + type: 'string', + placeholder: 'YOUR-EMBEDDINGS-NAME', + optional: true, + additionalParams: true + }, + { + label: 'azure OpenAI Api Completions Deployment Name', + name: 'azureOpenAIApiCompletionsDeploymentName', + type: 'string', + placeholder: 'YOUR-COMPLETIONS-NAME', + optional: true, + additionalParams: true + } + ] + } + + async init(nodeData: INodeData): Promise { + const azureOpenAIApiKey = nodeData.inputs?.azureOpenAIApiKey as string + const temperature = nodeData.inputs?.temperature as string + const azureOpenAIApiInstanceName = nodeData.inputs?.azureOpenAIApiInstanceName as string + const azureOpenAIApiDeploymentName = nodeData.inputs?.azureOpenAIApiDeploymentName as string + const azureOpenAIApiVersion = nodeData.inputs?.azureOpenAIApiVersion as string + const azureOpenAIApiEmbeddingsDeploymentName = nodeData.inputs?.azureOpenAIApiEmbeddingsDeploymentName as string + const azureOpenAIApiCompletionsDeploymentName = nodeData.inputs?.azureOpenAIApiCompletionsDeploymentName as string + + const obj: Partial & { temperature?: number } = { + temperature: parseInt(temperature, 10), + azureOpenAIApiKey, + azureOpenAIApiInstanceName, + azureOpenAIApiDeploymentName, + azureOpenAIApiVersion + } + + if (azureOpenAIApiEmbeddingsDeploymentName) obj.azureOpenAIApiEmbeddingsDeploymentName = azureOpenAIApiEmbeddingsDeploymentName + if (azureOpenAIApiCompletionsDeploymentName) obj.azureOpenAIApiCompletionsDeploymentName = azureOpenAIApiCompletionsDeploymentName + + const model = new ChatOpenAI(obj) + return model + } +} + +module.exports = { nodeClass: AzureChatOpenAI_ChatModels } From 6ca0c364b9a9c32ade2919f107191fffb3c0718e Mon Sep 17 00:00:00 2001 From: chungyau97 Date: Wed, 10 May 2023 19:55:56 +0700 Subject: [PATCH 2/4] fix typo --- .../nodes/chatmodels/AzureChatOpenAI/AzureChatOpenAI.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/components/nodes/chatmodels/AzureChatOpenAI/AzureChatOpenAI.ts b/packages/components/nodes/chatmodels/AzureChatOpenAI/AzureChatOpenAI.ts index 8692885d..a802b325 100644 --- a/packages/components/nodes/chatmodels/AzureChatOpenAI/AzureChatOpenAI.ts +++ b/packages/components/nodes/chatmodels/AzureChatOpenAI/AzureChatOpenAI.ts @@ -60,7 +60,7 @@ class AzureChatOpenAI_ChatModels implements INode { additionalParams: true }, { - label: 'azure OpenAI Api Completions Deployment Name', + label: 'Azure OpenAI Api Completions Deployment Name', name: 'azureOpenAIApiCompletionsDeploymentName', type: 'string', placeholder: 'YOUR-COMPLETIONS-NAME', From e1667067bebd01e5ebc945a3ba46a726d280d3fe Mon Sep 17 00:00:00 2001 From: chungyau97 Date: Wed, 10 May 2023 20:30:44 +0700 Subject: [PATCH 3/4] add OpenAIBaseInput interface --- .../nodes/chatmodels/AzureChatOpenAI/AzureChatOpenAI.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/components/nodes/chatmodels/AzureChatOpenAI/AzureChatOpenAI.ts b/packages/components/nodes/chatmodels/AzureChatOpenAI/AzureChatOpenAI.ts index a802b325..d0833576 100644 --- a/packages/components/nodes/chatmodels/AzureChatOpenAI/AzureChatOpenAI.ts +++ b/packages/components/nodes/chatmodels/AzureChatOpenAI/AzureChatOpenAI.ts @@ -1,3 +1,4 @@ +import { OpenAIBaseInput } from 'langchain/dist/types/openai-types' import { INode, INodeData, INodeParams } from '../../../src/Interface' import { getBaseClasses } from '../../../src/utils' import { AzureOpenAIInput, ChatOpenAI } from 'langchain/chat_models/openai' @@ -79,7 +80,7 @@ class AzureChatOpenAI_ChatModels implements INode { const azureOpenAIApiEmbeddingsDeploymentName = nodeData.inputs?.azureOpenAIApiEmbeddingsDeploymentName as string const azureOpenAIApiCompletionsDeploymentName = nodeData.inputs?.azureOpenAIApiCompletionsDeploymentName as string - const obj: Partial & { temperature?: number } = { + const obj: Partial & Partial = { temperature: parseInt(temperature, 10), azureOpenAIApiKey, azureOpenAIApiInstanceName, From 101cf2978c4dc6db7c379d93e109007b53f0722b Mon Sep 17 00:00:00 2001 From: chungyau97 Date: Wed, 10 May 2023 20:34:43 +0700 Subject: [PATCH 4/4] fix typo --- .../nodes/chatmodels/AzureChatOpenAI/AzureChatOpenAI.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/components/nodes/chatmodels/AzureChatOpenAI/AzureChatOpenAI.ts b/packages/components/nodes/chatmodels/AzureChatOpenAI/AzureChatOpenAI.ts index d0833576..90ef3f9a 100644 --- a/packages/components/nodes/chatmodels/AzureChatOpenAI/AzureChatOpenAI.ts +++ b/packages/components/nodes/chatmodels/AzureChatOpenAI/AzureChatOpenAI.ts @@ -53,7 +53,7 @@ class AzureChatOpenAI_ChatModels implements INode { placeholder: 'YOUR-API-VERSION' }, { - label: 'Azure OpenAIApi Embeddings Deployment Name', + label: 'Azure OpenAI Api Embeddings Deployment Name', name: 'azureOpenAIApiEmbeddingsDeploymentName', type: 'string', placeholder: 'YOUR-EMBEDDINGS-NAME',