{
  "id": "0G6evny3MkWG2m0e",
  "meta": {
    "templateCredsSetupCompleted": true
  },
  "name": "export_dian-memo_03",
  "tags": [],
  "nodes": [
    {
      "id": "c871501d-7ec4-43ee-8717-5fcd710386d7",
      "name": "AI Agent",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        -224,
        416
      ],
      "parameters": {
        "text": "={{ $json.text }}",
        "options": {
          "systemMessage": "=# Overview\nYou are an AI assistant. Your job is to route the user's requests to the appropriate tool.  \n## Current date and time: {{ $now }}\n\n## Tools\n- SupabaseVectorStore: Use this tool to search the stored note contents"
        },
        "promptType": "define"
      },
      "typeVersion": 1.8
    },
    {
      "id": "371356c4-2517-4f0d-9246-cad3c1109afd",
      "name": "OpenAI Chat Model",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "position": [
        -224,
        256
      ],
      "parameters": {
        "model": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-5",
          "cachedResultName": "gpt-5"
        },
        "options": {}
      },
      "credentials": {
        "openAiApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "26940193-c90a-413e-9636-0eba2fb94975",
      "name": "Switch",
      "type": "n8n-nodes-base.switch",
      "position": [
        -976,
        336
      ],
      "parameters": {
        "rules": {
          "values": [
            {
              "conditions": {
                "options": {
                  "version": 2,
                  "leftValue": "",
                  "caseSensitive": true,
                  "typeValidation": "strict"
                },
                "combinator": "and",
                "conditions": [
                  {
                    "id": "490a2e00-427a-4e64-b843-d3ab5132cf7a",
                    "operator": {
                      "type": "string",
                      "operation": "equals"
                    },
                    "leftValue": "={{ $json.body.events[0].message.type }}",
                    "rightValue": "text"
                  }
                ]
              }
            },
            {
              "conditions": {
                "options": {
                  "version": 2,
                  "leftValue": "",
                  "caseSensitive": true,
                  "typeValidation": "strict"
                },
                "combinator": "and",
                "conditions": [
                  {
                    "id": "90a70d6a-b520-424b-8ee0-d5934d0aa527",
                    "operator": {
                      "name": "filter.operator.equals",
                      "type": "string",
                      "operation": "equals"
                    },
                    "leftValue": "={{ $json.body.events[0].message.type }}",
                    "rightValue": "audio"
                  }
                ]
              }
            },
            {
              "conditions": {
                "options": {
                  "version": 2,
                  "leftValue": "",
                  "caseSensitive": true,
                  "typeValidation": "strict"
                },
                "combinator": "and",
                "conditions": [
                  {
                    "id": "942105a4-fd50-455b-a55f-04dfb9e396f0",
                    "operator": {
                      "name": "filter.operator.equals",
                      "type": "string",
                      "operation": "equals"
                    },
                    "leftValue": "={{ $json.body.events[0].message.type }}",
                    "rightValue": "image"
                  }
                ]
              }
            }
          ]
        },
        "options": {
          "fallbackOutput": "extra"
        }
      },
      "typeVersion": 3.2,
      "alwaysOutputData": false
    },
    {
      "id": "1102bedb-9d07-438c-9065-2a283a54a509",
      "name": "Edit Fields",
      "type": "n8n-nodes-base.set",
      "position": [
        496,
        416
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "07546a45-4cc5-44fa-b1c8-0121fddca393",
              "name": "output",
              "type": "string",
              "value": "={{ $json.output }}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "7755e26b-363f-4e22-82ab-5330f5fa7472",
      "name": "If",
      "type": "n8n-nodes-base.if",
      "position": [
        -1200,
        384
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "c2c0b91e-6d91-4fae-87b4-287f02c77447",
              "operator": {
                "name": "filter.operator.equals",
                "type": "string",
                "operation": "equals"
              },
              "leftValue": "={{ $json.body.events[0].source.userId }}",
              "rightValue": "{{ YOUR_USERID }}"
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "a18e2b30-fb73-4923-b119-b861a3d0d6a2",
      "name": "Download",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        -752,
        304
      ],
      "parameters": {
        "url": "=https://api-data.line.me/v2/bot/message/{{ $json.body.events[0].message.id }}/content",
        "options": {},
        "sendHeaders": true,
        "headerParameters": {
          "parameters": [
            {
              "name": "Authorization",
              "value": "Bearer {{ LINE_CHANNELACCESS_TOKEN }}"
            }
          ]
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "61564b93-cd7d-41ff-a9ee-5fb880974aa6",
      "name": "Transcribe",
      "type": "@n8n/n8n-nodes-langchain.openAi",
      "position": [
        -608,
        304
      ],
      "parameters": {
        "options": {},
        "resource": "audio",
        "operation": "transcribe"
      },
      "credentials": {
        "openAiApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.6
    },
    {
      "id": "5c96a89b-fa79-4594-8f77-51e8e46d3f3b",
      "name": "If1",
      "type": "n8n-nodes-base.if",
      "position": [
        -432,
        64
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "or",
          "conditions": [
            {
              "id": "5369dda9-dfe5-4f04-b5b7-10fbbd5ea6c0",
              "operator": {
                "type": "string",
                "operation": "startsWith"
              },
              "leftValue": "={{ $json.text }}",
              "rightValue": "Diane"
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "4d49e76a-7f84-4267-ada8-b4c0739ca53d",
      "name": "Embeddings OpenAI",
      "type": "@n8n/n8n-nodes-langchain.embeddingsOpenAi",
      "position": [
        48,
        -96
      ],
      "parameters": {
        "options": {}
      },
      "credentials": {
        "openAiApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "667176b3-1cd5-41e4-9e54-9267e460dea7",
      "name": "Default Data Loader",
      "type": "@n8n/n8n-nodes-langchain.documentDefaultDataLoader",
      "position": [
        240,
        -96
      ],
      "parameters": {
        "options": {},
        "jsonData": "={{ $json.text }}",
        "jsonMode": "expressionData"
      },
      "typeVersion": 1
    },
    {
      "id": "6a0109e0-87cb-4907-b067-9dd7548c9234",
      "name": "Recursive Character Text Splitter",
      "type": "@n8n/n8n-nodes-langchain.textSplitterRecursiveCharacterTextSplitter",
      "position": [
        240,
        96
      ],
      "parameters": {
        "options": {}
      },
      "typeVersion": 1
    },
    {
      "id": "0c9bd4fa-f561-4ffc-9d51-897fc51c0360",
      "name": "Add to Supabase Table",
      "type": "@n8n/n8n-nodes-langchain.vectorStoreSupabase",
      "position": [
        96,
        -304
      ],
      "parameters": {
        "mode": "insert",
        "options": {},
        "tableName": {
          "__rl": true,
          "mode": "list",
          "value": "documents",
          "cachedResultName": "documents"
        }
      },
      "credentials": {
        "supabaseApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "a6882f89-e938-44a1-9e2d-b64efcb84023",
      "name": "Postgres Chat Memory",
      "type": "@n8n/n8n-nodes-langchain.memoryPostgresChat",
      "position": [
        -96,
        256
      ],
      "parameters": {
        "sessionKey": "={{ $('LINE input').item.json.body.events[0].source.userId }}",
        "sessionIdType": "customKey",
        "contextWindowLength": 50
      },
      "credentials": {
        "postgres": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.3
    },
    {
      "id": "f3e11c30-dcd6-46f2-9e5e-ccc4058c41b5",
      "name": "Supabase Vector Store",
      "type": "@n8n/n8n-nodes-langchain.vectorStoreSupabase",
      "position": [
        -112,
        640
      ],
      "parameters": {
        "mode": "retrieve-as-tool",
        "options": {},
        "toolName": "SupabaseVectorStore",
        "tableName": {
          "__rl": true,
          "mode": "list",
          "value": "documents",
          "cachedResultName": "documents"
        },
        "toolDescription": "Use this to get information about the AI Voice Agent Framework"
      },
      "credentials": {
        "supabaseApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "65cc8d2b-8bb5-46f4-b192-86af6527ad53",
      "name": "Embeddings",
      "type": "@n8n/n8n-nodes-langchain.embeddingsOpenAi",
      "position": [
        -112,
        784
      ],
      "parameters": {
        "options": {}
      },
      "credentials": {
        "openAiApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "13a0a059-2f76-4788-b921-ec4256bdc55d",
      "name": "Edit Fields1",
      "type": "n8n-nodes-base.set",
      "position": [
        464,
        -304
      ],
      "parameters": {
        "mode": "raw",
        "options": {},
        "jsonOutput": "{\n  \"output\": \"Notes saved.\"\n}\n"
      },
      "typeVersion": 3.4
    },
    {
      "id": "d1d214df-c319-4d2f-b8f2-6e60b36bc877",
      "name": "Code",
      "type": "n8n-nodes-base.code",
      "position": [
        -272,
        0
      ],
      "parameters": {
        "jsCode": "// JavaScript for n8n Code node\n\n// Get input data (in n8n, usually use $input.all())\nconst items = $input.all();\n\n// Define the list of prefixes to remove\nconst prefixesToRemove = ['Diane'];\n\n// Process each item\nconst processedItems = items.map(item => {\n  // Retrieve the message (adjust the field name according to your structure)\n  let message = item.json.message || item.json.text || item.json.body;\n  \n  if (message && typeof message === 'string') {\n    // Check each prefix and remove if it matches\n    for (const prefix of prefixesToRemove) {\n      // If the message starts with the prefix\n      if (message.startsWith(prefix)) {\n        // Remove the prefix\n        message = message.substring(prefix.length);\n        \n        // If the next character is \"\u3001\", remove it\n        if (message.startsWith('\u3001')) {\n          message = message.substring(1);\n        }\n        \n        // Exit loop after handling one prefix\n        break;\n      }\n    }\n    \n    // Set the processed message\n    return {\n      json: {\n        text: message.trim() // Also remove leading and trailing spaces\n      }\n    };\n  }\n  \n  // If the message is not a string, return it as is\n  return item;\n});\n\nreturn processedItems;"
      },
      "typeVersion": 2
    },
    {
      "id": "72e08acb-4781-4e81-9b7e-51ecd8cdef94",
      "name": "Schedule Trigger",
      "type": "n8n-nodes-base.scheduleTrigger",
      "position": [
        -1408,
        880
      ],
      "parameters": {
        "rule": {
          "interval": [
            {
              "triggerAtHour": 7
            }
          ]
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "bf9dfb91-0728-417c-977a-8f4355510596",
      "name": "Edit Fields2",
      "type": "n8n-nodes-base.set",
      "position": [
        -1200,
        880
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "25573dfc-1794-40c7-8848-080142d8da12",
              "name": "text",
              "type": "string",
              "value": "\u6700\u65b0\u306e\u30e1\u30e2\u5185\u5bb9\u30923\u4ef6\u62fe\u3063\u3066\u5185\u5bb9\u3092\u30e1\u30fc\u30eb\u3057\u3066\u304f\u3060\u3055\u3044\u3002"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "5f6097d3-a767-42a9-8139-7c480722a8d5",
      "name": "AI Agent1",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        -912,
        880
      ],
      "parameters": {
        "text": "={{ $json.text }}",
        "options": {
          "systemMessage": "=# Overview\nYou are an AI assistant. Your job is to route the user's requests to the appropriate tool.  \n## Current date and time: {{ $now }}\n\n## Tools\n- Send a message in Gmail: Use this tool to perform actions via email  \n- SupabaseVectorStore: Use this tool to search the stored note contents\n"
        },
        "promptType": "define"
      },
      "typeVersion": 1.8
    },
    {
      "id": "c7ea4fbc-4ca4-49ba-946e-4452722d3267",
      "name": "OpenAI Chat Model1",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "position": [
        -912,
        720
      ],
      "parameters": {
        "model": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-5",
          "cachedResultName": "gpt-5"
        },
        "options": {}
      },
      "credentials": {
        "openAiApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "b0afd9ab-c39f-465f-ab1c-c4a7a15f6688",
      "name": "Supabase Vector Store1",
      "type": "@n8n/n8n-nodes-langchain.vectorStoreSupabase",
      "position": [
        -768,
        1136
      ],
      "parameters": {
        "mode": "retrieve-as-tool",
        "options": {},
        "toolName": "SupabaseVectorStore",
        "tableName": {
          "__rl": true,
          "mode": "list",
          "value": "documents",
          "cachedResultName": "documents"
        },
        "toolDescription": "Use this to get information about the AI Voice Agent Framework"
      },
      "credentials": {
        "supabaseApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "30130269-f1be-4efb-b215-3cc822f373de",
      "name": "Embeddings1",
      "type": "@n8n/n8n-nodes-langchain.embeddingsOpenAi",
      "position": [
        -768,
        1280
      ],
      "parameters": {
        "options": {}
      },
      "credentials": {
        "openAiApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "169693f6-4e54-4e34-8192-f789393765b3",
      "name": "Send a message in Gmail1",
      "type": "n8n-nodes-base.gmailTool",
      "position": [
        -896,
        1088
      ],
      "parameters": {
        "sendTo": "{{ YOUR_EMAIL_ADDRESS }}",
        "message": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Message', ``, 'string') }}",
        "options": {},
        "subject": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Subject', ``, 'string') }}",
        "emailType": "text"
      },
      "credentials": {
        "gmailOAuth2": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "d289fb3a-c425-4f00-809c-7018f7778e9c",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1680,
        560
      ],
      "parameters": {
        "color": 4,
        "width": 1264,
        "height": 848,
        "content": "## Email Delivery of Notes\n\n**Default Settings**\n\n* Delivered every morning at 7 AM\n* \u201cPlease pick up the latest 3 notes and send them to me by email.\u201d\n\n**Prompt Examples**\n\n* \u201cFrom my past notes, generate 3 story ideas for my manga.\u201d\n* \u201cBased on the investigation notes, predict the suspect and suggest the next action.\u201d\n* \u201cCreate about 3 quiz questions from the notes.\u201d\n"
      },
      "typeVersion": 1
    },
    {
      "id": "4e09bcb3-afa3-47a2-93a0-90345592a88f",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -496,
        -352
      ],
      "parameters": {
        "width": 384,
        "height": 544,
        "content": "## Trigger Keyword\n\n**Role of the if and code nodes**\n\n* The **if node** detects the trigger keyword in the message.\n* The **code node** removes the trigger keyword before saving the content into Supabase.\n\n**Default Setting**\n\n* \u201cDiane\u201d\n\nIf a string similar to \u201cDiane\u201d is detected, you can also include it in the if and code nodes.\nFeel free to replace \u201cDiane\u201d with any custom keyword of your choice.\n\n"
      },
      "typeVersion": 1
    },
    {
      "id": "5fac0f47-1960-4bc4-86f0-14db86822ced",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1680,
        -592
      ],
      "parameters": {
        "color": 3,
        "width": 800,
        "height": 800,
        "content": "## Diane Memo (AI Voice & Text Note-Taking Agent, RAG-powered)\n\n### Overview\nThis workflow lets you capture, store, and retrieve notes from LINE chats \u2014 both text and voice messages \u2014 and automatically send them to your Gmail inbox.  \nBy leveraging Supabase Vector Database, you can not only store and recall your notes, but also repurpose them for idea generation, quiz creation, or hypothesis building.\n\n### Key Features\n- Receive text and audio messages via LINE\n- Transcribe audio messages automatically and save them in Supabase\n- Trigger note storage with a specific keyword (default: \u201cDiane\u201d)\n- Automatically send the latest notes to your Gmail every morning at 7 AM\n- Search and reuse your notes (e.g., generate ideas, quizzes, or insights)\n\n### Requirements\n- Supabase account (free plan supported)\n- LINE Messaging API channel setup (obtain your access token)\n- Gmail authentication (OAuth2)\n\n### Notes\n- Replace placeholders such as LINE Access Token, UserId, and Email Address with your own information.\n- All credentials (OpenAI, Supabase, LINE, Gmail, etc.) must be configured securely in the n8n Credentials section.\n- You may customize the trigger keyword (\u201cDiane\u201d) to any word you like.\n- *(Fun fact: the default keyword \u201cDiane\u201d is a small homage to the movie Twin Peaks, where the protagonist records his memos starting with \u201cDiane.\u201d)*\n\n### Reference Documents\n- Supabase Vector Store node  \n  https://docs.n8n.io/integrations/builtin/cluster-nodes/root-nodes/n8n-nodes-langchain.vectorstoresupabase/?utm_source=n8n_app&utm_medium=node_settings_modal-credential_link&utm_campaign=%40n8n%2Fn8n-nodes-langchain.vectorStoreSupabase\n"
      },
      "typeVersion": 1
    },
    {
      "id": "ba1c0ada-8c94-4bc3-b8c7-a32a06a0134d",
      "name": "LINE input",
      "type": "n8n-nodes-base.webhook",
      "position": [
        -1408,
        384
      ],
      "parameters": {
        "path": "9010aea3-7129-4700-b79c-314b4e9f989b",
        "options": {},
        "httpMethod": "POST"
      },
      "typeVersion": 2
    },
    {
      "id": "20f99fcd-0187-44db-a172-6b5b7aec0a0b",
      "name": "LINE output",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        800,
        48
      ],
      "parameters": {
        "url": "https://api.line.me/v2/bot/message/reply",
        "method": "POST",
        "options": {},
        "jsonBody": "={\n\"replyToken\": \"{{ $('LINE input').item.json.body.events[0].replyToken }}\",\n\"messages\": [\n{\n\"type\": \"text\",\n\"text\": {{ JSON.stringify($json.output) }}\n}\n]\n} ",
        "sendBody": true,
        "sendHeaders": true,
        "specifyBody": "json",
        "headerParameters": {
          "parameters": [
            {
              "name": "Authorization",
              "value": "Bearer {{ LINE_CHANNELACCESS_TOKEN }}"
            },
            {
              "name": "Content-Type",
              "value": "application/json"
            }
          ]
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "7808031c-67ca-4e6d-9d01-7f803410c22b",
      "name": "only message",
      "type": "n8n-nodes-base.set",
      "position": [
        -656,
        112
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "19d5cd1e-8e1c-448d-8cef-ee18f015682c",
              "name": "text",
              "type": "string",
              "value": "={{ $json.body.events[0].message.text }}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    }
  ],
  "active": false,
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "b45a00a8-19ce-46f1-8f21-018547eabd6b",
  "connections": {
    "If": {
      "main": [
        [
          {
            "node": "Switch",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "If1": {
      "main": [
        [
          {
            "node": "Code",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "AI Agent",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Code": {
      "main": [
        [
          {
            "node": "Add to Supabase Table",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Switch": {
      "main": [
        [
          {
            "node": "only message",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Download",
            "type": "main",
            "index": 0
          }
        ],
        []
      ]
    },
    "AI Agent": {
      "main": [
        [
          {
            "node": "Edit Fields",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Download": {
      "main": [
        [
          {
            "node": "Transcribe",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "AI Agent1": {
      "main": [
        []
      ]
    },
    "Embeddings": {
      "ai_embedding": [
        [
          {
            "node": "Supabase Vector Store",
            "type": "ai_embedding",
            "index": 0
          }
        ]
      ]
    },
    "LINE input": {
      "main": [
        [
          {
            "node": "If",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Transcribe": {
      "main": [
        [
          {
            "node": "If1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Edit Fields": {
      "main": [
        [
          {
            "node": "LINE output",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Embeddings1": {
      "ai_embedding": [
        [
          {
            "node": "Supabase Vector Store1",
            "type": "ai_embedding",
            "index": 0
          }
        ]
      ]
    },
    "Edit Fields1": {
      "main": [
        [
          {
            "node": "LINE output",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Edit Fields2": {
      "main": [
        [
          {
            "node": "AI Agent1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "only message": {
      "main": [
        [
          {
            "node": "AI Agent",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Schedule Trigger": {
      "main": [
        [
          {
            "node": "Edit Fields2",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Embeddings OpenAI": {
      "ai_embedding": [
        [
          {
            "node": "Add to Supabase Table",
            "type": "ai_embedding",
            "index": 0
          }
        ]
      ]
    },
    "OpenAI Chat Model": {
      "ai_languageModel": [
        [
          {
            "node": "AI Agent",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "OpenAI Chat Model1": {
      "ai_languageModel": [
        [
          {
            "node": "AI Agent1",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Default Data Loader": {
      "ai_document": [
        [
          {
            "node": "Add to Supabase Table",
            "type": "ai_document",
            "index": 0
          }
        ]
      ]
    },
    "Postgres Chat Memory": {
      "ai_memory": [
        [
          {
            "node": "AI Agent",
            "type": "ai_memory",
            "index": 0
          }
        ]
      ]
    },
    "Add to Supabase Table": {
      "main": [
        [
          {
            "node": "Edit Fields1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Supabase Vector Store": {
      "ai_tool": [
        [
          {
            "node": "AI Agent",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "Supabase Vector Store1": {
      "ai_tool": [
        [
          {
            "node": "AI Agent1",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "Send a message in Gmail1": {
      "ai_tool": [
        [
          {
            "node": "AI Agent1",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "Recursive Character Text Splitter": {
      "ai_textSplitter": [
        [
          {
            "node": "Default Data Loader",
            "type": "ai_textSplitter",
            "index": 0
          }
        ]
      ]
    }
  }
}