From 908be47835e51e6cc20fea215932540974b7e6f4 Mon Sep 17 00:00:00 2001 From: chungyau97 Date: Wed, 10 May 2023 21:00:36 +0700 Subject: [PATCH] add Azure OpenAI Embedding --- .../embeddings/AzureOpenAIEmbedding/Azure.svg | 5 + .../AzureOpenAIEmbedding.ts | 97 +++++++++++++++++++ 2 files changed, 102 insertions(+) create mode 100644 packages/components/nodes/embeddings/AzureOpenAIEmbedding/Azure.svg create mode 100644 packages/components/nodes/embeddings/AzureOpenAIEmbedding/AzureOpenAIEmbedding.ts diff --git a/packages/components/nodes/embeddings/AzureOpenAIEmbedding/Azure.svg b/packages/components/nodes/embeddings/AzureOpenAIEmbedding/Azure.svg new file mode 100644 index 000000000..51eb62535 --- /dev/null +++ b/packages/components/nodes/embeddings/AzureOpenAIEmbedding/Azure.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/packages/components/nodes/embeddings/AzureOpenAIEmbedding/AzureOpenAIEmbedding.ts b/packages/components/nodes/embeddings/AzureOpenAIEmbedding/AzureOpenAIEmbedding.ts new file mode 100644 index 000000000..51bd3a404 --- /dev/null +++ b/packages/components/nodes/embeddings/AzureOpenAIEmbedding/AzureOpenAIEmbedding.ts @@ -0,0 +1,97 @@ +import { AzureOpenAIInput } from 'langchain/chat_models/openai' +import { INode, INodeData, INodeParams } from '../../../src/Interface' +import { getBaseClasses } from '../../../src/utils' +import { OpenAIEmbeddings, OpenAIEmbeddingsParams } from 'langchain/embeddings/openai' + +class AzureOpenAIEmbedding_Embeddings implements INode { + label: string + name: string + type: string + icon: string + category: string + description: string + baseClasses: string[] + inputs: INodeParams[] + + constructor() { + this.label = 'Azure OpenAI Embeddings' + this.name = 'azureOpenAIEmbeddings' + this.type = 'AzureOpenAIEmbeddings' + this.icon = 'Azure.svg' + this.category = 'Embeddings' + this.description = 'Azure OpenAI API to generate embeddings for a given text' + this.baseClasses = [this.type, ...getBaseClasses(OpenAIEmbeddings)] + this.inputs = [ + { + label: 'Azure OpenAI Api Key', + name: 'azureOpenAIApiKey', + type: 'password' + }, + { + 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: 'Strip New Lines', + name: 'stripNewLines', + type: 'boolean', + optional: true, + additionalParams: true + }, + { + label: 'Batch Size', + name: 'batchSize', + type: 'number', + optional: true, + additionalParams: true + }, + { + label: 'Timeout', + name: 'timeout', + type: 'number', + optional: true, + additionalParams: true + } + ] + } + + async init(nodeData: INodeData): Promise { + const azureOpenAIApiKey = nodeData.inputs?.azureOpenAIApiKey as string + const azureOpenAIApiInstanceName = nodeData.inputs?.azureOpenAIApiInstanceName as string + const azureOpenAIApiDeploymentName = nodeData.inputs?.azureOpenAIApiDeploymentName as string + const azureOpenAIApiVersion = nodeData.inputs?.azureOpenAIApiVersion as string + const stripNewLines = nodeData.inputs?.stripNewLines as boolean + const batchSize = nodeData.inputs?.batchSize as string + const timeout = nodeData.inputs?.timeout as string + + const obj: Partial & Partial = { + azureOpenAIApiKey, + azureOpenAIApiInstanceName, + azureOpenAIApiDeploymentName, + azureOpenAIApiVersion + } + + if (stripNewLines) obj.stripNewLines = stripNewLines + if (batchSize) obj.batchSize = parseInt(batchSize, 10) + if (timeout) obj.timeout = parseInt(timeout, 10) + + const model = new OpenAIEmbeddings(obj) + return model + } +} + +module.exports = { nodeClass: AzureOpenAIEmbedding_Embeddings }