Workflow: Localfiletrigger Workflow
Integrations: httpRequest, if, localFileTrigger, manualTrigger, noOp, readWriteFile, set, stickyNote, switch

{"meta": {"instanceId": "workflow-80923317", "versionId": "1.0.0", "createdAt": "2025-09-29T07:07:48.242942", "updatedAt": "2025-09-29T07:07:48.242956", "owner": "n8n-user", "license": "MIT", "category": "automation", "status": "active", "priority": "high", "environment": "production"}, "nodes": [{"id": "c5525f47-4d91-4b98-87bb-566b90da64a1", "name": "Local File Trigger", "type": "n8n-nodes-base.localFileTrigger", "position": [660, 700], "parameters": {"path": "/home/node/host_mount/local_file_search", "events": ["add", "change", "unlink"], "options": {"awaitWriteFinish": true}, "triggerOn": "folder"}, "typeVersion": 1, "notes": "This localFileTrigger node performs automated tasks as part of the workflow."}, {"id": "804334d6-e34d-40d1-9555-b331ffe66f6f", "name": "When clicking \"Test workflow\"", "type": "n8n-nodes-base.manualTrigger", "position": [664.5766613599001, 881.8474780113352], "parameters": {}, "typeVersion": 1, "notes": "This manualTrigger node performs automated tasks as part of the workflow."}, {"id": "7ab0e284-b667-4d1f-8ceb-fb05e4081a06", "name": "Set Variables", "type": "n8n-nodes-base.set", "position": [840, 700], "parameters": {"options": {}, "assignments": {"assignments": [{"id": "35ea70c4-8669-4975-a68d-bbaa094713c0", "name": "directory", "type": "string", "value": "/home/node/BankStatements"}, {"id": "1d081d19-ff4e-462a-9cbe-7af2244bf87f", "name": "file_added", "type": "string", "value": "={{ $json.event === 'add' && $json.path || ''}}"}, {"id": "18f8dc03-51ca-48c7-947f-87ce8e1979bf", "name": "file_changed", "type": "string", "value": "={{ $json.event === 'change' && $json.path || '' }}"}, {"id": "65074ff7-037b-4b3b-b2c3-8a61755ab43b", "name": "file_deleted", "type": "string", "value": "={{ $json.event === 'unlink' && $json.path || '' }}"}, {"id": "9a1902e7-f94d-4d1f-9006-91c67354d3e8", "name": "qdrant_collection", "type": "string", "value": "local_file_search"}]}}, "typeVersion": 3.3, "notes": "This set node performs automated tasks as part of the workflow."}, {"id": "76173972-ceca-43a4-b85f-00b41f774304", "name": "Sticky Note", "type": "n8n-nodes-base.stickyNote", "position": [580, 460], "parameters": {"color": 7, "width": 665.0909497859384, "height": 596.8351502261468, "content": "## Step 1. Select the target folder\n[Read more about local file trigger]({{ $env.WEBHOOK_URL }}\n\nIn this workflow, we'll monitor a specific folder on disk that n8n has access to. Since we're using docker, we can either use the n8n volume or mount a folder from the host machine.\n\nThe local file trigger is useful to execute the workflow whenever changes are made to our target folder."}, "typeVersion": 1, "notes": "This stickyNote node performs automated tasks as part of the workflow."}, {"id": "eda839f7-dde4-4d1f-9fe6-692df4ac7282", "name": "Sticky Note4", "type": "n8n-nodes-base.stickyNote", "position": [184.57666135990007, 461.84747801133517], "parameters": {"width": 372.51107341403605, "height": 356.540665091993, "content": "## Try It Out!\n### This workflow does the following:\n* Monitors a target folder for changes using the local file trigger\n* Synchronises files in the target folder with their vectors in Qdrant\n* Mistral AI is used to create a Q&A AI agent on all files in the target folder\n\n### Need Help?\nJoin the [Discord]({{ $env.WEBHOOK_URL }} or ask in the [Forum]({{ $env.WEBHOOK_URL }}\n\nHappy Hacking!"}, "typeVersion": 1, "notes": "This stickyNote node performs automated tasks as part of the workflow."}, {"id": "f82f6de0-af8f-4fdf-a733-f59ba4fed02f", "name": "Read File", "type": "n8n-nodes-base.readWriteFile", "position": [1340, 1120], "parameters": {"options": {}, "fileSelector": "={{ $json.file_added }}"}, "typeVersion": 1, "notes": "This readWriteFile node performs automated tasks as part of the workflow."}, {"id": "7354a080-051b-479f-97b1-49cc0c14c9d8", "name": "Embeddings Mistral Cloud", "type": "n8n-nodes-base.noOp", "position": [1720, 1280], "parameters": {"options": {}}, "credentials": {"mistralCloudApi": {"id": "EIl2QxhXAS9Hkg37", "name": "Mistral Cloud account"}}, "typeVersion": 1, "notes": "This embeddingsMistralCloud node performs automated tasks as part of the workflow."}, {"id": "a1ad45ff-a882-4aed-82e2-cad2483cf4e8", "name": "Default Data Loader", "type": "n8n-nodes-base.noOp", "position": [1820, 1280], "parameters": {"options": {"metadata": {"metadataValues": [{"name": "filter_by_filename", "value": "={{ $json.file_location }}"}, {"name": "filter_by_created_month", "value": "={{ $now.year + '-' + $now.monthShort }}"}, {"name": "filter_by_created_week", "value": "={{ $now.year + '-' + $now.monthShort + '-W' + $now.weekNumber }}"}]}}, "jsonData": "={{ $json.data }}", "jsonMode": "expressionData"}, "typeVersion": 1, "notes": "This documentDefaultDataLoader node performs automated tasks as part of the workflow."}, {"id": "0b0e29b9-8873-4074-94dc-9f0364c28835", "name": "Recursive Character Text Splitter", "type": "n8n-nodes-base.noOp", "position": [1840, 1400], "parameters": {"options": {}}, "typeVersion": 1, "notes": "This textSplitterRecursiveCharacterTextSplitter node performs automated tasks as part of the workflow."}, {"id": "c0555ba6-a1bd-4aa9-a340-a9c617f8e6db", "name": "Prepare Embedding Document", "type": "n8n-nodes-base.set", "position": [1520, 1120], "parameters": {"options": {}, "assignments": {"assignments": [{"id": "41a1d4ca-e5a5-4fb9-b249-8796ae759b33", "name": "data", "type": "string", "value": "=## file location\n{{ [$json.directory, $json.fileName].join('/') }}\n## file created\n{{ $now.toISO() }}\n## file contents\n{{ $input.item.binary.data.data.base64Decode() }}"}, {"id": "c091704d-b81c-448b-8c90-156ef568b871", "name": "file_location", "type": "string", "value": "={{ [$json.directory, $json.fileName].join('/') }}"}]}}, "typeVersion": 3.3, "notes": "This set node performs automated tasks as part of the workflow."}, {"id": "ffe8c363-0809-4d21-aa8f-34b0fc2dc57f", "name": "Chat Trigger", "type": "n8n-nodes-base.noOp", "position": [2280, 680], "webhookId": "37587fe0-b8db-4012-90a7-1f65b9bfd0df", "parameters": {}, "typeVersion": 1, "notes": "This chatTrigger node performs automated tasks as part of the workflow."}, {"id": "8d958669-60be-4bb2-80fc-2a6c7c7bfae6", "name": "Question and Answer Chain", "type": "n8n-nodes-base.noOp", "position": [2500, 680], "parameters": {}, "typeVersion": 1.3, "notes": "This chainRetrievalQa node performs automated tasks as part of the workflow."}, {"id": "f143e438-8176-4923-a866-3f9a2a16793d", "name": "Mistral Cloud Chat Model", "type": "n8n-nodes-base.noOp", "position": [2500, 840], "parameters": {"model": "mistral-small-2402", "options": {}}, "credentials": {"mistralCloudApi": {"id": "EIl2QxhXAS9Hkg37", "name": "Mistral Cloud account"}}, "typeVersion": 1, "notes": "This lmChatMistralCloud node performs automated tasks as part of the workflow."}, {"id": "06dd8f4c-3b66-43e0-85c8-ec222e275f87", "name": "Vector Store Retriever", "type": "n8n-nodes-base.noOp", "position": [2620, 840], "parameters": {}, "typeVersion": 1, "notes": "This retrieverVectorStore node performs automated tasks as part of the workflow."}, {"id": "2fdabcb5-a7a7-4e02-8c1b-9190e2e52385", "name": "Embeddings Mistral Cloud1", "type": "n8n-nodes-base.noOp", "position": [2620, 1080], "parameters": {"options": {}}, "credentials": {"mistralCloudApi": {"id": "EIl2QxhXAS9Hkg37", "name": "Mistral Cloud account"}}, "typeVersion": 1, "notes": "This embeddingsMistralCloud node performs automated tasks as part of the workflow."}, {"id": "e5664534-de07-481f-87dd-68d7d0715baa", "name": "Remap for File_Added Flow", "type": "n8n-nodes-base.set", "position": [1920, 700], "parameters": {"options": {}, "assignments": {"assignments": [{"id": "840219e1-ed47-4b00-83fd-6b3c0bd71650", "name": "file_added", "type": "string", "value": "={{ $('Set Variables').item.json.file_changed }}"}]}}, "typeVersion": 3.3, "notes": "This set node performs automated tasks as part of the workflow."}, {"id": "1fd14832-aafe-4d72-b4f2-7afc72df97dc", "name": "Search For Existing Point", "type": "n8n-nodes-base.httpRequest", "position": [1340, 280], "parameters": {"url": "{{ $env.BASE_URL }}", "method": "POST", "options": {}, "jsonBody": "={\n    \"filter\": {\n        \"must\": [\n            {\n                \"key\": \"metadata.filter_by_filename\",\n                \"match\": {\n                    \"value\": \"{{ $json.file_changed }}\"\n                }\n            }\n        ]\n    },\n    \"limit\": 1,\n    \"with_payload\": false,\n    \"with_vector\": false\n}", "sendBody": true, "specifyBody": "json", "authentication": "{{ $credentials.predefinedCredentialType }}", "nodeCredentialType": "YOUR_CREDENTIAL_HERE"}, "credentials": {"qdrantApi": {"id": "NyinAS3Pgfik66w5", "name": "QdrantApi account"}}, "typeVersion": 4.2, "notes": "This httpRequest node performs automated tasks as part of the workflow."}, {"id": "b5fa817f-82d6-41dd-9817-4c1dd9137b76", "name": "Has Existing Point?", "type": "n8n-nodes-base.if", "position": [1520, 280], "parameters": {"options": {}, "conditions": {"options": {"leftValue": "", "caseSensitive": true, "typeValidation": "strict"}, "combinator": "and", "conditions": [{"id": "0392bac0-8fb5-406b-b59f-575edf5ab30d", "operator": {"type": "array", "operation": "notEmpty", "singleValue": true}, "leftValue": "={{ $json.result.points }}", "rightValue": ""}]}}, "typeVersion": 2, "notes": "This if node performs automated tasks as part of the workflow."}, {"id": "b0fa4fa4-5d1b-4a12-b8ba-a10d71f31f94", "name": "Delete Existing Point", "type": "n8n-nodes-base.httpRequest", "position": [1720, 700], "parameters": {"url": "{{ $env.BASE_URL }}", "method": "POST", "options": {}, "sendBody": true, "authentication": "{{ $credentials.predefinedCredentialType }}", "bodyParameters": {"parameters": [{"name": "points", "value": "={{ $json.result.points.map(point => point.id) }}"}]}, "nodeCredentialType": "YOUR_CREDENTIAL_HERE"}, "credentials": {"qdrantApi": {"id": "NyinAS3Pgfik66w5", "name": "QdrantApi account"}}, "typeVersion": 4.2, "notes": "This httpRequest node performs automated tasks as part of the workflow."}, {"id": "5408adfe-4d6b-407c-aac7-e87c9b1a1592", "name": "Search For Existing Point1", "type": "n8n-nodes-base.httpRequest", "position": [1340, 700], "parameters": {"url": "{{ $env.BASE_URL }}", "method": "POST", "options": {}, "jsonBody": "={\n    \"filter\": {\n        \"must\": [\n            {\n                \"key\": \"metadata.filter_by_filename\",\n                \"match\": {\n                    \"value\": \"{{ $json.file_changed }}\"\n                }\n            }\n        ]\n    },\n    \"limit\": 1,\n    \"with_payload\": false,\n    \"with_vector\": false\n}", "sendBody": true, "specifyBody": "json", "authentication": "{{ $credentials.predefinedCredentialType }}", "nodeCredentialType": "YOUR_CREDENTIAL_HERE"}, "credentials": {"qdrantApi": {"id": "NyinAS3Pgfik66w5", "name": "QdrantApi account"}}, "typeVersion": 4.2, "notes": "This httpRequest node performs automated tasks as part of the workflow."}, {"id": "fac43587-0d24-4d6e-a0d5-8cc8f9615967", "name": "Has Existing Point?1", "type": "n8n-nodes-base.if", "position": [1520, 700], "parameters": {"options": {}, "conditions": {"options": {"leftValue": "", "caseSensitive": true, "typeValidation": "strict"}, "combinator": "and", "conditions": [{"id": "0392bac0-8fb5-406b-b59f-575edf5ab30d", "operator": {"type": "array", "operation": "notEmpty", "singleValue": true}, "leftValue": "={{ $json.result.points }}", "rightValue": ""}]}}, "typeVersion": 2, "notes": "This if node performs automated tasks as part of the workflow."}, {"id": "010baacd-fac1-4cc1-86bf-9d6ef11916fe", "name": "Delete Existing Point1", "type": "n8n-nodes-base.httpRequest", "position": [1700, 280], "parameters": {"url": "{{ $env.BASE_URL }}", "method": "POST", "options": {}, "sendBody": true, "authentication": "{{ $credentials.predefinedCredentialType }}", "bodyParameters": {"parameters": [{"name": "points", "value": "={{ $json.result.points.map(point => point.id) }}"}]}, "nodeCredentialType": "YOUR_CREDENTIAL_HERE"}, "credentials": {"qdrantApi": {"id": "NyinAS3Pgfik66w5", "name": "QdrantApi account"}}, "typeVersion": 4.2, "notes": "This httpRequest node performs automated tasks as part of the workflow."}, {"id": "2d6fb29c-2fac-41de-9ad0-cc781b246378", "name": "Handle File Event", "type": "n8n-nodes-base.switch", "position": [1000, 700], "parameters": {"rules": {"values": [{"outputKey": "YOUR_CREDENTIAL_HERE", "conditions": {"options": {"leftValue": "", "caseSensitive": true, "typeValidation": "strict"}, "combinator": "and", "conditions": [{"id": "a1f6d86a-9805-4d0e-ac70-90c9cf0ad339", "operator": {"type": "string", "operation": "notEmpty", "singleValue": true}, "leftValue": "={{ $json.file_deleted }}", "rightValue": ""}]}, "renameOutput": true}, {"outputKey": "YOUR_CREDENTIAL_HERE", "conditions": {"options": {"leftValue": "", "caseSensitive": true, "typeValidation": "strict"}, "combinator": "and", "conditions": [{"id": "d15cde67-b5b0-4676-b4fb-ead749147392", "operator": {"type": "string", "operation": "notEmpty", "singleValue": true}, "leftValue": "={{ $json.file_changed }}", "rightValue": ""}]}, "renameOutput": true}, {"outputKey": "YOUR_CREDENTIAL_HERE", "conditions": {"options": {"leftValue": "", "caseSensitive": true, "typeValidation": "strict"}, "combinator": "and", "conditions": [{"operator": {"type": "string", "operation": "notEmpty", "singleValue": true}, "leftValue": "={{ $json.file_added }}", "rightValue": ""}]}, "renameOutput": true}]}, "options": {}}, "typeVersion": 3, "notes": "This switch node performs automated tasks as part of the workflow."}, {"id": "da91b2aa-613c-4e3e-af83-fbd3bb7e922e", "name": "Sticky Note1", "type": "n8n-nodes-base.stickyNote", "position": [1280, 123.92779403575491], "parameters": {"color": 7, "width": 847.032584995578, "height": 335.8400964393443, "content": "## Step 2. When files are removed, the vector point is cleared.\n[Learn how to delete points using the Qdrant API]({{ $env.WEBHOOK_URL }}\n\nTo keep our vectorstore relevant, we'll implement a simple synchronisation system whereby documents deleted from the local file folder are also purged from Qdrant. This can be simply achieved using Qdrant APIs."}, "typeVersion": 1, "notes": "This stickyNote node performs automated tasks as part of the workflow."}, {"id": "2f9f5b2b-6504-4b27-a0c4-f3373df352df", "name": "Sticky Note2", "type": "n8n-nodes-base.stickyNote", "position": [1280, 480], "parameters": {"color": 7, "width": 855.9952607674757, "height": 433.01782147687817, "content": "## Step 3. When files are updated, the vector point is updated.\n[Learn how to delete points using the Qdrant API]({{ $env.WEBHOOK_URL }}\n\nSimilarly to the files deleted branch, when we encounter a change in a file we'll update the matching vector point in Qdrant to ensure our vector store stays relevant. Here, we can achieve this my deleting the existing vector point and creating it anew with the updated bank statement."}, "typeVersion": 1, "notes": "This stickyNote node performs automated tasks as part of the workflow."}, {"id": "38128b7f-d0f2-405c-a7de-662df812c344", "name": "Sticky Note3", "type": "n8n-nodes-base.stickyNote", "position": [1280, 940], "parameters": {"color": 7, "width": 846.8204626627492, "height": 629.9714759033081, "content": "## Step 4. When new files are added, add them to Qdrant Vectorstore.\n[Read more about the Qdrant node]({{ $env.WEBHOOK_URL }}\n\nUsing Qdrant, we'll able to create a simple yet powerful RAG based application for our bank statements. One of Qdrant's most powerful features is its filtering system, we'll use it to manage the synchronisation of our local file system and Qdrant."}, "typeVersion": 1, "notes": "This stickyNote node performs automated tasks as part of the workflow."}, {"id": "e85e2a30-e775-42fe-a12a-ac5de4eb4673", "name": "Sticky Note5", "type": "n8n-nodes-base.stickyNote", "position": [2180, 491.43199269284935], "parameters": {"color": 7, "width": 744.4578330639196, "height": 759.7908149448928, "content": "## Step 5. Create AI Agent expert on historic bank statements \n[Read more about the Question & Answer Chain]({{ $env.WEBHOOK_URL }}\n\nFinally, let's use a Question & Answer AI node to combine the Mistral AI model and Qdrant as the vector store retriever to create a local expert for all our bank statements questions. "}, "typeVersion": 1, "notes": "This stickyNote node performs automated tasks as part of the workflow."}, {"id": "7b29b0b9-ffee-4456-b036-9b39400d2b31", "name": "Qdrant Vector Store", "type": "n8n-nodes-base.noOp", "position": [1700, 1120], "parameters": {"mode": "insert", "options": {}, "qdrantCollection": {"__rl": true, "mode": "id", "value": "={{ $('Set Variables').item.json.qdrant_collection }}"}}, "credentials": {"qdrantApi": {"id": "NyinAS3Pgfik66w5", "name": "QdrantApi account"}}, "typeVersion": 1, "notes": "This vectorStoreQdrant node performs automated tasks as part of the workflow."}, {"id": "1857bebb-b492-415e-96c8-235329bfd28a", "name": "Qdrant Vector Store1", "type": "n8n-nodes-base.noOp", "position": [2620, 960], "parameters": {"qdrantCollection": {"__rl": true, "mode": "id", "value": "BankStatements"}}, "credentials": {"qdrantApi": {"id": "NyinAS3Pgfik66w5", "name": "QdrantApi account"}}, "typeVersion": 1, "notes": "This vectorStoreQdrant node performs automated tasks as part of the workflow."}], "pinData": {}, "connections": {"1fd14832-aafe-4d72-b4f2-7afc72df97dc": {"main": [[{"node": "error-handler-1fd14832-aafe-4d72-b4f2-7afc72df97dc", "type": "main", "index": 0}], [{"node": "error-handler-1fd14832-aafe-4d72-b4f2-7afc72df97dc-8448407c", "type": "main", "index": 0}], [{"node": "error-handler-1fd14832-aafe-4d72-b4f2-7afc72df97dc-5583904c", "type": "main", "index": 0}], [{"node": "error-handler-1fd14832-aafe-4d72-b4f2-7afc72df97dc-1f5ee4d8", "type": "main", "index": 0}], [{"node": "error-handler-1fd14832-aafe-4d72-b4f2-7afc72df97dc-b5b93bdc", "type": "main", "index": 0}], [{"node": "error-handler-1fd14832-aafe-4d72-b4f2-7afc72df97dc-4e610916", "type": "main", "index": 0}], [{"node": "error-handler-1fd14832-aafe-4d72-b4f2-7afc72df97dc-68d0175f", "type": "main", "index": 0}], [{"node": "error-handler-1fd14832-aafe-4d72-b4f2-7afc72df97dc-a37430b9", "type": "main", "index": 0}], [{"node": "error-handler-1fd14832-aafe-4d72-b4f2-7afc72df97dc-075cc22b", "type": "main", "index": 0}]]}, "b0fa4fa4-5d1b-4a12-b8ba-a10d71f31f94": {"main": [[{"node": "error-handler-b0fa4fa4-5d1b-4a12-b8ba-a10d71f31f94", "type": "main", "index": 0}], [{"node": "error-handler-b0fa4fa4-5d1b-4a12-b8ba-a10d71f31f94-0f5f881f", "type": "main", "index": 0}], [{"node": "error-handler-b0fa4fa4-5d1b-4a12-b8ba-a10d71f31f94-bcd12e96", "type": "main", "index": 0}], [{"node": "error-handler-b0fa4fa4-5d1b-4a12-b8ba-a10d71f31f94-23f1d97a", "type": "main", "index": 0}], [{"node": "error-handler-b0fa4fa4-5d1b-4a12-b8ba-a10d71f31f94-6e29d203", "type": "main", "index": 0}], [{"node": "error-handler-b0fa4fa4-5d1b-4a12-b8ba-a10d71f31f94-c6a80203", "type": "main", "index": 0}], [{"node": "error-handler-b0fa4fa4-5d1b-4a12-b8ba-a10d71f31f94-b234268a", "type": "main", "index": 0}], [{"node": "error-handler-b0fa4fa4-5d1b-4a12-b8ba-a10d71f31f94-f42707ca", "type": "main", "index": 0}], [{"node": "error-handler-b0fa4fa4-5d1b-4a12-b8ba-a10d71f31f94-29cd6e26", "type": "main", "index": 0}]]}, "5408adfe-4d6b-407c-aac7-e87c9b1a1592": {"main": [[{"node": "error-handler-5408adfe-4d6b-407c-aac7-e87c9b1a1592", "type": "main", "index": 0}], [{"node": "error-handler-5408adfe-4d6b-407c-aac7-e87c9b1a1592-da2c819f", "type": "main", "index": 0}], [{"node": "error-handler-5408adfe-4d6b-407c-aac7-e87c9b1a1592-7e89fd59", "type": "main", "index": 0}], [{"node": "error-handler-5408adfe-4d6b-407c-aac7-e87c9b1a1592-fe61fdb4", "type": "main", "index": 0}], [{"node": "error-handler-5408adfe-4d6b-407c-aac7-e87c9b1a1592-2868c80e", "type": "main", "index": 0}], [{"node": "error-handler-5408adfe-4d6b-407c-aac7-e87c9b1a1592-e9798dc8", "type": "main", "index": 0}], [{"node": "error-handler-5408adfe-4d6b-407c-aac7-e87c9b1a1592-29500706", "type": "main", "index": 0}], [{"node": "error-handler-5408adfe-4d6b-407c-aac7-e87c9b1a1592-b6e83794", "type": "main", "index": 0}], [{"node": "error-handler-5408adfe-4d6b-407c-aac7-e87c9b1a1592-55f35ee6", "type": "main", "index": 0}]]}, "010baacd-fac1-4cc1-86bf-9d6ef11916fe": {"main": [[{"node": "error-handler-010baacd-fac1-4cc1-86bf-9d6ef11916fe", "type": "main", "index": 0}], [{"node": "error-handler-010baacd-fac1-4cc1-86bf-9d6ef11916fe-3f8f9433", "type": "main", "index": 0}], [{"node": "error-handler-010baacd-fac1-4cc1-86bf-9d6ef11916fe-754db326", "type": "main", "index": 0}], [{"node": "error-handler-010baacd-fac1-4cc1-86bf-9d6ef11916fe-cf320917", "type": "main", "index": 0}], [{"node": "error-handler-010baacd-fac1-4cc1-86bf-9d6ef11916fe-e44c4357", "type": "main", "index": 0}], [{"node": "error-handler-010baacd-fac1-4cc1-86bf-9d6ef11916fe-d7737959", "type": "main", "index": 0}], [{"node": "error-handler-010baacd-fac1-4cc1-86bf-9d6ef11916fe-1e1a6f09", "type": "main", "index": 0}], [{"node": "error-handler-010baacd-fac1-4cc1-86bf-9d6ef11916fe-7a53f057", "type": "main", "index": 0}], [{"node": "error-handler-010baacd-fac1-4cc1-86bf-9d6ef11916fe-bd886fef", "type": "main", "index": 0}]]}, "c5525f47-4d91-4b98-87bb-566b90da64a1": {"main": [[{"node": "error-handler-c5525f47-4d91-4b98-87bb-566b90da64a1-61725ac1", "type": "main", "index": 0}]]}, "f82f6de0-af8f-4fdf-a733-f59ba4fed02f": {"main": [[{"node": "error-handler-f82f6de0-af8f-4fdf-a733-f59ba4fed02f-657220cd", "type": "main", "index": 0}]]}}, "name": "Localfiletrigger Workflow", "settings": {"executionOrder": "v1", "saveManualExecutions": true, "callerPolicy": "workflowsFromSameOwner", "errorWorkflow": null, "timezone": "UTC", "executionTimeout": 3600, "maxExecutions": 1000, "retryOnFail": true, "retryCount": 3, "retryDelay": 1000}, "description": "Automated workflow: Localfiletrigger Workflow. This workflow integrates 17 different services: stickyNote, httpRequest, embeddingsMistralCloud, textSplitterRecursiveCharacterTextSplitter, chainRetrievalQa. It contains 39 nodes and follows best practices for error handling and security.", "tags": ["automation", "n8n", "production-ready", "excellent", "optimized"], "notes": "Excellent quality workflow: Localfiletrigger Workflow. This workflow has been optimized for production use with comprehensive error handling, security, and documentation."}