Merge branch 'main' into chore/Upgrade-LC-version

# Conflicts:
#	packages/components/nodes/cache/RedisCache/RedisCache.ts
#	packages/components/nodes/cache/RedisCache/RedisEmbeddingsCache.ts
#	packages/components/nodes/chains/ConversationChain/ConversationChain.ts
#	packages/components/nodes/tools/RetrieverTool/RetrieverTool.ts
#	packages/components/nodes/vectorstores/Qdrant/Qdrant.ts
#	packages/components/nodes/vectorstores/Redis/Redis.ts
#	packages/components/nodes/vectorstores/Redis/RedisSearchBase.ts
#	packages/components/nodes/vectorstores/Redis/Redis_Existing.ts
#	packages/components/nodes/vectorstores/Redis/Redis_Upsert.ts
#	packages/components/src/agents.ts
This commit is contained in:
Henry
2024-01-31 00:25:37 +00:00
60 changed files with 1650 additions and 191 deletions
+3
View File
@@ -123,6 +123,8 @@ Flowise support different environment variables to configure your instance. You
| Variable | Description | Type | Default | | Variable | Description | Type | Default |
| --------------------------- | ---------------------------------------------------------------------------- | ------------------------------------------------ | ----------------------------------- | | --------------------------- | ---------------------------------------------------------------------------- | ------------------------------------------------ | ----------------------------------- |
| PORT | The HTTP port Flowise runs on | Number | 3000 | | PORT | The HTTP port Flowise runs on | Number | 3000 |
| CORS_ORIGINS | The allowed origins for all cross-origin HTTP calls | String | |
| IFRAME_ORIGINS | The allowed origins for iframe src embedding | String | |
| FLOWISE_USERNAME | Username to login | String | | | FLOWISE_USERNAME | Username to login | String | |
| FLOWISE_PASSWORD | Password to login | String | | | FLOWISE_PASSWORD | Password to login | String | |
| DEBUG | Print logs from components | Boolean | | | DEBUG | Print logs from components | Boolean | |
@@ -138,6 +140,7 @@ Flowise support different environment variables to configure your instance. You
| DATABASE_USER | Database username (When DATABASE_TYPE is not sqlite) | String | | | DATABASE_USER | Database username (When DATABASE_TYPE is not sqlite) | String | |
| DATABASE_PASSWORD | Database password (When DATABASE_TYPE is not sqlite) | String | | | DATABASE_PASSWORD | Database password (When DATABASE_TYPE is not sqlite) | String | |
| DATABASE_NAME | Database name (When DATABASE_TYPE is not sqlite) | String | | | DATABASE_NAME | Database name (When DATABASE_TYPE is not sqlite) | String | |
| DATABASE_SSL_KEY_BASE64 | Database SSL client cert in base64 (takes priority over DATABASE_SSL) | Boolean | false |
| DATABASE_SSL | Database connection overssl (When DATABASE_TYPE is postgre) | Boolean | false | | DATABASE_SSL | Database connection overssl (When DATABASE_TYPE is postgre) | Boolean | false |
| SECRETKEY_PATH | Location where encryption key (used to encrypt/decrypt credentials) is saved | String | `your-path/Flowise/packages/server` | | SECRETKEY_PATH | Location where encryption key (used to encrypt/decrypt credentials) is saved | String | `your-path/Flowise/packages/server` |
| FLOWISE_SECRETKEY_OVERWRITE | Encryption key to be used instead of the key stored in SECRETKEY_PATH | String | | FLOWISE_SECRETKEY_OVERWRITE | Encryption key to be used instead of the key stored in SECRETKEY_PATH | String |
+4
View File
@@ -4,6 +4,9 @@ APIKEY_PATH=/root/.flowise
SECRETKEY_PATH=/root/.flowise SECRETKEY_PATH=/root/.flowise
LOG_PATH=/root/.flowise/logs LOG_PATH=/root/.flowise/logs
# CORS_ORIGINS="*"
# IFRAME_ORIGINS="*"
# NUMBER_OF_PROXIES= 1 # NUMBER_OF_PROXIES= 1
# DATABASE_TYPE=postgres # DATABASE_TYPE=postgres
@@ -13,6 +16,7 @@ LOG_PATH=/root/.flowise/logs
# DATABASE_USER="" # DATABASE_USER=""
# DATABASE_PASSWORD="" # DATABASE_PASSWORD=""
# DATABASE_SSL=true # DATABASE_SSL=true
# DATABASE_SSL_KEY_BASE64=<Self signed certificate in BASE64>
# FLOWISE_USERNAME=user # FLOWISE_USERNAME=user
# FLOWISE_PASSWORD=1234 # FLOWISE_PASSWORD=1234
+3
View File
@@ -6,6 +6,8 @@ services:
restart: always restart: always
environment: environment:
- PORT=${PORT} - PORT=${PORT}
- CORS_ORIGINS=${CORS_ORIGINS}
- IFRAME_ORIGINS=${IFRAME_ORIGINS}
- FLOWISE_USERNAME=${FLOWISE_USERNAME} - FLOWISE_USERNAME=${FLOWISE_USERNAME}
- FLOWISE_PASSWORD=${FLOWISE_PASSWORD} - FLOWISE_PASSWORD=${FLOWISE_PASSWORD}
- DEBUG=${DEBUG} - DEBUG=${DEBUG}
@@ -17,6 +19,7 @@ services:
- DATABASE_USER=${DATABASE_USER} - DATABASE_USER=${DATABASE_USER}
- DATABASE_PASSWORD=${DATABASE_PASSWORD} - DATABASE_PASSWORD=${DATABASE_PASSWORD}
- DATABASE_SSL=${DATABASE_SSL} - DATABASE_SSL=${DATABASE_SSL}
- DATABASE_SSL_KEY_BASE64=${DATABASE_SSL_KEY_BASE64}
- APIKEY_PATH=${APIKEY_PATH} - APIKEY_PATH=${APIKEY_PATH}
- SECRETKEY_PATH=${SECRETKEY_PATH} - SECRETKEY_PATH=${SECRETKEY_PATH}
- FLOWISE_SECRETKEY_OVERWRITE=${FLOWISE_SECRETKEY_OVERWRITE} - FLOWISE_SECRETKEY_OVERWRITE=${FLOWISE_SECRETKEY_OVERWRITE}
@@ -65,7 +65,7 @@ class OpenAIFunctionAgent_Agents implements INode {
return prepareAgent(nodeData, { sessionId: this.sessionId, chatId: options.chatId, input }, options.chatHistory) return prepareAgent(nodeData, { sessionId: this.sessionId, chatId: options.chatId, input }, options.chatHistory)
} }
async run(nodeData: INodeData, input: string, options: ICommonObject): Promise<string> { async run(nodeData: INodeData, input: string, options: ICommonObject): Promise<string | ICommonObject> {
const memory = nodeData.inputs?.memory as FlowiseMemory const memory = nodeData.inputs?.memory as FlowiseMemory
const executor = prepareAgent(nodeData, { sessionId: this.sessionId, chatId: options.chatId, input }, options.chatHistory) const executor = prepareAgent(nodeData, { sessionId: this.sessionId, chatId: options.chatId, input }, options.chatHistory)
@@ -73,12 +73,20 @@ class OpenAIFunctionAgent_Agents implements INode {
const callbacks = await additionalCallbacks(nodeData, options) const callbacks = await additionalCallbacks(nodeData, options)
let res: ChainValues = {} let res: ChainValues = {}
let sourceDocuments: ICommonObject[] = []
if (options.socketIO && options.socketIOClientId) { if (options.socketIO && options.socketIOClientId) {
const handler = new CustomChainHandler(options.socketIO, options.socketIOClientId) const handler = new CustomChainHandler(options.socketIO, options.socketIOClientId)
res = await executor.invoke({ input }, { callbacks: [loggerHandler, handler, ...callbacks] }) res = await executor.invoke({ input }, { callbacks: [loggerHandler, handler, ...callbacks] })
if (res.sourceDocuments) {
options.socketIO.to(options.socketIOClientId).emit('sourceDocuments', flatten(res.sourceDocuments))
sourceDocuments = res.sourceDocuments
}
} else { } else {
res = await executor.invoke({ input }, { callbacks: [loggerHandler, ...callbacks] }) res = await executor.invoke({ input }, { callbacks: [loggerHandler, ...callbacks] })
if (res.sourceDocuments) {
sourceDocuments = res.sourceDocuments
}
} }
await memory.addChatMessages( await memory.addChatMessages(
@@ -95,7 +103,7 @@ class OpenAIFunctionAgent_Agents implements INode {
this.sessionId this.sessionId
) )
return res?.output return sourceDocuments.length ? { text: res?.output, sourceDocuments: flatten(sourceDocuments) } : res?.output
} }
} }
+41 -4
View File
@@ -1,10 +1,47 @@
import { Redis } from 'ioredis' import { Redis, RedisOptions } from 'ioredis'
import { isEqual } from 'lodash'
import hash from 'object-hash' import hash from 'object-hash'
import { RedisCache as LangchainRedisCache } from '@langchain/community/caches/ioredis' import { RedisCache as LangchainRedisCache } from '@langchain/community/caches/ioredis'
import { StoredGeneration, mapStoredMessageToChatMessage } from '@langchain/core/messages' import { StoredGeneration, mapStoredMessageToChatMessage } from '@langchain/core/messages'
import { Generation, ChatGeneration } from '@langchain/core/outputs' import { Generation, ChatGeneration } from '@langchain/core/outputs'
import { getBaseClasses, getCredentialData, getCredentialParam, ICommonObject, INode, INodeData, INodeParams } from '../../../src' import { getBaseClasses, getCredentialData, getCredentialParam, ICommonObject, INode, INodeData, INodeParams } from '../../../src'
let redisClientSingleton: Redis
let redisClientOption: RedisOptions
let redisClientUrl: string
const getRedisClientbyOption = (option: RedisOptions) => {
if (!redisClientSingleton) {
// if client doesn't exists
redisClientSingleton = new Redis(option)
redisClientOption = option
return redisClientSingleton
} else if (redisClientSingleton && !isEqual(option, redisClientOption)) {
// if client exists but option changed
redisClientSingleton.quit()
redisClientSingleton = new Redis(option)
redisClientOption = option
return redisClientSingleton
}
return redisClientSingleton
}
const getRedisClientbyUrl = (url: string) => {
if (!redisClientSingleton) {
// if client doesn't exists
redisClientSingleton = new Redis(url)
redisClientUrl = url
return redisClientSingleton
} else if (redisClientSingleton && url !== redisClientUrl) {
// if client exists but option changed
redisClientSingleton.quit()
redisClientSingleton = new Redis(url)
redisClientUrl = url
return redisClientSingleton
}
return redisClientSingleton
}
class RedisCache implements INode { class RedisCache implements INode {
label: string label: string
name: string name: string
@@ -61,7 +98,7 @@ class RedisCache implements INode {
const tlsOptions = sslEnabled === true ? { tls: { rejectUnauthorized: false } } : {} const tlsOptions = sslEnabled === true ? { tls: { rejectUnauthorized: false } } : {}
client = new Redis({ client = getRedisClientbyOption({
port: portStr ? parseInt(portStr) : 6379, port: portStr ? parseInt(portStr) : 6379,
host, host,
username, username,
@@ -69,7 +106,7 @@ class RedisCache implements INode {
...tlsOptions ...tlsOptions
}) })
} else { } else {
client = new Redis(redisUrl) client = getRedisClientbyUrl(redisUrl)
} }
const redisClient = new LangchainRedisCache(client) const redisClient = new LangchainRedisCache(client)
@@ -95,7 +132,7 @@ class RedisCache implements INode {
for (let i = 0; i < value.length; i += 1) { for (let i = 0; i < value.length; i += 1) {
const key = getCacheKey(prompt, llmKey, String(i)) const key = getCacheKey(prompt, llmKey, String(i))
if (ttl) { if (ttl) {
await client.set(key, JSON.stringify(serializeGeneration(value[i])), 'EX', parseInt(ttl, 10)) await client.set(key, JSON.stringify(serializeGeneration(value[i])), 'PX', parseInt(ttl, 10))
} else { } else {
await client.set(key, JSON.stringify(serializeGeneration(value[i]))) await client.set(key, JSON.stringify(serializeGeneration(value[i])))
} }
@@ -1,9 +1,46 @@
import { Redis } from 'ioredis' import { Redis, RedisOptions } from 'ioredis'
import { isEqual } from 'lodash'
import { RedisByteStore } from '@langchain/community/storage/ioredis' import { RedisByteStore } from '@langchain/community/storage/ioredis'
import { Embeddings } from '@langchain/core/embeddings' import { Embeddings } from '@langchain/core/embeddings'
import { CacheBackedEmbeddings } from 'langchain/embeddings/cache_backed' import { CacheBackedEmbeddings } from 'langchain/embeddings/cache_backed'
import { getBaseClasses, getCredentialData, getCredentialParam, ICommonObject, INode, INodeData, INodeParams } from '../../../src' import { getBaseClasses, getCredentialData, getCredentialParam, ICommonObject, INode, INodeData, INodeParams } from '../../../src'
let redisClientSingleton: Redis
let redisClientOption: RedisOptions
let redisClientUrl: string
const getRedisClientbyOption = (option: RedisOptions) => {
if (!redisClientSingleton) {
// if client doesn't exists
redisClientSingleton = new Redis(option)
redisClientOption = option
return redisClientSingleton
} else if (redisClientSingleton && !isEqual(option, redisClientOption)) {
// if client exists but option changed
redisClientSingleton.quit()
redisClientSingleton = new Redis(option)
redisClientOption = option
return redisClientSingleton
}
return redisClientSingleton
}
const getRedisClientbyUrl = (url: string) => {
if (!redisClientSingleton) {
// if client doesn't exists
redisClientSingleton = new Redis(url)
redisClientUrl = url
return redisClientSingleton
} else if (redisClientSingleton && url !== redisClientUrl) {
// if client exists but option changed
redisClientSingleton.quit()
redisClientSingleton = new Redis(url)
redisClientUrl = url
return redisClientSingleton
}
return redisClientSingleton
}
class RedisEmbeddingsCache implements INode { class RedisEmbeddingsCache implements INode {
label: string label: string
name: string name: string
@@ -75,7 +112,7 @@ class RedisEmbeddingsCache implements INode {
const tlsOptions = sslEnabled === true ? { tls: { rejectUnauthorized: false } } : {} const tlsOptions = sslEnabled === true ? { tls: { rejectUnauthorized: false } } : {}
client = new Redis({ client = getRedisClientbyOption({
port: portStr ? parseInt(portStr) : 6379, port: portStr ? parseInt(portStr) : 6379,
host, host,
username, username,
@@ -83,7 +120,7 @@ class RedisEmbeddingsCache implements INode {
...tlsOptions ...tlsOptions
}) })
} else { } else {
client = new Redis(redisUrl) client = getRedisClientbyUrl(redisUrl)
} }
ttl ??= '3600' ttl ??= '3600'
@@ -7,6 +7,8 @@ import { ConversationChain } from 'langchain/chains'
import { FlowiseMemory, ICommonObject, IMessage, INode, INodeData, INodeParams } from '../../../src/Interface' import { FlowiseMemory, ICommonObject, IMessage, INode, INodeData, INodeParams } from '../../../src/Interface'
import { ConsoleCallbackHandler, CustomChainHandler, additionalCallbacks } from '../../../src/handler' import { ConsoleCallbackHandler, CustomChainHandler, additionalCallbacks } from '../../../src/handler'
import { getBaseClasses, handleEscapeCharacters } from '../../../src/utils' import { getBaseClasses, handleEscapeCharacters } from '../../../src/utils'
import { checkInputs, Moderation, streamResponse } from '../../moderation/Moderation'
import { formatResponse } from '../../outputparsers/OutputParserHelpers'
let systemMessage = `The following is a friendly conversation between a human and an AI. The AI is talkative and provides lots of specific details from its context. If the AI does not know the answer to a question, it truthfully says it does not know.` let systemMessage = `The following is a friendly conversation between a human and an AI. The AI is talkative and provides lots of specific details from its context. If the AI does not know the answer to a question, it truthfully says it does not know.`
const inputKey = 'input' const inputKey = 'input'
@@ -26,7 +28,7 @@ class ConversationChain_Chains implements INode {
constructor(fields?: { sessionId?: string }) { constructor(fields?: { sessionId?: string }) {
this.label = 'Conversation Chain' this.label = 'Conversation Chain'
this.name = 'conversationChain' this.name = 'conversationChain'
this.version = 2.0 this.version = 3.0
this.type = 'ConversationChain' this.type = 'ConversationChain'
this.icon = 'conv.svg' this.icon = 'conv.svg'
this.category = 'Chains' this.category = 'Chains'
@@ -60,6 +62,14 @@ class ConversationChain_Chains implements INode {
optional: true, optional: true,
list: true list: true
},*/ },*/
{
label: 'Input Moderation',
description: 'Detect text that could generate harmful output and prevent it from being sent to the language model',
name: 'inputModeration',
type: 'Moderation',
optional: true,
list: true
},
{ {
label: 'System Message', label: 'System Message',
name: 'systemMessagePrompt', name: 'systemMessagePrompt',
@@ -80,8 +90,21 @@ class ConversationChain_Chains implements INode {
return chain return chain
} }
async run(nodeData: INodeData, input: string, options: ICommonObject): Promise<string> { async run(nodeData: INodeData, input: string, options: ICommonObject): Promise<string | object> {
const memory = nodeData.inputs?.memory const memory = nodeData.inputs?.memory
const moderations = nodeData.inputs?.inputModeration as Moderation[]
if (moderations && moderations.length > 0) {
try {
// Use the output of the moderation chain as input for the LLM chain
input = await checkInputs(moderations, input)
} catch (e) {
await new Promise((resolve) => setTimeout(resolve, 500))
streamResponse(options.socketIO && options.socketIOClientId, e.message, options.socketIO, options.socketIOClientId)
return formatResponse(e.message)
}
}
const chain = prepareChain(nodeData, this.sessionId, options.chatHistory) const chain = prepareChain(nodeData, this.sessionId, options.chatHistory)
const loggerHandler = new ConsoleCallbackHandler(options.logger) const loggerHandler = new ConsoleCallbackHandler(options.logger)
@@ -19,7 +19,7 @@ class ChatOpenAI_ChatModels implements INode {
constructor() { constructor() {
this.label = 'ChatOpenAI' this.label = 'ChatOpenAI'
this.name = 'chatOpenAI' this.name = 'chatOpenAI'
this.version = 2.0 this.version = 3.0
this.type = 'ChatOpenAI' this.type = 'ChatOpenAI'
this.icon = 'openai.svg' this.icon = 'openai.svg'
this.category = 'Chat Models' this.category = 'Chat Models'
@@ -20,7 +20,7 @@ class Airtable_DocumentLoaders implements INode {
constructor() { constructor() {
this.label = 'Airtable' this.label = 'Airtable'
this.name = 'airtable' this.name = 'airtable'
this.version = 2.0 this.version = 3.0
this.type = 'Document' this.type = 'Document'
this.icon = 'airtable.svg' this.icon = 'airtable.svg'
this.category = 'Document Loaders' this.category = 'Document Loaders'
@@ -64,10 +64,21 @@ class Airtable_DocumentLoaders implements INode {
'If your view URL looks like: https://airtable.com/app11RobdGoX0YNsC/tblJdmvbrgizbYICO/viw9UrP77Id0CE4ee, viw9UrP77Id0CE4ee is the view id', 'If your view URL looks like: https://airtable.com/app11RobdGoX0YNsC/tblJdmvbrgizbYICO/viw9UrP77Id0CE4ee, viw9UrP77Id0CE4ee is the view id',
optional: true optional: true
}, },
{
label: 'Include Only Fields',
name: 'fields',
type: 'string',
placeholder: 'Name, Assignee, fld1u0qUz0SoOQ9Gg, fldew39v6LBN5CjUl',
optional: true,
additionalParams: true,
description:
'Comma-separated list of field names or IDs to include. If empty, then ALL fields are used. Use field IDs if field names contain commas.'
},
{ {
label: 'Return All', label: 'Return All',
name: 'returnAll', name: 'returnAll',
type: 'boolean', type: 'boolean',
optional: true,
default: true, default: true,
additionalParams: true, additionalParams: true,
description: 'If all results should be returned or only up to a given limit' description: 'If all results should be returned or only up to a given limit'
@@ -76,9 +87,10 @@ class Airtable_DocumentLoaders implements INode {
label: 'Limit', label: 'Limit',
name: 'limit', name: 'limit',
type: 'number', type: 'number',
optional: true,
default: 100, default: 100,
additionalParams: true, additionalParams: true,
description: 'Number of results to return' description: 'Number of results to return. Ignored when Return All is enabled.'
}, },
{ {
label: 'Metadata', label: 'Metadata',
@@ -93,6 +105,8 @@ class Airtable_DocumentLoaders implements INode {
const baseId = nodeData.inputs?.baseId as string const baseId = nodeData.inputs?.baseId as string
const tableId = nodeData.inputs?.tableId as string const tableId = nodeData.inputs?.tableId as string
const viewId = nodeData.inputs?.viewId as string const viewId = nodeData.inputs?.viewId as string
const fieldsInput = nodeData.inputs?.fields as string
const fields = fieldsInput ? fieldsInput.split(',').map((field) => field.trim()) : []
const returnAll = nodeData.inputs?.returnAll as boolean const returnAll = nodeData.inputs?.returnAll as boolean
const limit = nodeData.inputs?.limit as string const limit = nodeData.inputs?.limit as string
const textSplitter = nodeData.inputs?.textSplitter as TextSplitter const textSplitter = nodeData.inputs?.textSplitter as TextSplitter
@@ -105,6 +119,7 @@ class Airtable_DocumentLoaders implements INode {
baseId, baseId,
tableId, tableId,
viewId, viewId,
fields,
returnAll, returnAll,
accessToken, accessToken,
limit: limit ? parseInt(limit, 10) : 100 limit: limit ? parseInt(limit, 10) : 100
@@ -112,6 +127,10 @@ class Airtable_DocumentLoaders implements INode {
const loader = new AirtableLoader(airtableOptions) const loader = new AirtableLoader(airtableOptions)
if (!baseId || !tableId) {
throw new Error('Base ID and Table ID must be provided.')
}
let docs = [] let docs = []
if (textSplitter) { if (textSplitter) {
@@ -145,10 +164,18 @@ interface AirtableLoaderParams {
tableId: string tableId: string
accessToken: string accessToken: string
viewId?: string viewId?: string
fields?: string[]
limit?: number limit?: number
returnAll?: boolean returnAll?: boolean
} }
interface AirtableLoaderRequest {
maxRecords?: number
view: string | undefined
fields?: string[]
offset?: string
}
interface AirtableLoaderResponse { interface AirtableLoaderResponse {
records: AirtableLoaderPage[] records: AirtableLoaderPage[]
offset?: string offset?: string
@@ -167,17 +194,20 @@ class AirtableLoader extends BaseDocumentLoader {
public readonly viewId?: string public readonly viewId?: string
public readonly fields: string[]
public readonly accessToken: string public readonly accessToken: string
public readonly limit: number public readonly limit: number
public readonly returnAll: boolean public readonly returnAll: boolean
constructor({ baseId, tableId, viewId, accessToken, limit = 100, returnAll = false }: AirtableLoaderParams) { constructor({ baseId, tableId, viewId, fields = [], accessToken, limit = 100, returnAll = false }: AirtableLoaderParams) {
super() super()
this.baseId = baseId this.baseId = baseId
this.tableId = tableId this.tableId = tableId
this.viewId = viewId this.viewId = viewId
this.fields = fields
this.accessToken = accessToken this.accessToken = accessToken
this.limit = limit this.limit = limit
this.returnAll = returnAll this.returnAll = returnAll
@@ -190,17 +220,21 @@ class AirtableLoader extends BaseDocumentLoader {
return this.loadLimit() return this.loadLimit()
} }
protected async fetchAirtableData(url: string, params: ICommonObject): Promise<AirtableLoaderResponse> { protected async fetchAirtableData(url: string, data: AirtableLoaderRequest): Promise<AirtableLoaderResponse> {
try { try {
const headers = { const headers = {
Authorization: `Bearer ${this.accessToken}`, Authorization: `Bearer ${this.accessToken}`,
'Content-Type': 'application/json', 'Content-Type': 'application/json',
Accept: 'application/json' Accept: 'application/json'
} }
const response = await axios.get(url, { params, headers }) const response = await axios.post(url, data, { headers })
return response.data return response.data
} catch (error) { } catch (error) {
throw new Error(`Failed to fetch ${url} from Airtable: ${error}`) if (axios.isAxiosError(error)) {
throw new Error(`Failed to fetch ${url} from Airtable: ${error.message}, status: ${error.response?.status}`)
} else {
throw new Error(`Failed to fetch ${url} from Airtable: ${error}`)
}
} }
} }
@@ -218,24 +252,53 @@ class AirtableLoader extends BaseDocumentLoader {
} }
private async loadLimit(): Promise<Document[]> { private async loadLimit(): Promise<Document[]> {
const params = { maxRecords: this.limit, view: this.viewId } let data: AirtableLoaderRequest = {
const data = await this.fetchAirtableData(`https://api.airtable.com/v0/${this.baseId}/${this.tableId}`, params) maxRecords: this.limit,
if (data.records.length === 0) { view: this.viewId
return []
} }
return data.records.map((page) => this.createDocumentFromPage(page))
if (this.fields.length > 0) {
data.fields = this.fields
}
let response: AirtableLoaderResponse
let returnPages: AirtableLoaderPage[] = []
// Paginate if the user specifies a limit > 100 (like 200) but not return all.
do {
response = await this.fetchAirtableData(`https://api.airtable.com/v0/${this.baseId}/${this.tableId}/listRecords`, data)
returnPages.push(...response.records)
data.offset = response.offset
// Stop if we have fetched enough records
if (returnPages.length >= this.limit) break
} while (response.offset !== undefined)
// Truncate array to the limit if necessary
if (returnPages.length > this.limit) {
returnPages.length = this.limit
}
return returnPages.map((page) => this.createDocumentFromPage(page))
} }
private async loadAll(): Promise<Document[]> { private async loadAll(): Promise<Document[]> {
const params: ICommonObject = { pageSize: 100, view: this.viewId } let data: AirtableLoaderRequest = {
let data: AirtableLoaderResponse view: this.viewId
}
if (this.fields.length > 0) {
data.fields = this.fields
}
let response: AirtableLoaderResponse
let returnPages: AirtableLoaderPage[] = [] let returnPages: AirtableLoaderPage[] = []
do { do {
data = await this.fetchAirtableData(`https://api.airtable.com/v0/${this.baseId}/${this.tableId}`, params) response = await this.fetchAirtableData(`https://api.airtable.com/v0/${this.baseId}/${this.tableId}/listRecords`, data)
returnPages.push.apply(returnPages, data.records) returnPages.push(...response.records)
params.offset = data.offset data.offset = response.offset
} while (data.offset !== undefined) } while (response.offset !== undefined)
return returnPages.map((page) => this.createDocumentFromPage(page)) return returnPages.map((page) => this.createDocumentFromPage(page))
} }
} }
@@ -34,7 +34,7 @@ class AzureOpenAIEmbedding_Embeddings implements INode {
label: 'Batch Size', label: 'Batch Size',
name: 'batchSize', name: 'batchSize',
type: 'number', type: 'number',
default: '1', default: '100',
optional: true, optional: true,
additionalParams: true additionalParams: true
}, },
@@ -17,7 +17,7 @@ class OpenAIEmbedding_Embeddings implements INode {
constructor() { constructor() {
this.label = 'OpenAI Embeddings' this.label = 'OpenAI Embeddings'
this.name = 'openAIEmbeddings' this.name = 'openAIEmbeddings'
this.version = 1.0 this.version = 2.0
this.type = 'OpenAIEmbeddings' this.type = 'OpenAIEmbeddings'
this.icon = 'openai.svg' this.icon = 'openai.svg'
this.category = 'Embeddings' this.category = 'Embeddings'
@@ -30,6 +30,27 @@ class OpenAIEmbedding_Embeddings implements INode {
credentialNames: ['openAIApi'] credentialNames: ['openAIApi']
} }
this.inputs = [ this.inputs = [
{
label: 'Model Name',
name: 'modelName',
type: 'options',
options: [
{
label: 'text-embedding-3-large',
name: 'text-embedding-3-large'
},
{
label: 'text-embedding-3-small',
name: 'text-embedding-3-small'
},
{
label: 'text-embedding-ada-002',
name: 'text-embedding-ada-002'
}
],
default: 'text-embedding-ada-002',
optional: true
},
{ {
label: 'Strip New Lines', label: 'Strip New Lines',
name: 'stripNewLines', name: 'stripNewLines',
@@ -66,12 +87,14 @@ class OpenAIEmbedding_Embeddings implements INode {
const batchSize = nodeData.inputs?.batchSize as string const batchSize = nodeData.inputs?.batchSize as string
const timeout = nodeData.inputs?.timeout as string const timeout = nodeData.inputs?.timeout as string
const basePath = nodeData.inputs?.basepath as string const basePath = nodeData.inputs?.basepath as string
const modelName = nodeData.inputs?.modelName as string
const credentialData = await getCredentialData(nodeData.credential ?? '', options) const credentialData = await getCredentialData(nodeData.credential ?? '', options)
const openAIApiKey = getCredentialParam('openAIApiKey', credentialData, nodeData) const openAIApiKey = getCredentialParam('openAIApiKey', credentialData, nodeData)
const obj: Partial<OpenAIEmbeddingsParams> & { openAIApiKey?: string } = { const obj: Partial<OpenAIEmbeddingsParams> & { openAIApiKey?: string } = {
openAIApiKey openAIApiKey,
modelName
} }
if (stripNewLines) obj.stripNewLines = stripNewLines if (stripNewLines) obj.stripNewLines = stripNewLines
@@ -5,6 +5,24 @@ import { mapStoredMessageToChatMessage, AIMessage, HumanMessage, BaseMessage } f
import { convertBaseMessagetoIMessage, getBaseClasses, getCredentialData, getCredentialParam } from '../../../src/utils' import { convertBaseMessagetoIMessage, getBaseClasses, getCredentialData, getCredentialParam } from '../../../src/utils'
import { FlowiseMemory, ICommonObject, IMessage, INode, INodeData, INodeParams, MemoryMethods, MessageType } from '../../../src/Interface' import { FlowiseMemory, ICommonObject, IMessage, INode, INodeData, INodeParams, MemoryMethods, MessageType } from '../../../src/Interface'
let mongoClientSingleton: MongoClient
let mongoUrl: string
const getMongoClient = async (newMongoUrl: string) => {
if (!mongoClientSingleton) {
// if client doesn't exists
mongoClientSingleton = new MongoClient(newMongoUrl)
mongoUrl = newMongoUrl
return mongoClientSingleton
} else if (mongoClientSingleton && newMongoUrl !== mongoUrl) {
// if client exists but url changed
mongoClientSingleton.close()
mongoClientSingleton = new MongoClient(newMongoUrl)
mongoUrl = newMongoUrl
return mongoClientSingleton
}
return mongoClientSingleton
}
class MongoDB_Memory implements INode { class MongoDB_Memory implements INode {
label: string label: string
name: string name: string
@@ -79,9 +97,7 @@ const initializeMongoDB = async (nodeData: INodeData, options: ICommonObject): P
const credentialData = await getCredentialData(nodeData.credential ?? '', options) const credentialData = await getCredentialData(nodeData.credential ?? '', options)
const mongoDBConnectUrl = getCredentialParam('mongoDBConnectUrl', credentialData, nodeData) const mongoDBConnectUrl = getCredentialParam('mongoDBConnectUrl', credentialData, nodeData)
const client = new MongoClient(mongoDBConnectUrl) const client = await getMongoClient(mongoDBConnectUrl)
await client.connect()
const collection = client.db(databaseName).collection(collectionName) const collection = client.db(databaseName).collection(collectionName)
const mongoDBChatMessageHistory = new MongoDBChatMessageHistory({ const mongoDBChatMessageHistory = new MongoDBChatMessageHistory({
@@ -1,10 +1,47 @@
import { Redis } from 'ioredis' import { Redis, RedisOptions } from 'ioredis'
import { isEqual } from 'lodash'
import { BufferMemory, BufferMemoryInput } from 'langchain/memory' import { BufferMemory, BufferMemoryInput } from 'langchain/memory'
import { RedisChatMessageHistory, RedisChatMessageHistoryInput } from '@langchain/community/stores/message/ioredis' import { RedisChatMessageHistory, RedisChatMessageHistoryInput } from '@langchain/community/stores/message/ioredis'
import { mapStoredMessageToChatMessage, BaseMessage, AIMessage, HumanMessage } from '@langchain/core/messages' import { mapStoredMessageToChatMessage, BaseMessage, AIMessage, HumanMessage } from '@langchain/core/messages'
import { INode, INodeData, INodeParams, ICommonObject, MessageType, IMessage, MemoryMethods, FlowiseMemory } from '../../../src/Interface' import { INode, INodeData, INodeParams, ICommonObject, MessageType, IMessage, MemoryMethods, FlowiseMemory } from '../../../src/Interface'
import { convertBaseMessagetoIMessage, getBaseClasses, getCredentialData, getCredentialParam } from '../../../src/utils' import { convertBaseMessagetoIMessage, getBaseClasses, getCredentialData, getCredentialParam } from '../../../src/utils'
let redisClientSingleton: Redis
let redisClientOption: RedisOptions
let redisClientUrl: string
const getRedisClientbyOption = (option: RedisOptions) => {
if (!redisClientSingleton) {
// if client doesn't exists
redisClientSingleton = new Redis(option)
redisClientOption = option
return redisClientSingleton
} else if (redisClientSingleton && !isEqual(option, redisClientOption)) {
// if client exists but option changed
redisClientSingleton.quit()
redisClientSingleton = new Redis(option)
redisClientOption = option
return redisClientSingleton
}
return redisClientSingleton
}
const getRedisClientbyUrl = (url: string) => {
if (!redisClientSingleton) {
// if client doesn't exists
redisClientSingleton = new Redis(url)
redisClientUrl = url
return redisClientSingleton
} else if (redisClientSingleton && url !== redisClientUrl) {
// if client exists but option changed
redisClientSingleton.quit()
redisClientSingleton = new Redis(url)
redisClientUrl = url
return redisClientSingleton
}
return redisClientSingleton
}
class RedisBackedChatMemory_Memory implements INode { class RedisBackedChatMemory_Memory implements INode {
label: string label: string
name: string name: string
@@ -95,7 +132,7 @@ const initalizeRedis = async (nodeData: INodeData, options: ICommonObject): Prom
const tlsOptions = sslEnabled === true ? { tls: { rejectUnauthorized: false } } : {} const tlsOptions = sslEnabled === true ? { tls: { rejectUnauthorized: false } } : {}
client = new Redis({ client = getRedisClientbyOption({
port: portStr ? parseInt(portStr) : 6379, port: portStr ? parseInt(portStr) : 6379,
host, host,
username, username,
@@ -103,7 +140,7 @@ const initalizeRedis = async (nodeData: INodeData, options: ICommonObject): Prom
...tlsOptions ...tlsOptions
}) })
} else { } else {
client = new Redis(redisUrl) client = getRedisClientbyUrl(redisUrl)
} }
let obj: RedisChatMessageHistoryInput = { let obj: RedisChatMessageHistoryInput = {
@@ -120,24 +157,6 @@ const initalizeRedis = async (nodeData: INodeData, options: ICommonObject): Prom
const redisChatMessageHistory = new RedisChatMessageHistory(obj) const redisChatMessageHistory = new RedisChatMessageHistory(obj)
/*redisChatMessageHistory.getMessages = async (): Promise<BaseMessage[]> => {
const rawStoredMessages = await client.lrange((redisChatMessageHistory as any).sessionId, windowSize ? -windowSize : 0, -1)
const orderedMessages = rawStoredMessages.reverse().map((message) => JSON.parse(message))
return orderedMessages.map(mapStoredMessageToChatMessage)
}
redisChatMessageHistory.addMessage = async (message: BaseMessage): Promise<void> => {
const messageToAdd = [message].map((msg) => msg.toDict())
await client.lpush((redisChatMessageHistory as any).sessionId, JSON.stringify(messageToAdd[0]))
if (sessionTTL) {
await client.expire((redisChatMessageHistory as any).sessionId, sessionTTL)
}
}
redisChatMessageHistory.clear = async (): Promise<void> => {
await client.del((redisChatMessageHistory as any).sessionId)
}*/
const memory = new BufferMemoryExtended({ const memory = new BufferMemoryExtended({
memoryKey: memoryKey ?? 'chat_history', memoryKey: memoryKey ?? 'chat_history',
chatHistory: redisChatMessageHistory, chatHistory: redisChatMessageHistory,
@@ -28,16 +28,17 @@ class CustomListOutputParser implements INode {
label: 'Length', label: 'Length',
name: 'length', name: 'length',
type: 'number', type: 'number',
default: 5,
step: 1, step: 1,
description: 'Number of values to return' description: 'Number of values to return',
optional: true
}, },
{ {
label: 'Separator', label: 'Separator',
name: 'separator', name: 'separator',
type: 'string', type: 'string',
description: 'Separator between values', description: 'Separator between values',
default: ',' default: ',',
optional: true
}, },
{ {
label: 'Autofix', label: 'Autofix',
@@ -53,10 +54,11 @@ class CustomListOutputParser implements INode {
const separator = nodeData.inputs?.separator as string const separator = nodeData.inputs?.separator as string
const lengthStr = nodeData.inputs?.length as string const lengthStr = nodeData.inputs?.length as string
const autoFix = nodeData.inputs?.autofixParser as boolean const autoFix = nodeData.inputs?.autofixParser as boolean
let length = 5
if (lengthStr) length = parseInt(lengthStr, 10)
const parser = new LangchainCustomListOutputParser({ length: length, separator: separator }) const parser = new LangchainCustomListOutputParser({
length: lengthStr ? parseInt(lengthStr, 10) : undefined,
separator: separator
})
Object.defineProperty(parser, 'autoFix', { Object.defineProperty(parser, 'autoFix', {
enumerable: true, enumerable: true,
configurable: true, configurable: true,
@@ -1,8 +1,11 @@
import { z } from 'zod'
import { DynamicStructuredTool } from '@langchain/core/tools'
import { CallbackManagerForToolRun } from '@langchain/core/callbacks/manager'
import { DynamicTool } from '@langchain/core/tools' import { DynamicTool } from '@langchain/core/tools'
import { BaseRetriever } from '@langchain/core/retrievers' import { BaseRetriever } from '@langchain/core/retrievers'
import { createRetrieverTool } from 'langchain/tools/retriever'
import { INode, INodeData, INodeParams } from '../../../src/Interface' import { INode, INodeData, INodeParams } from '../../../src/Interface'
import { getBaseClasses } from '../../../src/utils' import { getBaseClasses } from '../../../src/utils'
import { SOURCE_DOCUMENTS_PREFIX } from '../../../src/agents'
class Retriever_Tools implements INode { class Retriever_Tools implements INode {
label: string label: string
@@ -19,7 +22,7 @@ class Retriever_Tools implements INode {
constructor() { constructor() {
this.label = 'Retriever Tool' this.label = 'Retriever Tool'
this.name = 'retrieverTool' this.name = 'retrieverTool'
this.version = 1.0 this.version = 2.0
this.type = 'RetrieverTool' this.type = 'RetrieverTool'
this.icon = 'retrievertool.svg' this.icon = 'retrievertool.svg'
this.category = 'Tools' this.category = 'Tools'
@@ -44,6 +47,12 @@ class Retriever_Tools implements INode {
label: 'Retriever', label: 'Retriever',
name: 'retriever', name: 'retriever',
type: 'BaseRetriever' type: 'BaseRetriever'
},
{
label: 'Return Source Documents',
name: 'returnSourceDocuments',
type: 'boolean',
optional: true
} }
] ]
} }
@@ -52,12 +61,25 @@ class Retriever_Tools implements INode {
const name = nodeData.inputs?.name as string const name = nodeData.inputs?.name as string
const description = nodeData.inputs?.description as string const description = nodeData.inputs?.description as string
const retriever = nodeData.inputs?.retriever as BaseRetriever const retriever = nodeData.inputs?.retriever as BaseRetriever
const returnSourceDocuments = nodeData.inputs?.returnSourceDocuments as boolean
const tool = createRetrieverTool(retriever, { const input = {
name, name,
description description
}
const func = async ({ input }: { input: string }, runManager?: CallbackManagerForToolRun) => {
const docs = await retriever.getRelevantDocuments(input, runManager?.getChild('retriever'))
const content = docs.map((doc) => doc.pageContent).join('\n\n')
const sourceDocuments = JSON.stringify(docs)
return returnSourceDocuments ? content + SOURCE_DOCUMENTS_PREFIX + sourceDocuments : content
}
const schema = z.object({
input: z.string().describe('query to look up in retriever')
}) })
const tool = new DynamicStructuredTool({ ...input, func, schema })
return tool return tool
} }
} }
@@ -1,5 +1,5 @@
import { flatten } from 'lodash' import { flatten, isEqual } from 'lodash'
import { createClient, SearchOptions } from 'redis' import { createClient, SearchOptions, RedisClientOptions } from 'redis'
import { Embeddings } from '@langchain/core/embeddings' import { Embeddings } from '@langchain/core/embeddings'
import { RedisVectorStore, RedisVectorStoreConfig } from '@langchain/community/vectorstores/redis' import { RedisVectorStore, RedisVectorStoreConfig } from '@langchain/community/vectorstores/redis'
import { Document } from '@langchain/core/documents' import { Document } from '@langchain/core/documents'
@@ -7,6 +7,27 @@ import { ICommonObject, INode, INodeData, INodeOutputsValue, INodeParams } from
import { getBaseClasses, getCredentialData, getCredentialParam } from '../../../src/utils' import { getBaseClasses, getCredentialData, getCredentialParam } from '../../../src/utils'
import { escapeAllStrings, escapeSpecialChars, unEscapeSpecialChars } from './utils' import { escapeAllStrings, escapeSpecialChars, unEscapeSpecialChars } from './utils'
let redisClientSingleton: ReturnType<typeof createClient>
let redisClientOption: RedisClientOptions
const getRedisClient = async (option: RedisClientOptions) => {
if (!redisClientSingleton) {
// if client doesn't exists
redisClientSingleton = createClient(option)
await redisClientSingleton.connect()
redisClientOption = option
return redisClientSingleton
} else if (redisClientSingleton && !isEqual(option, redisClientOption)) {
// if client exists but option changed
redisClientSingleton.quit()
redisClientSingleton = createClient(option)
await redisClientSingleton.connect()
redisClientOption = option
return redisClientSingleton
}
return redisClientSingleton
}
class Redis_VectorStores implements INode { class Redis_VectorStores implements INode {
label: string label: string
name: string name: string
@@ -149,8 +170,7 @@ class Redis_VectorStores implements INode {
} }
try { try {
const redisClient = createClient({ url: redisUrl }) const redisClient = await getRedisClient({ url: redisUrl })
await redisClient.connect()
const storeConfig: RedisVectorStoreConfig = { const storeConfig: RedisVectorStoreConfig = {
redisClient: redisClient, redisClient: redisClient,
@@ -210,8 +230,7 @@ class Redis_VectorStores implements INode {
redisUrl = 'redis://' + username + ':' + password + '@' + host + ':' + portStr redisUrl = 'redis://' + username + ':' + password + '@' + host + ':' + portStr
} }
const redisClient = createClient({ url: redisUrl }) const redisClient = await getRedisClient({ url: redisUrl })
await redisClient.connect()
const storeConfig: RedisVectorStoreConfig = { const storeConfig: RedisVectorStoreConfig = {
redisClient: redisClient, redisClient: redisClient,
@@ -1,3 +1,10 @@
import { createClient, SearchOptions, RedisClientOptions } from 'redis'
import { isEqual } from 'lodash'
import { Embeddings } from '@langchain/core/embeddings'
import { VectorStore } from '@langchain/core/vectorstores'
import { Document } from '@langchain/core/documents'
import { RedisVectorStore } from '@langchain/community/vectorstores/redis'
import { escapeSpecialChars, unEscapeSpecialChars } from './utils'
import { import {
getBaseClasses, getBaseClasses,
getCredentialData, getCredentialData,
@@ -7,12 +14,27 @@ import {
INodeOutputsValue, INodeOutputsValue,
INodeParams INodeParams
} from '../../../src' } from '../../../src'
import { Embeddings } from '@langchain/core/embeddings'
import { VectorStore } from '@langchain/core/vectorstores' let redisClientSingleton: ReturnType<typeof createClient>
import { Document } from '@langchain/core/documents' let redisClientOption: RedisClientOptions
import { createClient, SearchOptions } from 'redis'
import { RedisVectorStore } from '@langchain/community/vectorstores/redis' const getRedisClient = async (option: RedisClientOptions) => {
import { escapeSpecialChars, unEscapeSpecialChars } from './utils' if (!redisClientSingleton) {
// if client doesn't exists
redisClientSingleton = createClient(option)
await redisClientSingleton.connect()
redisClientOption = option
return redisClientSingleton
} else if (redisClientSingleton && !isEqual(option, redisClientOption)) {
// if client exists but option changed
redisClientSingleton.quit()
redisClientSingleton = createClient(option)
await redisClientSingleton.connect()
redisClientOption = option
return redisClientSingleton
}
return redisClientSingleton
}
export abstract class RedisSearchBase { export abstract class RedisSearchBase {
label: string label: string
@@ -140,8 +162,7 @@ export abstract class RedisSearchBase {
redisUrl = 'redis://' + username + ':' + password + '@' + host + ':' + portStr redisUrl = 'redis://' + username + ':' + password + '@' + host + ':' + portStr
} }
this.redisClient = createClient({ url: redisUrl }) this.redisClient = await getRedisClient({ url: redisUrl })
await this.redisClient.connect()
const vectorStore = await this.constructVectorStore(embeddings, indexName, replaceIndex, docs) const vectorStore = await this.constructVectorStore(embeddings, indexName, replaceIndex, docs)
if (!contentKey || contentKey === '') contentKey = 'content' if (!contentKey || contentKey === '') contentKey = 'content'
+24 -1
View File
@@ -1,5 +1,6 @@
import { flatten } from 'lodash'
import { ChainValues } from '@langchain/core/utils/types' import { ChainValues } from '@langchain/core/utils/types'
import { AgentStep, AgentFinish, AgentAction } from '@langchain/core/agents' import { AgentStep, AgentAction } from '@langchain/core/agents'
import { BaseMessage, FunctionMessage, AIMessage } from '@langchain/core/messages' import { BaseMessage, FunctionMessage, AIMessage } from '@langchain/core/messages'
import { OutputParserException } from '@langchain/core/output_parsers' import { OutputParserException } from '@langchain/core/output_parsers'
import { CallbackManager, CallbackManagerForChainRun, Callbacks } from '@langchain/core/callbacks/manager' import { CallbackManager, CallbackManagerForChainRun, Callbacks } from '@langchain/core/callbacks/manager'
@@ -9,6 +10,11 @@ import { Serializable } from '@langchain/core/load/serializable'
import { BaseChain, SerializedLLMChain } from 'langchain/chains' import { BaseChain, SerializedLLMChain } from 'langchain/chains'
import { AgentExecutorInput, BaseSingleActionAgent, BaseMultiActionAgent, RunnableAgent, StoppingMethod } from 'langchain/agents' import { AgentExecutorInput, BaseSingleActionAgent, BaseMultiActionAgent, RunnableAgent, StoppingMethod } from 'langchain/agents'
export const SOURCE_DOCUMENTS_PREFIX = '\n\n----FLOWISE_SOURCE_DOCUMENTS----\n\n'
type AgentFinish = {
returnValues: Record<string, any>
log: string
}
type AgentExecutorOutput = ChainValues type AgentExecutorOutput = ChainValues
interface AgentExecutorIteratorInput { interface AgentExecutorIteratorInput {
@@ -317,10 +323,12 @@ export class AgentExecutor extends BaseChain<ChainValues, AgentExecutorOutput> {
const steps: AgentStep[] = [] const steps: AgentStep[] = []
let iterations = 0 let iterations = 0
let sourceDocuments: Array<Document> = []
const getOutput = async (finishStep: AgentFinish): Promise<AgentExecutorOutput> => { const getOutput = async (finishStep: AgentFinish): Promise<AgentExecutorOutput> => {
const { returnValues } = finishStep const { returnValues } = finishStep
const additional = await this.agent.prepareForOutput(returnValues, steps) const additional = await this.agent.prepareForOutput(returnValues, steps)
if (sourceDocuments.length) additional.sourceDocuments = flatten(sourceDocuments)
if (this.returnIntermediateSteps) { if (this.returnIntermediateSteps) {
return { ...returnValues, intermediateSteps: steps, ...additional } return { ...returnValues, intermediateSteps: steps, ...additional }
@@ -408,6 +416,17 @@ export class AgentExecutor extends BaseChain<ChainValues, AgentExecutorOutput> {
return { action, observation: observation ?? '' } return { action, observation: observation ?? '' }
} }
} }
if (observation?.includes(SOURCE_DOCUMENTS_PREFIX)) {
const observationArray = observation.split(SOURCE_DOCUMENTS_PREFIX)
observation = observationArray[0]
const docs = observationArray[1]
try {
const parsedDocs = JSON.parse(docs)
sourceDocuments.push(parsedDocs)
} catch (e) {
console.error('Error parsing source documents from tool')
}
}
return { action, observation: observation ?? '' } return { action, observation: observation ?? '' }
}) })
) )
@@ -502,6 +521,10 @@ export class AgentExecutor extends BaseChain<ChainValues, AgentExecutorOutput> {
chatId: this.chatId, chatId: this.chatId,
input: this.input input: this.input
}) })
if (observation?.includes(SOURCE_DOCUMENTS_PREFIX)) {
const observationArray = observation.split(SOURCE_DOCUMENTS_PREFIX)
observation = observationArray[0]
}
} catch (e) { } catch (e) {
if (e instanceof ToolInputParsingException) { if (e instanceof ToolInputParsingException) {
if (this.handleParsingErrors === true) { if (this.handleParsingErrors === true) {
+3
View File
@@ -1,4 +1,6 @@
PORT=3000 PORT=3000
# CORS_ORIGINS="*"
# IFRAME_ORIGINS="*"
# DATABASE_PATH=/your_database_path/.flowise # DATABASE_PATH=/your_database_path/.flowise
# APIKEY_PATH=/your_api_key_path/.flowise # APIKEY_PATH=/your_api_key_path/.flowise
# SECRETKEY_PATH=/your_api_key_path/.flowise # SECRETKEY_PATH=/your_api_key_path/.flowise
@@ -13,6 +15,7 @@ PORT=3000
# DATABASE_USER="" # DATABASE_USER=""
# DATABASE_PASSWORD="" # DATABASE_PASSWORD=""
# DATABASE_SSL=true # DATABASE_SSL=true
# DATABASE_SSL_KEY_BASE64=<Self signed certificate in BASE64>
# FLOWISE_USERNAME=user # FLOWISE_USERNAME=user
# FLOWISE_PASSWORD=1234 # FLOWISE_PASSWORD=1234
@@ -88,7 +88,7 @@
"data": { "data": {
"id": "chatOpenAI_1", "id": "chatOpenAI_1",
"label": "ChatOpenAI", "label": "ChatOpenAI",
"version": 2, "version": 3,
"name": "chatOpenAI", "name": "chatOpenAI",
"type": "ChatOpenAI", "type": "ChatOpenAI",
"baseClasses": ["ChatOpenAI", "BaseChatModel", "BaseLanguageModel"], "baseClasses": ["ChatOpenAI", "BaseChatModel", "BaseLanguageModel"],
@@ -111,6 +111,22 @@
"label": "gpt-4", "label": "gpt-4",
"name": "gpt-4" "name": "gpt-4"
}, },
{
"label": "gpt-4-turbo-preview",
"name": "gpt-4-turbo-preview"
},
{
"label": "gpt-4-0125-preview",
"name": "gpt-4-0125-preview"
},
{
"label": "gpt-4-1106-preview",
"name": "gpt-4-1106-preview"
},
{
"label": "gpt-4-vision-preview",
"name": "gpt-4-vision-preview"
},
{ {
"label": "gpt-4-0613", "label": "gpt-4-0613",
"name": "gpt-4-0613" "name": "gpt-4-0613"
@@ -127,6 +143,10 @@
"label": "gpt-3.5-turbo", "label": "gpt-3.5-turbo",
"name": "gpt-3.5-turbo" "name": "gpt-3.5-turbo"
}, },
{
"label": "gpt-3.5-turbo-1106",
"name": "gpt-3.5-turbo-1106"
},
{ {
"label": "gpt-3.5-turbo-0613", "label": "gpt-3.5-turbo-0613",
"name": "gpt-3.5-turbo-0613" "name": "gpt-3.5-turbo-0613"
@@ -407,7 +427,7 @@
"data": { "data": {
"id": "chatOpenAI_2", "id": "chatOpenAI_2",
"label": "ChatOpenAI", "label": "ChatOpenAI",
"version": 2, "version": 3,
"name": "chatOpenAI", "name": "chatOpenAI",
"type": "ChatOpenAI", "type": "ChatOpenAI",
"baseClasses": ["ChatOpenAI", "BaseChatModel", "BaseLanguageModel"], "baseClasses": ["ChatOpenAI", "BaseChatModel", "BaseLanguageModel"],
@@ -430,6 +450,22 @@
"label": "gpt-4", "label": "gpt-4",
"name": "gpt-4" "name": "gpt-4"
}, },
{
"label": "gpt-4-turbo-preview",
"name": "gpt-4-turbo-preview"
},
{
"label": "gpt-4-0125-preview",
"name": "gpt-4-0125-preview"
},
{
"label": "gpt-4-1106-preview",
"name": "gpt-4-1106-preview"
},
{
"label": "gpt-4-vision-preview",
"name": "gpt-4-vision-preview"
},
{ {
"label": "gpt-4-0613", "label": "gpt-4-0613",
"name": "gpt-4-0613" "name": "gpt-4-0613"
@@ -446,6 +482,10 @@
"label": "gpt-3.5-turbo", "label": "gpt-3.5-turbo",
"name": "gpt-3.5-turbo" "name": "gpt-3.5-turbo"
}, },
{
"label": "gpt-3.5-turbo-1106",
"name": "gpt-3.5-turbo-1106"
},
{ {
"label": "gpt-3.5-turbo-0613", "label": "gpt-3.5-turbo-0613",
"name": "gpt-3.5-turbo-0613" "name": "gpt-3.5-turbo-0613"
@@ -396,7 +396,7 @@
"data": { "data": {
"id": "chatOpenAI_2", "id": "chatOpenAI_2",
"label": "ChatOpenAI", "label": "ChatOpenAI",
"version": 2, "version": 3,
"name": "chatOpenAI", "name": "chatOpenAI",
"type": "ChatOpenAI", "type": "ChatOpenAI",
"baseClasses": ["ChatOpenAI", "BaseChatModel", "BaseLanguageModel"], "baseClasses": ["ChatOpenAI", "BaseChatModel", "BaseLanguageModel"],
@@ -419,6 +419,22 @@
"label": "gpt-4", "label": "gpt-4",
"name": "gpt-4" "name": "gpt-4"
}, },
{
"label": "gpt-4-turbo-preview",
"name": "gpt-4-turbo-preview"
},
{
"label": "gpt-4-0125-preview",
"name": "gpt-4-0125-preview"
},
{
"label": "gpt-4-1106-preview",
"name": "gpt-4-1106-preview"
},
{
"label": "gpt-4-vision-preview",
"name": "gpt-4-vision-preview"
},
{ {
"label": "gpt-4-0613", "label": "gpt-4-0613",
"name": "gpt-4-0613" "name": "gpt-4-0613"
@@ -435,6 +451,10 @@
"label": "gpt-3.5-turbo", "label": "gpt-3.5-turbo",
"name": "gpt-3.5-turbo" "name": "gpt-3.5-turbo"
}, },
{
"label": "gpt-3.5-turbo-1106",
"name": "gpt-3.5-turbo-1106"
},
{ {
"label": "gpt-3.5-turbo-0613", "label": "gpt-3.5-turbo-0613",
"name": "gpt-3.5-turbo-0613" "name": "gpt-3.5-turbo-0613"
@@ -567,7 +587,7 @@
"data": { "data": {
"id": "chatOpenAI_1", "id": "chatOpenAI_1",
"label": "ChatOpenAI", "label": "ChatOpenAI",
"version": 2, "version": 3,
"name": "chatOpenAI", "name": "chatOpenAI",
"type": "ChatOpenAI", "type": "ChatOpenAI",
"baseClasses": ["ChatOpenAI", "BaseChatModel", "BaseLanguageModel"], "baseClasses": ["ChatOpenAI", "BaseChatModel", "BaseLanguageModel"],
@@ -590,6 +610,22 @@
"label": "gpt-4", "label": "gpt-4",
"name": "gpt-4" "name": "gpt-4"
}, },
{
"label": "gpt-4-turbo-preview",
"name": "gpt-4-turbo-preview"
},
{
"label": "gpt-4-0125-preview",
"name": "gpt-4-0125-preview"
},
{
"label": "gpt-4-1106-preview",
"name": "gpt-4-1106-preview"
},
{
"label": "gpt-4-vision-preview",
"name": "gpt-4-vision-preview"
},
{ {
"label": "gpt-4-0613", "label": "gpt-4-0613",
"name": "gpt-4-0613" "name": "gpt-4-0613"
@@ -606,6 +642,10 @@
"label": "gpt-3.5-turbo", "label": "gpt-3.5-turbo",
"name": "gpt-3.5-turbo" "name": "gpt-3.5-turbo"
}, },
{
"label": "gpt-3.5-turbo-1106",
"name": "gpt-3.5-turbo-1106"
},
{ {
"label": "gpt-3.5-turbo-0613", "label": "gpt-3.5-turbo-0613",
"name": "gpt-3.5-turbo-0613" "name": "gpt-3.5-turbo-0613"
@@ -738,7 +778,7 @@
"data": { "data": {
"id": "chatOpenAI_3", "id": "chatOpenAI_3",
"label": "ChatOpenAI", "label": "ChatOpenAI",
"version": 2, "version": 3,
"name": "chatOpenAI", "name": "chatOpenAI",
"type": "ChatOpenAI", "type": "ChatOpenAI",
"baseClasses": ["ChatOpenAI", "BaseChatModel", "BaseLanguageModel"], "baseClasses": ["ChatOpenAI", "BaseChatModel", "BaseLanguageModel"],
@@ -761,6 +801,22 @@
"label": "gpt-4", "label": "gpt-4",
"name": "gpt-4" "name": "gpt-4"
}, },
{
"label": "gpt-4-turbo-preview",
"name": "gpt-4-turbo-preview"
},
{
"label": "gpt-4-0125-preview",
"name": "gpt-4-0125-preview"
},
{
"label": "gpt-4-1106-preview",
"name": "gpt-4-1106-preview"
},
{
"label": "gpt-4-vision-preview",
"name": "gpt-4-vision-preview"
},
{ {
"label": "gpt-4-0613", "label": "gpt-4-0613",
"name": "gpt-4-0613" "name": "gpt-4-0613"
@@ -777,6 +833,10 @@
"label": "gpt-3.5-turbo", "label": "gpt-3.5-turbo",
"name": "gpt-3.5-turbo" "name": "gpt-3.5-turbo"
}, },
{
"label": "gpt-3.5-turbo-1106",
"name": "gpt-3.5-turbo-1106"
},
{ {
"label": "gpt-3.5-turbo-0613", "label": "gpt-3.5-turbo-0613",
"name": "gpt-3.5-turbo-0613" "name": "gpt-3.5-turbo-0613"
@@ -175,7 +175,7 @@
"data": { "data": {
"id": "chatOpenAI_0", "id": "chatOpenAI_0",
"label": "ChatOpenAI", "label": "ChatOpenAI",
"version": 2, "version": 3,
"name": "chatOpenAI", "name": "chatOpenAI",
"type": "ChatOpenAI", "type": "ChatOpenAI",
"baseClasses": ["ChatOpenAI", "BaseChatModel", "BaseLanguageModel"], "baseClasses": ["ChatOpenAI", "BaseChatModel", "BaseLanguageModel"],
@@ -198,6 +198,22 @@
"label": "gpt-4", "label": "gpt-4",
"name": "gpt-4" "name": "gpt-4"
}, },
{
"label": "gpt-4-turbo-preview",
"name": "gpt-4-turbo-preview"
},
{
"label": "gpt-4-0125-preview",
"name": "gpt-4-0125-preview"
},
{
"label": "gpt-4-1106-preview",
"name": "gpt-4-1106-preview"
},
{
"label": "gpt-4-vision-preview",
"name": "gpt-4-vision-preview"
},
{ {
"label": "gpt-4-0613", "label": "gpt-4-0613",
"name": "gpt-4-0613" "name": "gpt-4-0613"
@@ -214,6 +230,10 @@
"label": "gpt-3.5-turbo", "label": "gpt-3.5-turbo",
"name": "gpt-3.5-turbo" "name": "gpt-3.5-turbo"
}, },
{
"label": "gpt-3.5-turbo-1106",
"name": "gpt-3.5-turbo-1106"
},
{ {
"label": "gpt-3.5-turbo-0613", "label": "gpt-3.5-turbo-0613",
"name": "gpt-3.5-turbo-0613" "name": "gpt-3.5-turbo-0613"
@@ -381,13 +401,23 @@
"type": "BaseLLMOutputParser", "type": "BaseLLMOutputParser",
"optional": true, "optional": true,
"id": "llmChain_0-input-outputParser-BaseLLMOutputParser" "id": "llmChain_0-input-outputParser-BaseLLMOutputParser"
},
{
"label": "Input Moderation",
"description": "Detect text that could generate harmful output and prevent it from being sent to the language model",
"name": "inputModeration",
"type": "Moderation",
"optional": true,
"list": true,
"id": "llmChain_0-input-inputModeration-Moderation"
} }
], ],
"inputs": { "inputs": {
"model": "{{chatOpenAI_0.data.instance}}", "model": "{{chatOpenAI_0.data.instance}}",
"prompt": "{{fewShotPromptTemplate_1.data.instance}}", "prompt": "{{fewShotPromptTemplate_1.data.instance}}",
"outputParser": "", "outputParser": "",
"chainName": "" "chainName": "",
"inputModeration": ""
}, },
"outputAnchors": [ "outputAnchors": [
{ {
@@ -251,7 +251,7 @@
"data": { "data": {
"id": "chatOpenAI_0", "id": "chatOpenAI_0",
"label": "ChatOpenAI", "label": "ChatOpenAI",
"version": 2, "version": 3,
"name": "chatOpenAI", "name": "chatOpenAI",
"type": "ChatOpenAI", "type": "ChatOpenAI",
"baseClasses": ["ChatOpenAI", "BaseChatModel", "BaseLanguageModel"], "baseClasses": ["ChatOpenAI", "BaseChatModel", "BaseLanguageModel"],
@@ -274,6 +274,22 @@
"label": "gpt-4", "label": "gpt-4",
"name": "gpt-4" "name": "gpt-4"
}, },
{
"label": "gpt-4-turbo-preview",
"name": "gpt-4-turbo-preview"
},
{
"label": "gpt-4-0125-preview",
"name": "gpt-4-0125-preview"
},
{
"label": "gpt-4-1106-preview",
"name": "gpt-4-1106-preview"
},
{
"label": "gpt-4-vision-preview",
"name": "gpt-4-vision-preview"
},
{ {
"label": "gpt-4-0613", "label": "gpt-4-0613",
"name": "gpt-4-0613" "name": "gpt-4-0613"
@@ -290,6 +306,10 @@
"label": "gpt-3.5-turbo", "label": "gpt-3.5-turbo",
"name": "gpt-3.5-turbo" "name": "gpt-3.5-turbo"
}, },
{
"label": "gpt-3.5-turbo-1106",
"name": "gpt-3.5-turbo-1106"
},
{ {
"label": "gpt-3.5-turbo-0613", "label": "gpt-3.5-turbo-0613",
"name": "gpt-3.5-turbo-0613" "name": "gpt-3.5-turbo-0613"
@@ -422,7 +442,7 @@
"data": { "data": {
"id": "openAIEmbeddings_0", "id": "openAIEmbeddings_0",
"label": "OpenAI Embeddings", "label": "OpenAI Embeddings",
"version": 1, "version": 2,
"name": "openAIEmbeddings", "name": "openAIEmbeddings",
"type": "OpenAIEmbeddings", "type": "OpenAIEmbeddings",
"baseClasses": ["OpenAIEmbeddings", "Embeddings"], "baseClasses": ["OpenAIEmbeddings", "Embeddings"],
@@ -436,6 +456,28 @@
"credentialNames": ["openAIApi"], "credentialNames": ["openAIApi"],
"id": "openAIEmbeddings_0-input-credential-credential" "id": "openAIEmbeddings_0-input-credential-credential"
}, },
{
"label": "Model Name",
"name": "modelName",
"type": "options",
"options": [
{
"label": "text-embedding-3-large",
"name": "text-embedding-3-large"
},
{
"label": "text-embedding-3-small",
"name": "text-embedding-3-small"
},
{
"label": "text-embedding-ada-002",
"name": "text-embedding-ada-002"
}
],
"default": "text-embedding-ada-002",
"optional": true,
"id": "openAIEmbeddings_0-input-modelName-options"
},
{ {
"label": "Strip New Lines", "label": "Strip New Lines",
"name": "stripNewLines", "name": "stripNewLines",
@@ -474,7 +516,8 @@
"stripNewLines": "", "stripNewLines": "",
"batchSize": "", "batchSize": "",
"timeout": "", "timeout": "",
"basepath": "" "basepath": "",
"modelName": "text-embedding-ada-002"
}, },
"outputAnchors": [ "outputAnchors": [
{ {
@@ -506,7 +549,7 @@
"data": { "data": {
"id": "pinecone_0", "id": "pinecone_0",
"label": "Pinecone", "label": "Pinecone",
"version": 1, "version": 2,
"name": "pinecone", "name": "pinecone",
"type": "Pinecone", "type": "Pinecone",
"baseClasses": ["Pinecone", "VectorStoreRetriever", "BaseRetriever"], "baseClasses": ["Pinecone", "VectorStoreRetriever", "BaseRetriever"],
@@ -77,7 +77,7 @@
"data": { "data": {
"id": "openAIEmbeddings_0", "id": "openAIEmbeddings_0",
"label": "OpenAI Embeddings", "label": "OpenAI Embeddings",
"version": 1, "version": 2,
"name": "openAIEmbeddings", "name": "openAIEmbeddings",
"type": "OpenAIEmbeddings", "type": "OpenAIEmbeddings",
"baseClasses": ["OpenAIEmbeddings", "Embeddings"], "baseClasses": ["OpenAIEmbeddings", "Embeddings"],
@@ -91,6 +91,28 @@
"credentialNames": ["openAIApi"], "credentialNames": ["openAIApi"],
"id": "openAIEmbeddings_0-input-credential-credential" "id": "openAIEmbeddings_0-input-credential-credential"
}, },
{
"label": "Model Name",
"name": "modelName",
"type": "options",
"options": [
{
"label": "text-embedding-3-large",
"name": "text-embedding-3-large"
},
{
"label": "text-embedding-3-small",
"name": "text-embedding-3-small"
},
{
"label": "text-embedding-ada-002",
"name": "text-embedding-ada-002"
}
],
"default": "text-embedding-ada-002",
"optional": true,
"id": "openAIEmbeddings_0-input-modelName-options"
},
{ {
"label": "Strip New Lines", "label": "Strip New Lines",
"name": "stripNewLines", "name": "stripNewLines",
@@ -129,7 +151,8 @@
"stripNewLines": "", "stripNewLines": "",
"batchSize": "", "batchSize": "",
"timeout": "", "timeout": "",
"basepath": "" "basepath": "",
"modelName": "text-embedding-ada-002"
}, },
"outputAnchors": [ "outputAnchors": [
{ {
@@ -161,7 +184,7 @@
"data": { "data": {
"id": "pinecone_0", "id": "pinecone_0",
"label": "Pinecone", "label": "Pinecone",
"version": 1, "version": 2,
"name": "pinecone", "name": "pinecone",
"type": "Pinecone", "type": "Pinecone",
"baseClasses": ["Pinecone", "VectorStoreRetriever", "BaseRetriever"], "baseClasses": ["Pinecone", "VectorStoreRetriever", "BaseRetriever"],
@@ -321,7 +344,7 @@
"data": { "data": {
"id": "chatOpenAI_0", "id": "chatOpenAI_0",
"label": "ChatOpenAI", "label": "ChatOpenAI",
"version": 2, "version": 3,
"name": "chatOpenAI", "name": "chatOpenAI",
"type": "ChatOpenAI", "type": "ChatOpenAI",
"baseClasses": ["ChatOpenAI", "BaseChatModel", "BaseLanguageModel", "Runnable"], "baseClasses": ["ChatOpenAI", "BaseChatModel", "BaseLanguageModel", "Runnable"],
@@ -344,6 +367,14 @@
"label": "gpt-4", "label": "gpt-4",
"name": "gpt-4" "name": "gpt-4"
}, },
{
"label": "gpt-4-turbo-preview",
"name": "gpt-4-turbo-preview"
},
{
"label": "gpt-4-0125-preview",
"name": "gpt-4-0125-preview"
},
{ {
"label": "gpt-4-1106-preview", "label": "gpt-4-1106-preview",
"name": "gpt-4-1106-preview" "name": "gpt-4-1106-preview"
@@ -70,7 +70,7 @@
"id": "chatOpenAI_0", "id": "chatOpenAI_0",
"label": "ChatOpenAI", "label": "ChatOpenAI",
"name": "chatOpenAI", "name": "chatOpenAI",
"version": 2, "version": 3,
"type": "ChatOpenAI", "type": "ChatOpenAI",
"baseClasses": ["ChatOpenAI", "BaseChatModel", "BaseLanguageModel"], "baseClasses": ["ChatOpenAI", "BaseChatModel", "BaseLanguageModel"],
"category": "Chat Models", "category": "Chat Models",
@@ -92,6 +92,22 @@
"label": "gpt-4", "label": "gpt-4",
"name": "gpt-4" "name": "gpt-4"
}, },
{
"label": "gpt-4-turbo-preview",
"name": "gpt-4-turbo-preview"
},
{
"label": "gpt-4-0125-preview",
"name": "gpt-4-0125-preview"
},
{
"label": "gpt-4-1106-preview",
"name": "gpt-4-1106-preview"
},
{
"label": "gpt-4-vision-preview",
"name": "gpt-4-vision-preview"
},
{ {
"label": "gpt-4-0613", "label": "gpt-4-0613",
"name": "gpt-4-0613" "name": "gpt-4-0613"
@@ -108,6 +124,10 @@
"label": "gpt-3.5-turbo", "label": "gpt-3.5-turbo",
"name": "gpt-3.5-turbo" "name": "gpt-3.5-turbo"
}, },
{
"label": "gpt-3.5-turbo-1106",
"name": "gpt-3.5-turbo-1106"
},
{ {
"label": "gpt-3.5-turbo-0613", "label": "gpt-3.5-turbo-0613",
"name": "gpt-3.5-turbo-0613" "name": "gpt-3.5-turbo-0613"
@@ -194,7 +194,7 @@
"data": { "data": {
"id": "chatOpenAI_0", "id": "chatOpenAI_0",
"label": "ChatOpenAI", "label": "ChatOpenAI",
"version": 2, "version": 3,
"name": "chatOpenAI", "name": "chatOpenAI",
"type": "ChatOpenAI", "type": "ChatOpenAI",
"baseClasses": ["ChatOpenAI", "BaseChatModel", "BaseLanguageModel", "Runnable"], "baseClasses": ["ChatOpenAI", "BaseChatModel", "BaseLanguageModel", "Runnable"],
@@ -217,6 +217,22 @@
"label": "gpt-4", "label": "gpt-4",
"name": "gpt-4" "name": "gpt-4"
}, },
{
"label": "gpt-4-turbo-preview",
"name": "gpt-4-turbo-preview"
},
{
"label": "gpt-4-0125-preview",
"name": "gpt-4-0125-preview"
},
{
"label": "gpt-4-1106-preview",
"name": "gpt-4-1106-preview"
},
{
"label": "gpt-4-vision-preview",
"name": "gpt-4-vision-preview"
},
{ {
"label": "gpt-4-0613", "label": "gpt-4-0613",
"name": "gpt-4-0613" "name": "gpt-4-0613"
@@ -233,6 +249,10 @@
"label": "gpt-3.5-turbo", "label": "gpt-3.5-turbo",
"name": "gpt-3.5-turbo" "name": "gpt-3.5-turbo"
}, },
{
"label": "gpt-3.5-turbo-1106",
"name": "gpt-3.5-turbo-1106"
},
{ {
"label": "gpt-3.5-turbo-0613", "label": "gpt-3.5-turbo-0613",
"name": "gpt-3.5-turbo-0613" "name": "gpt-3.5-turbo-0613"
@@ -440,7 +460,7 @@
"data": { "data": {
"id": "openAIEmbeddings_0", "id": "openAIEmbeddings_0",
"label": "OpenAI Embeddings", "label": "OpenAI Embeddings",
"version": 1, "version": 2,
"name": "openAIEmbeddings", "name": "openAIEmbeddings",
"type": "OpenAIEmbeddings", "type": "OpenAIEmbeddings",
"baseClasses": ["OpenAIEmbeddings", "Embeddings"], "baseClasses": ["OpenAIEmbeddings", "Embeddings"],
@@ -454,6 +474,28 @@
"credentialNames": ["openAIApi"], "credentialNames": ["openAIApi"],
"id": "openAIEmbeddings_0-input-credential-credential" "id": "openAIEmbeddings_0-input-credential-credential"
}, },
{
"label": "Model Name",
"name": "modelName",
"type": "options",
"options": [
{
"label": "text-embedding-3-large",
"name": "text-embedding-3-large"
},
{
"label": "text-embedding-3-small",
"name": "text-embedding-3-small"
},
{
"label": "text-embedding-ada-002",
"name": "text-embedding-ada-002"
}
],
"default": "text-embedding-ada-002",
"optional": true,
"id": "openAIEmbeddings_0-input-modelName-options"
},
{ {
"label": "Strip New Lines", "label": "Strip New Lines",
"name": "stripNewLines", "name": "stripNewLines",
@@ -492,7 +534,8 @@
"stripNewLines": "", "stripNewLines": "",
"batchSize": "", "batchSize": "",
"timeout": "", "timeout": "",
"basepath": "" "basepath": "",
"modelName": "text-embedding-ada-002"
}, },
"outputAnchors": [ "outputAnchors": [
{ {
@@ -215,7 +215,7 @@
"id": "chatOpenAI_0", "id": "chatOpenAI_0",
"label": "ChatOpenAI", "label": "ChatOpenAI",
"name": "chatOpenAI", "name": "chatOpenAI",
"version": 2, "version": 3,
"type": "ChatOpenAI", "type": "ChatOpenAI",
"baseClasses": ["ChatOpenAI", "BaseChatModel", "BaseLanguageModel"], "baseClasses": ["ChatOpenAI", "BaseChatModel", "BaseLanguageModel"],
"category": "Chat Models", "category": "Chat Models",
@@ -237,6 +237,22 @@
"label": "gpt-4", "label": "gpt-4",
"name": "gpt-4" "name": "gpt-4"
}, },
{
"label": "gpt-4-turbo-preview",
"name": "gpt-4-turbo-preview"
},
{
"label": "gpt-4-0125-preview",
"name": "gpt-4-0125-preview"
},
{
"label": "gpt-4-1106-preview",
"name": "gpt-4-1106-preview"
},
{
"label": "gpt-4-vision-preview",
"name": "gpt-4-vision-preview"
},
{ {
"label": "gpt-4-0613", "label": "gpt-4-0613",
"name": "gpt-4-0613" "name": "gpt-4-0613"
@@ -253,6 +269,10 @@
"label": "gpt-3.5-turbo", "label": "gpt-3.5-turbo",
"name": "gpt-3.5-turbo" "name": "gpt-3.5-turbo"
}, },
{
"label": "gpt-3.5-turbo-1106",
"name": "gpt-3.5-turbo-1106"
},
{ {
"label": "gpt-3.5-turbo-0613", "label": "gpt-3.5-turbo-0613",
"name": "gpt-3.5-turbo-0613" "name": "gpt-3.5-turbo-0613"
@@ -70,7 +70,7 @@
"data": { "data": {
"id": "conversationChain_0", "id": "conversationChain_0",
"label": "Conversation Chain", "label": "Conversation Chain",
"version": 2, "version": 3,
"name": "conversationChain", "name": "conversationChain",
"type": "ConversationChain", "type": "ConversationChain",
"baseClasses": ["ConversationChain", "LLMChain", "BaseChain", "Runnable"], "baseClasses": ["ConversationChain", "LLMChain", "BaseChain", "Runnable"],
@@ -110,9 +110,19 @@
"description": "Override existing prompt with Chat Prompt Template. Human Message must includes {input} variable", "description": "Override existing prompt with Chat Prompt Template. Human Message must includes {input} variable",
"optional": true, "optional": true,
"id": "conversationChain_0-input-chatPromptTemplate-ChatPromptTemplate" "id": "conversationChain_0-input-chatPromptTemplate-ChatPromptTemplate"
},
{
"label": "Input Moderation",
"description": "Detect text that could generate harmful output and prevent it from being sent to the language model",
"name": "inputModeration",
"type": "Moderation",
"optional": true,
"list": true,
"id": "conversationChain_0-input-inputModeration-Moderation"
} }
], ],
"inputs": { "inputs": {
"inputModeration": "",
"model": "{{chatAnthropic_0.data.instance}}", "model": "{{chatAnthropic_0.data.instance}}",
"memory": "{{bufferMemory_0.data.instance}}", "memory": "{{bufferMemory_0.data.instance}}",
"chatPromptTemplate": "{{chatPromptTemplate_0.data.instance}}", "chatPromptTemplate": "{{chatPromptTemplate_0.data.instance}}",
@@ -156,7 +156,7 @@
"data": { "data": {
"id": "chatOpenAI_0", "id": "chatOpenAI_0",
"label": "ChatOpenAI", "label": "ChatOpenAI",
"version": 2, "version": 3,
"name": "chatOpenAI", "name": "chatOpenAI",
"type": "ChatOpenAI", "type": "ChatOpenAI",
"baseClasses": ["ChatOpenAI", "BaseChatModel", "BaseLanguageModel"], "baseClasses": ["ChatOpenAI", "BaseChatModel", "BaseLanguageModel"],
@@ -179,6 +179,22 @@
"label": "gpt-4", "label": "gpt-4",
"name": "gpt-4" "name": "gpt-4"
}, },
{
"label": "gpt-4-turbo-preview",
"name": "gpt-4-turbo-preview"
},
{
"label": "gpt-4-0125-preview",
"name": "gpt-4-0125-preview"
},
{
"label": "gpt-4-1106-preview",
"name": "gpt-4-1106-preview"
},
{
"label": "gpt-4-vision-preview",
"name": "gpt-4-vision-preview"
},
{ {
"label": "gpt-4-0613", "label": "gpt-4-0613",
"name": "gpt-4-0613" "name": "gpt-4-0613"
@@ -195,6 +211,10 @@
"label": "gpt-3.5-turbo", "label": "gpt-3.5-turbo",
"name": "gpt-3.5-turbo" "name": "gpt-3.5-turbo"
}, },
{
"label": "gpt-3.5-turbo-1106",
"name": "gpt-3.5-turbo-1106"
},
{ {
"label": "gpt-3.5-turbo-0613", "label": "gpt-3.5-turbo-0613",
"name": "gpt-3.5-turbo-0613" "name": "gpt-3.5-turbo-0613"
@@ -14,7 +14,7 @@
"data": { "data": {
"id": "openAIEmbeddings_0", "id": "openAIEmbeddings_0",
"label": "OpenAI Embeddings", "label": "OpenAI Embeddings",
"version": 1, "version": 2,
"name": "openAIEmbeddings", "name": "openAIEmbeddings",
"type": "OpenAIEmbeddings", "type": "OpenAIEmbeddings",
"baseClasses": ["OpenAIEmbeddings", "Embeddings"], "baseClasses": ["OpenAIEmbeddings", "Embeddings"],
@@ -28,6 +28,28 @@
"credentialNames": ["openAIApi"], "credentialNames": ["openAIApi"],
"id": "openAIEmbeddings_0-input-credential-credential" "id": "openAIEmbeddings_0-input-credential-credential"
}, },
{
"label": "Model Name",
"name": "modelName",
"type": "options",
"options": [
{
"label": "text-embedding-3-large",
"name": "text-embedding-3-large"
},
{
"label": "text-embedding-3-small",
"name": "text-embedding-3-small"
},
{
"label": "text-embedding-ada-002",
"name": "text-embedding-ada-002"
}
],
"default": "text-embedding-ada-002",
"optional": true,
"id": "openAIEmbeddings_0-input-modelName-options"
},
{ {
"label": "Strip New Lines", "label": "Strip New Lines",
"name": "stripNewLines", "name": "stripNewLines",
@@ -66,7 +88,8 @@
"stripNewLines": "", "stripNewLines": "",
"batchSize": "", "batchSize": "",
"timeout": "", "timeout": "",
"basepath": "" "basepath": "",
"modelName": "text-embedding-ada-002"
}, },
"outputAnchors": [ "outputAnchors": [
{ {
@@ -194,6 +217,13 @@
"rows": 3, "rows": 3,
"placeholder": "Searches and returns documents regarding the state-of-the-union.", "placeholder": "Searches and returns documents regarding the state-of-the-union.",
"id": "retrieverTool_0-input-description-string" "id": "retrieverTool_0-input-description-string"
},
{
"label": "Return Source Documents",
"name": "returnSourceDocuments",
"type": "boolean",
"optional": true,
"id": "retrieverTool_0-input-returnSourceDocuments-boolean"
} }
], ],
"inputAnchors": [ "inputAnchors": [
@@ -207,7 +237,8 @@
"inputs": { "inputs": {
"name": "search_website", "name": "search_website",
"description": "Searches and return documents regarding Jane - a culinary institution that offers top quality coffee, pastries, breakfast, lunch, and a variety of baked goods. They have multiple locations, including Jane on Fillmore, Jane on Larkin, Jane the Bakery, Toy Boat By Jane, and Little Jane on Grant. They emphasize healthy eating with a focus on flavor and quality ingredients. They bake everything in-house and work with local suppliers to source ingredients directly from farmers. They also offer catering services and delivery options.", "description": "Searches and return documents regarding Jane - a culinary institution that offers top quality coffee, pastries, breakfast, lunch, and a variety of baked goods. They have multiple locations, including Jane on Fillmore, Jane on Larkin, Jane the Bakery, Toy Boat By Jane, and Little Jane on Grant. They emphasize healthy eating with a focus on flavor and quality ingredients. They bake everything in-house and work with local suppliers to source ingredients directly from farmers. They also offer catering services and delivery options.",
"retriever": "{{pinecone_0.data.instance}}" "retriever": "{{pinecone_0.data.instance}}",
"returnSourceDocuments": true
}, },
"outputAnchors": [ "outputAnchors": [
{ {
@@ -296,7 +327,7 @@
"data": { "data": {
"id": "pinecone_0", "id": "pinecone_0",
"label": "Pinecone", "label": "Pinecone",
"version": 1, "version": 2,
"name": "pinecone", "name": "pinecone",
"type": "Pinecone", "type": "Pinecone",
"baseClasses": ["Pinecone", "VectorStoreRetriever", "BaseRetriever"], "baseClasses": ["Pinecone", "VectorStoreRetriever", "BaseRetriever"],
@@ -456,7 +487,7 @@
"data": { "data": {
"id": "chatOpenAI_0", "id": "chatOpenAI_0",
"label": "ChatOpenAI", "label": "ChatOpenAI",
"version": 2, "version": 3,
"name": "chatOpenAI", "name": "chatOpenAI",
"type": "ChatOpenAI", "type": "ChatOpenAI",
"baseClasses": ["ChatOpenAI", "BaseChatModel", "BaseLanguageModel", "Runnable"], "baseClasses": ["ChatOpenAI", "BaseChatModel", "BaseLanguageModel", "Runnable"],
@@ -479,6 +510,14 @@
"label": "gpt-4", "label": "gpt-4",
"name": "gpt-4" "name": "gpt-4"
}, },
{
"label": "gpt-4-turbo-preview",
"name": "gpt-4-turbo-preview"
},
{
"label": "gpt-4-0125-preview",
"name": "gpt-4-0125-preview"
},
{ {
"label": "gpt-4-1106-preview", "label": "gpt-4-1106-preview",
"name": "gpt-4-1106-preview" "name": "gpt-4-1106-preview"
@@ -14,7 +14,7 @@
"data": { "data": {
"id": "openAIEmbeddings_0", "id": "openAIEmbeddings_0",
"label": "OpenAI Embeddings", "label": "OpenAI Embeddings",
"version": 1, "version": 2,
"name": "openAIEmbeddings", "name": "openAIEmbeddings",
"type": "OpenAIEmbeddings", "type": "OpenAIEmbeddings",
"baseClasses": ["OpenAIEmbeddings", "Embeddings"], "baseClasses": ["OpenAIEmbeddings", "Embeddings"],
@@ -28,6 +28,28 @@
"credentialNames": ["openAIApi"], "credentialNames": ["openAIApi"],
"id": "openAIEmbeddings_0-input-credential-credential" "id": "openAIEmbeddings_0-input-credential-credential"
}, },
{
"label": "Model Name",
"name": "modelName",
"type": "options",
"options": [
{
"label": "text-embedding-3-large",
"name": "text-embedding-3-large"
},
{
"label": "text-embedding-3-small",
"name": "text-embedding-3-small"
},
{
"label": "text-embedding-ada-002",
"name": "text-embedding-ada-002"
}
],
"default": "text-embedding-ada-002",
"optional": true,
"id": "openAIEmbeddings_0-input-modelName-options"
},
{ {
"label": "Strip New Lines", "label": "Strip New Lines",
"name": "stripNewLines", "name": "stripNewLines",
@@ -66,7 +88,8 @@
"stripNewLines": "", "stripNewLines": "",
"batchSize": "", "batchSize": "",
"timeout": "", "timeout": "",
"basepath": "" "basepath": "",
"modelName": "text-embedding-ada-002"
}, },
"outputAnchors": [ "outputAnchors": [
{ {
@@ -346,7 +369,7 @@
"data": { "data": {
"id": "chatOpenAI_0", "id": "chatOpenAI_0",
"label": "ChatOpenAI", "label": "ChatOpenAI",
"version": 2, "version": 3,
"name": "chatOpenAI", "name": "chatOpenAI",
"type": "ChatOpenAI", "type": "ChatOpenAI",
"baseClasses": ["ChatOpenAI", "BaseChatModel", "BaseLanguageModel", "Runnable"], "baseClasses": ["ChatOpenAI", "BaseChatModel", "BaseLanguageModel", "Runnable"],
@@ -369,6 +392,14 @@
"label": "gpt-4", "label": "gpt-4",
"name": "gpt-4" "name": "gpt-4"
}, },
{
"label": "gpt-4-turbo-preview",
"name": "gpt-4-turbo-preview"
},
{
"label": "gpt-4-0125-preview",
"name": "gpt-4-0125-preview"
},
{ {
"label": "gpt-4-1106-preview", "label": "gpt-4-1106-preview",
"name": "gpt-4-1106-preview" "name": "gpt-4-1106-preview"
@@ -536,7 +567,7 @@
"data": { "data": {
"id": "pinecone_0", "id": "pinecone_0",
"label": "Pinecone", "label": "Pinecone",
"version": 1, "version": 2,
"name": "pinecone", "name": "pinecone",
"type": "Pinecone", "type": "Pinecone",
"baseClasses": ["Pinecone", "VectorStoreRetriever", "BaseRetriever"], "baseClasses": ["Pinecone", "VectorStoreRetriever", "BaseRetriever"],
@@ -376,7 +376,7 @@
"id": "chatOpenAI_0", "id": "chatOpenAI_0",
"label": "ChatOpenAI", "label": "ChatOpenAI",
"name": "chatOpenAI", "name": "chatOpenAI",
"version": 2, "version": 3,
"type": "ChatOpenAI", "type": "ChatOpenAI",
"baseClasses": ["ChatOpenAI", "BaseChatModel", "BaseLanguageModel"], "baseClasses": ["ChatOpenAI", "BaseChatModel", "BaseLanguageModel"],
"category": "Chat Models", "category": "Chat Models",
@@ -398,6 +398,22 @@
"label": "gpt-4", "label": "gpt-4",
"name": "gpt-4" "name": "gpt-4"
}, },
{
"label": "gpt-4-turbo-preview",
"name": "gpt-4-turbo-preview"
},
{
"label": "gpt-4-0125-preview",
"name": "gpt-4-0125-preview"
},
{
"label": "gpt-4-1106-preview",
"name": "gpt-4-1106-preview"
},
{
"label": "gpt-4-vision-preview",
"name": "gpt-4-vision-preview"
},
{ {
"label": "gpt-4-0613", "label": "gpt-4-0613",
"name": "gpt-4-0613" "name": "gpt-4-0613"
@@ -414,6 +430,10 @@
"label": "gpt-3.5-turbo", "label": "gpt-3.5-turbo",
"name": "gpt-3.5-turbo" "name": "gpt-3.5-turbo"
}, },
{
"label": "gpt-3.5-turbo-1106",
"name": "gpt-3.5-turbo-1106"
},
{ {
"label": "gpt-3.5-turbo-0613", "label": "gpt-3.5-turbo-0613",
"name": "gpt-3.5-turbo-0613" "name": "gpt-3.5-turbo-0613"
@@ -547,7 +567,7 @@
"id": "openAIEmbeddings_0", "id": "openAIEmbeddings_0",
"label": "OpenAI Embeddings", "label": "OpenAI Embeddings",
"name": "openAIEmbeddings", "name": "openAIEmbeddings",
"version": 1, "version": 2,
"type": "OpenAIEmbeddings", "type": "OpenAIEmbeddings",
"baseClasses": ["OpenAIEmbeddings", "Embeddings"], "baseClasses": ["OpenAIEmbeddings", "Embeddings"],
"category": "Embeddings", "category": "Embeddings",
@@ -560,6 +580,28 @@
"credentialNames": ["openAIApi"], "credentialNames": ["openAIApi"],
"id": "openAIEmbeddings_0-input-credential-credential" "id": "openAIEmbeddings_0-input-credential-credential"
}, },
{
"label": "Model Name",
"name": "modelName",
"type": "options",
"options": [
{
"label": "text-embedding-3-large",
"name": "text-embedding-3-large"
},
{
"label": "text-embedding-3-small",
"name": "text-embedding-3-small"
},
{
"label": "text-embedding-ada-002",
"name": "text-embedding-ada-002"
}
],
"default": "text-embedding-ada-002",
"optional": true,
"id": "openAIEmbeddings_0-input-modelName-options"
},
{ {
"label": "Strip New Lines", "label": "Strip New Lines",
"name": "stripNewLines", "name": "stripNewLines",
@@ -598,7 +640,8 @@
"stripNewLines": "", "stripNewLines": "",
"batchSize": "", "batchSize": "",
"timeout": "", "timeout": "",
"basepath": "" "basepath": "",
"modelName": "text-embedding-ada-002"
}, },
"outputAnchors": [ "outputAnchors": [
{ {
@@ -234,13 +234,23 @@
"type": "BaseLLMOutputParser", "type": "BaseLLMOutputParser",
"optional": true, "optional": true,
"id": "llmChain_0-input-outputParser-BaseLLMOutputParser" "id": "llmChain_0-input-outputParser-BaseLLMOutputParser"
},
{
"label": "Input Moderation",
"description": "Detect text that could generate harmful output and prevent it from being sent to the language model",
"name": "inputModeration",
"type": "Moderation",
"optional": true,
"list": true,
"id": "llmChain_0-input-inputModeration-Moderation"
} }
], ],
"inputs": { "inputs": {
"model": "{{huggingFaceInference_LLMs_0.data.instance}}", "model": "{{huggingFaceInference_LLMs_0.data.instance}}",
"prompt": "{{promptTemplate_0.data.instance}}", "prompt": "{{promptTemplate_0.data.instance}}",
"outputParser": "", "outputParser": "",
"chainName": "" "chainName": "",
"inputModeration": ""
}, },
"outputAnchors": [ "outputAnchors": [
{ {
@@ -489,13 +489,23 @@
"type": "BaseLLMOutputParser", "type": "BaseLLMOutputParser",
"optional": true, "optional": true,
"id": "llmChain_0-input-outputParser-BaseLLMOutputParser" "id": "llmChain_0-input-outputParser-BaseLLMOutputParser"
},
{
"label": "Input Moderation",
"description": "Detect text that could generate harmful output and prevent it from being sent to the language model",
"name": "inputModeration",
"type": "Moderation",
"optional": true,
"list": true,
"id": "llmChain_0-input-inputModeration-Moderation"
} }
], ],
"inputs": { "inputs": {
"model": "{{openAI_1.data.instance}}", "model": "{{openAI_1.data.instance}}",
"prompt": "{{promptTemplate_0.data.instance}}", "prompt": "{{promptTemplate_0.data.instance}}",
"outputParser": "", "outputParser": "",
"chainName": "FirstChain" "chainName": "FirstChain",
"inputModeration": ""
}, },
"outputAnchors": [ "outputAnchors": [
{ {
@@ -578,13 +588,23 @@
"type": "BaseLLMOutputParser", "type": "BaseLLMOutputParser",
"optional": true, "optional": true,
"id": "llmChain_1-input-outputParser-BaseLLMOutputParser" "id": "llmChain_1-input-outputParser-BaseLLMOutputParser"
},
{
"label": "Input Moderation",
"description": "Detect text that could generate harmful output and prevent it from being sent to the language model",
"name": "inputModeration",
"type": "Moderation",
"optional": true,
"list": true,
"id": "llmChain_1-input-inputModeration-Moderation"
} }
], ],
"inputs": { "inputs": {
"model": "{{openAI_2.data.instance}}", "model": "{{openAI_2.data.instance}}",
"prompt": "{{promptTemplate_1.data.instance}}", "prompt": "{{promptTemplate_1.data.instance}}",
"outputParser": "", "outputParser": "",
"chainName": "LastChain" "chainName": "LastChain",
"inputModeration": ""
}, },
"outputAnchors": [ "outputAnchors": [
{ {
@@ -742,8 +762,8 @@
"model": "{{chatOpenAI_0.data.instance}}", "model": "{{chatOpenAI_0.data.instance}}",
"prompt": "{{promptTemplate_2.data.instance}}", "prompt": "{{promptTemplate_2.data.instance}}",
"outputParser": "", "outputParser": "",
"inputModeration": "", "chainName": "FallbackChain",
"chainName": "FallbackChain" "inputModeration": ""
}, },
"outputAnchors": [ "outputAnchors": [
{ {
@@ -888,7 +908,7 @@
"data": { "data": {
"id": "chatOpenAI_0", "id": "chatOpenAI_0",
"label": "ChatOpenAI", "label": "ChatOpenAI",
"version": 2, "version": 3,
"name": "chatOpenAI", "name": "chatOpenAI",
"type": "ChatOpenAI", "type": "ChatOpenAI",
"baseClasses": ["ChatOpenAI", "BaseChatModel", "BaseLanguageModel", "Runnable"], "baseClasses": ["ChatOpenAI", "BaseChatModel", "BaseLanguageModel", "Runnable"],
@@ -911,6 +931,14 @@
"label": "gpt-4", "label": "gpt-4",
"name": "gpt-4" "name": "gpt-4"
}, },
{
"label": "gpt-4-turbo-preview",
"name": "gpt-4-turbo-preview"
},
{
"label": "gpt-4-0125-preview",
"name": "gpt-4-0125-preview"
},
{ {
"label": "gpt-4-1106-preview", "label": "gpt-4-1106-preview",
"name": "gpt-4-1106-preview" "name": "gpt-4-1106-preview"
@@ -289,13 +289,23 @@
"type": "BaseLLMOutputParser", "type": "BaseLLMOutputParser",
"optional": true, "optional": true,
"id": "llmChain_0-input-outputParser-BaseLLMOutputParser" "id": "llmChain_0-input-outputParser-BaseLLMOutputParser"
},
{
"label": "Input Moderation",
"description": "Detect text that could generate harmful output and prevent it from being sent to the language model",
"name": "inputModeration",
"type": "Moderation",
"optional": true,
"list": true,
"id": "llmChain_0-input-inputModeration-Moderation"
} }
], ],
"inputs": { "inputs": {
"model": "{{replicate_0.data.instance}}", "model": "{{replicate_0.data.instance}}",
"prompt": "{{promptTemplate_0.data.instance}}", "prompt": "{{promptTemplate_0.data.instance}}",
"outputParser": "", "outputParser": "",
"chainName": "" "chainName": "",
"inputModeration": ""
}, },
"outputAnchors": [ "outputAnchors": [
{ {
@@ -378,13 +388,23 @@
"type": "BaseLLMOutputParser", "type": "BaseLLMOutputParser",
"optional": true, "optional": true,
"id": "llmChain_1-input-outputParser-BaseLLMOutputParser" "id": "llmChain_1-input-outputParser-BaseLLMOutputParser"
},
{
"label": "Input Moderation",
"description": "Detect text that could generate harmful output and prevent it from being sent to the language model",
"name": "inputModeration",
"type": "Moderation",
"optional": true,
"list": true,
"id": "llmChain_1-input-inputModeration-Moderation"
} }
], ],
"inputs": { "inputs": {
"model": "{{chatOpenAI_0.data.instance}}", "model": "{{chatOpenAI_0.data.instance}}",
"prompt": "{{promptTemplate_1.data.instance}}", "prompt": "{{promptTemplate_1.data.instance}}",
"outputParser": "", "outputParser": "",
"chainName": "" "chainName": "",
"inputModeration": ""
}, },
"outputAnchors": [ "outputAnchors": [
{ {
@@ -432,7 +452,7 @@
"data": { "data": {
"id": "chatOpenAI_0", "id": "chatOpenAI_0",
"label": "ChatOpenAI", "label": "ChatOpenAI",
"version": 2, "version": 3,
"name": "chatOpenAI", "name": "chatOpenAI",
"type": "ChatOpenAI", "type": "ChatOpenAI",
"baseClasses": ["ChatOpenAI", "BaseChatModel", "BaseLanguageModel", "Runnable"], "baseClasses": ["ChatOpenAI", "BaseChatModel", "BaseLanguageModel", "Runnable"],
@@ -455,6 +475,14 @@
"label": "gpt-4", "label": "gpt-4",
"name": "gpt-4" "name": "gpt-4"
}, },
{
"label": "gpt-4-turbo-preview",
"name": "gpt-4-turbo-preview"
},
{
"label": "gpt-4-0125-preview",
"name": "gpt-4-0125-preview"
},
{ {
"label": "gpt-4-1106-preview", "label": "gpt-4-1106-preview",
"name": "gpt-4-1106-preview" "name": "gpt-4-1106-preview"
@@ -164,7 +164,7 @@
"data": { "data": {
"id": "chatOpenAI_0", "id": "chatOpenAI_0",
"label": "ChatOpenAI", "label": "ChatOpenAI",
"version": 2, "version": 3,
"name": "chatOpenAI", "name": "chatOpenAI",
"type": "ChatOpenAI", "type": "ChatOpenAI",
"baseClasses": ["ChatOpenAI", "BaseChatModel", "BaseLanguageModel", "Runnable"], "baseClasses": ["ChatOpenAI", "BaseChatModel", "BaseLanguageModel", "Runnable"],
@@ -187,6 +187,14 @@
"label": "gpt-4", "label": "gpt-4",
"name": "gpt-4" "name": "gpt-4"
}, },
{
"label": "gpt-4-turbo-preview",
"name": "gpt-4-turbo-preview"
},
{
"label": "gpt-4-0125-preview",
"name": "gpt-4-0125-preview"
},
{ {
"label": "gpt-4-1106-preview", "label": "gpt-4-1106-preview",
"name": "gpt-4-1106-preview" "name": "gpt-4-1106-preview"
@@ -49,13 +49,23 @@
"type": "BaseLLMOutputParser", "type": "BaseLLMOutputParser",
"optional": true, "optional": true,
"id": "llmChain_0-input-outputParser-BaseLLMOutputParser" "id": "llmChain_0-input-outputParser-BaseLLMOutputParser"
},
{
"label": "Input Moderation",
"description": "Detect text that could generate harmful output and prevent it from being sent to the language model",
"name": "inputModeration",
"type": "Moderation",
"optional": true,
"list": true,
"id": "llmChain_0-input-inputModeration-Moderation"
} }
], ],
"inputs": { "inputs": {
"model": "{{chatOpenAI_0.data.instance}}", "model": "{{chatOpenAI_0.data.instance}}",
"prompt": "{{promptTemplate_0.data.instance}}", "prompt": "{{promptTemplate_0.data.instance}}",
"outputParser": "{{csvOutputParser_0.data.instance}}", "outputParser": "{{csvOutputParser_0.data.instance}}",
"chainName": "" "chainName": "",
"inputModeration": ""
}, },
"outputAnchors": [ "outputAnchors": [
{ {
@@ -213,7 +223,7 @@
"data": { "data": {
"id": "chatOpenAI_0", "id": "chatOpenAI_0",
"label": "ChatOpenAI", "label": "ChatOpenAI",
"version": 2, "version": 3,
"name": "chatOpenAI", "name": "chatOpenAI",
"type": "ChatOpenAI", "type": "ChatOpenAI",
"baseClasses": ["ChatOpenAI", "BaseChatModel", "BaseLanguageModel", "Runnable"], "baseClasses": ["ChatOpenAI", "BaseChatModel", "BaseLanguageModel", "Runnable"],
@@ -236,6 +246,22 @@
"label": "gpt-4", "label": "gpt-4",
"name": "gpt-4" "name": "gpt-4"
}, },
{
"label": "gpt-4-turbo-preview",
"name": "gpt-4-turbo-preview"
},
{
"label": "gpt-4-0125-preview",
"name": "gpt-4-0125-preview"
},
{
"label": "gpt-4-1106-preview",
"name": "gpt-4-1106-preview"
},
{
"label": "gpt-4-vision-preview",
"name": "gpt-4-vision-preview"
},
{ {
"label": "gpt-4-0613", "label": "gpt-4-0613",
"name": "gpt-4-0613" "name": "gpt-4-0613"
@@ -252,6 +278,10 @@
"label": "gpt-3.5-turbo", "label": "gpt-3.5-turbo",
"name": "gpt-3.5-turbo" "name": "gpt-3.5-turbo"
}, },
{
"label": "gpt-3.5-turbo-1106",
"name": "gpt-3.5-turbo-1106"
},
{ {
"label": "gpt-3.5-turbo-0613", "label": "gpt-3.5-turbo-0613",
"name": "gpt-3.5-turbo-0613" "name": "gpt-3.5-turbo-0613"
@@ -112,7 +112,7 @@
"data": { "data": {
"id": "openAIEmbeddings_0", "id": "openAIEmbeddings_0",
"label": "OpenAI Embeddings", "label": "OpenAI Embeddings",
"version": 1, "version": 2,
"name": "openAIEmbeddings", "name": "openAIEmbeddings",
"type": "OpenAIEmbeddings", "type": "OpenAIEmbeddings",
"baseClasses": ["OpenAIEmbeddings", "Embeddings"], "baseClasses": ["OpenAIEmbeddings", "Embeddings"],
@@ -126,6 +126,28 @@
"credentialNames": ["openAIApi"], "credentialNames": ["openAIApi"],
"id": "openAIEmbeddings_0-input-credential-credential" "id": "openAIEmbeddings_0-input-credential-credential"
}, },
{
"label": "Model Name",
"name": "modelName",
"type": "options",
"options": [
{
"label": "text-embedding-3-large",
"name": "text-embedding-3-large"
},
{
"label": "text-embedding-3-small",
"name": "text-embedding-3-small"
},
{
"label": "text-embedding-ada-002",
"name": "text-embedding-ada-002"
}
],
"default": "text-embedding-ada-002",
"optional": true,
"id": "openAIEmbeddings_0-input-modelName-options"
},
{ {
"label": "Strip New Lines", "label": "Strip New Lines",
"name": "stripNewLines", "name": "stripNewLines",
@@ -164,7 +186,8 @@
"stripNewLines": "", "stripNewLines": "",
"batchSize": "", "batchSize": "",
"timeout": "", "timeout": "",
"basepath": "" "basepath": "",
"modelName": "text-embedding-ada-002"
}, },
"outputAnchors": [ "outputAnchors": [
{ {
@@ -483,7 +506,7 @@
"data": { "data": {
"id": "chatOpenAI_0", "id": "chatOpenAI_0",
"label": "ChatOpenAI", "label": "ChatOpenAI",
"version": 2, "version": 3,
"name": "chatOpenAI", "name": "chatOpenAI",
"type": "ChatOpenAI", "type": "ChatOpenAI",
"baseClasses": ["ChatOpenAI", "BaseChatModel", "BaseLanguageModel", "Runnable"], "baseClasses": ["ChatOpenAI", "BaseChatModel", "BaseLanguageModel", "Runnable"],
@@ -506,6 +529,14 @@
"label": "gpt-4", "label": "gpt-4",
"name": "gpt-4" "name": "gpt-4"
}, },
{
"label": "gpt-4-turbo-preview",
"name": "gpt-4-turbo-preview"
},
{
"label": "gpt-4-0125-preview",
"name": "gpt-4-0125-preview"
},
{ {
"label": "gpt-4-1106-preview", "label": "gpt-4-1106-preview",
"name": "gpt-4-1106-preview" "name": "gpt-4-1106-preview"
@@ -346,7 +346,7 @@
"data": { "data": {
"id": "openAIEmbeddings_0", "id": "openAIEmbeddings_0",
"label": "OpenAI Embeddings", "label": "OpenAI Embeddings",
"version": 1, "version": 2,
"name": "openAIEmbeddings", "name": "openAIEmbeddings",
"type": "OpenAIEmbeddings", "type": "OpenAIEmbeddings",
"baseClasses": ["OpenAIEmbeddings", "Embeddings"], "baseClasses": ["OpenAIEmbeddings", "Embeddings"],
@@ -360,6 +360,28 @@
"credentialNames": ["openAIApi"], "credentialNames": ["openAIApi"],
"id": "openAIEmbeddings_0-input-credential-credential" "id": "openAIEmbeddings_0-input-credential-credential"
}, },
{
"label": "Model Name",
"name": "modelName",
"type": "options",
"options": [
{
"label": "text-embedding-3-large",
"name": "text-embedding-3-large"
},
{
"label": "text-embedding-3-small",
"name": "text-embedding-3-small"
},
{
"label": "text-embedding-ada-002",
"name": "text-embedding-ada-002"
}
],
"default": "text-embedding-ada-002",
"optional": true,
"id": "openAIEmbeddings_0-input-modelName-options"
},
{ {
"label": "Strip New Lines", "label": "Strip New Lines",
"name": "stripNewLines", "name": "stripNewLines",
@@ -398,7 +420,8 @@
"stripNewLines": "", "stripNewLines": "",
"batchSize": "", "batchSize": "",
"timeout": "", "timeout": "",
"basepath": "" "basepath": "",
"modelName": "text-embedding-ada-002"
}, },
"outputAnchors": [ "outputAnchors": [
{ {
@@ -430,7 +453,7 @@
"data": { "data": {
"id": "chatOpenAI_0", "id": "chatOpenAI_0",
"label": "ChatOpenAI", "label": "ChatOpenAI",
"version": 2, "version": 3,
"name": "chatOpenAI", "name": "chatOpenAI",
"type": "ChatOpenAI", "type": "ChatOpenAI",
"baseClasses": ["ChatOpenAI", "BaseChatModel", "BaseLanguageModel", "Runnable"], "baseClasses": ["ChatOpenAI", "BaseChatModel", "BaseLanguageModel", "Runnable"],
@@ -453,6 +476,14 @@
"label": "gpt-4", "label": "gpt-4",
"name": "gpt-4" "name": "gpt-4"
}, },
{
"label": "gpt-4-turbo-preview",
"name": "gpt-4-turbo-preview"
},
{
"label": "gpt-4-0125-preview",
"name": "gpt-4-0125-preview"
},
{ {
"label": "gpt-4-1106-preview", "label": "gpt-4-1106-preview",
"name": "gpt-4-1106-preview" "name": "gpt-4-1106-preview"
@@ -620,7 +651,7 @@
"data": { "data": {
"id": "pinecone_0", "id": "pinecone_0",
"label": "Pinecone", "label": "Pinecone",
"version": 1, "version": 2,
"name": "pinecone", "name": "pinecone",
"type": "Pinecone", "type": "Pinecone",
"baseClasses": ["Pinecone", "VectorStoreRetriever", "BaseRetriever"], "baseClasses": ["Pinecone", "VectorStoreRetriever", "BaseRetriever"],
@@ -278,7 +278,7 @@
"id": "chatOpenAI_0", "id": "chatOpenAI_0",
"label": "ChatOpenAI", "label": "ChatOpenAI",
"name": "chatOpenAI", "name": "chatOpenAI",
"version": 2, "version": 3,
"type": "ChatOpenAI", "type": "ChatOpenAI",
"baseClasses": ["ChatOpenAI", "BaseChatModel", "BaseLanguageModel"], "baseClasses": ["ChatOpenAI", "BaseChatModel", "BaseLanguageModel"],
"category": "Chat Models", "category": "Chat Models",
@@ -300,6 +300,22 @@
"label": "gpt-4", "label": "gpt-4",
"name": "gpt-4" "name": "gpt-4"
}, },
{
"label": "gpt-4-turbo-preview",
"name": "gpt-4-turbo-preview"
},
{
"label": "gpt-4-0125-preview",
"name": "gpt-4-0125-preview"
},
{
"label": "gpt-4-1106-preview",
"name": "gpt-4-1106-preview"
},
{
"label": "gpt-4-vision-preview",
"name": "gpt-4-vision-preview"
},
{ {
"label": "gpt-4-0613", "label": "gpt-4-0613",
"name": "gpt-4-0613" "name": "gpt-4-0613"
@@ -316,6 +332,10 @@
"label": "gpt-3.5-turbo", "label": "gpt-3.5-turbo",
"name": "gpt-3.5-turbo" "name": "gpt-3.5-turbo"
}, },
{
"label": "gpt-3.5-turbo-1106",
"name": "gpt-3.5-turbo-1106"
},
{ {
"label": "gpt-3.5-turbo-0613", "label": "gpt-3.5-turbo-0613",
"name": "gpt-3.5-turbo-0613" "name": "gpt-3.5-turbo-0613"
@@ -281,7 +281,7 @@
"data": { "data": {
"id": "openAIEmbeddings_0", "id": "openAIEmbeddings_0",
"label": "OpenAI Embeddings", "label": "OpenAI Embeddings",
"version": 1, "version": 2,
"name": "openAIEmbeddings", "name": "openAIEmbeddings",
"type": "OpenAIEmbeddings", "type": "OpenAIEmbeddings",
"baseClasses": ["OpenAIEmbeddings", "Embeddings"], "baseClasses": ["OpenAIEmbeddings", "Embeddings"],
@@ -295,6 +295,28 @@
"credentialNames": ["openAIApi"], "credentialNames": ["openAIApi"],
"id": "openAIEmbeddings_0-input-credential-credential" "id": "openAIEmbeddings_0-input-credential-credential"
}, },
{
"label": "Model Name",
"name": "modelName",
"type": "options",
"options": [
{
"label": "text-embedding-3-large",
"name": "text-embedding-3-large"
},
{
"label": "text-embedding-3-small",
"name": "text-embedding-3-small"
},
{
"label": "text-embedding-ada-002",
"name": "text-embedding-ada-002"
}
],
"default": "text-embedding-ada-002",
"optional": true,
"id": "openAIEmbeddings_0-input-modelName-options"
},
{ {
"label": "Strip New Lines", "label": "Strip New Lines",
"name": "stripNewLines", "name": "stripNewLines",
@@ -333,7 +355,8 @@
"stripNewLines": "", "stripNewLines": "",
"batchSize": "", "batchSize": "",
"timeout": "", "timeout": "",
"basepath": "" "basepath": "",
"modelName": "text-embedding-ada-002"
}, },
"outputAnchors": [ "outputAnchors": [
{ {
@@ -365,7 +388,7 @@
"data": { "data": {
"id": "chatOpenAI_0", "id": "chatOpenAI_0",
"label": "ChatOpenAI", "label": "ChatOpenAI",
"version": 2, "version": 3,
"name": "chatOpenAI", "name": "chatOpenAI",
"type": "ChatOpenAI", "type": "ChatOpenAI",
"baseClasses": ["ChatOpenAI", "BaseChatModel", "BaseLanguageModel", "Runnable"], "baseClasses": ["ChatOpenAI", "BaseChatModel", "BaseLanguageModel", "Runnable"],
@@ -388,6 +411,14 @@
"label": "gpt-4", "label": "gpt-4",
"name": "gpt-4" "name": "gpt-4"
}, },
{
"label": "gpt-4-turbo-preview",
"name": "gpt-4-turbo-preview"
},
{
"label": "gpt-4-0125-preview",
"name": "gpt-4-0125-preview"
},
{ {
"label": "gpt-4-1106-preview", "label": "gpt-4-1106-preview",
"name": "gpt-4-1106-preview" "name": "gpt-4-1106-preview"
@@ -555,7 +586,7 @@
"data": { "data": {
"id": "pinecone_0", "id": "pinecone_0",
"label": "Pinecone", "label": "Pinecone",
"version": 1, "version": 2,
"name": "pinecone", "name": "pinecone",
"type": "Pinecone", "type": "Pinecone",
"baseClasses": ["Pinecone", "VectorStoreRetriever", "BaseRetriever"], "baseClasses": ["Pinecone", "VectorStoreRetriever", "BaseRetriever"],
@@ -271,7 +271,7 @@
"data": { "data": {
"id": "openAIEmbeddings_1", "id": "openAIEmbeddings_1",
"label": "OpenAI Embeddings", "label": "OpenAI Embeddings",
"version": 1, "version": 2,
"name": "openAIEmbeddings", "name": "openAIEmbeddings",
"type": "OpenAIEmbeddings", "type": "OpenAIEmbeddings",
"baseClasses": ["OpenAIEmbeddings", "Embeddings"], "baseClasses": ["OpenAIEmbeddings", "Embeddings"],
@@ -285,6 +285,28 @@
"credentialNames": ["openAIApi"], "credentialNames": ["openAIApi"],
"id": "openAIEmbeddings_1-input-credential-credential" "id": "openAIEmbeddings_1-input-credential-credential"
}, },
{
"label": "Model Name",
"name": "modelName",
"type": "options",
"options": [
{
"label": "text-embedding-3-large",
"name": "text-embedding-3-large"
},
{
"label": "text-embedding-3-small",
"name": "text-embedding-3-small"
},
{
"label": "text-embedding-ada-002",
"name": "text-embedding-ada-002"
}
],
"default": "text-embedding-ada-002",
"optional": true,
"id": "openAIEmbeddings_1-input-modelName-options"
},
{ {
"label": "Strip New Lines", "label": "Strip New Lines",
"name": "stripNewLines", "name": "stripNewLines",
@@ -323,7 +345,8 @@
"stripNewLines": "", "stripNewLines": "",
"batchSize": "", "batchSize": "",
"timeout": "", "timeout": "",
"basepath": "" "basepath": "",
"modelName": "text-embedding-ada-002"
}, },
"outputAnchors": [ "outputAnchors": [
{ {
@@ -355,7 +378,7 @@
"data": { "data": {
"id": "openAIEmbeddings_2", "id": "openAIEmbeddings_2",
"label": "OpenAI Embeddings", "label": "OpenAI Embeddings",
"version": 1, "version": 2,
"name": "openAIEmbeddings", "name": "openAIEmbeddings",
"type": "OpenAIEmbeddings", "type": "OpenAIEmbeddings",
"baseClasses": ["OpenAIEmbeddings", "Embeddings"], "baseClasses": ["OpenAIEmbeddings", "Embeddings"],
@@ -369,6 +392,28 @@
"credentialNames": ["openAIApi"], "credentialNames": ["openAIApi"],
"id": "openAIEmbeddings_2-input-credential-credential" "id": "openAIEmbeddings_2-input-credential-credential"
}, },
{
"label": "Model Name",
"name": "modelName",
"type": "options",
"options": [
{
"label": "text-embedding-3-large",
"name": "text-embedding-3-large"
},
{
"label": "text-embedding-3-small",
"name": "text-embedding-3-small"
},
{
"label": "text-embedding-ada-002",
"name": "text-embedding-ada-002"
}
],
"default": "text-embedding-ada-002",
"optional": true,
"id": "openAIEmbeddings_2-input-modelName-options"
},
{ {
"label": "Strip New Lines", "label": "Strip New Lines",
"name": "stripNewLines", "name": "stripNewLines",
@@ -407,7 +452,8 @@
"stripNewLines": "", "stripNewLines": "",
"batchSize": "", "batchSize": "",
"timeout": "", "timeout": "",
"basepath": "" "basepath": "",
"modelName": "text-embedding-ada-002"
}, },
"outputAnchors": [ "outputAnchors": [
{ {
@@ -439,7 +485,7 @@
"data": { "data": {
"id": "chatOpenAI_0", "id": "chatOpenAI_0",
"label": "ChatOpenAI", "label": "ChatOpenAI",
"version": 2, "version": 3,
"name": "chatOpenAI", "name": "chatOpenAI",
"type": "ChatOpenAI", "type": "ChatOpenAI",
"baseClasses": ["ChatOpenAI", "BaseChatModel", "BaseLanguageModel", "Runnable"], "baseClasses": ["ChatOpenAI", "BaseChatModel", "BaseLanguageModel", "Runnable"],
@@ -462,6 +508,14 @@
"label": "gpt-4", "label": "gpt-4",
"name": "gpt-4" "name": "gpt-4"
}, },
{
"label": "gpt-4-turbo-preview",
"name": "gpt-4-turbo-preview"
},
{
"label": "gpt-4-0125-preview",
"name": "gpt-4-0125-preview"
},
{ {
"label": "gpt-4-1106-preview", "label": "gpt-4-1106-preview",
"name": "gpt-4-1106-preview" "name": "gpt-4-1106-preview"
@@ -949,7 +1003,7 @@
"data": { "data": {
"id": "chatOpenAI_1", "id": "chatOpenAI_1",
"label": "ChatOpenAI", "label": "ChatOpenAI",
"version": 2, "version": 3,
"name": "chatOpenAI", "name": "chatOpenAI",
"type": "ChatOpenAI", "type": "ChatOpenAI",
"baseClasses": ["ChatOpenAI", "BaseChatModel", "BaseLanguageModel", "Runnable"], "baseClasses": ["ChatOpenAI", "BaseChatModel", "BaseLanguageModel", "Runnable"],
@@ -972,6 +1026,14 @@
"label": "gpt-4", "label": "gpt-4",
"name": "gpt-4" "name": "gpt-4"
}, },
{
"label": "gpt-4-turbo-preview",
"name": "gpt-4-turbo-preview"
},
{
"label": "gpt-4-0125-preview",
"name": "gpt-4-0125-preview"
},
{ {
"label": "gpt-4-1106-preview", "label": "gpt-4-1106-preview",
"name": "gpt-4-1106-preview" "name": "gpt-4-1106-preview"
@@ -1139,7 +1201,7 @@
"data": { "data": {
"id": "chatOpenAI_2", "id": "chatOpenAI_2",
"label": "ChatOpenAI", "label": "ChatOpenAI",
"version": 2, "version": 3,
"name": "chatOpenAI", "name": "chatOpenAI",
"type": "ChatOpenAI", "type": "ChatOpenAI",
"baseClasses": ["ChatOpenAI", "BaseChatModel", "BaseLanguageModel", "Runnable"], "baseClasses": ["ChatOpenAI", "BaseChatModel", "BaseLanguageModel", "Runnable"],
@@ -1162,6 +1224,14 @@
"label": "gpt-4", "label": "gpt-4",
"name": "gpt-4" "name": "gpt-4"
}, },
{
"label": "gpt-4-turbo-preview",
"name": "gpt-4-turbo-preview"
},
{
"label": "gpt-4-0125-preview",
"name": "gpt-4-0125-preview"
},
{ {
"label": "gpt-4-1106-preview", "label": "gpt-4-1106-preview",
"name": "gpt-4-1106-preview" "name": "gpt-4-1106-preview"
@@ -279,7 +279,7 @@
"data": { "data": {
"id": "chatOpenAI_0", "id": "chatOpenAI_0",
"label": "ChatOpenAI", "label": "ChatOpenAI",
"version": 2, "version": 3,
"name": "chatOpenAI", "name": "chatOpenAI",
"type": "ChatOpenAI", "type": "ChatOpenAI",
"baseClasses": ["ChatOpenAI", "BaseChatModel", "BaseLanguageModel"], "baseClasses": ["ChatOpenAI", "BaseChatModel", "BaseLanguageModel"],
@@ -302,6 +302,22 @@
"label": "gpt-4", "label": "gpt-4",
"name": "gpt-4" "name": "gpt-4"
}, },
{
"label": "gpt-4-turbo-preview",
"name": "gpt-4-turbo-preview"
},
{
"label": "gpt-4-0125-preview",
"name": "gpt-4-0125-preview"
},
{
"label": "gpt-4-1106-preview",
"name": "gpt-4-1106-preview"
},
{
"label": "gpt-4-vision-preview",
"name": "gpt-4-vision-preview"
},
{ {
"label": "gpt-4-0613", "label": "gpt-4-0613",
"name": "gpt-4-0613" "name": "gpt-4-0613"
@@ -318,6 +334,10 @@
"label": "gpt-3.5-turbo", "label": "gpt-3.5-turbo",
"name": "gpt-3.5-turbo" "name": "gpt-3.5-turbo"
}, },
{
"label": "gpt-3.5-turbo-1106",
"name": "gpt-3.5-turbo-1106"
},
{ {
"label": "gpt-3.5-turbo-0613", "label": "gpt-3.5-turbo-0613",
"name": "gpt-3.5-turbo-0613" "name": "gpt-3.5-turbo-0613"
@@ -264,13 +264,23 @@
"type": "BaseLLMOutputParser", "type": "BaseLLMOutputParser",
"optional": true, "optional": true,
"id": "llmChain_2-input-outputParser-BaseLLMOutputParser" "id": "llmChain_2-input-outputParser-BaseLLMOutputParser"
},
{
"label": "Input Moderation",
"description": "Detect text that could generate harmful output and prevent it from being sent to the language model",
"name": "inputModeration",
"type": "Moderation",
"optional": true,
"list": true,
"id": "llmChain_2-input-inputModeration-Moderation"
} }
], ],
"inputs": { "inputs": {
"model": "{{chatOpenAI_0.data.instance}}", "model": "{{chatOpenAI_0.data.instance}}",
"prompt": "{{promptTemplate_0.data.instance}}", "prompt": "{{promptTemplate_0.data.instance}}",
"outputParser": "", "outputParser": "",
"chainName": "RephraseQuestion" "chainName": "RephraseQuestion",
"inputModeration": ""
}, },
"outputAnchors": [ "outputAnchors": [
{ {
@@ -353,13 +363,23 @@
"type": "BaseLLMOutputParser", "type": "BaseLLMOutputParser",
"optional": true, "optional": true,
"id": "llmChain_1-input-outputParser-BaseLLMOutputParser" "id": "llmChain_1-input-outputParser-BaseLLMOutputParser"
},
{
"label": "Input Moderation",
"description": "Detect text that could generate harmful output and prevent it from being sent to the language model",
"name": "inputModeration",
"type": "Moderation",
"optional": true,
"list": true,
"id": "llmChain_1-input-inputModeration-Moderation"
} }
], ],
"inputs": { "inputs": {
"model": "{{chatOpenAI_1.data.instance}}", "model": "{{chatOpenAI_1.data.instance}}",
"prompt": "{{chatPromptTemplate_0.data.instance}}", "prompt": "{{chatPromptTemplate_0.data.instance}}",
"outputParser": "", "outputParser": "",
"chainName": "FinalResponse" "chainName": "FinalResponse",
"inputModeration": ""
}, },
"outputAnchors": [ "outputAnchors": [
{ {
@@ -407,7 +427,7 @@
"data": { "data": {
"id": "chatOpenAI_0", "id": "chatOpenAI_0",
"label": "ChatOpenAI", "label": "ChatOpenAI",
"version": 2, "version": 3,
"name": "chatOpenAI", "name": "chatOpenAI",
"type": "ChatOpenAI", "type": "ChatOpenAI",
"baseClasses": ["ChatOpenAI", "BaseChatModel", "BaseLanguageModel", "Runnable"], "baseClasses": ["ChatOpenAI", "BaseChatModel", "BaseLanguageModel", "Runnable"],
@@ -430,6 +450,14 @@
"label": "gpt-4", "label": "gpt-4",
"name": "gpt-4" "name": "gpt-4"
}, },
{
"label": "gpt-4-turbo-preview",
"name": "gpt-4-turbo-preview"
},
{
"label": "gpt-4-0125-preview",
"name": "gpt-4-0125-preview"
},
{ {
"label": "gpt-4-1106-preview", "label": "gpt-4-1106-preview",
"name": "gpt-4-1106-preview" "name": "gpt-4-1106-preview"
@@ -597,7 +625,7 @@
"data": { "data": {
"id": "chatOpenAI_1", "id": "chatOpenAI_1",
"label": "ChatOpenAI", "label": "ChatOpenAI",
"version": 2, "version": 3,
"name": "chatOpenAI", "name": "chatOpenAI",
"type": "ChatOpenAI", "type": "ChatOpenAI",
"baseClasses": ["ChatOpenAI", "BaseChatModel", "BaseLanguageModel", "Runnable"], "baseClasses": ["ChatOpenAI", "BaseChatModel", "BaseLanguageModel", "Runnable"],
@@ -620,6 +648,14 @@
"label": "gpt-4", "label": "gpt-4",
"name": "gpt-4" "name": "gpt-4"
}, },
{
"label": "gpt-4-turbo-preview",
"name": "gpt-4-turbo-preview"
},
{
"label": "gpt-4-0125-preview",
"name": "gpt-4-0125-preview"
},
{ {
"label": "gpt-4-1106-preview", "label": "gpt-4-1106-preview",
"name": "gpt-4-1106-preview" "name": "gpt-4-1106-preview"
@@ -934,7 +970,7 @@
"data": { "data": {
"id": "openAIEmbeddings_0", "id": "openAIEmbeddings_0",
"label": "OpenAI Embeddings", "label": "OpenAI Embeddings",
"version": 1, "version": 2,
"name": "openAIEmbeddings", "name": "openAIEmbeddings",
"type": "OpenAIEmbeddings", "type": "OpenAIEmbeddings",
"baseClasses": ["OpenAIEmbeddings", "Embeddings"], "baseClasses": ["OpenAIEmbeddings", "Embeddings"],
@@ -948,6 +984,28 @@
"credentialNames": ["openAIApi"], "credentialNames": ["openAIApi"],
"id": "openAIEmbeddings_0-input-credential-credential" "id": "openAIEmbeddings_0-input-credential-credential"
}, },
{
"label": "Model Name",
"name": "modelName",
"type": "options",
"options": [
{
"label": "text-embedding-3-large",
"name": "text-embedding-3-large"
},
{
"label": "text-embedding-3-small",
"name": "text-embedding-3-small"
},
{
"label": "text-embedding-ada-002",
"name": "text-embedding-ada-002"
}
],
"default": "text-embedding-ada-002",
"optional": true,
"id": "openAIEmbeddings_0-input-modelName-options"
},
{ {
"label": "Strip New Lines", "label": "Strip New Lines",
"name": "stripNewLines", "name": "stripNewLines",
@@ -986,7 +1044,8 @@
"stripNewLines": "", "stripNewLines": "",
"batchSize": "", "batchSize": "",
"timeout": "", "timeout": "",
"basepath": "" "basepath": "",
"modelName": "text-embedding-ada-002"
}, },
"outputAnchors": [ "outputAnchors": [
{ {
@@ -488,13 +488,23 @@
"type": "BaseLLMOutputParser", "type": "BaseLLMOutputParser",
"optional": true, "optional": true,
"id": "llmChain_0-input-outputParser-BaseLLMOutputParser" "id": "llmChain_0-input-outputParser-BaseLLMOutputParser"
},
{
"label": "Input Moderation",
"description": "Detect text that could generate harmful output and prevent it from being sent to the language model",
"name": "inputModeration",
"type": "Moderation",
"optional": true,
"list": true,
"id": "llmChain_0-input-inputModeration-Moderation"
} }
], ],
"inputs": { "inputs": {
"model": "{{openAI_1.data.instance}}", "model": "{{openAI_1.data.instance}}",
"prompt": "{{promptTemplate_0.data.instance}}", "prompt": "{{promptTemplate_0.data.instance}}",
"outputParser": "", "outputParser": "",
"chainName": "FirstChain" "chainName": "FirstChain",
"inputModeration": ""
}, },
"outputAnchors": [ "outputAnchors": [
{ {
@@ -577,13 +587,23 @@
"type": "BaseLLMOutputParser", "type": "BaseLLMOutputParser",
"optional": true, "optional": true,
"id": "llmChain_1-input-outputParser-BaseLLMOutputParser" "id": "llmChain_1-input-outputParser-BaseLLMOutputParser"
},
{
"label": "Input Moderation",
"description": "Detect text that could generate harmful output and prevent it from being sent to the language model",
"name": "inputModeration",
"type": "Moderation",
"optional": true,
"list": true,
"id": "llmChain_1-input-inputModeration-Moderation"
} }
], ],
"inputs": { "inputs": {
"model": "{{openAI_2.data.instance}}", "model": "{{openAI_2.data.instance}}",
"prompt": "{{promptTemplate_1.data.instance}}", "prompt": "{{promptTemplate_1.data.instance}}",
"outputParser": "", "outputParser": "",
"chainName": "LastChain" "chainName": "LastChain",
"inputModeration": ""
}, },
"outputAnchors": [ "outputAnchors": [
{ {
@@ -99,7 +99,7 @@
"data": { "data": {
"id": "chatOpenAI_0", "id": "chatOpenAI_0",
"label": "ChatOpenAI", "label": "ChatOpenAI",
"version": 2, "version": 3,
"name": "chatOpenAI", "name": "chatOpenAI",
"type": "ChatOpenAI", "type": "ChatOpenAI",
"baseClasses": ["ChatOpenAI", "BaseChatModel", "BaseLanguageModel", "Runnable"], "baseClasses": ["ChatOpenAI", "BaseChatModel", "BaseLanguageModel", "Runnable"],
@@ -122,6 +122,14 @@
"label": "gpt-4", "label": "gpt-4",
"name": "gpt-4" "name": "gpt-4"
}, },
{
"label": "gpt-4-turbo-preview",
"name": "gpt-4-turbo-preview"
},
{
"label": "gpt-4-0125-preview",
"name": "gpt-4-0125-preview"
},
{ {
"label": "gpt-4-1106-preview", "label": "gpt-4-1106-preview",
"name": "gpt-4-1106-preview" "name": "gpt-4-1106-preview"
@@ -227,13 +227,23 @@
"type": "BaseLLMOutputParser", "type": "BaseLLMOutputParser",
"optional": true, "optional": true,
"id": "llmChain_0-input-outputParser-BaseLLMOutputParser" "id": "llmChain_0-input-outputParser-BaseLLMOutputParser"
},
{
"label": "Input Moderation",
"description": "Detect text that could generate harmful output and prevent it from being sent to the language model",
"name": "inputModeration",
"type": "Moderation",
"optional": true,
"list": true,
"id": "llmChain_0-input-inputModeration-Moderation"
} }
], ],
"inputs": { "inputs": {
"model": "{{replicate_0.data.instance}}", "model": "{{replicate_0.data.instance}}",
"prompt": "{{promptTemplate_0.data.instance}}", "prompt": "{{promptTemplate_0.data.instance}}",
"outputParser": "", "outputParser": "",
"chainName": "" "chainName": "",
"inputModeration": ""
}, },
"outputAnchors": [ "outputAnchors": [
{ {
@@ -13,7 +13,7 @@
"data": { "data": {
"id": "chatOpenAI_0", "id": "chatOpenAI_0",
"label": "ChatOpenAI", "label": "ChatOpenAI",
"version": 2, "version": 3,
"name": "chatOpenAI", "name": "chatOpenAI",
"type": "ChatOpenAI", "type": "ChatOpenAI",
"baseClasses": ["ChatOpenAI", "BaseChatModel", "BaseLanguageModel"], "baseClasses": ["ChatOpenAI", "BaseChatModel", "BaseLanguageModel"],
@@ -36,6 +36,22 @@
"label": "gpt-4", "label": "gpt-4",
"name": "gpt-4" "name": "gpt-4"
}, },
{
"label": "gpt-4-turbo-preview",
"name": "gpt-4-turbo-preview"
},
{
"label": "gpt-4-0125-preview",
"name": "gpt-4-0125-preview"
},
{
"label": "gpt-4-1106-preview",
"name": "gpt-4-1106-preview"
},
{
"label": "gpt-4-vision-preview",
"name": "gpt-4-vision-preview"
},
{ {
"label": "gpt-4-0613", "label": "gpt-4-0613",
"name": "gpt-4-0613" "name": "gpt-4-0613"
@@ -52,6 +68,10 @@
"label": "gpt-3.5-turbo", "label": "gpt-3.5-turbo",
"name": "gpt-3.5-turbo" "name": "gpt-3.5-turbo"
}, },
{
"label": "gpt-3.5-turbo-1106",
"name": "gpt-3.5-turbo-1106"
},
{ {
"label": "gpt-3.5-turbo-0613", "label": "gpt-3.5-turbo-0613",
"name": "gpt-3.5-turbo-0613" "name": "gpt-3.5-turbo-0613"
@@ -173,7 +173,7 @@
"data": { "data": {
"id": "chatOpenAI_0", "id": "chatOpenAI_0",
"label": "ChatOpenAI", "label": "ChatOpenAI",
"version": 2, "version": 3,
"name": "chatOpenAI", "name": "chatOpenAI",
"type": "ChatOpenAI", "type": "ChatOpenAI",
"baseClasses": ["ChatOpenAI", "BaseChatModel", "BaseLanguageModel", "Runnable"], "baseClasses": ["ChatOpenAI", "BaseChatModel", "BaseLanguageModel", "Runnable"],
@@ -196,6 +196,14 @@
"label": "gpt-4", "label": "gpt-4",
"name": "gpt-4" "name": "gpt-4"
}, },
{
"label": "gpt-4-turbo-preview",
"name": "gpt-4-turbo-preview"
},
{
"label": "gpt-4-0125-preview",
"name": "gpt-4-0125-preview"
},
{ {
"label": "gpt-4-1106-preview", "label": "gpt-4-1106-preview",
"name": "gpt-4-1106-preview" "name": "gpt-4-1106-preview"
@@ -363,7 +371,7 @@
"data": { "data": {
"id": "chatOpenAI_1", "id": "chatOpenAI_1",
"label": "ChatOpenAI", "label": "ChatOpenAI",
"version": 2, "version": 3,
"name": "chatOpenAI", "name": "chatOpenAI",
"type": "ChatOpenAI", "type": "ChatOpenAI",
"baseClasses": ["ChatOpenAI", "BaseChatModel", "BaseLanguageModel", "Runnable"], "baseClasses": ["ChatOpenAI", "BaseChatModel", "BaseLanguageModel", "Runnable"],
@@ -386,6 +394,14 @@
"label": "gpt-4", "label": "gpt-4",
"name": "gpt-4" "name": "gpt-4"
}, },
{
"label": "gpt-4-turbo-preview",
"name": "gpt-4-turbo-preview"
},
{
"label": "gpt-4-0125-preview",
"name": "gpt-4-0125-preview"
},
{ {
"label": "gpt-4-1106-preview", "label": "gpt-4-1106-preview",
"name": "gpt-4-1106-preview" "name": "gpt-4-1106-preview"
@@ -1279,7 +1295,7 @@
"data": { "data": {
"id": "chatOpenAI_2", "id": "chatOpenAI_2",
"label": "ChatOpenAI", "label": "ChatOpenAI",
"version": 2, "version": 3,
"name": "chatOpenAI", "name": "chatOpenAI",
"type": "ChatOpenAI", "type": "ChatOpenAI",
"baseClasses": ["ChatOpenAI", "BaseChatModel", "BaseLanguageModel", "Runnable"], "baseClasses": ["ChatOpenAI", "BaseChatModel", "BaseLanguageModel", "Runnable"],
@@ -1302,6 +1318,14 @@
"label": "gpt-4", "label": "gpt-4",
"name": "gpt-4" "name": "gpt-4"
}, },
{
"label": "gpt-4-turbo-preview",
"name": "gpt-4-turbo-preview"
},
{
"label": "gpt-4-0125-preview",
"name": "gpt-4-0125-preview"
},
{ {
"label": "gpt-4-1106-preview", "label": "gpt-4-1106-preview",
"name": "gpt-4-1106-preview" "name": "gpt-4-1106-preview"
@@ -14,7 +14,7 @@
"data": { "data": {
"id": "chatOpenAI_0", "id": "chatOpenAI_0",
"label": "ChatOpenAI", "label": "ChatOpenAI",
"version": 2, "version": 3,
"name": "chatOpenAI", "name": "chatOpenAI",
"type": "ChatOpenAI", "type": "ChatOpenAI",
"baseClasses": ["ChatOpenAI", "BaseChatModel", "BaseLanguageModel", "Runnable"], "baseClasses": ["ChatOpenAI", "BaseChatModel", "BaseLanguageModel", "Runnable"],
@@ -37,6 +37,14 @@
"label": "gpt-4", "label": "gpt-4",
"name": "gpt-4" "name": "gpt-4"
}, },
{
"label": "gpt-4-turbo-preview",
"name": "gpt-4-turbo-preview"
},
{
"label": "gpt-4-0125-preview",
"name": "gpt-4-0125-preview"
},
{ {
"label": "gpt-4-1106-preview", "label": "gpt-4-1106-preview",
"name": "gpt-4-1106-preview" "name": "gpt-4-1106-preview"
@@ -261,7 +269,7 @@
"data": { "data": {
"id": "conversationChain_0", "id": "conversationChain_0",
"label": "Conversation Chain", "label": "Conversation Chain",
"version": 2, "version": 3,
"name": "conversationChain", "name": "conversationChain",
"type": "ConversationChain", "type": "ConversationChain",
"baseClasses": ["ConversationChain", "LLMChain", "BaseChain", "Runnable"], "baseClasses": ["ConversationChain", "LLMChain", "BaseChain", "Runnable"],
@@ -301,9 +309,19 @@
"description": "Override existing prompt with Chat Prompt Template. Human Message must includes {input} variable", "description": "Override existing prompt with Chat Prompt Template. Human Message must includes {input} variable",
"optional": true, "optional": true,
"id": "conversationChain_0-input-chatPromptTemplate-ChatPromptTemplate" "id": "conversationChain_0-input-chatPromptTemplate-ChatPromptTemplate"
},
{
"label": "Input Moderation",
"description": "Detect text that could generate harmful output and prevent it from being sent to the language model",
"name": "inputModeration",
"type": "Moderation",
"optional": true,
"list": true,
"id": "conversationChain_0-input-inputModeration-Moderation"
} }
], ],
"inputs": { "inputs": {
"inputModeration": "",
"model": "{{chatOpenAI_0.data.instance}}", "model": "{{chatOpenAI_0.data.instance}}",
"memory": "{{bufferMemory_0.data.instance}}", "memory": "{{bufferMemory_0.data.instance}}",
"chatPromptTemplate": "", "chatPromptTemplate": "",
@@ -268,13 +268,23 @@
"type": "BaseLLMOutputParser", "type": "BaseLLMOutputParser",
"optional": true, "optional": true,
"id": "llmChain_0-input-outputParser-BaseLLMOutputParser" "id": "llmChain_0-input-outputParser-BaseLLMOutputParser"
},
{
"label": "Input Moderation",
"description": "Detect text that could generate harmful output and prevent it from being sent to the language model",
"name": "inputModeration",
"type": "Moderation",
"optional": true,
"list": true,
"id": "llmChain_0-input-inputModeration-Moderation"
} }
], ],
"inputs": { "inputs": {
"model": "{{openAI_0.data.instance}}", "model": "{{openAI_0.data.instance}}",
"prompt": "{{promptTemplate_0.data.instance}}", "prompt": "{{promptTemplate_0.data.instance}}",
"outputParser": "", "outputParser": "",
"chainName": "" "chainName": "",
"inputModeration": ""
}, },
"outputAnchors": [ "outputAnchors": [
{ {
@@ -14,7 +14,7 @@
"data": { "data": {
"id": "chatOpenAI_0", "id": "chatOpenAI_0",
"label": "ChatOpenAI", "label": "ChatOpenAI",
"version": 2, "version": 3,
"name": "chatOpenAI", "name": "chatOpenAI",
"type": "ChatOpenAI", "type": "ChatOpenAI",
"baseClasses": ["ChatOpenAI", "BaseChatModel", "BaseLanguageModel", "Runnable"], "baseClasses": ["ChatOpenAI", "BaseChatModel", "BaseLanguageModel", "Runnable"],
@@ -37,6 +37,22 @@
"label": "gpt-4", "label": "gpt-4",
"name": "gpt-4" "name": "gpt-4"
}, },
{
"label": "gpt-4-turbo-preview",
"name": "gpt-4-turbo-preview"
},
{
"label": "gpt-4-0125-preview",
"name": "gpt-4-0125-preview"
},
{
"label": "gpt-4-1106-preview",
"name": "gpt-4-1106-preview"
},
{
"label": "gpt-4-vision-preview",
"name": "gpt-4-vision-preview"
},
{ {
"label": "gpt-4-0613", "label": "gpt-4-0613",
"name": "gpt-4-0613" "name": "gpt-4-0613"
@@ -53,6 +69,10 @@
"label": "gpt-3.5-turbo", "label": "gpt-3.5-turbo",
"name": "gpt-3.5-turbo" "name": "gpt-3.5-turbo"
}, },
{
"label": "gpt-3.5-turbo-1106",
"name": "gpt-3.5-turbo-1106"
},
{ {
"label": "gpt-3.5-turbo-0613", "label": "gpt-3.5-turbo-0613",
"name": "gpt-3.5-turbo-0613" "name": "gpt-3.5-turbo-0613"
@@ -227,13 +247,23 @@
"type": "BaseLLMOutputParser", "type": "BaseLLMOutputParser",
"optional": true, "optional": true,
"id": "llmChain_0-input-outputParser-BaseLLMOutputParser" "id": "llmChain_0-input-outputParser-BaseLLMOutputParser"
},
{
"label": "Input Moderation",
"description": "Detect text that could generate harmful output and prevent it from being sent to the language model",
"name": "inputModeration",
"type": "Moderation",
"optional": true,
"list": true,
"id": "llmChain_0-input-inputModeration-Moderation"
} }
], ],
"inputs": { "inputs": {
"model": "{{chatOpenAI_0.data.instance}}", "model": "{{chatOpenAI_0.data.instance}}",
"prompt": "{{chatPromptTemplate_0.data.instance}}", "prompt": "{{chatPromptTemplate_0.data.instance}}",
"outputParser": "{{structuredOutputParser_0.data.instance}}", "outputParser": "{{structuredOutputParser_0.data.instance}}",
"chainName": "" "chainName": "",
"inputModeration": ""
}, },
"outputAnchors": [ "outputAnchors": [
{ {
@@ -82,7 +82,7 @@
"data": { "data": {
"id": "chatOpenAI_0", "id": "chatOpenAI_0",
"label": "ChatOpenAI", "label": "ChatOpenAI",
"version": 2, "version": 3,
"name": "chatOpenAI", "name": "chatOpenAI",
"type": "ChatOpenAI", "type": "ChatOpenAI",
"baseClasses": ["ChatOpenAI", "BaseChatModel", "BaseLanguageModel"], "baseClasses": ["ChatOpenAI", "BaseChatModel", "BaseLanguageModel"],
@@ -105,6 +105,22 @@
"label": "gpt-4", "label": "gpt-4",
"name": "gpt-4" "name": "gpt-4"
}, },
{
"label": "gpt-4-turbo-preview",
"name": "gpt-4-turbo-preview"
},
{
"label": "gpt-4-0125-preview",
"name": "gpt-4-0125-preview"
},
{
"label": "gpt-4-1106-preview",
"name": "gpt-4-1106-preview"
},
{
"label": "gpt-4-vision-preview",
"name": "gpt-4-vision-preview"
},
{ {
"label": "gpt-4-0613", "label": "gpt-4-0613",
"name": "gpt-4-0613" "name": "gpt-4-0613"
@@ -121,6 +137,10 @@
"label": "gpt-3.5-turbo", "label": "gpt-3.5-turbo",
"name": "gpt-3.5-turbo" "name": "gpt-3.5-turbo"
}, },
{
"label": "gpt-3.5-turbo-1106",
"name": "gpt-3.5-turbo-1106"
},
{ {
"label": "gpt-3.5-turbo-0613", "label": "gpt-3.5-turbo-0613",
"name": "gpt-3.5-turbo-0613" "name": "gpt-3.5-turbo-0613"
@@ -288,13 +308,23 @@
"type": "BaseLLMOutputParser", "type": "BaseLLMOutputParser",
"optional": true, "optional": true,
"id": "llmChain_0-input-outputParser-BaseLLMOutputParser" "id": "llmChain_0-input-outputParser-BaseLLMOutputParser"
},
{
"label": "Input Moderation",
"description": "Detect text that could generate harmful output and prevent it from being sent to the language model",
"name": "inputModeration",
"type": "Moderation",
"optional": true,
"list": true,
"id": "llmChain_0-input-inputModeration-Moderation"
} }
], ],
"inputs": { "inputs": {
"model": "{{chatOpenAI_0.data.instance}}", "model": "{{chatOpenAI_0.data.instance}}",
"prompt": "{{chatPromptTemplate_0.data.instance}}", "prompt": "{{chatPromptTemplate_0.data.instance}}",
"outputParser": "", "outputParser": "",
"chainName": "Language Translation" "chainName": "Language Translation",
"inputModeration": ""
}, },
"outputAnchors": [ "outputAnchors": [
{ {
@@ -125,7 +125,7 @@
"data": { "data": {
"id": "chatOpenAI_0", "id": "chatOpenAI_0",
"label": "ChatOpenAI", "label": "ChatOpenAI",
"version": 2, "version": 3,
"name": "chatOpenAI", "name": "chatOpenAI",
"type": "ChatOpenAI", "type": "ChatOpenAI",
"baseClasses": ["ChatOpenAI", "BaseChatModel", "BaseLanguageModel"], "baseClasses": ["ChatOpenAI", "BaseChatModel", "BaseLanguageModel"],
@@ -148,6 +148,22 @@
"label": "gpt-4", "label": "gpt-4",
"name": "gpt-4" "name": "gpt-4"
}, },
{
"label": "gpt-4-turbo-preview",
"name": "gpt-4-turbo-preview"
},
{
"label": "gpt-4-0125-preview",
"name": "gpt-4-0125-preview"
},
{
"label": "gpt-4-1106-preview",
"name": "gpt-4-1106-preview"
},
{
"label": "gpt-4-vision-preview",
"name": "gpt-4-vision-preview"
},
{ {
"label": "gpt-4-0613", "label": "gpt-4-0613",
"name": "gpt-4-0613" "name": "gpt-4-0613"
@@ -164,6 +180,10 @@
"label": "gpt-3.5-turbo", "label": "gpt-3.5-turbo",
"name": "gpt-3.5-turbo" "name": "gpt-3.5-turbo"
}, },
{
"label": "gpt-3.5-turbo-1106",
"name": "gpt-3.5-turbo-1106"
},
{ {
"label": "gpt-3.5-turbo-0613", "label": "gpt-3.5-turbo-0613",
"name": "gpt-3.5-turbo-0613" "name": "gpt-3.5-turbo-0613"
@@ -296,7 +316,7 @@
"data": { "data": {
"id": "openAIEmbeddings_0", "id": "openAIEmbeddings_0",
"label": "OpenAI Embeddings", "label": "OpenAI Embeddings",
"version": 1, "version": 2,
"name": "openAIEmbeddings", "name": "openAIEmbeddings",
"type": "OpenAIEmbeddings", "type": "OpenAIEmbeddings",
"baseClasses": ["OpenAIEmbeddings", "Embeddings"], "baseClasses": ["OpenAIEmbeddings", "Embeddings"],
@@ -310,6 +330,28 @@
"credentialNames": ["openAIApi"], "credentialNames": ["openAIApi"],
"id": "openAIEmbeddings_0-input-credential-credential" "id": "openAIEmbeddings_0-input-credential-credential"
}, },
{
"label": "Model Name",
"name": "modelName",
"type": "options",
"options": [
{
"label": "text-embedding-3-large",
"name": "text-embedding-3-large"
},
{
"label": "text-embedding-3-small",
"name": "text-embedding-3-small"
},
{
"label": "text-embedding-ada-002",
"name": "text-embedding-ada-002"
}
],
"default": "text-embedding-ada-002",
"optional": true,
"id": "openAIEmbeddings_0-input-modelName-options"
},
{ {
"label": "Strip New Lines", "label": "Strip New Lines",
"name": "stripNewLines", "name": "stripNewLines",
@@ -348,7 +390,8 @@
"stripNewLines": "", "stripNewLines": "",
"batchSize": "", "batchSize": "",
"timeout": "", "timeout": "",
"basepath": "" "basepath": "",
"modelName": "text-embedding-ada-002"
}, },
"outputAnchors": [ "outputAnchors": [
{ {
@@ -380,7 +423,7 @@
"data": { "data": {
"id": "chatOpenAI_1", "id": "chatOpenAI_1",
"label": "ChatOpenAI", "label": "ChatOpenAI",
"version": 2, "version": 3,
"name": "chatOpenAI", "name": "chatOpenAI",
"type": "ChatOpenAI", "type": "ChatOpenAI",
"baseClasses": ["ChatOpenAI", "BaseChatModel", "BaseLanguageModel"], "baseClasses": ["ChatOpenAI", "BaseChatModel", "BaseLanguageModel"],
@@ -403,6 +446,22 @@
"label": "gpt-4", "label": "gpt-4",
"name": "gpt-4" "name": "gpt-4"
}, },
{
"label": "gpt-4-turbo-preview",
"name": "gpt-4-turbo-preview"
},
{
"label": "gpt-4-0125-preview",
"name": "gpt-4-0125-preview"
},
{
"label": "gpt-4-1106-preview",
"name": "gpt-4-1106-preview"
},
{
"label": "gpt-4-vision-preview",
"name": "gpt-4-vision-preview"
},
{ {
"label": "gpt-4-0613", "label": "gpt-4-0613",
"name": "gpt-4-0613" "name": "gpt-4-0613"
@@ -419,6 +478,10 @@
"label": "gpt-3.5-turbo", "label": "gpt-3.5-turbo",
"name": "gpt-3.5-turbo" "name": "gpt-3.5-turbo"
}, },
{
"label": "gpt-3.5-turbo-1106",
"name": "gpt-3.5-turbo-1106"
},
{ {
"label": "gpt-3.5-turbo-0613", "label": "gpt-3.5-turbo-0613",
"name": "gpt-3.5-turbo-0613" "name": "gpt-3.5-turbo-0613"
@@ -14,7 +14,7 @@
"data": { "data": {
"id": "openAIEmbeddings_0", "id": "openAIEmbeddings_0",
"label": "OpenAI Embeddings", "label": "OpenAI Embeddings",
"version": 1, "version": 2,
"name": "openAIEmbeddings", "name": "openAIEmbeddings",
"type": "OpenAIEmbeddings", "type": "OpenAIEmbeddings",
"baseClasses": ["OpenAIEmbeddings", "Embeddings"], "baseClasses": ["OpenAIEmbeddings", "Embeddings"],
@@ -28,6 +28,28 @@
"credentialNames": ["openAIApi"], "credentialNames": ["openAIApi"],
"id": "openAIEmbeddings_0-input-credential-credential" "id": "openAIEmbeddings_0-input-credential-credential"
}, },
{
"label": "Model Name",
"name": "modelName",
"type": "options",
"options": [
{
"label": "text-embedding-3-large",
"name": "text-embedding-3-large"
},
{
"label": "text-embedding-3-small",
"name": "text-embedding-3-small"
},
{
"label": "text-embedding-ada-002",
"name": "text-embedding-ada-002"
}
],
"default": "text-embedding-ada-002",
"optional": true,
"id": "openAIEmbeddings_0-input-modelName-options"
},
{ {
"label": "Strip New Lines", "label": "Strip New Lines",
"name": "stripNewLines", "name": "stripNewLines",
@@ -66,7 +88,8 @@
"stripNewLines": "", "stripNewLines": "",
"batchSize": "", "batchSize": "",
"timeout": "", "timeout": "",
"basepath": "" "basepath": "",
"modelName": "text-embedding-ada-002"
}, },
"outputAnchors": [ "outputAnchors": [
{ {
@@ -369,7 +392,7 @@
"data": { "data": {
"id": "chatOpenAI_0", "id": "chatOpenAI_0",
"label": "ChatOpenAI", "label": "ChatOpenAI",
"version": 2, "version": 3,
"name": "chatOpenAI", "name": "chatOpenAI",
"type": "ChatOpenAI", "type": "ChatOpenAI",
"baseClasses": ["ChatOpenAI", "BaseChatModel", "BaseLanguageModel", "Runnable"], "baseClasses": ["ChatOpenAI", "BaseChatModel", "BaseLanguageModel", "Runnable"],
@@ -392,6 +415,14 @@
"label": "gpt-4", "label": "gpt-4",
"name": "gpt-4" "name": "gpt-4"
}, },
{
"label": "gpt-4-turbo-preview",
"name": "gpt-4-turbo-preview"
},
{
"label": "gpt-4-0125-preview",
"name": "gpt-4-0125-preview"
},
{ {
"label": "gpt-4-1106-preview", "label": "gpt-4-1106-preview",
"name": "gpt-4-1106-preview" "name": "gpt-4-1106-preview"
@@ -638,7 +669,7 @@
"data": { "data": {
"id": "pinecone_0", "id": "pinecone_0",
"label": "Pinecone", "label": "Pinecone",
"version": 1, "version": 3,
"name": "pinecone", "name": "pinecone",
"type": "Pinecone", "type": "Pinecone",
"baseClasses": ["Pinecone", "VectorStoreRetriever", "BaseRetriever"], "baseClasses": ["Pinecone", "VectorStoreRetriever", "BaseRetriever"],
+19 -3
View File
@@ -1,5 +1,6 @@
import 'reflect-metadata' import 'reflect-metadata'
import path from 'path' import path from 'path'
import * as fs from 'fs'
import { DataSource } from 'typeorm' import { DataSource } from 'typeorm'
import { getUserHome } from './utils' import { getUserHome } from './utils'
import { entities } from './database/entities' import { entities } from './database/entities'
@@ -11,9 +12,13 @@ let appDataSource: DataSource
export const init = async (): Promise<void> => { export const init = async (): Promise<void> => {
let homePath let homePath
let flowisePath = path.join(getUserHome(), '.flowise')
if (!fs.existsSync(flowisePath)) {
fs.mkdirSync(flowisePath)
}
switch (process.env.DATABASE_TYPE) { switch (process.env.DATABASE_TYPE) {
case 'sqlite': case 'sqlite':
homePath = process.env.DATABASE_PATH ?? path.join(getUserHome(), '.flowise') homePath = process.env.DATABASE_PATH ?? flowisePath
appDataSource = new DataSource({ appDataSource = new DataSource({
type: 'sqlite', type: 'sqlite',
database: path.resolve(homePath, 'database.sqlite'), database: path.resolve(homePath, 'database.sqlite'),
@@ -46,7 +51,18 @@ export const init = async (): Promise<void> => {
username: process.env.DATABASE_USER, username: process.env.DATABASE_USER,
password: process.env.DATABASE_PASSWORD, password: process.env.DATABASE_PASSWORD,
database: process.env.DATABASE_NAME, database: process.env.DATABASE_NAME,
ssl: process.env.DATABASE_SSL === 'true', ...(process.env.DATABASE_SSL_KEY_BASE64
? {
ssl: {
rejectUnauthorized: false,
cert: Buffer.from(process.env.DATABASE_SSL_KEY_BASE64, 'base64')
}
}
: process.env.DATABASE_SSL === 'true'
? {
ssl: true
}
: {}),
synchronize: false, synchronize: false,
migrationsRun: false, migrationsRun: false,
entities: Object.values(entities), entities: Object.values(entities),
@@ -54,7 +70,7 @@ export const init = async (): Promise<void> => {
}) })
break break
default: default:
homePath = process.env.DATABASE_PATH ?? path.join(getUserHome(), '.flowise') homePath = process.env.DATABASE_PATH ?? flowisePath
appDataSource = new DataSource({ appDataSource = new DataSource({
type: 'sqlite', type: 'sqlite',
database: path.resolve(homePath, 'database.sqlite'), database: path.resolve(homePath, 'database.sqlite'),
+6
View File
@@ -19,6 +19,8 @@ export default class Start extends Command {
FLOWISE_USERNAME: Flags.string(), FLOWISE_USERNAME: Flags.string(),
FLOWISE_PASSWORD: Flags.string(), FLOWISE_PASSWORD: Flags.string(),
PORT: Flags.string(), PORT: Flags.string(),
CORS_ORIGINS: Flags.string(),
IFRAME_ORIGINS: Flags.string(),
DEBUG: Flags.string(), DEBUG: Flags.string(),
APIKEY_PATH: Flags.string(), APIKEY_PATH: Flags.string(),
SECRETKEY_PATH: Flags.string(), SECRETKEY_PATH: Flags.string(),
@@ -36,6 +38,7 @@ export default class Start extends Command {
DATABASE_USER: Flags.string(), DATABASE_USER: Flags.string(),
DATABASE_PASSWORD: Flags.string(), DATABASE_PASSWORD: Flags.string(),
DATABASE_SSL: Flags.string(), DATABASE_SSL: Flags.string(),
DATABASE_SSL_KEY_BASE64: Flags.string(),
LANGCHAIN_TRACING_V2: Flags.string(), LANGCHAIN_TRACING_V2: Flags.string(),
LANGCHAIN_ENDPOINT: Flags.string(), LANGCHAIN_ENDPOINT: Flags.string(),
LANGCHAIN_API_KEY: Flags.string(), LANGCHAIN_API_KEY: Flags.string(),
@@ -78,6 +81,8 @@ export default class Start extends Command {
const { flags } = await this.parse(Start) const { flags } = await this.parse(Start)
if (flags.PORT) process.env.PORT = flags.PORT if (flags.PORT) process.env.PORT = flags.PORT
if (flags.CORS_ORIGINS) process.env.CORS_ORIGINS = flags.CORS_ORIGINS
if (flags.IFRAME_ORIGINS) process.env.IFRAME_ORIGINS = flags.IFRAME_ORIGINS
if (flags.DEBUG) process.env.DEBUG = flags.DEBUG if (flags.DEBUG) process.env.DEBUG = flags.DEBUG
if (flags.NUMBER_OF_PROXIES) process.env.NUMBER_OF_PROXIES = flags.NUMBER_OF_PROXIES if (flags.NUMBER_OF_PROXIES) process.env.NUMBER_OF_PROXIES = flags.NUMBER_OF_PROXIES
@@ -107,6 +112,7 @@ export default class Start extends Command {
if (flags.DATABASE_USER) process.env.DATABASE_USER = flags.DATABASE_USER if (flags.DATABASE_USER) process.env.DATABASE_USER = flags.DATABASE_USER
if (flags.DATABASE_PASSWORD) process.env.DATABASE_PASSWORD = flags.DATABASE_PASSWORD if (flags.DATABASE_PASSWORD) process.env.DATABASE_PASSWORD = flags.DATABASE_PASSWORD
if (flags.DATABASE_SSL) process.env.DATABASE_SSL = flags.DATABASE_SSL if (flags.DATABASE_SSL) process.env.DATABASE_SSL = flags.DATABASE_SSL
if (flags.DATABASE_SSL_KEY_BASE64) process.env.DATABASE_SSL_KEY_BASE64 = flags.DATABASE_SSL_KEY_BASE64
// Langsmith tracing // Langsmith tracing
if (flags.LANGCHAIN_TRACING_V2) process.env.LANGCHAIN_TRACING_V2 = flags.LANGCHAIN_TRACING_V2 if (flags.LANGCHAIN_TRACING_V2) process.env.LANGCHAIN_TRACING_V2 = flags.LANGCHAIN_TRACING_V2
+26 -7
View File
@@ -62,7 +62,7 @@ import { CachePool } from './CachePool'
import { ICommonObject, IMessage, INodeOptionsValue, handleEscapeCharacters, webCrawl, xmlScrape } from 'flowise-components' import { ICommonObject, IMessage, INodeOptionsValue, handleEscapeCharacters, webCrawl, xmlScrape } from 'flowise-components'
import { createRateLimiter, getRateLimiter, initializeRateLimiter } from './utils/rateLimit' import { createRateLimiter, getRateLimiter, initializeRateLimiter } from './utils/rateLimit'
import { addAPIKey, compareKeys, deleteAPIKey, getApiKey, getAPIKeys, updateAPIKey } from './utils/apiKey' import { addAPIKey, compareKeys, deleteAPIKey, getApiKey, getAPIKeys, updateAPIKey } from './utils/apiKey'
import { sanitizeMiddleware } from './utils/XSS' import { sanitizeMiddleware, getCorsOptions, getAllowedIframeOrigins } from './utils/XSS'
import axios from 'axios' import axios from 'axios'
import { Client } from 'langchainhub' import { Client } from 'langchainhub'
import { parsePrompt } from './utils/hub' import { parsePrompt } from './utils/hub'
@@ -126,8 +126,20 @@ export class App {
if (process.env.NUMBER_OF_PROXIES && parseInt(process.env.NUMBER_OF_PROXIES) > 0) if (process.env.NUMBER_OF_PROXIES && parseInt(process.env.NUMBER_OF_PROXIES) > 0)
this.app.set('trust proxy', parseInt(process.env.NUMBER_OF_PROXIES)) this.app.set('trust proxy', parseInt(process.env.NUMBER_OF_PROXIES))
// Allow access from * // Allow access from specified domains
this.app.use(cors()) this.app.use(cors(getCorsOptions()))
// Allow embedding from specified domains.
this.app.use((req, res, next) => {
const allowedOrigins = getAllowedIframeOrigins()
if (allowedOrigins == '*') {
next()
} else {
const csp = `frame-ancestors ${allowedOrigins}`
res.setHeader('Content-Security-Policy', csp)
next()
}
})
// Switch off the default 'X-Powered-By: Express' header // Switch off the default 'X-Powered-By: Express' header
this.app.disable('x-powered-by') this.app.disable('x-powered-by')
@@ -461,6 +473,8 @@ export class App {
const endingNodes = nodes.filter((nd) => endingNodeIds.includes(nd.id)) const endingNodes = nodes.filter((nd) => endingNodeIds.includes(nd.id))
let isStreaming = false let isStreaming = false
let isEndingNodeExists = endingNodes.find((node) => node.data?.outputs?.output === 'EndingNode')
for (const endingNode of endingNodes) { for (const endingNode of endingNodes) {
const endingNodeData = endingNode.data const endingNodeData = endingNode.data
if (!endingNodeData) return res.status(500).send(`Ending node ${endingNode.id} data not found`) if (!endingNodeData) return res.status(500).send(`Ending node ${endingNode.id} data not found`)
@@ -476,7 +490,8 @@ export class App {
isStreaming = isEndingNode ? false : isFlowValidForStream(nodes, endingNodeData) isStreaming = isEndingNode ? false : isFlowValidForStream(nodes, endingNodeData)
} }
const obj = { isStreaming } // Once custom function ending node exists, flow is always unavailable to stream
const obj = { isStreaming: isEndingNodeExists ? false : isStreaming }
return res.json(obj) return res.json(obj)
}) })
@@ -1665,6 +1680,9 @@ export class App {
if (!endingNodeIds.length) return res.status(500).send(`Ending nodes not found`) if (!endingNodeIds.length) return res.status(500).send(`Ending nodes not found`)
const endingNodes = nodes.filter((nd) => endingNodeIds.includes(nd.id)) const endingNodes = nodes.filter((nd) => endingNodeIds.includes(nd.id))
let isEndingNodeExists = endingNodes.find((node) => node.data?.outputs?.output === 'EndingNode')
for (const endingNode of endingNodes) { for (const endingNode of endingNodes) {
const endingNodeData = endingNode.data const endingNodeData = endingNode.data
if (!endingNodeData) return res.status(500).send(`Ending node ${endingNode.id} data not found`) if (!endingNodeData) return res.status(500).send(`Ending node ${endingNode.id} data not found`)
@@ -1692,6 +1710,9 @@ export class App {
isStreamValid = isFlowValidForStream(nodes, endingNodeData) isStreamValid = isFlowValidForStream(nodes, endingNodeData)
} }
// Once custom function ending node exists, flow is always unavailable to stream
isStreamValid = isEndingNodeExists ? false : isStreamValid
let chatHistory: IMessage[] = incomingInput.history ?? [] let chatHistory: IMessage[] = incomingInput.history ?? []
// When {{chat_history}} is used in Prompt Template, fetch the chat conversations from memory node // When {{chat_history}} is used in Prompt Template, fetch the chat conversations from memory node
@@ -1883,9 +1904,7 @@ export async function start(): Promise<void> {
const server = http.createServer(serverApp.app) const server = http.createServer(serverApp.app)
const io = new Server(server, { const io = new Server(server, {
cors: { cors: getCorsOptions()
origin: '*'
}
}) })
await serverApp.initDatabase() await serverApp.initDatabase()
+25
View File
@@ -18,3 +18,28 @@ export function sanitizeMiddleware(req: Request, res: Response, next: NextFuncti
} }
next() next()
} }
export function getAllowedCorsOrigins(): string {
// Expects FQDN separated by commas, otherwise nothing or * for all.
return process.env.CORS_ORIGINS ?? '*'
}
export function getCorsOptions(): any {
const corsOptions = {
origin: function (origin: string | undefined, callback: (err: Error | null, allow?: boolean) => void) {
const allowedOrigins = getAllowedCorsOrigins()
if (!origin || allowedOrigins == '*' || allowedOrigins.indexOf(origin) !== -1) {
callback(null, true)
} else {
callback(null, false)
}
}
}
return corsOptions
}
export function getAllowedIframeOrigins(): string {
// Expects FQDN separated by commas, otherwise nothing or * for all.
// Also CSP allowed values: self or none
return process.env.IFRAME_ORIGINS ?? '*'
}
+13 -6
View File
@@ -611,28 +611,35 @@ export const resolveVariables = (
export const replaceInputsWithConfig = (flowNodeData: INodeData, overrideConfig: ICommonObject) => { export const replaceInputsWithConfig = (flowNodeData: INodeData, overrideConfig: ICommonObject) => {
const types = 'inputs' const types = 'inputs'
const getParamValues = (paramsObj: ICommonObject) => { const getParamValues = (inputsObj: ICommonObject) => {
for (const config in overrideConfig) { for (const config in overrideConfig) {
// If overrideConfig[key] is object // If overrideConfig[key] is object
if (overrideConfig[config] && typeof overrideConfig[config] === 'object') { if (overrideConfig[config] && typeof overrideConfig[config] === 'object') {
const nodeIds = Object.keys(overrideConfig[config]) const nodeIds = Object.keys(overrideConfig[config])
if (nodeIds.includes(flowNodeData.id)) { if (nodeIds.includes(flowNodeData.id)) {
paramsObj[config] = overrideConfig[config][flowNodeData.id] inputsObj[config] = overrideConfig[config][flowNodeData.id]
continue
} else if (nodeIds.some((nodeId) => nodeId.includes(flowNodeData.name))) {
/*
* "systemMessagePrompt": {
* "chatPromptTemplate_0": "You are an assistant" <---- continue for loop if current node is chatPromptTemplate_1
* }
*/
continue continue
} }
} }
let paramValue = overrideConfig[config] ?? paramsObj[config] let paramValue = overrideConfig[config] ?? inputsObj[config]
// Check if boolean // Check if boolean
if (paramValue === 'true') paramValue = true if (paramValue === 'true') paramValue = true
else if (paramValue === 'false') paramValue = false else if (paramValue === 'false') paramValue = false
paramsObj[config] = paramValue inputsObj[config] = paramValue
} }
} }
const paramsObj = flowNodeData[types] ?? {} const inputsObj = flowNodeData[types] ?? {}
getParamValues(paramsObj) getParamValues(inputsObj)
return flowNodeData return flowNodeData
} }