{
"nodes": [
{
"width": 300,
"height": 538,
"id": "conversationalRetrievalQAChain_0",
"position": {
"x": 1650,
"y": 375
},
"type": "customNode",
"data": {
"id": "conversationalRetrievalQAChain_0",
"label": "Conversational Retrieval QA Chain",
"version": 3,
"name": "conversationalRetrievalQAChain",
"type": "ConversationalRetrievalQAChain",
"baseClasses": [
"ConversationalRetrievalQAChain",
"BaseChain",
"Runnable"
],
"category": "Chains",
"description": "Document QA - built on RetrievalQAChain to provide a chat history component",
"inputParams": [
{
"label": "Return Source Documents",
"name": "returnSourceDocuments",
"type": "boolean",
"optional": true,
"id": "conversationalRetrievalQAChain_0-input-returnSourceDocuments-boolean"
},
{
"label": "Rephrase Prompt",
"name": "rephrasePrompt",
"type": "string",
"description": "Using previous chat history, rephrase question into a standalone question",
"warning": "Prompt must include input variables: {chat_history} and {question}",
"rows": 4,
"additionalParams": true,
"optional": true,
"default": "Given the following conversation and a follow up question, rephrase the follow up question to be a standalone question.\n\nChat History:\n{chat_history}\nFollow Up Input: {question}\nStandalone Question:",
"id": "conversationalRetrievalQAChain_0-input-rephrasePrompt-string"
},
{
"label": "Response Prompt",
"name": "responsePrompt",
"type": "string",
"description": "Taking the rephrased question, search for answer from the provided context",
"warning": "Prompt must include input variable: {context}",
"rows": 4,
"additionalParams": true,
"optional": true,
"default": "You are a helpful assistant. Using the provided context, answer the user's question to the best of your ability using the resources provided.\nIf there is nothing in the context relevant to the question at hand, just say \"Hmm, I'm not sure.\" Don't try to make up an answer.\n------------\n{context}\n------------\nREMEMBER: If there is no relevant information within the context, just say \"Hmm, I'm not sure.\" Don't try to make up an answer.",
"id": "conversationalRetrievalQAChain_0-input-responsePrompt-string"
}
],
"inputAnchors": [
{
"label": "Chat Model",
"name": "model",
"type": "BaseChatModel",
"id": "conversationalRetrievalQAChain_0-input-model-BaseChatModel"
},
{
"label": "Vector Store Retriever",
"name": "vectorStoreRetriever",
"type": "BaseRetriever",
"id": "conversationalRetrievalQAChain_0-input-vectorStoreRetriever-BaseRetriever"
},
{
"label": "Memory",
"name": "memory",
"type": "BaseMemory",
"optional": true,
"description": "If left empty, a default BufferMemory will be used",
"id": "conversationalRetrievalQAChain_0-input-memory-BaseMemory"
},
{
"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": "conversationalRetrievalQAChain_0-input-inputModeration-Moderation"
}
],
"inputs": {
"inputModeration": "",
"model": "{{chatGoogleGenerativeAI_0.data.instance}}",
"vectorStoreRetriever": "{{faiss_0.data.instance}}",
"memory": "{{bufferMemory_0.data.instance}}",
"rephrasePrompt": "Given the following conversation and a follow up question, rephrase the follow up question to be a standalone question.\n\nChat History:\n{chat_history}\nFollow Up Input: {question}\nStandalone Question:",
"responsePrompt": "You are a helpful assistant. Using the provided context, answer the user's question to the best of your ability using the resources provided.\nIf there is nothing in the context relevant to the question at hand, just say \"Hmm, I'm not sure.\" Don't try to make up an answer.\n------------\n{context}\n------------\nREMEMBER: If there is no relevant information within the context, just say \"Hmm, I'm not sure.\" Don't try to make up an answer."
},
"outputAnchors": [
{
"id": "conversationalRetrievalQAChain_0-output-conversationalRetrievalQAChain-ConversationalRetrievalQAChain|BaseChain|Runnable",
"name": "conversationalRetrievalQAChain",
"label": "ConversationalRetrievalQAChain",
"type": "ConversationalRetrievalQAChain | BaseChain | Runnable"
}
],
"outputs": {},
"selected": false
},
"positionAbsolute": {
"x": 1650,
"y": 375
},
"selected": false,
"dragging": false
},
{
"id": "faiss_0",
"position": {
"x": 1200,
"y": 550
},
"type": "customNode",
"data": {
"id": "faiss_0",
"label": "Faiss",
"version": 1,
"name": "faiss",
"type": "Faiss",
"baseClasses": [
"Faiss",
"VectorStoreRetriever",
"BaseRetriever"
],
"category": "Vector Stores",
"description": "Upsert embedded data and perform similarity search upon query using Faiss library from Meta",
"inputParams": [
{
"label": "Base Path to load",
"name": "basePath",
"description": "Path to load faiss.index file",
"placeholder": "C:\\Users\\User\\Desktop",
"type": "string",
"id": "faiss_0-input-basePath-string"
},
{
"label": "Top K",
"name": "topK",
"description": "Number of top results to fetch. Default to 4",
"placeholder": "4",
"type": "number",
"additionalParams": true,
"optional": true,
"id": "faiss_0-input-topK-number"
}
],
"inputAnchors": [
{
"label": "Document",
"name": "document",
"type": "Document",
"list": true,
"optional": true,
"id": "faiss_0-input-document-Document"
},
{
"label": "Embeddings",
"name": "embeddings",
"type": "Embeddings",
"id": "faiss_0-input-embeddings-Embeddings"
}
],
"inputs": {
"document": [
"{{documentStore_0.data.instance}}"
],
"embeddings": "{{ollamaEmbedding_0.data.instance}}",
"basePath": "/root/.flowise/vectorstore",
"topK": ""
},
"outputAnchors": [
{
"name": "output",
"label": "Output",
"type": "options",
"description": "",
"options": [
{
"id": "faiss_0-output-retriever-Faiss|VectorStoreRetriever|BaseRetriever",
"name": "retriever",
"label": "Faiss Retriever",
"description": "",
"type": "Faiss | VectorStoreRetriever | BaseRetriever"
},
{
"id": "faiss_0-output-vectorStore-Faiss|SaveableVectorStore|VectorStore",
"name": "vectorStore",
"label": "Faiss Vector Store",
"description": "",
"type": "Faiss | SaveableVectorStore | VectorStore"
}
],
"default": "retriever"
}
],
"outputs": {
"output": "retriever"
},
"selected": false
},
"width": 300,
"height": 465,
"selected": false,
"positionAbsolute": {
"x": 1200,
"y": 550
},
"dragging": false
},
{
"id": "documentStore_0",
"position": {
"x": 825,
"y": 375
},
"type": "customNode",
"data": {
"id": "documentStore_0",
"label": "Document Store",
"version": 1,
"name": "documentStore",
"type": "Document",
"baseClasses": [
"Document"
],
"category": "Document Loaders",
"description": "Load data from pre-configured document stores",
"inputParams": [
{
"label": "Select Store",
"name": "selectedStore",
"type": "asyncOptions",
"loadMethod": "listStores",
"id": "documentStore_0-input-selectedStore-asyncOptions",
"display": true
}
],
"inputAnchors": [],
"inputs": {
"selectedStore": "015fdb98-e2e7-4a5b-b1f4-839e007e6685"
},
"outputAnchors": [
{
"name": "output",
"label": "Output",
"type": "options",
"description": "Array of document objects containing metadata and pageContent",
"options": [
{
"id": "documentStore_0-output-document-Document|json",
"name": "document",
"label": "Document",
"description": "Array of document objects containing metadata and pageContent",
"type": "Document | json"
},
{
"id": "documentStore_0-output-text-string|json",
"name": "text",
"label": "Text",
"description": "Concatenated string from pageContent of documents",
"type": "string | json"
}
],
"default": "document"
}
],
"outputs": {
"output": "document"
},
"selected": false
},
"width": 300,
"height": 318,
"selected": false,
"positionAbsolute": {
"x": 825,
"y": 375
},
"dragging": false
},
{
"id": "ollamaEmbedding_0",
"position": {
"x": 825,
"y": 750
},
"type": "customNode",
"data": {
"id": "ollamaEmbedding_0",
"label": "Ollama Embedding",
"version": 2,
"name": "ollamaEmbedding",
"type": "OllamaEmbeddings",
"baseClasses": [
"OllamaEmbeddings",
"Embeddings"
],
"category": "Embeddings",
"description": "Generate embeddings for a given text using open source model on Ollama",
"inputParams": [
{
"label": "Base URL",
"name": "baseUrl",
"type": "string",
"default": "http://localhost:11434",
"id": "ollamaEmbedding_0-input-baseUrl-string",
"display": true
},
{
"label": "Model Name",
"name": "modelName",
"type": "string",
"placeholder": "llama2",
"id": "ollamaEmbedding_0-input-modelName-string",
"display": true
},
{
"label": "Number of GPU",
"name": "numGpu",
"type": "number",
"description": "The number of layers to send to the GPU(s). On macOS it defaults to 1 to enable metal support, 0 to disable. Refer to docs for more details",
"step": 1,
"optional": true,
"additionalParams": true,
"id": "ollamaEmbedding_0-input-numGpu-number",
"display": true
},
{
"label": "Number of Thread",
"name": "numThread",
"type": "number",
"description": "Sets the number of threads to use during computation. By default, Ollama will detect this for optimal performance. It is recommended to set this value to the number of physical CPU cores your system has (as opposed to the logical number of cores). Refer to docs for more details",
"step": 1,
"optional": true,
"additionalParams": true,
"id": "ollamaEmbedding_0-input-numThread-number",
"display": true
},
{
"label": "Use MMap",
"name": "useMMap",
"type": "boolean",
"default": true,
"optional": true,
"additionalParams": true,
"id": "ollamaEmbedding_0-input-useMMap-boolean",
"display": true
}
],
"inputAnchors": [],
"inputs": {
"baseUrl": "http://192.168.100.151:11434",
"modelName": "nomic-embed-text",
"numGpu": "",
"numThread": "",
"useMMap": true
},
"outputAnchors": [
{
"id": "ollamaEmbedding_0-output-ollamaEmbedding-OllamaEmbeddings|Embeddings",
"name": "ollamaEmbedding",
"label": "OllamaEmbeddings",
"description": "Generate embeddings for a given text using open source model on Ollama",
"type": "OllamaEmbeddings | Embeddings"
}
],
"outputs": {},
"selected": false
},
"width": 300,
"height": 436,
"selected": false,
"positionAbsolute": {
"x": 825,
"y": 750
},
"dragging": false
},
{
"id": "chatGoogleGenerativeAI_0",
"position": {
"x": 1200,
"y": -175
},
"type": "customNode",
"data": {
"id": "chatGoogleGenerativeAI_0",
"label": "Google Gemini",
"version": 3.1,
"name": "chatGoogleGenerativeAI",
"type": "ChatGoogleGenerativeAI",
"baseClasses": [
"ChatGoogleGenerativeAI",
"ChatGoogleGenerativeAI",
"BaseChatModel",
"BaseLanguageModel",
"Runnable"
],
"category": "Chat Models",
"description": "Wrapper around Google Gemini large language models that use the Chat endpoint",
"inputParams": [
{
"label": "Connect Credential",
"name": "credential",
"type": "credential",
"credentialNames": [
"googleGenerativeAI"
],
"optional": false,
"description": "Google Generative AI credential.",
"id": "chatGoogleGenerativeAI_0-input-credential-credential",
"display": true
},
{
"label": "Model Name",
"name": "modelName",
"type": "asyncOptions",
"loadMethod": "listModels",
"default": "gemini-1.5-flash-latest",
"id": "chatGoogleGenerativeAI_0-input-modelName-asyncOptions",
"display": true
},
{
"label": "Custom Model Name",
"name": "customModelName",
"type": "string",
"placeholder": "gemini-1.5-pro-exp-0801",
"description": "Custom model name to use. If provided, it will override the model selected",
"additionalParams": true,
"optional": true,
"id": "chatGoogleGenerativeAI_0-input-customModelName-string",
"display": true
},
{
"label": "Temperature",
"name": "temperature",
"type": "number",
"step": 0.1,
"default": 0.9,
"optional": true,
"id": "chatGoogleGenerativeAI_0-input-temperature-number",
"display": true
},
{
"label": "Streaming",
"name": "streaming",
"type": "boolean",
"default": true,
"optional": true,
"additionalParams": true,
"id": "chatGoogleGenerativeAI_0-input-streaming-boolean",
"display": true
},
{
"label": "Allow Image Uploads",
"name": "allowImageUploads",
"type": "boolean",
"description": "Allow image input. Refer to the docs for more details.",
"default": false,
"optional": true,
"id": "chatGoogleGenerativeAI_0-input-allowImageUploads-boolean",
"display": true
},
{
"label": "Thinking Budget",
"name": "thinkingBudget",
"type": "number",
"description": "Guides the number of thinking tokens. -1 for dynamic, 0 to disable, or positive integer (Gemini 2.5 models).",
"step": 1,
"optional": true,
"additionalParams": true,
"show": {
"modelName": [
"gemini-2.5-pro",
"gemini-2.5-flash",
"gemini-2.5-flash-lite"
]
},
"id": "chatGoogleGenerativeAI_0-input-thinkingBudget-number",
"display": true
},
{
"label": "Thinking Level",
"name": "thinkingLevel",
"type": "options",
"description": "Adjust the amount of reasoning effort based on the complexity of the user request",
"options": [
{
"label": "Low",
"name": "LOW"
},
{
"label": "Medium",
"name": "MEDIUM"
},
{
"label": "High",
"name": "HIGH"
}
],
"optional": true,
"additionalParams": true,
"show": {
"modelName": [
"gemini-3.1-pro-preview",
"gemini-3.1-flash-lite-preview",
"gemini-3-flash-preview"
]
},
"id": "chatGoogleGenerativeAI_0-input-thinkingLevel-options",
"display": false
},
{
"label": "Max Output Tokens",
"name": "maxOutputTokens",
"type": "number",
"step": 1,
"optional": true,
"additionalParams": true,
"id": "chatGoogleGenerativeAI_0-input-maxOutputTokens-number",
"display": true
},
{
"label": "Top Probability",
"name": "topP",
"type": "number",
"step": 0.1,
"optional": true,
"additionalParams": true,
"id": "chatGoogleGenerativeAI_0-input-topP-number",
"display": true
},
{
"label": "Top Next Highest Probability Tokens",
"name": "topK",
"type": "number",
"description": "Decode using top-k sampling: consider the set of top_k most probable tokens. Must be positive",
"step": 1,
"optional": true,
"additionalParams": true,
"id": "chatGoogleGenerativeAI_0-input-topK-number",
"display": true
},
{
"label": "Safety Settings",
"name": "safetySettings",
"type": "array",
"description": "Safety settings for the model. Refer to the official guide on how to use Safety Settings",
"array": [
{
"label": "Harm Category",
"name": "harmCategory",
"type": "options",
"options": [
{
"label": "Dangerous",
"name": "HARM_CATEGORY_DANGEROUS_CONTENT",
"description": "Promotes, facilitates, or encourages harmful acts."
},
{
"label": "Harassment",
"name": "HARM_CATEGORY_HARASSMENT",
"description": "Negative or harmful comments targeting identity and/or protected attributes."
},
{
"label": "Hate Speech",
"name": "HARM_CATEGORY_HATE_SPEECH",
"description": "Content that is rude, disrespectful, or profane."
},
{
"label": "Sexually Explicit",
"name": "HARM_CATEGORY_SEXUALLY_EXPLICIT",
"description": "Contains references to sexual acts or other lewd content."
},
{
"label": "Civic Integrity",
"name": "HARM_CATEGORY_CIVIC_INTEGRITY",
"description": "Election-related queries."
}
]
},
{
"label": "Harm Block Threshold",
"name": "harmBlockThreshold",
"type": "options",
"options": [
{
"label": "None",
"name": "BLOCK_NONE",
"description": "Always show regardless of probability of unsafe content"
},
{
"label": "Only High",
"name": "BLOCK_ONLY_HIGH",
"description": "Block when high probability of unsafe content"
},
{
"label": "Medium and Above",
"name": "BLOCK_MEDIUM_AND_ABOVE",
"description": "Block when medium or high probability of unsafe content"
},
{
"label": "Low and Above",
"name": "BLOCK_LOW_AND_ABOVE",
"description": "Block when low, medium or high probability of unsafe content"
},
{
"label": "Threshold Unspecified (Default Threshold)",
"name": "HARM_BLOCK_THRESHOLD_UNSPECIFIED",
"description": "Threshold is unspecified, block using default threshold"
}
]
}
],
"optional": true,
"additionalParams": true,
"id": "chatGoogleGenerativeAI_0-input-safetySettings-array",
"display": true
},
{
"label": "Base URL",
"name": "baseUrl",
"type": "string",
"description": "Base URL for the API. Leave empty to use the default.",
"optional": true,
"additionalParams": true,
"id": "chatGoogleGenerativeAI_0-input-baseUrl-string",
"display": true
}
],
"inputAnchors": [
{
"label": "Cache",
"name": "cache",
"type": "BaseCache",
"optional": true,
"id": "chatGoogleGenerativeAI_0-input-cache-BaseCache",
"display": true
}
],
"inputs": {
"cache": "",
"modelName": "gemini-2.5-flash-lite",
"customModelName": "",
"temperature": 0.9,
"streaming": true,
"allowImageUploads": "",
"thinkingBudget": "",
"thinkingLevel": "",
"maxOutputTokens": "",
"topP": "",
"topK": "",
"safetySettings": "",
"baseUrl": ""
},
"outputAnchors": [
{
"id": "chatGoogleGenerativeAI_0-output-chatGoogleGenerativeAI-ChatGoogleGenerativeAI|ChatGoogleGenerativeAI|BaseChatModel|BaseLanguageModel|Runnable",
"name": "chatGoogleGenerativeAI",
"label": "ChatGoogleGenerativeAI",
"description": "Wrapper around Google Gemini large language models that use the Chat endpoint",
"type": "ChatGoogleGenerativeAI | ChatGoogleGenerativeAI | BaseChatModel | BaseLanguageModel | Runnable"
}
],
"outputs": {},
"selected": false
},
"width": 300,
"height": 676,
"selected": false,
"positionAbsolute": {
"x": 1200,
"y": -175
},
"dragging": false
},
{
"id": "bufferMemory_0",
"position": {
"x": 1200,
"y": 1075
},
"type": "customNode",
"data": {
"id": "bufferMemory_0",
"label": "Buffer Memory",
"version": 2,
"name": "bufferMemory",
"type": "BufferMemory",
"baseClasses": [
"BufferMemory",
"BaseChatMemory",
"BaseMemory"
],
"category": "Memory",
"description": "Retrieve chat messages stored in database",
"inputParams": [
{
"label": "Session Id",
"name": "sessionId",
"type": "string",
"description": "If not specified, a random id will be used. Learn more",
"default": "",
"additionalParams": true,
"optional": true,
"id": "bufferMemory_0-input-sessionId-string",
"display": true
},
{
"label": "Memory Key",
"name": "memoryKey",
"type": "string",
"default": "chat_history",
"additionalParams": true,
"id": "bufferMemory_0-input-memoryKey-string",
"display": true
}
],
"inputAnchors": [],
"inputs": {
"sessionId": "",
"memoryKey": "chat_history"
},
"outputAnchors": [
{
"id": "bufferMemory_0-output-bufferMemory-BufferMemory|BaseChatMemory|BaseMemory",
"name": "bufferMemory",
"label": "BufferMemory",
"description": "Retrieve chat messages stored in database",
"type": "BufferMemory | BaseChatMemory | BaseMemory"
}
],
"outputs": {},
"selected": false
},
"width": 300,
"height": 259,
"selected": false,
"dragging": false,
"positionAbsolute": {
"x": 1200,
"y": 1075
}
}
],
"edges": [
{
"source": "ollamaEmbedding_0",
"sourceHandle": "ollamaEmbedding_0-output-ollamaEmbedding-OllamaEmbeddings|Embeddings",
"target": "faiss_0",
"targetHandle": "faiss_0-input-embeddings-Embeddings",
"type": "buttonedge",
"id": "ollamaEmbedding_0-ollamaEmbedding_0-output-ollamaEmbedding-OllamaEmbeddings|Embeddings-faiss_0-faiss_0-input-embeddings-Embeddings"
},
{
"source": "documentStore_0",
"sourceHandle": "documentStore_0-output-document-Document|json",
"target": "faiss_0",
"targetHandle": "faiss_0-input-document-Document",
"type": "buttonedge",
"id": "documentStore_0-documentStore_0-output-document-Document|json-faiss_0-faiss_0-input-document-Document"
},
{
"source": "faiss_0",
"sourceHandle": "faiss_0-output-retriever-Faiss|VectorStoreRetriever|BaseRetriever",
"target": "conversationalRetrievalQAChain_0",
"targetHandle": "conversationalRetrievalQAChain_0-input-vectorStoreRetriever-BaseRetriever",
"type": "buttonedge",
"id": "faiss_0-faiss_0-output-retriever-Faiss|VectorStoreRetriever|BaseRetriever-conversationalRetrievalQAChain_0-conversationalRetrievalQAChain_0-input-vectorStoreRetriever-BaseRetriever"
},
{
"source": "chatGoogleGenerativeAI_0",
"sourceHandle": "chatGoogleGenerativeAI_0-output-chatGoogleGenerativeAI-ChatGoogleGenerativeAI|ChatGoogleGenerativeAI|BaseChatModel|BaseLanguageModel|Runnable",
"target": "conversationalRetrievalQAChain_0",
"targetHandle": "conversationalRetrievalQAChain_0-input-model-BaseChatModel",
"type": "buttonedge",
"id": "chatGoogleGenerativeAI_0-chatGoogleGenerativeAI_0-output-chatGoogleGenerativeAI-ChatGoogleGenerativeAI|ChatGoogleGenerativeAI|BaseChatModel|BaseLanguageModel|Runnable-conversationalRetrievalQAChain_0-conversationalRetrievalQAChain_0-input-model-BaseChatModel"
},
{
"source": "bufferMemory_0",
"sourceHandle": "bufferMemory_0-output-bufferMemory-BufferMemory|BaseChatMemory|BaseMemory",
"target": "conversationalRetrievalQAChain_0",
"targetHandle": "conversationalRetrievalQAChain_0-input-memory-BaseMemory",
"type": "buttonedge",
"id": "bufferMemory_0-bufferMemory_0-output-bufferMemory-BufferMemory|BaseChatMemory|BaseMemory-conversationalRetrievalQAChain_0-conversationalRetrievalQAChain_0-input-memory-BaseMemory"
}
]
}