From 503386c0745caffb98bdb7f51b5bc6acf951d17c Mon Sep 17 00:00:00 2001 From: Henry Date: Thu, 20 Apr 2023 10:11:55 +0100 Subject: [PATCH 1/3] add vector stores --- .../ConversationalAgent.ts | 7 +- .../agents/MRKLAgentChat/MRKLAgentChat.ts | 9 ++- .../nodes/agents/MRKLAgentLLM/MRKLAgentLLM.ts | 7 +- .../chains/VectorDBQAChain/VectorDBQAChain.ts | 57 +++++++++++++++ .../nodes/chains/VectorDBQAChain/chain.svg | 6 ++ .../nodes/tools/ChainTool/ChainTool.ts | 73 +++++++++++++++++++ .../nodes/tools/ChainTool/chaintool.svg | 4 + .../Chroma_Existing/Chroma_Existing.ts | 27 ++++++- .../Chroma_Upsert/Chroma_Upsert.ts | 27 ++++++- .../Pinecone_Existing/Pinecone_Existing.ts | 27 ++++++- .../Pinecone_Upsert/Pinecone_Upsert.ts | 27 ++++++- packages/components/package.json | 2 +- packages/ui/src/ui-component/switch/Switch.js | 28 +++++++ .../ui/src/views/canvas/NodeInputHandler.js | 8 ++ 14 files changed, 289 insertions(+), 20 deletions(-) create mode 100644 packages/components/nodes/chains/VectorDBQAChain/VectorDBQAChain.ts create mode 100644 packages/components/nodes/chains/VectorDBQAChain/chain.svg create mode 100644 packages/components/nodes/tools/ChainTool/ChainTool.ts create mode 100644 packages/components/nodes/tools/ChainTool/chaintool.svg create mode 100644 packages/ui/src/ui-component/switch/Switch.js diff --git a/packages/components/nodes/agents/ConversationalAgent/ConversationalAgent.ts b/packages/components/nodes/agents/ConversationalAgent/ConversationalAgent.ts index 26190de03..3641f0bd7 100644 --- a/packages/components/nodes/agents/ConversationalAgent/ConversationalAgent.ts +++ b/packages/components/nodes/agents/ConversationalAgent/ConversationalAgent.ts @@ -1,5 +1,5 @@ import { INode, INodeData, INodeParams } from '../../../src/Interface' -import { initializeAgentExecutor, AgentExecutor } from 'langchain/agents' +import { initializeAgentExecutorWithOptions, AgentExecutor } from 'langchain/agents' import { Tool } from 'langchain/tools' import { BaseChatModel } from 'langchain/chat_models/base' import { BaseChatMemory } from 'langchain/memory' @@ -48,7 +48,10 @@ class ConversationalAgent_Agents implements INode { const tools = nodeData.inputs?.tools as Tool[] const memory = nodeData.inputs?.memory as BaseChatMemory - const executor = await initializeAgentExecutor(tools, model, 'chat-conversational-react-description', true) + const executor = await initializeAgentExecutorWithOptions(tools, model, { + agentType: 'chat-conversational-react-description', + verbose: true + }) executor.memory = memory return executor } diff --git a/packages/components/nodes/agents/MRKLAgentChat/MRKLAgentChat.ts b/packages/components/nodes/agents/MRKLAgentChat/MRKLAgentChat.ts index d74f0b32c..1a619e6ac 100644 --- a/packages/components/nodes/agents/MRKLAgentChat/MRKLAgentChat.ts +++ b/packages/components/nodes/agents/MRKLAgentChat/MRKLAgentChat.ts @@ -1,7 +1,8 @@ import { INode, INodeData, INodeParams } from '../../../src/Interface' -import { initializeAgentExecutor, AgentExecutor, Tool } from 'langchain/agents' +import { initializeAgentExecutorWithOptions, AgentExecutor } from 'langchain/agents' import { BaseChatModel } from 'langchain/chat_models/base' import { getBaseClasses } from '../../../src/utils' +import { Tool } from 'langchain/tools' class MRKLAgentChat_Agents implements INode { label: string @@ -39,8 +40,10 @@ class MRKLAgentChat_Agents implements INode { async init(nodeData: INodeData): Promise { const model = nodeData.inputs?.model as BaseChatModel const tools = nodeData.inputs?.tools as Tool[] - - const executor = await initializeAgentExecutor(tools, model, 'chat-zero-shot-react-description', true) + const executor = await initializeAgentExecutorWithOptions(tools, model, { + agentType: 'chat-zero-shot-react-description', + verbose: true + }) return executor } diff --git a/packages/components/nodes/agents/MRKLAgentLLM/MRKLAgentLLM.ts b/packages/components/nodes/agents/MRKLAgentLLM/MRKLAgentLLM.ts index 4df6ea41f..499b93834 100644 --- a/packages/components/nodes/agents/MRKLAgentLLM/MRKLAgentLLM.ts +++ b/packages/components/nodes/agents/MRKLAgentLLM/MRKLAgentLLM.ts @@ -1,5 +1,5 @@ import { INode, INodeData, INodeParams } from '../../../src/Interface' -import { initializeAgentExecutor, AgentExecutor } from 'langchain/agents' +import { initializeAgentExecutorWithOptions, AgentExecutor } from 'langchain/agents' import { Tool } from 'langchain/tools' import { BaseLLM } from 'langchain/llms/base' import { getBaseClasses } from '../../../src/utils' @@ -41,7 +41,10 @@ class MRKLAgentLLM_Agents implements INode { const model = nodeData.inputs?.model as BaseLLM const tools = nodeData.inputs?.tools as Tool[] - const executor = await initializeAgentExecutor(tools, model, 'zero-shot-react-description', true) + const executor = await initializeAgentExecutorWithOptions(tools, model, { + agentType: 'zero-shot-react-description', + verbose: true + }) return executor } diff --git a/packages/components/nodes/chains/VectorDBQAChain/VectorDBQAChain.ts b/packages/components/nodes/chains/VectorDBQAChain/VectorDBQAChain.ts new file mode 100644 index 000000000..91b3fed1e --- /dev/null +++ b/packages/components/nodes/chains/VectorDBQAChain/VectorDBQAChain.ts @@ -0,0 +1,57 @@ +import { INode, INodeData, INodeParams } from '../../../src/Interface' +import { getBaseClasses } from '../../../src/utils' +import { VectorDBQAChain } from 'langchain/chains' +import { BaseLanguageModel } from 'langchain/base_language' +import { VectorStore } from 'langchain/vectorstores' + +class VectorDBQAChain_Chains implements INode { + label: string + name: string + type: string + icon: string + category: string + baseClasses: string[] + description: string + inputs: INodeParams[] + + constructor() { + this.label = 'VectorDB QA Chain' + this.name = 'vectorDBQAChain' + this.type = 'VectorDBQAChain' + this.icon = 'chain.svg' + this.category = 'Chains' + this.description = 'QA chain for vector databases' + this.baseClasses = [this.type, ...getBaseClasses(VectorDBQAChain)] + this.inputs = [ + { + label: 'Language Model', + name: 'model', + type: 'BaseLanguageModel' + }, + { + label: 'Vector Store', + name: 'vectorStore', + type: 'VectorStore' + } + ] + } + + async init(nodeData: INodeData): Promise { + const model = nodeData.inputs?.model as BaseLanguageModel + const vectorStore = nodeData.inputs?.vectorStore as VectorStore + + const chain = VectorDBQAChain.fromLLM(model, vectorStore) + return chain + } + + async run(nodeData: INodeData, input: string): Promise { + const chain = nodeData.instance as VectorDBQAChain + const obj = { + query: input + } + const res = await chain.call(obj) + return res?.text + } +} + +module.exports = { nodeClass: VectorDBQAChain_Chains } diff --git a/packages/components/nodes/chains/VectorDBQAChain/chain.svg b/packages/components/nodes/chains/VectorDBQAChain/chain.svg new file mode 100644 index 000000000..a5b32f90a --- /dev/null +++ b/packages/components/nodes/chains/VectorDBQAChain/chain.svg @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/packages/components/nodes/tools/ChainTool/ChainTool.ts b/packages/components/nodes/tools/ChainTool/ChainTool.ts new file mode 100644 index 000000000..32e414af7 --- /dev/null +++ b/packages/components/nodes/tools/ChainTool/ChainTool.ts @@ -0,0 +1,73 @@ +import { INode, INodeData, INodeParams } from '../../../src/Interface' +import { getBaseClasses } from '../../../src/utils' +import { ChainTool } from 'langchain/tools' +import { BaseChain } from 'langchain/chains' + +class ChainTool_Tools implements INode { + label: string + name: string + description: string + type: string + icon: string + category: string + baseClasses: string[] + inputs: INodeParams[] + + constructor() { + this.label = 'Chain Tool' + this.name = 'chainTool' + this.type = 'ChainTool' + this.icon = 'chaintool.svg' + this.category = 'Tools' + this.description = 'Use a chain as allowed tool for agent' + this.baseClasses = [this.type, ...getBaseClasses(ChainTool)] + this.inputs = [ + { + label: 'Chain Name', + name: 'name', + type: 'string', + placeholder: 'state-of-union-qa' + }, + { + label: 'Chain Description', + name: 'description', + type: 'string', + rows: 3, + placeholder: + 'State of the Union QA - useful for when you need to ask questions about the most recent state of the union address.' + }, + { + label: 'Return Direct', + name: 'returnDirect', + type: 'boolean', + optional: true + }, + { + label: 'Base Chain', + name: 'baseChain', + type: 'BaseChain' + } + ] + } + + async init(nodeData: INodeData): Promise { + const name = nodeData.inputs?.name as string + const description = nodeData.inputs?.description as string + const baseChain = nodeData.inputs?.baseChain as BaseChain + const returnDirect = nodeData.inputs?.returnDirect as boolean + + const obj = { + name, + description, + chain: baseChain + } as any + + if (returnDirect) obj.returnDirect = returnDirect + + const tool = new ChainTool(obj) + + return tool + } +} + +module.exports = { nodeClass: ChainTool_Tools } diff --git a/packages/components/nodes/tools/ChainTool/chaintool.svg b/packages/components/nodes/tools/ChainTool/chaintool.svg new file mode 100644 index 000000000..c5bd0fbcc --- /dev/null +++ b/packages/components/nodes/tools/ChainTool/chaintool.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/packages/components/nodes/vectorstores/Chroma_Existing/Chroma_Existing.ts b/packages/components/nodes/vectorstores/Chroma_Existing/Chroma_Existing.ts index 1e16140fb..904c44edc 100644 --- a/packages/components/nodes/vectorstores/Chroma_Existing/Chroma_Existing.ts +++ b/packages/components/nodes/vectorstores/Chroma_Existing/Chroma_Existing.ts @@ -1,6 +1,7 @@ -import { INode, INodeData, INodeParams } from '../../../src/Interface' +import { INode, INodeData, INodeOutputsValue, INodeParams } from '../../../src/Interface' import { Chroma } from 'langchain/vectorstores/chroma' import { Embeddings } from 'langchain/embeddings/base' +import { getBaseClasses } from '../../../src/utils' class Chroma_Existing_VectorStores implements INode { label: string @@ -11,6 +12,7 @@ class Chroma_Existing_VectorStores implements INode { category: string baseClasses: string[] inputs: INodeParams[] + outputs: INodeOutputsValue[] constructor() { this.label = 'Chroma Load Existing Index' @@ -32,17 +34,36 @@ class Chroma_Existing_VectorStores implements INode { type: 'string' } ] + this.outputs = [ + { + label: 'Chroma Retriever', + name: 'retriever', + baseClasses: [this.type, 'BaseRetriever'] + }, + { + label: 'Chroma Vector Store', + name: 'vectorStore', + baseClasses: [this.type, ...getBaseClasses(Chroma)] + } + ] } async init(nodeData: INodeData): Promise { const collectionName = nodeData.inputs?.collectionName as string const embeddings = nodeData.inputs?.embeddings as Embeddings + const output = nodeData.outputs?.output as string const vectorStore = await Chroma.fromExistingCollection(embeddings, { collectionName }) - const retriever = vectorStore.asRetriever() - return retriever + + if (output === 'retriever') { + const retriever = vectorStore.asRetriever() + return retriever + } else if (output === 'vectorStore') { + return vectorStore + } + return vectorStore } } diff --git a/packages/components/nodes/vectorstores/Chroma_Upsert/Chroma_Upsert.ts b/packages/components/nodes/vectorstores/Chroma_Upsert/Chroma_Upsert.ts index 71d3edf5b..d71f96ec9 100644 --- a/packages/components/nodes/vectorstores/Chroma_Upsert/Chroma_Upsert.ts +++ b/packages/components/nodes/vectorstores/Chroma_Upsert/Chroma_Upsert.ts @@ -1,7 +1,8 @@ -import { INode, INodeData, INodeParams } from '../../../src/Interface' +import { INode, INodeData, INodeOutputsValue, INodeParams } from '../../../src/Interface' import { Chroma } from 'langchain/vectorstores/chroma' import { Embeddings } from 'langchain/embeddings/base' import { Document } from 'langchain/document' +import { getBaseClasses } from '../../../src/utils' class ChromaUpsert_VectorStores implements INode { label: string @@ -12,6 +13,7 @@ class ChromaUpsert_VectorStores implements INode { category: string baseClasses: string[] inputs: INodeParams[] + outputs: INodeOutputsValue[] constructor() { this.label = 'Chroma Upsert Document' @@ -38,12 +40,25 @@ class ChromaUpsert_VectorStores implements INode { type: 'string' } ] + this.outputs = [ + { + label: 'Chroma Retriever', + name: 'retriever', + baseClasses: [this.type, 'BaseRetriever'] + }, + { + label: 'Chroma Vector Store', + name: 'vectorStore', + baseClasses: [this.type, ...getBaseClasses(Chroma)] + } + ] } async init(nodeData: INodeData): Promise { const collectionName = nodeData.inputs?.collectionName as string const docs = nodeData.inputs?.document as Document[] const embeddings = nodeData.inputs?.embeddings as Embeddings + const output = nodeData.outputs?.output as string const finalDocs = [] for (let i = 0; i < docs.length; i += 1) { @@ -53,8 +68,14 @@ class ChromaUpsert_VectorStores implements INode { const vectorStore = await Chroma.fromDocuments(finalDocs, embeddings, { collectionName }) - const retriever = vectorStore.asRetriever() - return retriever + + if (output === 'retriever') { + const retriever = vectorStore.asRetriever() + return retriever + } else if (output === 'vectorStore') { + return vectorStore + } + return vectorStore } } diff --git a/packages/components/nodes/vectorstores/Pinecone_Existing/Pinecone_Existing.ts b/packages/components/nodes/vectorstores/Pinecone_Existing/Pinecone_Existing.ts index bdc5ba876..fd55de484 100644 --- a/packages/components/nodes/vectorstores/Pinecone_Existing/Pinecone_Existing.ts +++ b/packages/components/nodes/vectorstores/Pinecone_Existing/Pinecone_Existing.ts @@ -1,7 +1,8 @@ -import { INode, INodeData, INodeParams } from '../../../src/Interface' +import { INode, INodeData, INodeOutputsValue, INodeParams } from '../../../src/Interface' import { PineconeClient } from '@pinecone-database/pinecone' import { PineconeStore } from 'langchain/vectorstores/pinecone' import { Embeddings } from 'langchain/embeddings/base' +import { getBaseClasses } from '../../../src/utils' class Pinecone_Existing_VectorStores implements INode { label: string @@ -12,6 +13,7 @@ class Pinecone_Existing_VectorStores implements INode { category: string baseClasses: string[] inputs: INodeParams[] + outputs: INodeOutputsValue[] constructor() { this.label = 'Pinecone Load Existing Index' @@ -43,6 +45,18 @@ class Pinecone_Existing_VectorStores implements INode { type: 'string' } ] + this.outputs = [ + { + label: 'Pinecone Retriever', + name: 'retriever', + baseClasses: [this.type, 'BaseRetriever'] + }, + { + label: 'Pinecone Vector Store', + name: 'vectorStore', + baseClasses: [this.type, ...getBaseClasses(PineconeStore)] + } + ] } async init(nodeData: INodeData): Promise { @@ -50,6 +64,7 @@ class Pinecone_Existing_VectorStores implements INode { const pineconeEnv = nodeData.inputs?.pineconeEnv as string const index = nodeData.inputs?.pineconeIndex as string const embeddings = nodeData.inputs?.embeddings as Embeddings + const output = nodeData.outputs?.output as string const client = new PineconeClient() await client.init({ @@ -62,8 +77,14 @@ class Pinecone_Existing_VectorStores implements INode { const vectorStore = await PineconeStore.fromExistingIndex(embeddings, { pineconeIndex }) - const retriever = vectorStore.asRetriever() - return retriever + + if (output === 'retriever') { + const retriever = vectorStore.asRetriever() + return retriever + } else if (output === 'vectorStore') { + return vectorStore + } + return vectorStore } } diff --git a/packages/components/nodes/vectorstores/Pinecone_Upsert/Pinecone_Upsert.ts b/packages/components/nodes/vectorstores/Pinecone_Upsert/Pinecone_Upsert.ts index d498e9cab..cbce7b4b2 100644 --- a/packages/components/nodes/vectorstores/Pinecone_Upsert/Pinecone_Upsert.ts +++ b/packages/components/nodes/vectorstores/Pinecone_Upsert/Pinecone_Upsert.ts @@ -1,8 +1,9 @@ -import { INode, INodeData, INodeParams } from '../../../src/Interface' +import { INode, INodeData, INodeOutputsValue, INodeParams } from '../../../src/Interface' import { PineconeClient } from '@pinecone-database/pinecone' import { PineconeStore } from 'langchain/vectorstores/pinecone' import { Embeddings } from 'langchain/embeddings/base' import { Document } from 'langchain/document' +import { getBaseClasses } from '../../../src/utils' class PineconeUpsert_VectorStores implements INode { label: string @@ -13,6 +14,7 @@ class PineconeUpsert_VectorStores implements INode { category: string baseClasses: string[] inputs: INodeParams[] + outputs: INodeOutputsValue[] constructor() { this.label = 'Pinecone Upsert Document' @@ -49,6 +51,18 @@ class PineconeUpsert_VectorStores implements INode { type: 'string' } ] + this.outputs = [ + { + label: 'Pinecone Retriever', + name: 'retriever', + baseClasses: [this.type, 'BaseRetriever'] + }, + { + label: 'Pinecone Vector Store', + name: 'vectorStore', + baseClasses: [this.type, ...getBaseClasses(PineconeStore)] + } + ] } async init(nodeData: INodeData): Promise { @@ -57,6 +71,7 @@ class PineconeUpsert_VectorStores implements INode { const index = nodeData.inputs?.pineconeIndex as string const docs = nodeData.inputs?.document as Document[] const embeddings = nodeData.inputs?.embeddings as Embeddings + const output = nodeData.outputs?.output as string const client = new PineconeClient() await client.init({ @@ -74,8 +89,14 @@ class PineconeUpsert_VectorStores implements INode { const vectorStore = await PineconeStore.fromDocuments(finalDocs, embeddings, { pineconeIndex }) - const retriever = vectorStore.asRetriever() - return retriever + + if (output === 'retriever') { + const retriever = vectorStore.asRetriever() + return retriever + } else if (output === 'vectorStore') { + return vectorStore + } + return vectorStore } } diff --git a/packages/components/package.json b/packages/components/package.json index 0e845475b..412b505c7 100644 --- a/packages/components/package.json +++ b/packages/components/package.json @@ -27,7 +27,7 @@ "dotenv": "^16.0.0", "express": "^4.17.3", "form-data": "^4.0.0", - "langchain": "^0.0.53", + "langchain": "^0.0.59", "moment": "^2.29.3", "node-fetch": "2", "pdf-parse": "^1.1.1", diff --git a/packages/ui/src/ui-component/switch/Switch.js b/packages/ui/src/ui-component/switch/Switch.js new file mode 100644 index 000000000..04ea17048 --- /dev/null +++ b/packages/ui/src/ui-component/switch/Switch.js @@ -0,0 +1,28 @@ +import { useState } from 'react' +import PropTypes from 'prop-types' +import { FormControl, Switch } from '@mui/material' + +export const SwitchInput = ({ value, onChange, disabled = false }) => { + const [myValue, setMyValue] = useState(!!value ?? false) + + return ( + <> + + { + setMyValue(event.target.checked) + onChange(event.target.checked) + }} + /> + + + ) +} + +SwitchInput.propTypes = { + value: PropTypes.string, + onChange: PropTypes.func, + disabled: PropTypes.bool +} diff --git a/packages/ui/src/views/canvas/NodeInputHandler.js b/packages/ui/src/views/canvas/NodeInputHandler.js index 4698f572d..686448ad2 100644 --- a/packages/ui/src/views/canvas/NodeInputHandler.js +++ b/packages/ui/src/views/canvas/NodeInputHandler.js @@ -12,6 +12,7 @@ import { IconArrowsMaximize } from '@tabler/icons' import { Dropdown } from 'ui-component/dropdown/Dropdown' import { Input } from 'ui-component/input/Input' import { File } from 'ui-component/file/File' +import { SwitchInput } from 'ui-component/switch/Switch' import { flowContext } from 'store/context/ReactFlowContext' import { isValidConnection, getAvailableNodesForVariable } from 'utils/genericHelper' @@ -146,6 +147,13 @@ const NodeInputHandler = ({ inputAnchor, inputParam, data, disabled = false }) = value={data.inputs[inputParam.name] ?? inputParam.default ?? 'Choose a file to upload'} /> )} + {inputParam.type === 'boolean' && ( + (data.inputs[inputParam.name] = newValue)} + value={data.inputs[inputParam.name] ?? inputParam.default ?? false} + /> + )} {(inputParam.type === 'string' || inputParam.type === 'password' || inputParam.type === 'number') && ( Date: Thu, 20 Apr 2023 19:26:57 +0100 Subject: [PATCH 2/3] change dev and run permissions --- packages/server/bin/dev | 0 packages/server/bin/dev.cmd | 0 packages/server/bin/run | 0 packages/server/bin/run.cmd | 0 4 files changed, 0 insertions(+), 0 deletions(-) mode change 100644 => 100755 packages/server/bin/dev mode change 100644 => 100755 packages/server/bin/dev.cmd mode change 100644 => 100755 packages/server/bin/run mode change 100644 => 100755 packages/server/bin/run.cmd diff --git a/packages/server/bin/dev b/packages/server/bin/dev old mode 100644 new mode 100755 diff --git a/packages/server/bin/dev.cmd b/packages/server/bin/dev.cmd old mode 100644 new mode 100755 diff --git a/packages/server/bin/run b/packages/server/bin/run old mode 100644 new mode 100755 diff --git a/packages/server/bin/run.cmd b/packages/server/bin/run.cmd old mode 100644 new mode 100755 From c0ca2757e87ed602b900077e9e8553de33eb8211 Mon Sep 17 00:00:00 2001 From: Henry Date: Thu, 20 Apr 2023 20:57:17 +0100 Subject: [PATCH 3/3] add examples and minZoom --- .../marketplaces/Multiple VectorDB.json | 1020 +++++++++++++++++ packages/ui/src/views/canvas/index.js | 1 + .../views/marketplaces/MarketplaceCanvas.js | 1 + 3 files changed, 1022 insertions(+) create mode 100644 packages/server/marketplaces/Multiple VectorDB.json diff --git a/packages/server/marketplaces/Multiple VectorDB.json b/packages/server/marketplaces/Multiple VectorDB.json new file mode 100644 index 000000000..65ead35c3 --- /dev/null +++ b/packages/server/marketplaces/Multiple VectorDB.json @@ -0,0 +1,1020 @@ +{ + "description": "Use the agent to choose between multiple different vector databases", + "nodes": [ + { + "width": 300, + "height": 280, + "id": "mrklAgentLLM_0", + "position": { + "x": 2364.5095620121215, + "y": -46.710940607495274 + }, + "type": "customNode", + "data": { + "id": "mrklAgentLLM_0", + "label": "MRKL Agent for LLMs", + "name": "mrklAgentLLM", + "type": "AgentExecutor", + "baseClasses": ["AgentExecutor", "BaseChain"], + "category": "Agents", + "description": "Agent that uses the ReAct Framework to decide what action to take, optimized to be used with LLMs", + "inputParams": [], + "inputAnchors": [ + { + "label": "Allowed Tools", + "name": "tools", + "type": "Tool", + "list": true, + "id": "mrklAgentLLM_0-input-tools-Tool" + }, + { + "label": "LLM Model", + "name": "model", + "type": "BaseLLM", + "id": "mrklAgentLLM_0-input-model-BaseLLM" + } + ], + "inputs": { + "tools": [ + "{{serpAPI_0.data.instance}}", + "{{calculator_0.data.instance}}", + "{{chainTool_0.data.instance}}", + "{{chainTool_1.data.instance}}" + ], + "model": "{{openAI_0.data.instance}}" + }, + "outputAnchors": [ + { + "id": "mrklAgentLLM_0-output-mrklAgentLLM-AgentExecutor|BaseChain", + "name": "mrklAgentLLM", + "label": "AgentExecutor", + "type": "AgentExecutor | BaseChain" + } + ], + "selected": false + }, + "selected": false, + "positionAbsolute": { + "x": 2364.5095620121215, + "y": -46.710940607495274 + }, + "dragging": false + }, + { + "width": 300, + "height": 278, + "id": "serpAPI_0", + "position": { + "x": 1895.6273348203852, + "y": -424.5095222426859 + }, + "type": "customNode", + "data": { + "id": "serpAPI_0", + "label": "Serp API", + "name": "serpAPI", + "type": "SerpAPI", + "baseClasses": ["SerpAPI", "Tool"], + "category": "Tools", + "description": "Wrapper around SerpAPI - a real-time API to access Google search results", + "inputParams": [ + { + "label": "Serp Api Key", + "name": "apiKey", + "type": "password" + } + ], + "inputAnchors": [], + "inputs": {}, + "outputAnchors": [ + { + "id": "serpAPI_0-output-serpAPI-SerpAPI|Tool", + "name": "serpAPI", + "label": "SerpAPI", + "type": "SerpAPI | Tool" + } + ], + "selected": false + }, + "selected": false, + "positionAbsolute": { + "x": 1895.6273348203852, + "y": -424.5095222426859 + }, + "dragging": false + }, + { + "width": 300, + "height": 143, + "id": "calculator_0", + "position": { + "x": 1895.7396501948126, + "y": -601.6479551033939 + }, + "type": "customNode", + "data": { + "id": "calculator_0", + "label": "Calculator", + "name": "calculator", + "type": "Calculator", + "baseClasses": ["Calculator", "Tool"], + "category": "Tools", + "description": "Perform calculations on response", + "inputParams": [], + "inputAnchors": [], + "inputs": {}, + "outputAnchors": [ + { + "id": "calculator_0-output-calculator-Calculator|Tool", + "name": "calculator", + "label": "Calculator", + "type": "Calculator | Tool" + } + ], + "selected": false + }, + "selected": false, + "positionAbsolute": { + "x": 1895.7396501948126, + "y": -601.6479551033939 + }, + "dragging": false + }, + { + "width": 300, + "height": 280, + "id": "vectorDBQAChain_0", + "position": { + "x": 1034.1209991774203, + "y": 312.59111975871537 + }, + "type": "customNode", + "data": { + "id": "vectorDBQAChain_0", + "label": "VectorDB QA Chain", + "name": "vectorDBQAChain", + "type": "VectorDBQAChain", + "baseClasses": ["VectorDBQAChain", "BaseChain"], + "category": "Chains", + "description": "QA chain for vector databases", + "inputParams": [], + "inputAnchors": [ + { + "label": "Language Model", + "name": "model", + "type": "BaseLanguageModel", + "id": "vectorDBQAChain_0-input-model-BaseLanguageModel" + }, + { + "label": "Vector Store", + "name": "vectorStore", + "type": "VectorStore", + "id": "vectorDBQAChain_0-input-vectorStore-VectorStore" + } + ], + "inputs": { + "model": "{{openAI_1.data.instance}}", + "vectorStore": "{{pineconeExistingIndex_0.data.instance}}" + }, + "outputAnchors": [ + { + "id": "vectorDBQAChain_0-output-vectorDBQAChain-VectorDBQAChain|BaseChain", + "name": "vectorDBQAChain", + "label": "VectorDBQAChain", + "type": "VectorDBQAChain | BaseChain" + } + ], + "selected": false + }, + "selected": false, + "positionAbsolute": { + "x": 1034.1209991774203, + "y": 312.59111975871537 + }, + "dragging": false + }, + { + "width": 300, + "height": 472, + "id": "openAI_0", + "position": { + "x": 2024.2530157999474, + "y": 579.0657481214333 + }, + "type": "customNode", + "data": { + "id": "openAI_0", + "label": "OpenAI", + "name": "openAI", + "type": "OpenAI", + "baseClasses": ["OpenAI", "BaseLLM", "BaseLanguageModel"], + "category": "LLMs", + "description": "Wrapper around OpenAI large language models", + "inputParams": [ + { + "label": "OpenAI Api Key", + "name": "openAIApiKey", + "type": "password" + }, + { + "label": "Model Name", + "name": "modelName", + "type": "options", + "options": [ + { + "label": "text-davinci-003", + "name": "text-davinci-003" + }, + { + "label": "text-davinci-002", + "name": "text-davinci-002" + }, + { + "label": "text-curie-001", + "name": "text-curie-001" + }, + { + "label": "text-babbage-001", + "name": "text-babbage-001" + } + ], + "default": "text-davinci-003", + "optional": true + }, + { + "label": "Temperature", + "name": "temperature", + "type": "number", + "default": 0.7, + "optional": true + } + ], + "inputAnchors": [], + "inputs": { + "modelName": "text-davinci-003", + "temperature": "0" + }, + "outputAnchors": [ + { + "id": "openAI_0-output-openAI-OpenAI|BaseLLM|BaseLanguageModel", + "name": "openAI", + "label": "OpenAI", + "type": "OpenAI | BaseLLM | BaseLanguageModel" + } + ], + "selected": false + }, + "selected": false, + "positionAbsolute": { + "x": 2024.2530157999474, + "y": 579.0657481214333 + }, + "dragging": false + }, + { + "width": 300, + "height": 472, + "id": "openAI_1", + "position": { + "x": 649.0214134160765, + "y": -74.86211370060312 + }, + "type": "customNode", + "data": { + "id": "openAI_1", + "label": "OpenAI", + "name": "openAI", + "type": "OpenAI", + "baseClasses": ["OpenAI", "BaseLLM", "BaseLanguageModel"], + "category": "LLMs", + "description": "Wrapper around OpenAI large language models", + "inputParams": [ + { + "label": "OpenAI Api Key", + "name": "openAIApiKey", + "type": "password" + }, + { + "label": "Model Name", + "name": "modelName", + "type": "options", + "options": [ + { + "label": "text-davinci-003", + "name": "text-davinci-003" + }, + { + "label": "text-davinci-002", + "name": "text-davinci-002" + }, + { + "label": "text-curie-001", + "name": "text-curie-001" + }, + { + "label": "text-babbage-001", + "name": "text-babbage-001" + } + ], + "default": "text-davinci-003", + "optional": true + }, + { + "label": "Temperature", + "name": "temperature", + "type": "number", + "default": 0.7, + "optional": true + } + ], + "inputAnchors": [], + "inputs": { + "modelName": "text-davinci-003", + "temperature": "0" + }, + "outputAnchors": [ + { + "id": "openAI_1-output-openAI-OpenAI|BaseLLM|BaseLanguageModel", + "name": "openAI", + "label": "OpenAI", + "type": "OpenAI | BaseLLM | BaseLanguageModel" + } + ], + "selected": false + }, + "selected": false, + "positionAbsolute": { + "x": 649.0214134160765, + "y": -74.86211370060312 + }, + "dragging": false + }, + { + "width": 300, + "height": 602, + "id": "chainTool_0", + "position": { + "x": 1385.7876556310375, + "y": 301.1018172104151 + }, + "type": "customNode", + "data": { + "id": "chainTool_0", + "label": "Chain Tool", + "name": "chainTool", + "type": "ChainTool", + "baseClasses": ["ChainTool", "Tool"], + "category": "Tools", + "description": "Use a chain as allowed tool for agent", + "inputParams": [ + { + "label": "Chain Name", + "name": "name", + "type": "string", + "placeholder": "state-of-union-qa", + "id": "chainTool_0-input-name-string" + }, + { + "label": "Chain Description", + "name": "description", + "type": "string", + "rows": 3, + "placeholder": "State of the Union QA - useful for when you need to ask questions about the most recent state of the union address.", + "id": "chainTool_0-input-description-string" + }, + { + "label": "Return Direct", + "name": "returnDirect", + "type": "boolean", + "optional": true, + "id": "chainTool_0-input-returnDirect-boolean" + } + ], + "inputAnchors": [ + { + "label": "Base Chain", + "name": "baseChain", + "type": "BaseChain", + "id": "chainTool_0-input-baseChain-BaseChain" + } + ], + "inputs": { + "name": "state-of-union-qa", + "description": "State of the Union QA - useful for when you need to ask questions about the most recent state of the union address.", + "returnDirect": false, + "baseChain": "{{vectorDBQAChain_0.data.instance}}" + }, + "outputAnchors": [ + { + "id": "chainTool_0-output-chainTool-ChainTool|Tool", + "name": "chainTool", + "label": "ChainTool", + "type": "ChainTool | Tool" + } + ], + "outputs": {}, + "selected": false + }, + "selected": false, + "positionAbsolute": { + "x": 1385.7876556310375, + "y": 301.1018172104151 + }, + "dragging": false + }, + { + "width": 300, + "height": 552, + "id": "pineconeExistingIndex_0", + "position": { + "x": 651.5547843299339, + "y": 424.6009806171603 + }, + "type": "customNode", + "data": { + "id": "pineconeExistingIndex_0", + "label": "Pinecone Load Existing Index", + "name": "pineconeExistingIndex", + "type": "Pinecone", + "baseClasses": ["Pinecone", "BaseRetriever"], + "category": "Vector Stores", + "description": "Load existing index from Pinecone (i.e: Document has been upserted)", + "inputParams": [ + { + "label": "Pinecone Api Key", + "name": "pineconeApiKey", + "type": "password", + "id": "pineconeExistingIndex_0-input-pineconeApiKey-password" + }, + { + "label": "Pinecone Environment", + "name": "pineconeEnv", + "type": "string", + "id": "pineconeExistingIndex_0-input-pineconeEnv-string" + }, + { + "label": "Pinecone Index", + "name": "pineconeIndex", + "type": "string", + "id": "pineconeExistingIndex_0-input-pineconeIndex-string" + } + ], + "inputAnchors": [ + { + "label": "Embeddings", + "name": "embeddings", + "type": "Embeddings", + "id": "pineconeExistingIndex_0-input-embeddings-Embeddings" + } + ], + "inputs": { + "embeddings": "{{openAIEmbeddings_0.data.instance}}", + "pineconeEnv": "us-west4-gcp", + "pineconeIndex": "test" + }, + "outputAnchors": [ + { + "name": "output", + "label": "Output", + "type": "options", + "options": [ + { + "id": "pineconeExistingIndex_0-output-retriever-Pinecone|BaseRetriever", + "name": "retriever", + "label": "Pinecone Retriever", + "type": "Pinecone | BaseRetriever" + }, + { + "id": "pineconeExistingIndex_0-output-vectorStore-Pinecone|VectorStore", + "name": "vectorStore", + "label": "Pinecone Vector Store", + "type": "Pinecone | VectorStore" + } + ], + "default": "retriever" + } + ], + "outputs": { + "output": "vectorStore" + }, + "selected": false + }, + "selected": false, + "positionAbsolute": { + "x": 651.5547843299339, + "y": 424.6009806171603 + }, + "dragging": false + }, + { + "width": 300, + "height": 278, + "id": "openAIEmbeddings_0", + "position": { + "x": 291.9693257708366, + "y": 298.91918778665286 + }, + "type": "customNode", + "data": { + "id": "openAIEmbeddings_0", + "label": "OpenAI Embeddings", + "name": "openAIEmbeddings", + "type": "OpenAIEmbeddings", + "baseClasses": ["OpenAIEmbeddings", "Embeddings"], + "category": "Embeddings", + "description": "OpenAI API to generate embeddings for a given text", + "inputParams": [ + { + "label": "OpenAI Api Key", + "name": "openAIApiKey", + "type": "password", + "id": "openAIEmbeddings_0-input-openAIApiKey-password" + } + ], + "inputAnchors": [], + "inputs": {}, + "outputAnchors": [ + { + "id": "openAIEmbeddings_0-output-openAIEmbeddings-OpenAIEmbeddings|Embeddings", + "name": "openAIEmbeddings", + "label": "OpenAIEmbeddings", + "type": "OpenAIEmbeddings | Embeddings" + } + ], + "outputs": {}, + "selected": false + }, + "selected": false, + "positionAbsolute": { + "x": 291.9693257708366, + "y": 298.91918778665286 + }, + "dragging": false + }, + { + "width": 300, + "height": 602, + "id": "chainTool_1", + "position": { + "x": 1389.4337532996956, + "y": -747.2926394544418 + }, + "type": "customNode", + "data": { + "id": "chainTool_1", + "label": "Chain Tool", + "name": "chainTool", + "type": "ChainTool", + "baseClasses": ["ChainTool", "Tool"], + "category": "Tools", + "description": "Use a chain as allowed tool for agent", + "inputParams": [ + { + "label": "Chain Name", + "name": "name", + "type": "string", + "placeholder": "state-of-union-qa", + "id": "chainTool_1-input-name-string" + }, + { + "label": "Chain Description", + "name": "description", + "type": "string", + "rows": 3, + "placeholder": "State of the Union QA - useful for when you need to ask questions about the most recent state of the union address.", + "id": "chainTool_1-input-description-string" + }, + { + "label": "Return Direct", + "name": "returnDirect", + "type": "boolean", + "optional": true, + "id": "chainTool_1-input-returnDirect-boolean" + } + ], + "inputAnchors": [ + { + "label": "Base Chain", + "name": "baseChain", + "type": "BaseChain", + "id": "chainTool_1-input-baseChain-BaseChain" + } + ], + "inputs": { + "name": "ai-paper-qa", + "description": "AI Paper QA - useful for when you need to ask questions about the AI-Generated Content paper.", + "returnDirect": false, + "baseChain": "{{vectorDBQAChain_1.data.instance}}" + }, + "outputAnchors": [ + { + "id": "chainTool_1-output-chainTool-ChainTool|Tool", + "name": "chainTool", + "label": "ChainTool", + "type": "ChainTool | Tool" + } + ], + "outputs": {}, + "selected": false + }, + "selected": false, + "positionAbsolute": { + "x": 1389.4337532996956, + "y": -747.2926394544418 + }, + "dragging": false + }, + { + "width": 300, + "height": 472, + "id": "openAI_2", + "position": { + "x": 643.0214134160765, + "y": -1105.2621137006015 + }, + "type": "customNode", + "data": { + "id": "openAI_2", + "label": "OpenAI", + "name": "openAI", + "type": "OpenAI", + "baseClasses": ["OpenAI", "BaseLLM", "BaseLanguageModel"], + "category": "LLMs", + "description": "Wrapper around OpenAI large language models", + "inputParams": [ + { + "label": "OpenAI Api Key", + "name": "openAIApiKey", + "type": "password" + }, + { + "label": "Model Name", + "name": "modelName", + "type": "options", + "options": [ + { + "label": "text-davinci-003", + "name": "text-davinci-003" + }, + { + "label": "text-davinci-002", + "name": "text-davinci-002" + }, + { + "label": "text-curie-001", + "name": "text-curie-001" + }, + { + "label": "text-babbage-001", + "name": "text-babbage-001" + } + ], + "default": "text-davinci-003", + "optional": true + }, + { + "label": "Temperature", + "name": "temperature", + "type": "number", + "default": 0.7, + "optional": true + } + ], + "inputAnchors": [], + "inputs": { + "modelName": "text-davinci-003", + "temperature": "0" + }, + "outputAnchors": [ + { + "id": "openAI_2-output-openAI-OpenAI|BaseLLM|BaseLanguageModel", + "name": "openAI", + "label": "OpenAI", + "type": "OpenAI | BaseLLM | BaseLanguageModel" + } + ], + "selected": false + }, + "selected": false, + "positionAbsolute": { + "x": 643.0214134160765, + "y": -1105.2621137006015 + }, + "dragging": false + }, + { + "width": 300, + "height": 278, + "id": "openAIEmbeddings_1", + "position": { + "x": 271.9693257708366, + "y": -739.0808122133471 + }, + "type": "customNode", + "data": { + "id": "openAIEmbeddings_1", + "label": "OpenAI Embeddings", + "name": "openAIEmbeddings", + "type": "OpenAIEmbeddings", + "baseClasses": ["OpenAIEmbeddings", "Embeddings"], + "category": "Embeddings", + "description": "OpenAI API to generate embeddings for a given text", + "inputParams": [ + { + "label": "OpenAI Api Key", + "name": "openAIApiKey", + "type": "password", + "id": "openAIEmbeddings_1-input-openAIApiKey-password" + } + ], + "inputAnchors": [], + "inputs": {}, + "outputAnchors": [ + { + "id": "openAIEmbeddings_1-output-openAIEmbeddings-OpenAIEmbeddings|Embeddings", + "name": "openAIEmbeddings", + "label": "OpenAIEmbeddings", + "type": "OpenAIEmbeddings | Embeddings" + } + ], + "outputs": {}, + "selected": false + }, + "selected": false, + "positionAbsolute": { + "x": 271.9693257708366, + "y": -739.0808122133471 + }, + "dragging": false + }, + { + "width": 300, + "height": 280, + "id": "vectorDBQAChain_1", + "position": { + "x": 1034.1209991774203, + "y": -747.4088802412846 + }, + "type": "customNode", + "data": { + "id": "vectorDBQAChain_1", + "label": "VectorDB QA Chain", + "name": "vectorDBQAChain", + "type": "VectorDBQAChain", + "baseClasses": ["VectorDBQAChain", "BaseChain"], + "category": "Chains", + "description": "QA chain for vector databases", + "inputParams": [], + "inputAnchors": [ + { + "label": "Language Model", + "name": "model", + "type": "BaseLanguageModel", + "id": "vectorDBQAChain_1-input-model-BaseLanguageModel" + }, + { + "label": "Vector Store", + "name": "vectorStore", + "type": "VectorStore", + "id": "vectorDBQAChain_1-input-vectorStore-VectorStore" + } + ], + "inputs": { + "model": "{{openAI_2.data.instance}}", + "vectorStore": "{{chromaExistingIndex_0.data.instance}}" + }, + "outputAnchors": [ + { + "id": "vectorDBQAChain_1-output-vectorDBQAChain-VectorDBQAChain|BaseChain", + "name": "vectorDBQAChain", + "label": "VectorDBQAChain", + "type": "VectorDBQAChain | BaseChain" + } + ], + "selected": false + }, + "selected": false, + "positionAbsolute": { + "x": 1034.1209991774203, + "y": -747.4088802412846 + }, + "dragging": false + }, + { + "width": 300, + "height": 355, + "id": "chromaExistingIndex_0", + "position": { + "x": 643.7296055499842, + "y": -602.9508117559833 + }, + "type": "customNode", + "data": { + "id": "chromaExistingIndex_0", + "label": "Chroma Load Existing Index", + "name": "chromaExistingIndex", + "type": "Chroma", + "baseClasses": ["Chroma", "BaseRetriever"], + "category": "Vector Stores", + "description": "Load existing index from Chroma (i.e: Document has been upserted)", + "inputParams": [ + { + "label": "Collection Name", + "name": "collectionName", + "type": "string", + "id": "chromaExistingIndex_0-input-collectionName-string" + } + ], + "inputAnchors": [ + { + "label": "Embeddings", + "name": "embeddings", + "type": "Embeddings", + "id": "chromaExistingIndex_0-input-embeddings-Embeddings" + } + ], + "inputs": { + "embeddings": "{{openAIEmbeddings_1.data.instance}}", + "collectionName": "ai-paper" + }, + "outputAnchors": [ + { + "name": "output", + "label": "Output", + "type": "options", + "options": [ + { + "id": "chromaExistingIndex_0-output-retriever-Chroma|BaseRetriever", + "name": "retriever", + "label": "Chroma Retriever", + "type": "Chroma | BaseRetriever" + }, + { + "id": "chromaExistingIndex_0-output-vectorStore-Chroma|VectorStore", + "name": "vectorStore", + "label": "Chroma Vector Store", + "type": "Chroma | VectorStore" + } + ], + "default": "retriever" + } + ], + "outputs": { + "output": "vectorStore" + }, + "selected": false + }, + "selected": false, + "positionAbsolute": { + "x": 643.7296055499842, + "y": -602.9508117559833 + }, + "dragging": false + } + ], + "edges": [ + { + "source": "serpAPI_0", + "sourceHandle": "serpAPI_0-output-serpAPI-SerpAPI|Tool", + "target": "mrklAgentLLM_0", + "targetHandle": "mrklAgentLLM_0-input-tools-Tool", + "type": "buttonedge", + "id": "serpAPI_0-serpAPI_0-output-serpAPI-SerpAPI|Tool-mrklAgentLLM_0-mrklAgentLLM_0-input-tools-Tool", + "data": { + "label": "" + } + }, + { + "source": "calculator_0", + "sourceHandle": "calculator_0-output-calculator-Calculator|Tool", + "target": "mrklAgentLLM_0", + "targetHandle": "mrklAgentLLM_0-input-tools-Tool", + "type": "buttonedge", + "id": "calculator_0-calculator_0-output-calculator-Calculator|Tool-mrklAgentLLM_0-mrklAgentLLM_0-input-tools-Tool", + "data": { + "label": "" + } + }, + { + "source": "openAI_0", + "sourceHandle": "openAI_0-output-openAI-OpenAI|BaseLLM|BaseLanguageModel", + "target": "mrklAgentLLM_0", + "targetHandle": "mrklAgentLLM_0-input-model-BaseLLM", + "type": "buttonedge", + "id": "openAI_0-openAI_0-output-openAI-OpenAI|BaseLLM|BaseLanguageModel-mrklAgentLLM_0-mrklAgentLLM_0-input-model-BaseLLM", + "data": { + "label": "" + } + }, + { + "source": "openAI_1", + "sourceHandle": "openAI_1-output-openAI-OpenAI|BaseLLM|BaseLanguageModel", + "target": "vectorDBQAChain_0", + "targetHandle": "vectorDBQAChain_0-input-model-BaseLanguageModel", + "type": "buttonedge", + "id": "openAI_1-openAI_1-output-openAI-OpenAI|BaseLLM|BaseLanguageModel-vectorDBQAChain_0-vectorDBQAChain_0-input-model-BaseLanguageModel", + "data": { + "label": "" + } + }, + { + "source": "vectorDBQAChain_0", + "sourceHandle": "vectorDBQAChain_0-output-vectorDBQAChain-VectorDBQAChain|BaseChain", + "target": "chainTool_0", + "targetHandle": "chainTool_0-input-baseChain-BaseChain", + "type": "buttonedge", + "id": "vectorDBQAChain_0-vectorDBQAChain_0-output-vectorDBQAChain-VectorDBQAChain|BaseChain-chainTool_0-chainTool_0-input-baseChain-BaseChain", + "data": { + "label": "" + } + }, + { + "source": "chainTool_0", + "sourceHandle": "chainTool_0-output-chainTool-ChainTool|Tool", + "target": "mrklAgentLLM_0", + "targetHandle": "mrklAgentLLM_0-input-tools-Tool", + "type": "buttonedge", + "id": "chainTool_0-chainTool_0-output-chainTool-ChainTool|Tool-mrklAgentLLM_0-mrklAgentLLM_0-input-tools-Tool", + "data": { + "label": "" + } + }, + { + "source": "pineconeExistingIndex_0", + "sourceHandle": "pineconeExistingIndex_0-output-vectorStore-Pinecone|VectorStore", + "target": "vectorDBQAChain_0", + "targetHandle": "vectorDBQAChain_0-input-vectorStore-VectorStore", + "type": "buttonedge", + "id": "pineconeExistingIndex_0-pineconeExistingIndex_0-output-vectorStore-Pinecone|VectorStore-vectorDBQAChain_0-vectorDBQAChain_0-input-vectorStore-VectorStore", + "data": { + "label": "" + } + }, + { + "source": "openAIEmbeddings_0", + "sourceHandle": "openAIEmbeddings_0-output-openAIEmbeddings-OpenAIEmbeddings|Embeddings", + "target": "pineconeExistingIndex_0", + "targetHandle": "pineconeExistingIndex_0-input-embeddings-Embeddings", + "type": "buttonedge", + "id": "openAIEmbeddings_0-openAIEmbeddings_0-output-openAIEmbeddings-OpenAIEmbeddings|Embeddings-pineconeExistingIndex_0-pineconeExistingIndex_0-input-embeddings-Embeddings", + "data": { + "label": "" + } + }, + { + "source": "vectorDBQAChain_1", + "sourceHandle": "vectorDBQAChain_1-output-vectorDBQAChain-VectorDBQAChain|BaseChain", + "target": "chainTool_1", + "targetHandle": "chainTool_1-input-baseChain-BaseChain", + "type": "buttonedge", + "id": "vectorDBQAChain_1-vectorDBQAChain_1-output-vectorDBQAChain-VectorDBQAChain|BaseChain-chainTool_1-chainTool_1-input-baseChain-BaseChain", + "data": { + "label": "" + } + }, + { + "source": "openAI_2", + "sourceHandle": "openAI_2-output-openAI-OpenAI|BaseLLM|BaseLanguageModel", + "target": "vectorDBQAChain_1", + "targetHandle": "vectorDBQAChain_1-input-model-BaseLanguageModel", + "type": "buttonedge", + "id": "openAI_2-openAI_2-output-openAI-OpenAI|BaseLLM|BaseLanguageModel-vectorDBQAChain_1-vectorDBQAChain_1-input-model-BaseLanguageModel", + "data": { + "label": "" + } + }, + { + "source": "chromaExistingIndex_0", + "sourceHandle": "chromaExistingIndex_0-output-vectorStore-Chroma|VectorStore", + "target": "vectorDBQAChain_1", + "targetHandle": "vectorDBQAChain_1-input-vectorStore-VectorStore", + "type": "buttonedge", + "id": "chromaExistingIndex_0-chromaExistingIndex_0-output-vectorStore-Chroma|VectorStore-vectorDBQAChain_1-vectorDBQAChain_1-input-vectorStore-VectorStore", + "data": { + "label": "" + } + }, + { + "source": "openAIEmbeddings_1", + "sourceHandle": "openAIEmbeddings_1-output-openAIEmbeddings-OpenAIEmbeddings|Embeddings", + "target": "chromaExistingIndex_0", + "targetHandle": "chromaExistingIndex_0-input-embeddings-Embeddings", + "type": "buttonedge", + "id": "openAIEmbeddings_1-openAIEmbeddings_1-output-openAIEmbeddings-OpenAIEmbeddings|Embeddings-chromaExistingIndex_0-chromaExistingIndex_0-input-embeddings-Embeddings", + "data": { + "label": "" + } + }, + { + "source": "chainTool_1", + "sourceHandle": "chainTool_1-output-chainTool-ChainTool|Tool", + "target": "mrklAgentLLM_0", + "targetHandle": "mrklAgentLLM_0-input-tools-Tool", + "type": "buttonedge", + "id": "chainTool_1-chainTool_1-output-chainTool-ChainTool|Tool-mrklAgentLLM_0-mrklAgentLLM_0-input-tools-Tool", + "data": { + "label": "" + } + } + ] +} diff --git a/packages/ui/src/views/canvas/index.js b/packages/ui/src/views/canvas/index.js index aa6579173..ad725ff8f 100644 --- a/packages/ui/src/views/canvas/index.js +++ b/packages/ui/src/views/canvas/index.js @@ -497,6 +497,7 @@ const Canvas = () => { onConnect={onConnect} onInit={setReactFlowInstance} fitView + minZoom={0.1} > { nodeTypes={nodeTypes} edgeTypes={edgeTypes} fitView + minZoom={0.1} >