{
  "id": "7np7XO05qTRGi5Fr",
  "meta": {
    "instanceId": "3612a0c89f35a354ddd1216385240db51b4635fde7cae2a0d5004be915b832f3",
    "templateCredsSetupCompleted": true
  },
  "name": "Store Files in Qdrant CLOUD Fairwork",
  "tags": [],
  "nodes": [
    {
      "id": "2fca2a63-71ab-423d-a9d9-c94958891fc2",
      "name": "Download File",
      "type": "n8n-nodes-base.googleDrive",
      "onError": "continueRegularOutput",
      "position": [
        -112,
        160
      ],
      "parameters": {
        "fileId": {
          "__rl": true,
          "mode": "id",
          "value": "={{ $json.id }}"
        },
        "options": {
          "binaryPropertyName": "pdf-document",
          "googleFileConversion": {
            "conversion": {
              "docsToFormat": "application/pdf",
              "sheetsToFormat": "application/pdf",
              "slidesToFormat": "application/pdf",
              "drawingsToFormat": "application/pdf"
            }
          }
        },
        "operation": "download"
      },
      "credentials": {
        "googleDriveOAuth2Api": {
          "id": "credential-id",
          "name": "googleDriveOAuth2Api Credential"
        }
      },
      "typeVersion": 3
    },
    {
      "id": "a91f9540-cace-4603-b9bf-5d1756edd00d",
      "name": "Insert to Qdrant",
      "type": "@n8n/n8n-nodes-langchain.vectorStoreQdrant",
      "position": [
        352,
        272
      ],
      "parameters": {
        "mode": "insert",
        "options": {},
        "qdrantCollection": {
          "__rl": true,
          "mode": "id",
          "value": "fairwork"
        }
      },
      "credentials": {
        "qdrantApi": {
          "id": "credential-id",
          "name": "qdrantApi Credential"
        }
      },
      "typeVersion": 1.3
    },
    {
      "id": "2cb3650f-519a-4827-bc29-6317941f0b1e",
      "name": "Embeddings OpenAI",
      "type": "@n8n/n8n-nodes-langchain.embeddingsOpenAi",
      "position": [
        208,
        544
      ],
      "parameters": {
        "model": "text-embedding-3-large",
        "options": {}
      },
      "credentials": {
        "openAiApi": {
          "id": "credential-id",
          "name": "openAiApi Credential"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "23796c89-e29b-4788-97aa-4fcd296d1dee",
      "name": "Delete File",
      "type": "n8n-nodes-base.googleDrive",
      "onError": "continueRegularOutput",
      "position": [
        416,
        112
      ],
      "parameters": {
        "fileId": {
          "__rl": true,
          "mode": "id",
          "value": "={{ $('Download File').item.json.id }}"
        },
        "options": {},
        "operation": "deleteFile"
      },
      "credentials": {
        "googleDriveOAuth2Api": {
          "id": "credential-id",
          "name": "googleDriveOAuth2Api Credential"
        }
      },
      "executeOnce": true,
      "typeVersion": 3
    },
    {
      "id": "8ab7a876-456f-46e4-b91f-9c31511a499e",
      "name": "🔵 Workflow Overview",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1568,
        -240
      ],
      "parameters": {
        "color": 5,
        "width": 716,
        "height": 688,
        "content": "## 🔵 PROCESS & DELETE GOOGLE DRIVE FILES\n\n**Dual-Trigger System:**\n📍 **Auto Mode:** New files trigger immediately\n\n**What it does:**\n1. Monitors/lists files from Google Drive folder\n2. Downloads and processes each file\n3. Converts to vector embeddings\n4. Stores in Qdrant for semantic search\n5. **DELETES** processed files from Drive\n\n**Use Cases:**\n• Continuous document ingestion\n• Batch processing existing files\n• Building searchable knowledge base"
      },
      "typeVersion": 1
    },
    {
      "id": "9e6fd226-7d0a-4a9e-9fee-be8baabbe12f",
      "name": "🟡 Trigger Configuration",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1568,
        -592
      ],
      "parameters": {
        "color": 4,
        "width": 708,
        "height": 284,
        "content": "## 🟡 Setup Tasks\n**Google Drive Auto-Trigger:**\n• Configure Google Oauth. Set that in use for the Google Drive nodes.\n• Make a new folder, the workflow will delete files so DO NOT use this on a folder with existing files unless you want them to be removed once the processing is done!\n• If you do not want files deleted you could change the delete to a move function.\n• Update the folder name to the one to use\n• Change the polling time to be suitable frequency for the New File in Google Drive\n• Update the Qdrant connection details on both of its nodes.\n• Update the OpenAI embeddings with your account."
      },
      "typeVersion": 1
    },
    {
      "id": "4c350c67-0bc2-4a5c-abe7-86d1d1d08069",
      "name": "🟢 Batch Processing Logic",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -816,
        -240
      ],
      "parameters": {
        "color": 6,
        "width": 900,
        "height": 688,
        "content": "## 🟢 BATCH PROCESSING FLOW\n\n**Split In Batches Node:**\n• Batch size = 1 (one file at a time)\n• Reset = false (maintains state)\n• Loops through ALL files\n\n**Why Process One at a Time?**\n✓ Prevents memory issues\n✓ Better error handling\n✓ Cleaner execution logs\n✓ Allows file deletion tracking\n\n**Loop Flow:**\n1. List files → 2. Process one →\n3. Delete it → 4. Back to list →\n5. Get next file → Repeat"
      },
      "typeVersion": 1
    },
    {
      "id": "198c026a-7dbf-4a2d-9292-842d80839983",
      "name": "🔴 DELETE WARNING",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        864,
        -240
      ],
      "parameters": {
        "color": 3,
        "width": 404,
        "height": 608,
        "content": "## 🔴 ⚠️ CRITICAL WARNING ⚠️\n\n### FILES ARE PERMANENTLY DELETED!\n\n**This workflow DELETES files after processing**\n• No undo available\n• No recycle bin\n• Files are gone forever\n\n**Before Running:**\n☑️ Backup important documents\n☑️ Test with non-critical files first\n☑️ Verify Qdrant insertion works\n☑️ Consider archive option instead\n\n💡 **Alternative:** Change Delete node\nto Move node for archiving"
      },
      "typeVersion": 1
    },
    {
      "id": "71d6f6d4-3544-4149-9d57-1ed471c4453d",
      "name": "🟢 Document Pipeline",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        144,
        -240
      ],
      "parameters": {
        "color": 7,
        "width": 644,
        "height": 1028,
        "content": "## 🟢 DOCUMENT PROCESSING\n\n**Processing Pipeline:**\n\n📄 **Download** → Binary data\n📝 **Load** → Extract text content\n✂️ **Chunk** → 1500 tokens, 250 overlap. You might want to change that to suit your document size and complexity.\n🔢 **Embed** → OpenAI vectors\n💾 **Store** → Qdrant collection\n🗑️ **Delete** → Remove from Drive\n\n**Supported Formats:**\n• Google Drive Converts Files to PDF for easier ingestion\n\n**Chunking Strategy:**\n• Optimized for semantic search\n• Maintains context with overlap"
      },
      "typeVersion": 1
    },
    {
      "id": "75015003-24ad-4b35-96c2-841658876f0d",
      "name": "🟡 Setup Requirements",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -816,
        -832
      ],
      "parameters": {
        "color": 4,
        "width": 436,
        "height": 520,
        "content": "## 🟡 SETUP REQUIREMENTS\n\n**Required Credentials:**\n1️⃣ **Google Drive OAuth2**\n   • Read, write, delete permissions\n2️⃣ **OpenAI API Key**\n   • For text-embedding-3-large model\n3️⃣ **Qdrant Connection**\n   • API endpoint and key\n\n**RAG Configuration Steps:**\n✅ Update folder ID in triggers\n✅ Change collection name in Qdrant\n✅ Adjust chunk size if needed\n✅ Set batch size for your needs\n\n💡 **Model Options:**\n• text-embedding-3-large (best)\n• text-embedding-3-small (cheaper)"
      },
      "typeVersion": 1
    },
    {
      "id": "7423b1d9-ea96-4539-8bfa-07a9d0e59d95",
      "name": "🟣 Performance Tips",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        192,
        -832
      ],
      "parameters": {
        "color": 4,
        "width": 484,
        "height": 516,
        "content": "## 🟣 PERFORMANCE & OPTIMIZATION\n\n**Processing Time Estimates:**\n• 1 file: ~20-30 seconds\n• 10 files: ~3-5 minutes\n• 50 files: ~15-20 minutes\n• 150 files: ~45-60 minutes\n\n**Cost Optimization:**\n• Use text-embedding-3-small for lower cost\n• Batch during off-peak hours\n• Monitor OpenAI API usage\n\n**Performance Tips:**\n✓ Keep files under 10MB each\n✓ Use dedicated processing folder\n✓ Clear Qdrant periodically\n✓ Monitor execution logs"
      },
      "typeVersion": 1
    },
    {
      "id": "dc184d65-48ab-42cf-95cd-c14397227aaa",
      "name": "🟠 Troubleshooting",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -336,
        -832
      ],
      "parameters": {
        "color": 4,
        "width": 484,
        "height": 520,
        "content": "## 🟠 TROUBLESHOOTING GUIDE\n\n**Common Issues:**\n\n🔄 **Infinite Loop?**\n• Check reset: false in Split node\n• Verify Delete node is working\n\n⏱️ **Timeout Errors?**\n• Reduce files in folder\n• Process in smaller batches\n• Check file sizes\n\n🚫 **Files Not Processing?**\n• Check folder permissions\n• Verify file formats\n• Ensure workflow is ACTIVE\n\n💾 **Qdrant Errors?**\n• Verify collection exists\n• Check API credentials\n• Monitor storage limits"
      },
      "typeVersion": 1
    },
    {
      "id": "c6878ad3-4888-481d-9029-18a58417501a",
      "name": "🟣 Alternative Approaches",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1312,
        -240
      ],
      "parameters": {
        "width": 384,
        "height": 596,
        "content": "## 🟣 ALTERNATIVE OPTIONS\n\n**Instead of DELETE:**\n\n📁 **Archive to Folder:**\n• Create 'processed' folder\n• Use Move operation instead\n• Maintains file backup\n\n🏷️ **Add Metadata:**\n• Tag processed files\n• Add custom properties\n• Track processing date\n\n🔄 **Duplicate Check:**\n• Query Qdrant first\n• Skip if already exists\n• Prevents duplicates\n\n💡 **Pro Tip:** Fork workflow\nfor different collections"
      },
      "typeVersion": 1
    },
    {
      "id": "0e420eac-4046-4eee-9646-687c64a3e1c1",
      "name": "🟡 Setup Requirements1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1568,
        -832
      ],
      "parameters": {
        "color": 4,
        "width": 708,
        "height": 216,
        "content": "## 🟡 WHY THIS WORKFLOW\n\n**Simple way to get documents into Qdrant**\nMaking it easy to get files into Qdrant, sharing a Google Folder to someone so they can add files.\n\n**Thanks for checking out this workflow, I hope it was helpful.**\nJeremy Dawes, Jezweb [www.jezweb.com.au]"
      },
      "typeVersion": 1
    },
    {
      "id": "a3d0f647-0685-44b4-bf83-ba082560a926",
      "name": "Insert to Qdrant1",
      "type": "@n8n/n8n-nodes-langchain.vectorStoreQdrant",
      "position": [
        -480,
        688
      ],
      "parameters": {
        "mode": "insert",
        "options": {},
        "qdrantCollection": {
          "__rl": true,
          "mode": "id",
          "value": "fairwork"
        }
      },
      "credentials": {
        "qdrantApi": {
          "id": "credential-id",
          "name": "qdrantApi Credential"
        }
      },
      "typeVersion": 1.3
    },
    {
      "id": "2d62982c-cd7c-40fa-bfd2-578fcaed7bba",
      "name": "Embeddings OpenAI1",
      "type": "@n8n/n8n-nodes-langchain.embeddingsOpenAi",
      "position": [
        -624,
        960
      ],
      "parameters": {
        "model": "text-embedding-3-large",
        "options": {}
      },
      "credentials": {
        "openAiApi": {
          "id": "credential-id",
          "name": "openAiApi Credential"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "cd85b0ae-0fe1-4fdf-964b-3748640e14da",
      "name": "Data Loader for Google Drive Files",
      "type": "@n8n/n8n-nodes-langchain.documentDefaultDataLoader",
      "position": [
        464,
        448
      ],
      "parameters": {
        "options": {},
        "dataType": "binary",
        "textSplittingMode": "custom"
      },
      "typeVersion": 1.1
    },
    {
      "id": "f5d618c7-c4ee-4560-a16a-5309fbe361c5",
      "name": "Data Loader for Form Files",
      "type": "@n8n/n8n-nodes-langchain.documentDefaultDataLoader",
      "position": [
        -320,
        880
      ],
      "parameters": {
        "options": {},
        "dataType": "binary",
        "textSplittingMode": "custom"
      },
      "typeVersion": 1.1
    },
    {
      "id": "a20b1220-7b95-4096-b1de-c7af0ee7835d",
      "name": "File Upload Form",
      "type": "n8n-nodes-base.formTrigger",
      "position": [
        -1472,
        672
      ],
      "webhookId": "cf14c028-7ee0-42d6-b1d2-2cce20b02967",
      "parameters": {
        "options": {
          "path": "32aaa027-a092-4e33-89b9-f03b83b0aea3",
          "ignoreBots": true,
          "appendAttribution": false,
          "respondWithOptions": {
            "values": {
              "formSubmittedText": "Files are being uploaded"
            }
          }
        },
        "formTitle": "Upload Files to Vector Database",
        "formFields": {
          "values": [
            {
              "fieldType": "file",
              "fieldLabel": "Files",
              "requiredField": true,
              "acceptFileTypes": ".pdf,.docx,.doc,csv"
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "cc7f894c-f018-488b-bc8c-6a3d75910dde",
      "name": "🟢 Batch Processing Logic1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1600,
        528
      ],
      "parameters": {
        "color": 6,
        "width": 1684,
        "height": 672,
        "content": "## 🟢 MANUAL FORM PROCESSING FLOW\n\nAdds files from a form in a batch, processing one at a time."
      },
      "typeVersion": 1
    },
    {
      "id": "0389fee9-a06c-4ac5-9530-bffe9f6aa2ac",
      "name": "Recursive Character Text Splitter 1",
      "type": "@n8n/n8n-nodes-langchain.textSplitterRecursiveCharacterTextSplitter",
      "position": [
        576,
        624
      ],
      "parameters": {
        "options": {},
        "chunkSize": 1500,
        "chunkOverlap": 250
      },
      "typeVersion": 1
    },
    {
      "id": "e333e2f9-52c0-4778-a0fe-399a43bfafca",
      "name": "Recursive Character Text Splitter 2",
      "type": "@n8n/n8n-nodes-langchain.textSplitterRecursiveCharacterTextSplitter",
      "position": [
        -416,
        1040
      ],
      "parameters": {
        "options": {},
        "chunkSize": 1500,
        "chunkOverlap": 250
      },
      "typeVersion": 1
    },
    {
      "id": "8b4b799b-7762-4502-add7-675b53f69481",
      "name": "Split Form Batches",
      "type": "n8n-nodes-base.splitInBatches",
      "position": [
        -928,
        672
      ],
      "parameters": {
        "options": {
          "reset": false
        }
      },
      "typeVersion": 3
    },
    {
      "id": "39729576-9753-4aab-afd7-e6f7f6d1f97c",
      "name": "List Files in Google Drive Folder",
      "type": "n8n-nodes-base.googleDrive",
      "onError": "continueRegularOutput",
      "position": [
        -592,
        160
      ],
      "parameters": {
        "limit": 1,
        "filter": {
          "driveId": {
            "mode": "list",
            "value": "My Drive"
          },
          "folderId": {
            "__rl": true,
            "mode": "list",
            "value": "1RDHwOiI6DdnDxf2vQbVXS4yi_spMSZUk",
            "cachedResultUrl": "https://drive.google.com/drive/folders/1RDHwOiI6DdnDxf2vQbVXS4yi_spMSZUk",
            "cachedResultName": "fairwork"
          }
        },
        "options": {},
        "resource": "fileFolder"
      },
      "credentials": {
        "googleDriveOAuth2Api": {
          "id": "credential-id",
          "name": "googleDriveOAuth2Api Credential"
        }
      },
      "retryOnFail": true,
      "typeVersion": 3
    },
    {
      "id": "1b331bfb-1be4-4dd1-aaec-31ad0bc5a4e2",
      "name": "New File In Google Drive Folder",
      "type": "n8n-nodes-base.googleDriveTrigger",
      "position": [
        -1104,
        -64
      ],
      "parameters": {
        "event": "fileCreated",
        "options": {},
        "pollTimes": {
          "item": [
            {
              "mode": "everyHour"
            }
          ]
        },
        "triggerOn": "specificFolder",
        "folderToWatch": {
          "__rl": true,
          "mode": "list",
          "value": "1RDHwOiI6DdnDxf2vQbVXS4yi_spMSZUk",
          "cachedResultUrl": "https://drive.google.com/drive/folders/1RDHwOiI6DdnDxf2vQbVXS4yi_spMSZUk",
          "cachedResultName": "fairwork"
        }
      },
      "credentials": {
        "googleDriveOAuth2Api": {
          "id": "credential-id",
          "name": "googleDriveOAuth2Api Credential"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "9e4c6209-edf9-4660-a866-fd3355e56135",
      "name": "Split Form Files",
      "type": "n8n-nodes-base.code",
      "position": [
        -1216,
        672
      ],
      "parameters": {
        "jsCode": "// Get all items from the form upload\nconst items = $input.all();\nconst outputItems = [];\n\n// Process each item\nfor (const item of items) {\n  const binaryData = item.binary || {};\n  \n  // Extract all file properties (Files_0, Files_1, etc.)\n  const fileKeys = Object.keys(binaryData).filter(key => key.startsWith('Files_'));\n  \n  // Create separate items for each file\n  for (const fileKey of fileKeys) {\n    const file = binaryData[fileKey];\n    outputItems.push({\n      json: {\n        fileName: file.fileName,\n        mimeType: file.mimeType,\n        fileSize: file.fileSize,\n        fileExtension: file.fileExtension\n      },\n      binary: {\n        data: file\n      }\n    });\n  }\n}\n\nreturn outputItems;"
      },
      "typeVersion": 2
    },
    {
      "id": "bc98d692-9bce-491e-9d25-5ec9c811028c",
      "name": "When chat message received",
      "type": "@n8n/n8n-nodes-langchain.chatTrigger",
      "position": [
        960,
        640
      ],
      "webhookId": "82bbd685-b7b5-4dbb-b7c8-4441c9755cca",
      "parameters": {
        "options": {}
      },
      "typeVersion": 1.3
    },
    {
      "id": "39c5d3a1-55cb-4e93-8297-7251f3e05c11",
      "name": "AI Agent",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        1168,
        640
      ],
      "parameters": {
        "options": {}
      },
      "typeVersion": 2.2
    },
    {
      "id": "561b3d53-549c-4167-a1f5-06ee9d302ffe",
      "name": "Qdrant Vector Store",
      "type": "@n8n/n8n-nodes-langchain.vectorStoreQdrant",
      "position": [
        1344,
        896
      ],
      "parameters": {
        "mode": "retrieve-as-tool",
        "topK": 10,
        "options": {},
        "toolDescription": "Retrieve information from the vector store to help answer the users questions.",
        "qdrantCollection": {
          "__rl": true,
          "mode": "list",
          "value": "fairwork",
          "cachedResultName": "fairwork"
        }
      },
      "credentials": {
        "qdrantApi": {
          "id": "credential-id",
          "name": "qdrantApi Credential"
        }
      },
      "typeVersion": 1.3
    },
    {
      "id": "770b9276-97bb-49bd-970c-807eeebb659b",
      "name": "Embeddings OpenAI2",
      "type": "@n8n/n8n-nodes-langchain.embeddingsOpenAi",
      "position": [
        1440,
        1104
      ],
      "parameters": {
        "model": "text-embedding-3-large",
        "options": {}
      },
      "credentials": {
        "openAiApi": {
          "id": "credential-id",
          "name": "openAiApi Credential"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "d4c712d3-43aa-46ad-9021-9349cec9c1d4",
      "name": "Google Gemini Chat Model",
      "type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini",
      "position": [
        1040,
        960
      ],
      "parameters": {
        "options": {
          "temperature": 0.4
        }
      },
      "credentials": {
        "googlePalmApi": {
          "id": "credential-id",
          "name": "googlePalmApi Credential"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "5861e0f5-32d7-42f2-a121-a50653f48a53",
      "name": "Simple Memory",
      "type": "@n8n/n8n-nodes-langchain.memoryBufferWindow",
      "position": [
        1184,
        848
      ],
      "parameters": {
        "contextWindowLength": 50
      },
      "typeVersion": 1.3
    },
    {
      "id": "4f0978fa-756c-4200-af79-a7b6ec310a6b",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        864,
        464
      ],
      "parameters": {
        "color": 4,
        "width": 832,
        "height": 816,
        "content": "## Chat Bot Demo\n** This chatbot will let you chat with your Qdrant vector data"
      },
      "typeVersion": 1
    },
    {
      "id": "9d7977b5-37f8-4442-b6c4-1e393b9dbf9e",
      "name": "Manually Trigger Workflow",
      "type": "n8n-nodes-base.manualTrigger",
      "position": [
        -1104,
        256
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "79ab8384-c14e-469d-a9c8-2c672507df93",
      "name": "Merge",
      "type": "n8n-nodes-base.merge",
      "position": [
        1136,
        224
      ],
      "parameters": {
        "mode": "chooseBranch"
      },
      "typeVersion": 3.2
    }
  ],
  "active": false,
  "pinData": {},
  "settings": {
    "executionOrder": "v1",
    "saveManualExecutions": true,
    "saveExecutionProgress": true,
    "saveDataErrorExecution": "all",
    "saveDataSuccessExecution": "all"
  },
  "versionId": "c65f059d-85aa-4e40-9766-5f919ac52ec0",
  "connections": {
    "Merge": {
      "main": [
        [
          {
            "node": "List Files in Google Drive Folder",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Delete File": {
      "main": [
        [
          {
            "node": "Merge",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Download File": {
      "main": [
        [
          {
            "node": "Delete File",
            "type": "main",
            "index": 0
          },
          {
            "node": "Insert to Qdrant",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Simple Memory": {
      "ai_memory": [
        [
          {
            "node": "AI Agent",
            "type": "ai_memory",
            "index": 0
          }
        ]
      ]
    },
    "File Upload Form": {
      "main": [
        [
          {
            "node": "Split Form Files",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Insert to Qdrant": {
      "main": [
        [
          {
            "node": "Merge",
            "type": "main",
            "index": 1
          }
        ]
      ]
    },
    "Split Form Files": {
      "main": [
        [
          {
            "node": "Split Form Batches",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Embeddings OpenAI": {
      "main": [],
      "ai_embedding": [
        [
          {
            "node": "Insert to Qdrant",
            "type": "ai_embedding",
            "index": 0
          }
        ]
      ]
    },
    "Insert to Qdrant1": {
      "main": [
        [
          {
            "node": "Split Form Batches",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Embeddings OpenAI1": {
      "ai_embedding": [
        [
          {
            "node": "Insert to Qdrant1",
            "type": "ai_embedding",
            "index": 0
          }
        ]
      ]
    },
    "Embeddings OpenAI2": {
      "ai_embedding": [
        [
          {
            "node": "Qdrant Vector Store",
            "type": "ai_embedding",
            "index": 0
          }
        ]
      ]
    },
    "Split Form Batches": {
      "main": [
        [],
        [
          {
            "node": "Insert to Qdrant1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Qdrant Vector Store": {
      "ai_tool": [
        [
          {
            "node": "AI Agent",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "Google Gemini Chat Model": {
      "ai_languageModel": [
        [
          {
            "node": "AI Agent",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Manually Trigger Workflow": {
      "main": [
        [
          {
            "node": "List Files in Google Drive Folder",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Data Loader for Form Files": {
      "ai_document": [
        [
          {
            "node": "Insert to Qdrant1",
            "type": "ai_document",
            "index": 0
          }
        ]
      ]
    },
    "When chat message received": {
      "main": [
        [
          {
            "node": "AI Agent",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "New File In Google Drive Folder": {
      "main": [
        [
          {
            "node": "List Files in Google Drive Folder",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "List Files in Google Drive Folder": {
      "main": [
        [
          {
            "node": "Download File",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Data Loader for Google Drive Files": {
      "main": [],
      "ai_document": [
        [
          {
            "node": "Insert to Qdrant",
            "type": "ai_document",
            "index": 0
          }
        ]
      ]
    },
    "Recursive Character Text Splitter 1": {
      "ai_textSplitter": [
        [
          {
            "node": "Data Loader for Google Drive Files",
            "type": "ai_textSplitter",
            "index": 0
          }
        ]
      ]
    },
    "Recursive Character Text Splitter 2": {
      "ai_textSplitter": [
        [
          {
            "node": "Data Loader for Form Files",
            "type": "ai_textSplitter",
            "index": 0
          }
        ]
      ]
    }
  }
}