feat: Add model parameter to OpenAI embeddings (#8481)

Signed-off-by: Oleg Ivaniv <me@olegivaniv.com>
This commit is contained in:
oleg 2024-01-29 16:34:23 +01:00 committed by GitHub
parent eb27ed068b
commit 981ea3930e
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -5,6 +5,7 @@ import {
type INodeType,
type INodeTypeDescription,
type SupplyData,
type INodeProperties,
} from 'n8n-workflow';
import type { ClientOptions } from 'openai';
@ -12,6 +13,60 @@ import { OpenAIEmbeddings } from 'langchain/embeddings/openai';
import { logWrapper } from '../../../utils/logWrapper';
import { getConnectionHintNoticeField } from '../../../utils/sharedFields';
const modelParameter: INodeProperties = {
displayName: 'Model',
name: 'model',
type: 'options',
description:
'The model which will generate the embeddings. <a href="https://platform.openai.com/docs/models/overview">Learn more</a>.',
typeOptions: {
loadOptions: {
routing: {
request: {
method: 'GET',
url: '={{ $parameter.options?.baseURL?.split("/").slice(-1).pop() || "v1" }}/models',
},
output: {
postReceive: [
{
type: 'rootProperty',
properties: {
property: 'data',
},
},
{
type: 'filter',
properties: {
pass: "={{ $responseItem.id.includes('embed') }}",
},
},
{
type: 'setKeyValue',
properties: {
name: '={{$responseItem.id}}',
value: '={{$responseItem.id}}',
},
},
{
type: 'sort',
properties: {
key: 'name',
},
},
],
},
},
},
},
routing: {
send: {
type: 'body',
property: 'model',
},
},
default: 'text-embedding-3-small',
};
export class EmbeddingsOpenAi implements INodeType {
description: INodeTypeDescription = {
displayName: 'Embeddings OpenAI',
@ -50,6 +105,23 @@ export class EmbeddingsOpenAi implements INodeType {
outputNames: ['Embeddings'],
properties: [
getConnectionHintNoticeField([NodeConnectionType.AiVectorStore]),
{
...modelParameter,
default: 'text-embedding-ada-002',
displayOptions: {
show: {
'@version': [1],
},
},
},
{
...modelParameter,
displayOptions: {
hide: {
'@version': [1],
},
},
},
{
displayName: 'Options',
name: 'options',
@ -115,6 +187,7 @@ export class EmbeddingsOpenAi implements INodeType {
const embeddings = new OpenAIEmbeddings(
{
modelName: this.getNodeParameter('model', itemIndex, 'text-embedding-3-small') as string,
openAIApiKey: credentials.apiKey as string,
...options,
},