{
  "nodes": [
    {
      "id": "671268e2-e7a4-4b30-90ad-e132f8e8afee",
      "name": "When chat message received",
      "type": "@n8n/n8n-nodes-langchain.chatTrigger",
      "position": [
        -368,
        480
      ],
      "parameters": {
        "mode": "webhook",
        "public": true,
        "options": {
          "responseMode": "lastNode"
        }
      },
      "typeVersion": 1.1
    },
    {
      "id": "fb2d9289-334f-43a1-a305-d40e70e39b97",
      "name": "OpenAI Chat Model",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "position": [
        32,
        784
      ],
      "parameters": {
        "model": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-4.1-mini",
          "cachedResultName": "gpt-4.1-mini"
        },
        "options": {
          "temperature": 0.5,
          "presencePenalty": 1,
          "frequencyPenalty": 1
        }
      },
      "credentials": {
        "openAiApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "94cb5658-5ec0-47ac-8192-9793189937a8",
      "name": "Simple Memory",
      "type": "@n8n/n8n-nodes-langchain.memoryBufferWindow",
      "position": [
        256,
        784
      ],
      "parameters": {
        "sessionIdType": "customKey",
        "contextWindowLength": 10
      },
      "typeVersion": 1.3
    },
    {
      "id": "f7408b4e-025e-4a43-9c76-3b157537d43d",
      "name": "Loop Over Items1",
      "type": "n8n-nodes-base.splitInBatches",
      "position": [
        -880,
        1328
      ],
      "parameters": {
        "options": {}
      },
      "typeVersion": 3
    },
    {
      "id": "c7807b4e-eed0-42c1-a066-74c12215ec57",
      "name": "Wait",
      "type": "n8n-nodes-base.wait",
      "position": [
        752,
        1552
      ],
      "parameters": {},
      "typeVersion": 1.1
    },
    {
      "id": "bab90cc7-5a3c-426d-8c84-c813bf037e76",
      "name": "Default Data Loader",
      "type": "@n8n/n8n-nodes-langchain.documentDefaultDataLoader",
      "position": [
        1296,
        1584
      ],
      "parameters": {
        "options": {
          "metadata": {
            "metadataValues": [
              {
                "name": "source",
                "value": "={{ $json.content.parseJson().metadata.source }}"
              },
              {
                "name": "blobType",
                "value": "application/jsonb"
              },
              {
                "name": "loc",
                "value": "={{ $json.content.parseJson().metadata.loc }}"
              },
              {
                "name": "source_metadata_id",
                "value": "={{ $json.content.parseJson().metadata.source_metadata_id }}"
              }
            ]
          }
        },
        "jsonData": "={{ $json.content.parseJson().pageContent.toJsonString() }}",
        "jsonMode": "expressionData"
      },
      "typeVersion": 1
    },
    {
      "id": "5349c366-6b07-4838-824e-b0192070de44",
      "name": "Character Text Splitter",
      "type": "@n8n/n8n-nodes-langchain.textSplitterCharacterTextSplitter",
      "position": [
        1376,
        1744
      ],
      "parameters": {
        "chunkSize": 10000000
      },
      "typeVersion": 1
    },
    {
      "id": "53158770-6435-4615-8c52-9499004d365f",
      "name": "If2",
      "type": "n8n-nodes-base.if",
      "position": [
        640,
        1328
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "loose"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "d15e917b-43d2-40b8-8b49-af467ff63961",
              "operator": {
                "type": "string",
                "operation": "notExists",
                "singleValue": true
              },
              "leftValue": "={{ $json.data[0].parseJson().skipped }}",
              "rightValue": ""
            }
          ]
        },
        "looseTypeValidation": true
      },
      "typeVersion": 2.2
    },
    {
      "id": "9a5aa2c1-de3b-43b3-941d-eac3a9aa01c2",
      "name": "Qdrant Vector Store1",
      "type": "@n8n/n8n-nodes-langchain.vectorStoreQdrant",
      "position": [
        1344,
        1312
      ],
      "parameters": {
        "mode": "insert",
        "options": {},
        "qdrantCollection": {
          "__rl": true,
          "mode": "list",
          "value": "docragtestkb",
          "cachedResultName": "docragtestkb"
        },
        "embeddingBatchSize": "=200"
      },
      "credentials": {
        "qdrantApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.1
    },
    {
      "id": "7994799d-0f57-454f-ae5f-6d0bfc78973a",
      "name": "Embeddings Mistral Cloud",
      "type": "@n8n/n8n-nodes-langchain.embeddingsMistralCloud",
      "position": [
        1136,
        1600
      ],
      "parameters": {
        "options": {}
      },
      "credentials": {
        "mistralCloudApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "c2595c65-fbff-45db-a179-d6bdbde1ea01",
      "name": "Qdrant Vector Store",
      "type": "@n8n/n8n-nodes-langchain.vectorStoreQdrant",
      "position": [
        544,
        656
      ],
      "parameters": {
        "mode": "retrieve-as-tool",
        "options": {},
        "toolDescription": "use this data answer query",
        "qdrantCollection": {
          "__rl": true,
          "mode": "list",
          "value": "docragtestkb",
          "cachedResultName": "docragtestkb"
        }
      },
      "credentials": {
        "qdrantApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.3
    },
    {
      "id": "e3617329-c6a9-4616-8f57-a571a4170ebe",
      "name": "Embeddings Mistral Cloud1",
      "type": "@n8n/n8n-nodes-langchain.embeddingsMistralCloud",
      "position": [
        464,
        784
      ],
      "parameters": {
        "options": {}
      },
      "credentials": {
        "mistralCloudApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "950091b1-c765-42ee-b0e8-d715fcefa8f3",
      "name": "When clicking \u2018Execute workflow\u2019",
      "type": "n8n-nodes-base.manualTrigger",
      "position": [
        -1264,
        1328
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "a49b8efb-07bb-43ec-9fed-a5ed5b12a944",
      "name": "Set metadata",
      "type": "n8n-nodes-base.set",
      "position": [
        -656,
        1344
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "10646eae-ae46-4327-a4dc-9987c2d76173",
              "name": "file_id",
              "type": "string",
              "value": "={{ $json.id }}"
            },
            {
              "id": "f4536df5-d0b1-4392-bf17-b8137fb31a44",
              "name": "file_type",
              "type": "string",
              "value": "={{ $json.mimeType }}"
            },
            {
              "id": "77d782de-169d-4a46-8a8e-a3831c04d90f",
              "name": "file_title",
              "type": "string",
              "value": "={{ $json.name }}"
            },
            {
              "id": "9bde4d7f-e4f3-4ebd-9338-dce1350f9eab",
              "name": "file_url",
              "type": "string",
              "value": "={{ $json.webViewLink }}"
            },
            {
              "id": "fae402c8-c486-4b57-8d28-bf669db6b442",
              "name": "last_modified_date",
              "type": "string",
              "value": "={{ $json.modifiedTime }}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "6451f612-f4db-49a7-8f83-436ed9025882",
      "name": "Mistral Upload",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        -96,
        1344
      ],
      "parameters": {
        "url": "https://api.mistral.ai/v1/files",
        "method": "POST",
        "options": {},
        "sendBody": true,
        "contentType": "multipart-form-data",
        "authentication": "predefinedCredentialType",
        "bodyParameters": {
          "parameters": [
            {
              "name": "purpose",
              "value": "ocr"
            },
            {
              "name": "file",
              "parameterType": "formBinaryData",
              "inputDataFieldName": "data"
            }
          ]
        },
        "nodeCredentialType": "mistralCloudApi"
      },
      "credentials": {
        "mistralCloudApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "26913424-307f-435e-a6ee-ea4d217e11b7",
      "name": "Mistral Signed URL",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        144,
        1344
      ],
      "parameters": {
        "url": "=https://api.mistral.ai/v1/files/{{ $json.id }}/url",
        "options": {},
        "sendQuery": true,
        "sendHeaders": true,
        "authentication": "predefinedCredentialType",
        "queryParameters": {
          "parameters": [
            {
              "name": "expiry",
              "value": "24"
            }
          ]
        },
        "headerParameters": {
          "parameters": [
            {
              "name": "Accept",
              "value": "application/json"
            }
          ]
        },
        "nodeCredentialType": "mistralCloudApi"
      },
      "credentials": {
        "mistralCloudApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "b4d90372-a7d5-42e2-b9f3-21687fba59eb",
      "name": "Mistral DOC OCR",
      "type": "n8n-nodes-base.httpRequest",
      "onError": "continueErrorOutput",
      "position": [
        400,
        1344
      ],
      "parameters": {
        "url": "https://api.mistral.ai/v1/ocr",
        "method": "POST",
        "options": {},
        "jsonBody": "={\n  \"model\": \"mistral-ocr-latest\",\n  \"document\": {\n    \"type\": \"document_url\",\n    \"document_url\": \"{{ $json.url }}\"\n  },\n  \"include_image_base64\": true\n}",
        "sendBody": true,
        "specifyBody": "json",
        "authentication": "predefinedCredentialType",
        "nodeCredentialType": "mistralCloudApi"
      },
      "credentials": {
        "mistralCloudApi": {
          "name": "<your credential>"
        }
      },
      "retryOnFail": true,
      "typeVersion": 4.2
    },
    {
      "id": "664b3731-0da6-4dfa-b3d5-d05edff8fb70",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -144,
        1200
      ],
      "parameters": {
        "color": 5,
        "width": 688,
        "height": 304,
        "content": "## MISTRAL OCR\n [OCR Guide](https://mistral.ai/news/mistral-ocr)\n1. UPLOAD FILE\n2. GET SIGNED URL\n3. GET EXTRACT DATA AFTER USING MISTRAL OCR"
      },
      "typeVersion": 1
    },
    {
      "id": "64cef90f-5a5f-4e09-856f-fc66d1b58b7f",
      "name": "Google Drive(brand related data for chatbot)",
      "type": "n8n-nodes-base.googleDrive",
      "position": [
        -1056,
        1328
      ],
      "parameters": {
        "filter": {
          "folderId": {
            "__rl": true,
            "mode": "url",
            "value": "",
            "__regex": "https:\\/\\/drive\\.google\\.com(?:\\/.*|)\\/folders\\/([0-9a-zA-Z\\-_]+)(?:\\/.*|)"
          }
        },
        "options": {
          "fields": [
            "id",
            "name",
            "webViewLink",
            "mimeType",
            "*"
          ]
        },
        "resource": "fileFolder",
        "searchMethod": "query"
      },
      "credentials": {
        "googleDriveOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 3
    },
    {
      "id": "3168eaff-b21c-4ff8-81f1-7c4b8605e66b",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1120,
        1200
      ],
      "parameters": {
        "color": 5,
        "height": 288,
        "content": "## load folder with all need for website chatbot"
      },
      "typeVersion": 1
    },
    {
      "id": "99e919d1-5a9c-436b-af53-245a29f35377",
      "name": "Google Drive(load file)",
      "type": "n8n-nodes-base.googleDrive",
      "position": [
        -464,
        1344
      ],
      "parameters": {
        "fileId": {
          "__rl": true,
          "mode": "id",
          "value": "={{ $('Set metadata').item.json.file_id }}"
        },
        "options": {},
        "operation": "download"
      },
      "credentials": {
        "googleDriveOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 3
    },
    {
      "id": "73883e55-221d-4a58-bfad-a93fb4e9c16c",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -544,
        1216
      ],
      "parameters": {
        "color": 5,
        "width": 320,
        "height": 272,
        "content": "## load individual files"
      },
      "typeVersion": 1
    },
    {
      "id": "2c3716a9-3731-4a29-913c-a0b20db6e767",
      "name": "Code(convert to chunks for loading into vector db)",
      "type": "n8n-nodes-base.code",
      "position": [
        1136,
        1312
      ],
      "parameters": {
        "jsCode": "// 0. Parse the incoming Document data\nlet raw = $input.first().json['Document data'];\nlet arr = typeof raw === 'string' ? JSON.parse(raw) : raw;\n\n// If document name exists, use it \u2014 else fallback\nlet source = $input.first().json['Document name'] || 'unknown_source';\n\n// If your workflow previously had a reference like $('Insert Document Metadata1')\n// and it caused an \"unexecuted\" error, we replace it with a safe null or fetch from input\nlet source_id = $input.first().json['source_metadata_id'] || $input.first().json['source'] || $input.first().json[' source'] || null;\n\n// Helper: return character length of an array object\nfunction getObjLength(obj) {\n  return (obj.content || '').length;\n}\n\nfunction getObjLengthofTextOnly(obj) {\n  // Ignore OCR images for character count\n  if (obj.type === 'image_ocr') return 0;\n  return (obj.content || '').length;\n}\n\n// Split any single item whose content is > chunkSize into multiple items\nfunction splitOversizedItems(arr, chunkSize) {\n  const result = [];\n  for (const item of arr) {\n    const content = item.content || '';\n    if (content.length <= chunkSize) {\n      result.push(item);\n    } else {\n      for (let start = 0; start < content.length; start += chunkSize) {\n        const part = content.slice(start, start + chunkSize);\n        result.push({ ...item, content: part });\n      }\n    }\n  }\n  return result;\n}\n\n// Chunking function\nfunction chunkByCharLength(arr, source, chunkSize = 1000) {\n  const flat = splitOversizedItems(arr, chunkSize);\n  const response = [];\n  let idx = 0;\n  let charPos = 0;\n\n  while (idx < flat.length) {\n    const a = [];\n    let sum = 0;\n    const from = charPos;\n\n    while (idx < flat.length && sum < chunkSize) {\n      const item = flat[idx];\n      const len = getObjLength(item);\n      const text_len = getObjLengthofTextOnly(item);\n      a.push(item);\n      sum += len;\n      charPos += text_len;\n      idx++;\n    }\n\n    const to = charPos;\n    const metadata = {\n      source: source,\n      source_metadata_id: source_id,\n      loc: { Characters: { from, to } }\n    };\n\n    response.push({\n      content: JSON.stringify({\n        pageContent: a,\n        metadata\n      })\n    });\n  }\n  return response;\n}\n\n// 1. Run chunking\nconst chunks = chunkByCharLength(arr, source, 1000);\n\n// 2. Return in n8n-compatible format\nreturn chunks.map(c => ({ json: c }));\n"
      },
      "typeVersion": 2
    },
    {
      "id": "8648ab70-4909-401c-896e-7598eb0dd2ed",
      "name": "prepare for chunking",
      "type": "n8n-nodes-base.set",
      "position": [
        944,
        1312
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "5132d92c-41da-4a55-ad79-0c329ca7e626",
              "name": "Document name",
              "type": "string",
              "value": "={{ $('HTTP Request2').item.json.data[0].parseJson().source }}"
            },
            {
              "id": "c8160701-2be7-43c6-bcfa-295fbebe0e23",
              "name": "Document data",
              "type": "string",
              "value": "={{ $('HTTP Request2').item.json.data[0].parseJson().blocks }}"
            },
            {
              "id": "1087ab34-5643-4755-b545-cf34d0ae2cd2",
              "name": " source",
              "type": "string",
              "value": "={{ $('Google Drive(load file)').item.json.id }}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "a028ac1b-6827-4255-bfc2-8060c77d889e",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        848,
        1200
      ],
      "parameters": {
        "color": 5,
        "width": 416,
        "height": 272,
        "content": "## convert ocr output into chunks for loading into vector database"
      },
      "typeVersion": 1
    },
    {
      "id": "c87dbc3d-1623-442b-a122-bf4d3a49a821",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1296,
        1200
      ],
      "parameters": {
        "color": 5,
        "width": 336,
        "height": 272,
        "content": "## qdrant vector store"
      },
      "typeVersion": 1
    },
    {
      "id": "e1dcae50-2af5-42e2-89f2-3ccd8ebab25e",
      "name": "Webhook",
      "type": "n8n-nodes-base.webhook",
      "position": [
        -368,
        720
      ],
      "parameters": {
        "path": "75458eba-ed7b-491d-9fcf-aa8f7440aab8",
        "options": {},
        "httpMethod": "POST"
      },
      "typeVersion": 2.1
    },
    {
      "id": "5f5aeada-4156-4212-8069-f36e5cec577b",
      "name": "Sticky Note5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -16,
        400
      ],
      "parameters": {
        "color": 5,
        "width": 800,
        "height": 512,
        "content": "## website chat agent \n\nreply to user query either from embedded chat or webhook"
      },
      "typeVersion": 1
    },
    {
      "id": "659a7802-35ab-4e3d-a436-373e9e54767d",
      "name": "Sticky Note6",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -448,
        640
      ],
      "parameters": {
        "color": 5,
        "width": 288,
        "height": 240,
        "content": "## chatbot from webhook"
      },
      "typeVersion": 1
    },
    {
      "id": "891e023c-5823-4afd-8319-5a1e6b287890",
      "name": "Sticky Note7",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -448,
        384
      ],
      "parameters": {
        "color": 5,
        "width": 288,
        "height": 240,
        "content": "## embedded chat "
      },
      "typeVersion": 1
    },
    {
      "id": "e1ef6116-da64-4c7f-aced-475fc182bf03",
      "name": "website chat agent",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        240,
        528
      ],
      "parameters": {
        "text": "={{ $json.que }}",
        "options": {
          "systemMessage": "=You are the official AI assistant for this website. \nYour role is to inform and guide visitors about the brand\u2019s offerings, services, and value. \nYour ONLY knowledge source is the supabase table \"chatdbtai\". \n\nRules:\n1. Always use vector  search on \"chatdbtai\". Base all answers only on that content.\n2. Speak in a clear, friendly, and conversational tone \u2014 like a website guide helping a visitor understand the brand.\n3. When asked \u201cwhat does DBT offer\u201d or \u201cAI services,\u201d explain the different offerings in a structured way:\n   - Summarize in 1\u20132 sentences.\n   - Then list the services / offerings as **bullet points** or **bold keywords**.\n   - Focus on benefits (what the visitor gains).\n4. If the user asks about a blog, share a direct clickable link from \"chatdbtai\".\n5. If the user provides a URL:\n   - If it exists in \"chatdbtai\", answer from that record.\n   - If not, summarize the page briefly.\n6. If nothing relevant is found, reply exactly:\n   \u201cI couldn\u2019t find that on this site.\u201d\n7. If the question is unrelated to the website, give a short conversational reply, then guide the visitor back to brand services if possible.\n8. Never show database details, queries, or hidden fields.\n\nStyle:\n- Use short, engaging sentences.\n- Highlight brand strengths and services clearly.\n- Prefer **lists** for multiple offerings.\n- Keep it visitor-focused: how DBT helps them.\n\n\n"
        },
        "promptType": "define"
      },
      "typeVersion": 1.9
    },
    {
      "id": "21ecc7c5-7c25-4f5f-8aec-7d437d66e7c8",
      "name": "Sticky Note8",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1552,
        672
      ],
      "parameters": {
        "color": 5,
        "width": 576,
        "height": 336,
        "content": "## Website Chat + Document Intelligence Workflow\n\nEnables a **website chatbot** to answer user queries using **documents stored in Google Drive**.  \nThe workflow automatically **fetches, OCRs, chunks, and embeds** documents with **Mistral AI**, then stores them in **Qdrant** for vector search \u2014 allowing the chatbot to deliver accurate, context-aware replies in real time.\n\n**Flow:** Google Drive \u2192 OCR + Chunk \u2192 Embed \u2192 Qdrant Vector Store \u2192 Chat Query \u2192 Intelligent Response  \n**Core Tools:** Mistral AI \u00b7 Qdrant \u00b7 Supabase \u00b7 OpenAI"
      },
      "typeVersion": 1
    }
  ],
  "connections": {
    "If2": {
      "main": [
        [
          {
            "node": "prepare for chunking",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Loop Over Items1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Wait": {
      "main": [
        [
          {
            "node": "Google Drive(load file)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Webhook": {
      "main": [
        [
          {
            "node": "website chat agent",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Set metadata": {
      "main": [
        [
          {
            "node": "Google Drive(load file)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Simple Memory": {
      "ai_memory": [
        [
          {
            "node": "website chat agent",
            "type": "ai_memory",
            "index": 0
          }
        ]
      ]
    },
    "Mistral Upload": {
      "main": [
        [
          {
            "node": "Mistral Signed URL",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Mistral DOC OCR": {
      "main": [
        [
          {
            "node": "If2",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Wait",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Loop Over Items1": {
      "main": [
        [],
        [
          {
            "node": "Set metadata",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "OpenAI Chat Model": {
      "ai_languageModel": [
        [
          {
            "node": "website chat agent",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Mistral Signed URL": {
      "main": [
        [
          {
            "node": "Mistral DOC OCR",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Default Data Loader": {
      "ai_document": [
        [
          {
            "node": "Qdrant Vector Store1",
            "type": "ai_document",
            "index": 0
          }
        ]
      ]
    },
    "Qdrant Vector Store": {
      "ai_tool": [
        [
          {
            "node": "website chat agent",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "Qdrant Vector Store1": {
      "main": [
        [
          {
            "node": "Loop Over Items1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "prepare for chunking": {
      "main": [
        [
          {
            "node": "Code(convert to chunks for loading into vector db)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Character Text Splitter": {
      "ai_textSplitter": [
        [
          {
            "node": "Default Data Loader",
            "type": "ai_textSplitter",
            "index": 0
          }
        ]
      ]
    },
    "Google Drive(load file)": {
      "main": [
        [
          {
            "node": "Mistral Upload",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Embeddings Mistral Cloud": {
      "ai_embedding": [
        [
          {
            "node": "Qdrant Vector Store1",
            "type": "ai_embedding",
            "index": 0
          }
        ]
      ]
    },
    "Embeddings Mistral Cloud1": {
      "ai_embedding": [
        [
          {
            "node": "Qdrant Vector Store",
            "type": "ai_embedding",
            "index": 0
          }
        ]
      ]
    },
    "When chat message received": {
      "main": [
        [
          {
            "node": "website chat agent",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "When clicking \u2018Execute workflow\u2019": {
      "main": [
        [
          {
            "node": "Google Drive(brand related data for chatbot)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Google Drive(brand related data for chatbot)": {
      "main": [
        [
          {
            "node": "Loop Over Items1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Code(convert to chunks for loading into vector db)": {
      "main": [
        [
          {
            "node": "Qdrant Vector Store1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}