{
  "meta": {
    "templateCredsSetupCompleted": true
  },
  "nodes": [
    {
      "id": "24fb0a57-8288-4202-8189-26f054e76366",
      "name": "Fetch all orders",
      "type": "@razorpay/n8n-nodes-razorpay.razorpay",
      "position": [
        1744,
        800
      ],
      "parameters": {
        "resource": "order",
        "operation": "fetchAllOrders",
        "additionalOptions": {
          "to": "={{ JSON.parse($json.output).to }}",
          "from": "={{ JSON.parse($json.output).from }}",
          "skip": "={{ JSON.parse($json.output).skip }}",
          "count": "={{ JSON.parse($json.output).count }}"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "4d710956-539f-4f6c-909b-f1769a3ef451",
      "name": "Orders",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "onError": "continueErrorOutput",
      "position": [
        1440,
        816
      ],
      "parameters": {
        "text": "={{ $('Telegram Trigger').item.json.message.text }}",
        "options": {
          "systemMessage": "You have to solve the user query using the agents you have\n\ntodays date \"2025-11-07 00:00:00\" as per users query fill the following details \nmax value of count is 100\nans in be below json format and do not add markdown formatting i have to give it input in JSON.parse()\n\nstrictly do not add ```json\n{\nfrom:\nto:\nskip:\ncount:\n}\n"
        },
        "promptType": "define"
      },
      "typeVersion": 3
    },
    {
      "id": "924333db-90fa-4959-8c22-286a9fc6e959",
      "name": "Refunds",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "onError": "continueErrorOutput",
      "position": [
        1424,
        1200
      ],
      "parameters": {
        "text": "={{ $('Telegram Trigger').item.json.message.text }}",
        "options": {
          "systemMessage": "Your responsibility is to return the json output for the refunds json and build the query params\nYou have to solve the user query using the agents you have\ntodays date epoch timestamp is 1762510334 as per users query fill the following details \nmax value of count is 100\nans in be below json format and do not add markdown formatting i have to give it input in JSON.parse()\n\nstrictly do not add ```json\n{\nfrom: // in epoch\nto: // in epoch\nskip:\ncount:\n}\n"
        },
        "promptType": "define"
      },
      "typeVersion": 3
    },
    {
      "id": "29280a55-d2de-45cc-baa4-c2fa1ad85767",
      "name": "Fetch all refunds",
      "type": "@razorpay/n8n-nodes-razorpay.razorpay",
      "position": [
        1744,
        1184
      ],
      "parameters": {
        "resource": "refund",
        "additionalOptions": {
          "to": "={{ JSON.parse($json.output).to }}",
          "from": "={{ JSON.parse($json.output).from }}",
          "skip": "={{ JSON.parse($json.output).to }}",
          "count": "={{ JSON.parse($json.output).count }}"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "39e8c434-58ae-4a97-92f5-6955679ccf1b",
      "name": "AI Agent3",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        1920,
        320
      ],
      "parameters": {
        "text": "=\nrefine the output as per user query and tell him the answer \nCount : {{ $json.count }}\nItems : {{ JSON.stringify($json.items) }}\nUser Query : {{ $('Telegram Trigger').item.json.message.text }}",
        "options": {
          "systemMessage": "=Ans the in concise manner do not flood the user with a data table just tell him whats asked as you are the razorpay analytics bot PayInsighter is your name the data provided in the prompt is from a other model you are the agent in the ending and your responsibility is to ans the user query\n"
        },
        "promptType": "define"
      },
      "typeVersion": 3
    },
    {
      "id": "938cecc1-9dcc-4277-a0bb-5d851a51db00",
      "name": "Payments Processor",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "onError": "continueErrorOutput",
      "position": [
        1408,
        336
      ],
      "parameters": {
        "text": "={{ $('Telegram Trigger').item.json.message.text }}",
        "options": {
          "systemMessage": "You have to solve the user query using the agents you have\nfor payments processing the from to should be in date time format\ntodays date \"2025-11-07 00:00:00\" as per users query fill the following details \nmax value of count is 100\nans in be below json format and do not add markdown formatting i have to give it input in JSON.parse()\n\nstrictly do not add ```json\n{\nfrom: \nto: \nskip:\ncount:\n}\n"
        },
        "promptType": "define"
      },
      "typeVersion": 3
    },
    {
      "id": "27065e48-142d-481e-82b8-c775e3dee8d1",
      "name": "Fetch all payments",
      "type": "@razorpay/n8n-nodes-razorpay.razorpay",
      "position": [
        1728,
        320
      ],
      "parameters": {
        "resource": "payment",
        "operation": "fetchAllPayments",
        "additionalOptions": {
          "to": "={{ JSON.parse($json.output).to }}",
          "from": "={{ JSON.parse($json.output).from }}",
          "skip": "={{ JSON.parse($json.output).skip }}",
          "count": "={{ JSON.parse($json.output).count }}"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "ee4d9592-c463-4035-94de-603f2980fd49",
      "name": "Send a text message",
      "type": "n8n-nodes-base.telegram",
      "position": [
        2384,
        1280
      ],
      "parameters": {
        "text": "={{ $json.output }}",
        "chatId": "={{ $('Telegram Trigger').item.json.message.from.id }}",
        "additionalFields": {}
      },
      "typeVersion": 1.2
    },
    {
      "id": "d6bc3c05-e376-445c-81b4-408159e63784",
      "name": "Telegram Trigger",
      "type": "n8n-nodes-base.telegramTrigger",
      "position": [
        -16,
        1232
      ],
      "parameters": {
        "updates": [
          "message"
        ],
        "additionalFields": {}
      },
      "typeVersion": 1.2
    },
    {
      "id": "78484f00-2185-4c76-892f-95ce19fb8b24",
      "name": "Workflow Overview",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -144,
        272
      ],
      "parameters": {
        "color": 4,
        "width": 2832,
        "height": 1816,
        "content": "# \ud83e\udd16 PayInsighter - Razorpay Analytics Bot\n### **Purpose:** Intelligent Telegram bot that analyzes Razorpay payment data using AI\n\n## **Flow:**\n### 1. User sends query via Telegram\n### 2. AI classifies intent (payments/orders/refunds/chat)\n### 3. Routes to appropriate branch\n### 4. Fetches Razorpay data\n### 5. AI analyzes and formats response\n### 6. Sends answer back to user\n\n## \ud83d\udca1 Use Cases\n### Get instant Razorpay payment analytics in Telegram\n### Retrieve daily or weekly order summaries\n### View recent refund transactions\n### Automate Razorpay queries for your team directly from chat"
      },
      "typeVersion": 1
    },
    {
      "id": "a2cac016-baf8-4b24-803a-e0d514e69ef0",
      "name": "Entry Point",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -112,
        880
      ],
      "parameters": {
        "color": 2,
        "width": 320,
        "height": 632,
        "content": "## \ud83d\udcf1 Entry Point\n\n**Telegram Trigger**\n- Listens for incoming Telegram messages\n- Captures user queries about Razorpay analytics\n- Triggers the workflow on every new message\n\n**Output:** User message text and metadata (user ID, chat ID, etc.)"
      },
      "typeVersion": 1
    },
    {
      "id": "bfa56cf0-baaf-4285-8445-146df6944a64",
      "name": "Intent Classification",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        256,
        880
      ],
      "parameters": {
        "color": 3,
        "width": 340,
        "height": 636,
        "content": "## \ud83e\udde0 Intent Classification\n\n**Intent Classifier**\n- Analyzes user message using Google Gemini\n- Classifies into 4 categories:\n  \u2022 payments\n  \u2022 orders\n  \u2022 refunds\n  \u2022 general_chat\n- Supports multi-intent (e.g., \"orders_payments\")\n\n**Output:** Single word or underscore-separated intents"
      },
      "typeVersion": 1
    },
    {
      "id": "46c6cae8-4fb5-454c-8e9a-1f63b676071d",
      "name": "Routing Logic",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        640,
        304
      ],
      "parameters": {
        "color": 6,
        "width": 360,
        "height": 1724,
        "content": "## \ud83d\udd00 Routing Logic\n\n**4 IF Nodes (Parallel Routing)**\n- If: Checks if intent contains \"payments\"\n- If1: Checks if intent contains \"refunds\"\n- If2: Checks if intent contains \"orders\"\n- If3: Checks if intent contains \"general_chat\"\n\n**Note:** Multiple branches can execute simultaneously for multi-intent queries"
      },
      "typeVersion": 1
    },
    {
      "id": "b869fce0-ab44-4896-9f54-59ff50b9e9db",
      "name": "Payments Branch",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1024,
        304
      ],
      "parameters": {
        "color": 7,
        "width": 1180,
        "height": 408,
        "content": "## \ud83d\udcb3 Payments Branch\n\n**Step 1: Payments Processor (AI Agent)**\n- Parses user query for date ranges\n- Generates JSON with from/to/skip/count parameters\n- Date format: \"2025-11-07 00:00:00\"\n\n**Step 2: Fetch all payments (Razorpay API)**\n- Calls Razorpay API with generated parameters\n- Retrieves payment records\n\n**Step 3: AI Agent3 (Response Formatter)**\n- Analyzes payment data\n- Generates concise, user-friendly answer\n- Avoids data table flooding"
      },
      "typeVersion": 1
    },
    {
      "id": "3bc21646-d19b-46de-be59-27d7e2bb44c4",
      "name": "Orders Branch",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1024,
        768
      ],
      "parameters": {
        "color": 7,
        "width": 1180,
        "height": 360,
        "content": "## \ud83d\udce6 Orders Branch\n\n**Step 1: Orders (AI Agent)**\n- Parses user query for date ranges\n- Generates JSON with from/to/skip/count parameters\n- Max count: 100 records\n\n**Step 2: Fetch all orders (Razorpay API)**\n- Calls Razorpay Orders API\n- Retrieves order records\n\n**Step 3: AI Agent1 (Response Formatter)**\n- Analyzes order data\n- Generates concise answer as PayInsighter bot\n- Focuses on what user asked"
      },
      "typeVersion": 1
    },
    {
      "id": "bcb5d118-63e2-4014-9133-90441189f9ff",
      "name": "Refunds Branch",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1024,
        1152
      ],
      "parameters": {
        "color": 7,
        "width": 1180,
        "height": 424,
        "content": "## \ud83d\udcb0 Refunds Branch\n\n**Step 1: Refunds (AI Agent)**\n- Parses user query for date ranges\n- Generates JSON with epoch timestamps\n- Parameters: from/to/skip/count\n\n**Step 2: Fetch all refunds (Razorpay API)**\n- Calls Razorpay Refunds API\n- Retrieves refund records\n\n**Step 3: AI Agent2 (Response Formatter)**\n- Analyzes refund data\n- Generates concise answer\n- Maintains PayInsighter bot persona"
      },
      "typeVersion": 1
    },
    {
      "id": "c38aa794-edcd-4b7c-88ed-ac479d29b908",
      "name": "General Chat Branch",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1024,
        1600
      ],
      "parameters": {
        "color": 7,
        "width": 1176,
        "height": 420,
        "content": "## \ud83d\udcac General Chat Branch\n\n**General Chat Processor (AI Agent)**\n- Handles non-analytics queries\n- Responds as PayInsighter bot\n- Provides helpful, concise answers\n- No Razorpay API calls needed\n\n**Use Cases:**\n- Greetings\n- Help requests\n- General questions about the bot\n- Clarifications"
      },
      "typeVersion": 1
    },
    {
      "id": "a934a1f6-604b-40ea-8b68-5c7474968f28",
      "name": "Response Consolidation",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2224,
        304
      ],
      "parameters": {
        "color": 2,
        "width": 424,
        "height": 1712,
        "content": "## \ud83d\udd17 Response Consolidation\n\n**Merge Node**\n- Combines outputs from all 4 branches\n- Handles multi-intent responses\n- Appends mode: preserves all responses\n\n**Send a text message (Telegram)**\n- Sends final AI-generated response\n- Uses original chat ID from trigger\n- Completes the conversation loop"
      },
      "typeVersion": 1
    },
    {
      "id": "fee560fd-4d41-4012-8d1b-00da357cfa56",
      "name": "Google Gemini Chat Model1",
      "type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini",
      "position": [
        1728,
        576
      ],
      "parameters": {
        "options": {}
      },
      "typeVersion": 1
    },
    {
      "id": "903d0a39-4cc0-4c9e-ad9a-a2a80bce5d33",
      "name": "Intent Classifier",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        320,
        1312
      ],
      "parameters": {
        "text": "={{ $json.message.text }}",
        "options": {
          "systemMessage": "Give a single word answer\nclassify the user input message in the following categories \ndo not add any formatting or special characters like \"\\n\"\nIf the users message has multiple intents then give output as intent1_intent2 separated by underscore (_) Eg. orders_payments\n1. orders\n2. payments\n3. refunds\n4. general_chat"
        },
        "promptType": "define"
      },
      "typeVersion": 3
    },
    {
      "id": "fd260caf-e5e0-49b0-ade2-156696db0fc9",
      "name": "Google Gemini Chat Model",
      "type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini",
      "position": [
        1744,
        1008
      ],
      "parameters": {
        "options": {}
      },
      "typeVersion": 1
    },
    {
      "id": "8a0adced-6494-489b-917c-2e77048d3a32",
      "name": "Google Gemini Chat Model2",
      "type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini",
      "position": [
        1744,
        1424
      ],
      "parameters": {
        "options": {}
      },
      "typeVersion": 1
    },
    {
      "id": "04a134ed-aa63-46c3-83c3-95a898f4ba53",
      "name": "Google Gemini Chat Model3",
      "type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini",
      "position": [
        1760,
        1872
      ],
      "parameters": {
        "options": {}
      },
      "typeVersion": 1
    },
    {
      "id": "bd72f597-0760-4179-814f-7d9770606149",
      "name": "Order Processing Agent",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        1920,
        800
      ],
      "parameters": {
        "text": "=\nrefine the output as per user query and tell him the answer \nCount : {{ $json.count }}\nItems : {{ JSON.stringify($json.items) }}\nUser Query : {{ $('Telegram Trigger').item.json.message.text }}",
        "options": {
          "systemMessage": "=Ans the in concise manner do not flood the user with a data table just tell him whats asked as you are the razorpay analytics bot PayInsighter is your name the data provided in the prompt is from a other model you are the agent in the ending and your responsibility is to ans the user query\n"
        },
        "promptType": "define"
      },
      "typeVersion": 3
    },
    {
      "id": "eadf3819-6333-4228-97f8-53907b449f8b",
      "name": "Refund Processing Agent",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        1936,
        1184
      ],
      "parameters": {
        "text": "=\nrefine the output as per user query and tell him the answer \nCount : {{ $json.count }}\nItems : {{ JSON.stringify($json.items) }}\nUser Query : {{ $('Telegram Trigger').item.json.message.text }}",
        "options": {
          "systemMessage": "=Ans the in concise manner do not flood the user with a data table just tell him whats asked as you are the razorpay analytics bot PayInsighter is your name the data provided in the prompt is from a other model you are the agent in the ending and your responsibility is to ans the user query\n"
        },
        "promptType": "define"
      },
      "typeVersion": 3
    },
    {
      "id": "a5699ab2-27ad-4492-81f4-7320a4605350",
      "name": "General Chat Processing Agent",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        1760,
        1712
      ],
      "parameters": {
        "text": "={{ $('Telegram Trigger').item.json.message.text }}",
        "options": {
          "systemMessage": "Ans in concise manner do not \nflood the user with a data table just tell him whats asked as you are the razorpay analytics bot PayInsighter is your name the data provided in the prompt is from a other model you are the agent in the ending and your responsibility is to ans the user query\n"
        },
        "promptType": "define"
      },
      "typeVersion": 3
    },
    {
      "id": "a2287dd8-a411-40d1-855d-8539d7036aae",
      "name": "Merge Responses",
      "type": "n8n-nodes-base.merge",
      "position": [
        2320,
        704
      ],
      "parameters": {
        "numberInputs": 4
      },
      "typeVersion": 3.2
    },
    {
      "id": "1e3a8db8-5b53-453e-8100-469018453833",
      "name": "Payment Branch",
      "type": "n8n-nodes-base.if",
      "position": [
        736,
        704
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "cf64d132-b331-4a79-96a3-fbd6e128a495",
              "operator": {
                "type": "string",
                "operation": "contains"
              },
              "leftValue": "={{ $json.output }}",
              "rightValue": "payments"
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "a423c44e-9488-4aa7-bc1c-7f4ad25a24ca",
      "name": "Order Branch",
      "type": "n8n-nodes-base.if",
      "position": [
        736,
        992
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "cf64d132-b331-4a79-96a3-fbd6e128a495",
              "operator": {
                "type": "string",
                "operation": "contains"
              },
              "leftValue": "={{ $json.output }}",
              "rightValue": "orders"
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "560540df-6efa-4f96-8246-c6eacf30ae95",
      "name": "Refund Branch",
      "type": "n8n-nodes-base.if",
      "position": [
        736,
        1376
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "cf64d132-b331-4a79-96a3-fbd6e128a495",
              "operator": {
                "type": "string",
                "operation": "contains"
              },
              "leftValue": "={{ $json.output }}",
              "rightValue": "refunds"
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "d5dea4b5-08f4-4a4a-8bed-2d02e4b2ffe9",
      "name": "General Chat Branch1",
      "type": "n8n-nodes-base.if",
      "position": [
        736,
        1744
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "cf64d132-b331-4a79-96a3-fbd6e128a495",
              "operator": {
                "type": "string",
                "operation": "contains"
              },
              "leftValue": "={{ $json.output }}",
              "rightValue": "general_chat"
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "2d4d4cad-7258-4444-98bd-489d0755f10b",
      "name": "AI Model Provider",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -112,
        1568
      ],
      "parameters": {
        "color": 3,
        "width": 724,
        "height": 464,
        "content": "## \ud83e\udd16 AI Model Provider\n\n**Google Gemini Chat Model**\n- Model: gemini-2.5-flash (Or any other model)\n- Powers all 8 AI agents in workflow\n- Handles:\n  \u2022 Intent classification\n  \u2022 Query parameter extraction\n  \u2022 Data analysis\n  \u2022 Response generation\n\n**Connected to:** All AI Agent nodes"
      },
      "typeVersion": 1
    }
  ],
  "connections": {
    "Orders": {
      "main": [
        [
          {
            "node": "Fetch all orders",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Refunds": {
      "main": [
        [
          {
            "node": "Fetch all refunds",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "AI Agent3": {
      "main": [
        [
          {
            "node": "Merge Responses",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Order Branch": {
      "main": [
        [
          {
            "node": "Orders",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Refund Branch": {
      "main": [
        [
          {
            "node": "Refunds",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Payment Branch": {
      "main": [
        [
          {
            "node": "Payments Processor",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Merge Responses": {
      "main": [
        [
          {
            "node": "Send a text message",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Fetch all orders": {
      "main": [
        [
          {
            "node": "Order Processing Agent",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Telegram Trigger": {
      "main": [
        [
          {
            "node": "Intent Classifier",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Fetch all refunds": {
      "main": [
        [
          {
            "node": "Refund Processing Agent",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Intent Classifier": {
      "main": [
        [
          {
            "node": "Payment Branch",
            "type": "main",
            "index": 0
          },
          {
            "node": "Refund Branch",
            "type": "main",
            "index": 0
          },
          {
            "node": "Order Branch",
            "type": "main",
            "index": 0
          },
          {
            "node": "General Chat Branch1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Fetch all payments": {
      "main": [
        [
          {
            "node": "AI Agent3",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Payments Processor": {
      "main": [
        [
          {
            "node": "Fetch all payments",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "General Chat Branch1": {
      "main": [
        [
          {
            "node": "General Chat Processing Agent",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Order Processing Agent": {
      "main": [
        [
          {
            "node": "Merge Responses",
            "type": "main",
            "index": 1
          }
        ]
      ]
    },
    "Refund Processing Agent": {
      "main": [
        [
          {
            "node": "Merge Responses",
            "type": "main",
            "index": 2
          }
        ]
      ]
    },
    "Google Gemini Chat Model": {
      "ai_languageModel": [
        [
          {
            "node": "Orders",
            "type": "ai_languageModel",
            "index": 0
          },
          {
            "node": "Order Processing Agent",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Google Gemini Chat Model1": {
      "ai_languageModel": [
        [
          {
            "node": "Payments Processor",
            "type": "ai_languageModel",
            "index": 0
          },
          {
            "node": "AI Agent3",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Google Gemini Chat Model2": {
      "ai_languageModel": [
        [
          {
            "node": "Refunds",
            "type": "ai_languageModel",
            "index": 0
          },
          {
            "node": "Refund Processing Agent",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Google Gemini Chat Model3": {
      "ai_languageModel": [
        [
          {
            "node": "General Chat Processing Agent",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "General Chat Processing Agent": {
      "main": [
        [
          {
            "node": "Merge Responses",
            "type": "main",
            "index": 3
          }
        ]
      ]
    }
  }
}