diff --git a/packages/components/nodes/chains/RetrievalQAChain/RetrievalQAChain.ts b/packages/components/nodes/chains/RetrievalQAChain/RetrievalQAChain.ts index 2887643a..4b1381b4 100644 --- a/packages/components/nodes/chains/RetrievalQAChain/RetrievalQAChain.ts +++ b/packages/components/nodes/chains/RetrievalQAChain/RetrievalQAChain.ts @@ -15,7 +15,7 @@ class RetrievalQAChain_Chains implements INode { inputs: INodeParams[] constructor() { - this.label = 'RetrievalQA Chain' + this.label = 'Retrieval QA Chain' this.name = 'retrievalQAChain' this.type = 'RetrievalQAChain' this.icon = 'chain.svg' 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..1d2fabc7 --- /dev/null +++ b/packages/components/nodes/chatmodels/AzureChatOpenAI/AzureChatOpenAI.ts @@ -0,0 +1,144 @@ +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' + +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: 'Model Name', + name: 'modelName', + type: 'options', + options: [ + { + label: 'gpt-4', + name: 'gpt-4' + }, + { + label: 'gpt-4-32k', + name: 'gpt-4-32k' + }, + { + label: 'gpt-35-turbo', + name: 'gpt-35-turbo' + } + ], + default: 'gpt-35-turbo', + optional: true + }, + { + 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: 'options', + options: [ + { + label: '2023-03-15-preview', + name: '2023-03-15-preview' + } + ], + default: '2023-03-15-preview' + }, + { + label: 'Max Tokens', + name: 'maxTokens', + type: 'number', + optional: true, + additionalParams: true + }, + { + label: 'Frequency Penalty', + name: 'frequencyPenalty', + type: 'number', + optional: true, + additionalParams: true + }, + { + label: 'Presence Penalty', + name: 'presencePenalty', + 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 modelName = nodeData.inputs?.modelName 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 maxTokens = nodeData.inputs?.maxTokens as string + const frequencyPenalty = nodeData.inputs?.frequencyPenalty as string + const presencePenalty = nodeData.inputs?.presencePenalty as string + const timeout = nodeData.inputs?.timeout as string + + const obj: Partial & Partial = { + temperature: parseInt(temperature, 10), + modelName, + azureOpenAIApiKey, + azureOpenAIApiInstanceName, + azureOpenAIApiDeploymentName, + azureOpenAIApiVersion + } + + if (maxTokens) obj.maxTokens = parseInt(maxTokens, 10) + if (frequencyPenalty) obj.frequencyPenalty = parseInt(frequencyPenalty, 10) + if (presencePenalty) obj.presencePenalty = parseInt(presencePenalty, 10) + if (timeout) obj.timeout = parseInt(timeout, 10) + + const model = new ChatOpenAI(obj) + return model + } +} + +module.exports = { nodeClass: AzureChatOpenAI_ChatModels } diff --git a/packages/components/nodes/embeddings/AzureOpenAIEmbedding/Azure.svg b/packages/components/nodes/embeddings/AzureOpenAIEmbedding/Azure.svg new file mode 100644 index 00000000..51eb6253 --- /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 00000000..355877e5 --- /dev/null +++ b/packages/components/nodes/embeddings/AzureOpenAIEmbedding/AzureOpenAIEmbedding.ts @@ -0,0 +1,89 @@ +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: 'options', + options: [ + { + label: '2023-03-15-preview', + name: '2023-03-15-preview' + }, + { + label: '2022-12-01', + name: '2022-12-01' + } + ], + default: '2023-03-15-preview' + }, + { + 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 timeout = nodeData.inputs?.timeout as string + + const obj: Partial & Partial = { + azureOpenAIApiKey, + azureOpenAIApiInstanceName, + azureOpenAIApiDeploymentName, + azureOpenAIApiVersion + } + + if (timeout) obj.timeout = parseInt(timeout, 10) + + const model = new OpenAIEmbeddings(obj) + return model + } +} + +module.exports = { nodeClass: AzureOpenAIEmbedding_Embeddings } diff --git a/packages/components/nodes/llms/Azure OpenAI/Azure.svg b/packages/components/nodes/llms/Azure OpenAI/Azure.svg new file mode 100644 index 00000000..51eb6253 --- /dev/null +++ b/packages/components/nodes/llms/Azure OpenAI/Azure.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/packages/components/nodes/llms/Azure OpenAI/AzureOpenAI.ts b/packages/components/nodes/llms/Azure OpenAI/AzureOpenAI.ts new file mode 100644 index 00000000..b5d7d1e0 --- /dev/null +++ b/packages/components/nodes/llms/Azure OpenAI/AzureOpenAI.ts @@ -0,0 +1,201 @@ +import { INode, INodeData, INodeParams } from '../../../src/Interface' +import { getBaseClasses } from '../../../src/utils' +import { AzureOpenAIInput, OpenAI, OpenAIInput } from 'langchain/llms/openai' + +class AzureOpenAI_LLMs implements INode { + label: string + name: string + type: string + icon: string + category: string + description: string + baseClasses: string[] + inputs: INodeParams[] + + constructor() { + this.label = 'Azure OpenAI' + this.name = 'azureOpenAI' + this.type = 'AzureOpenAI' + this.icon = 'Azure.svg' + this.category = 'LLMs' + this.description = 'Wrapper around Azure OpenAI large language models' + this.baseClasses = [this.type, ...getBaseClasses(OpenAI)] + this.inputs = [ + { + label: 'Azure OpenAI Api Key', + name: 'azureOpenAIApiKey', + type: 'password' + }, + { + label: 'Model Name', + name: 'modelName', + type: 'options', + options: [ + { + label: 'text-davinci-003', + name: 'text-davinci-003' + }, + { + label: 'ada', + name: 'ada' + }, + { + label: 'text-ada-001', + name: 'text-ada-001' + }, + { + label: 'babbage', + name: 'babbage' + }, + { + label: 'text-babbage-001', + name: 'text-babbage-001' + }, + { + label: 'curie', + name: 'curie' + }, + { + label: 'text-curie-001', + name: 'text-curie-001' + }, + { + label: 'davinci', + name: 'davinci' + }, + { + label: 'text-davinci-001', + name: 'text-davinci-001' + }, + { + label: 'text-davinci-002', + name: 'text-davinci-002' + }, + { + label: 'text-davinci-fine-tune-002', + name: 'text-davinci-fine-tune-002' + }, + { + label: 'gpt-35-turbo', + name: 'gpt-35-turbo' + } + ], + default: 'text-davinci-003', + optional: true + }, + { + 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: 'options', + options: [ + { + label: '2023-03-15-preview', + name: '2023-03-15-preview' + }, + { + label: '2022-12-01', + name: '2022-12-01' + } + ], + default: '2023-03-15-preview' + }, + { + label: 'Max Tokens', + name: 'maxTokens', + type: 'number', + optional: true, + additionalParams: true + }, + { + label: 'Top Probability', + name: 'topP', + type: 'number', + optional: true, + additionalParams: true + }, + { + label: 'Best Of', + name: 'bestOf', + type: 'number', + optional: true, + additionalParams: true + }, + { + label: 'Frequency Penalty', + name: 'frequencyPenalty', + type: 'number', + optional: true, + additionalParams: true + }, + { + label: 'Presence Penalty', + name: 'presencePenalty', + 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 temperature = nodeData.inputs?.temperature as string + const modelName = nodeData.inputs?.modelName as string + const azureOpenAIApiInstanceName = nodeData.inputs?.azureOpenAIApiInstanceName as string + const azureOpenAIApiDeploymentName = nodeData.inputs?.azureOpenAIApiDeploymentName as string + const azureOpenAIApiVersion = nodeData.inputs?.azureOpenAIApiVersion as string + const maxTokens = nodeData.inputs?.maxTokens as string + const topP = nodeData.inputs?.topP as string + const frequencyPenalty = nodeData.inputs?.frequencyPenalty as string + const presencePenalty = nodeData.inputs?.presencePenalty as string + const timeout = nodeData.inputs?.timeout as string + const bestOf = nodeData.inputs?.bestOf as string + + const obj: Partial & Partial = { + temperature: parseInt(temperature, 10), + modelName, + azureOpenAIApiKey, + azureOpenAIApiInstanceName, + azureOpenAIApiDeploymentName, + azureOpenAIApiVersion + } + + if (maxTokens) obj.maxTokens = parseInt(maxTokens, 10) + if (topP) obj.topP = parseInt(topP, 10) + if (frequencyPenalty) obj.frequencyPenalty = parseInt(frequencyPenalty, 10) + if (presencePenalty) obj.presencePenalty = parseInt(presencePenalty, 10) + if (timeout) obj.timeout = parseInt(timeout, 10) + if (bestOf) obj.bestOf = parseInt(bestOf, 10) + + const model = new OpenAI(obj) + return model + } +} + +module.exports = { nodeClass: AzureOpenAI_LLMs }