{
  "meta": {
    "templateCredsSetupCompleted": true
  },
  "nodes": [
    {
      "id": "400ad243-eec7-4d97-8b02-3297a97bbe7e",
      "name": "Decodo",
      "type": "@decodo/n8n-nodes-decodo.decodoTool",
      "position": [
        4240,
        512
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "74f140f1-a919-4229-b371-71f97de54ff8",
      "name": "Simple Memory",
      "type": "@n8n/n8n-nodes-langchain.memoryBufferWindow",
      "position": [
        4128,
        512
      ],
      "parameters": {
        "sessionKey": "={{ $json.chatId }}",
        "sessionIdType": "customKey"
      },
      "typeVersion": 1.3
    },
    {
      "id": "bb8c9fc3-fc33-48bd-95f0-b89bf3a8988a",
      "name": "Send Fallback Text",
      "type": "n8n-nodes-base.telegram",
      "position": [
        3088,
        624
      ],
      "parameters": {
        "text": "=Sorry, i can only support text, photo, and voice message",
        "chatId": "={{ $json.message.chat.id }}",
        "additionalFields": {
          "appendAttribution": false
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "86ad6b93-6e93-4256-97ae-a6e71c2cfca0",
      "name": "Start Telegram Bot",
      "type": "n8n-nodes-base.telegramTrigger",
      "position": [
        2640,
        352
      ],
      "parameters": {
        "updates": [
          "message"
        ],
        "additionalFields": {}
      },
      "typeVersion": 1.2
    },
    {
      "id": "62aa237c-2f6d-453d-a7b4-e7d193c7cade",
      "name": "Detect Message Type",
      "type": "n8n-nodes-base.switch",
      "position": [
        2864,
        320
      ],
      "parameters": {
        "rules": {
          "values": [
            {
              "outputKey": "Photo",
              "conditions": {
                "options": {
                  "version": 2,
                  "leftValue": "",
                  "caseSensitive": true,
                  "typeValidation": "strict"
                },
                "combinator": "and",
                "conditions": [
                  {
                    "id": "9011a574-9680-451e-9290-4001a103887d",
                    "operator": {
                      "type": "array",
                      "operation": "notEmpty",
                      "singleValue": true
                    },
                    "leftValue": "={{ $json.message.photo }}",
                    "rightValue": ""
                  }
                ]
              },
              "renameOutput": true
            },
            {
              "outputKey": "Text",
              "conditions": {
                "options": {
                  "version": 2,
                  "leftValue": "",
                  "caseSensitive": true,
                  "typeValidation": "strict"
                },
                "combinator": "and",
                "conditions": [
                  {
                    "id": "32ffc6b3-5f14-4ad9-922b-76088e2492c3",
                    "operator": {
                      "type": "string",
                      "operation": "notEmpty",
                      "singleValue": true
                    },
                    "leftValue": "={{ $json.message.text }}",
                    "rightValue": ""
                  }
                ]
              },
              "renameOutput": true
            },
            {
              "outputKey": "Voice",
              "conditions": {
                "options": {
                  "version": 2,
                  "leftValue": "",
                  "caseSensitive": true,
                  "typeValidation": "strict"
                },
                "combinator": "and",
                "conditions": [
                  {
                    "id": "a1d47f49-6acf-404a-8176-d9ba6b17523e",
                    "operator": {
                      "type": "object",
                      "operation": "notEmpty",
                      "singleValue": true
                    },
                    "leftValue": "={{ $json.message.voice }}",
                    "rightValue": ""
                  }
                ]
              },
              "renameOutput": true
            }
          ]
        },
        "options": {
          "fallbackOutput": "extra"
        }
      },
      "typeVersion": 3.3
    },
    {
      "id": "b52b6402-1b68-4dce-8631-66d8f812e79b",
      "name": "Download Telegram Photo",
      "type": "n8n-nodes-base.telegram",
      "position": [
        3088,
        144
      ],
      "parameters": {
        "fileId": "={{ $json.message.photo[3].file_id }}",
        "resource": "file",
        "additionalFields": {}
      },
      "typeVersion": 1.2
    },
    {
      "id": "93952b16-c71b-443c-9fd4-4d8861b7f910",
      "name": "Download Telegram Voice",
      "type": "n8n-nodes-base.telegram",
      "position": [
        3088,
        432
      ],
      "parameters": {
        "fileId": "={{ $json.message.voice.file_id }}",
        "resource": "file",
        "additionalFields": {}
      },
      "typeVersion": 1.2
    },
    {
      "id": "c33a4ccc-8623-482c-828b-61600a8e2e80",
      "name": "Analyze Image Content",
      "type": "@n8n/n8n-nodes-langchain.googleGemini",
      "position": [
        3312,
        144
      ],
      "parameters": {
        "modelId": {
          "__rl": true,
          "mode": "list",
          "value": "models/gemini-2.5-flash",
          "cachedResultName": "models/gemini-2.5-flash"
        },
        "options": {},
        "resource": "image",
        "inputType": "binary",
        "operation": "analyze"
      },
      "typeVersion": 1
    },
    {
      "id": "cda3ab72-0cfe-4222-85a4-995a962dde8e",
      "name": "Transcribe Voice Message",
      "type": "@n8n/n8n-nodes-langchain.googleGemini",
      "position": [
        3312,
        432
      ],
      "parameters": {
        "modelId": {
          "__rl": true,
          "mode": "list",
          "value": "models/gemini-2.5-flash",
          "cachedResultName": "models/gemini-2.5-flash"
        },
        "options": {},
        "resource": "audio",
        "inputType": "binary"
      },
      "typeVersion": 1
    },
    {
      "id": "c83570ff-9886-496a-8187-417b976f5a4a",
      "name": "Format Image Text",
      "type": "n8n-nodes-base.set",
      "position": [
        3536,
        144
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "aa2b9784-2bcf-41ba-8954-4e59f4182f32",
              "name": "message.text",
              "type": "string",
              "value": "=Caption: {{ $('Start Telegram Bot').item.json.message.caption ?? \"[none]\" }}\n---\nImage: {{ $json.content.parts[0].text }}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "b1da19d9-08bf-42de-871e-4d64f97b21c4",
      "name": "Format Voice Text",
      "type": "n8n-nodes-base.set",
      "position": [
        3536,
        432
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "133940af-39d6-49e3-927c-fedfc5843aac",
              "name": "message.text",
              "type": "string",
              "value": "={{ $json.content.parts[0].text }}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "9698e757-be38-4e4b-b4d3-0bc83250915a",
      "name": "Prepare Chat Data",
      "type": "n8n-nodes-base.set",
      "position": [
        3760,
        288
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "7ce0d75f-1ad5-4c6b-a5b0-f108da87b6fc",
              "name": "chatInput",
              "type": "string",
              "value": "={{ $json.message.text }}"
            },
            {
              "id": "7753621e-9d0b-4561-ab9e-f20d0931e523",
              "name": "chatId",
              "type": "string",
              "value": "={{ $('Start Telegram Bot').item.json.message.chat.id }}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "cee806e9-34ec-409a-bcc1-b68dc722aade",
      "name": "Research Summary Agent",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        4048,
        288
      ],
      "parameters": {
        "options": {
          "systemMessage": "=## Overview\nYou are Research Summary Agent, a research assistant specialized in searching, analyzing, and summarizing academic papers based on user queries. Your role is to interpret the user's research intent, generate meaningful search queries, use provided academic sources and tools effectively, and return structured, concise, and useful summaries of relevant papers.  \n\n## Tools\n- Decodo \u2014 A scraping utility capable of extracting titles, authors, abstracts, and publication details from academic web pages.  \n\n## Objectives\n1. Understand User Intent \u2014 Analyze the user's message to determine the true research topic, context, and desired type of papers (e.g., comparative, conceptual, applied, or review).  \n2. Extract Core Keywords \u2014 Identify the essential and meaningful keywords or phrases that represent the main concept of the user\u2019s request.  \n   - Remove filler words (e.g., \u201cthe way of\u201d, \u201cstudy about\u201d, \u201cpaper similar to\u201d, \u201cresearch on\u201d) and any quotes or formatting.  \n   - If a specific paper title is mentioned, infer its *thematic keywords* (e.g., if \u201cThe Way of the Artificial Intelligence\u201d is mentioned, infer related keywords such as *artificial intelligence, cognitive systems, AI philosophy, AI methodology*).  \n3. Plan Source Usage \u2014 Review the available academic source URLs (e.g., Google Scholar, arXiv) and understand their parameters to determine the best way to perform relevant searches.  \n4. Search & Retrieve \u2014 For each source, construct a clear and semantically rich search query using the extracted keywords, ensuring broad yet relevant coverage rather than literal string matching.  \n5. Use Tools Appropriately \u2014 Use Decodo and other provided tools to scrape or retrieve paper metadata, abstracts, and links from the specified URLs.  \n6. Filter & Rank Results \u2014 Prioritize results that are:  \n   - Topically relevant to the inferred research theme.  \n   - Recent or influential (if available).  \n   - Representative of the broader concept, not just identical titles.  \n7. Summarize Findings \u2014 Summarize each relevant paper in 2\u20133 lines, including title, year, authors, short abstract, and its relation to the topic.  \n8. Respond Clearly \u2014 Present all findings in a well-structured, easy-to-read format grouped by source (e.g., Google Scholar, arXiv).\n\n## Rules\n1. Only use the provided URLs and their described parameters when performing searches. Also, always search through all provided sources unless the user request for a specific source.  \n2. Never use parameters across different sources \u2014 each parameter must strictly apply to its corresponding source.  \n3. Do not use the user\u2019s message as a literal search phrase. Always convert it into a meaningful keyword-based query that reflects intent and core concepts.  \n4. Never make assumptions about unavailable sources or invent results.  \n5. Maintain factual accuracy, clarity, and neutrality in all summaries.  \n6. When using Decodo, only extract data relevant to research context (titles, abstracts, authors, publication year, and URLs).  \n7. Always cite the source (Google Scholar, arXiv, etc.) in the output.  \n8. Each paper summary must be limited to 2\u20133 lines maximum, focusing on key insights, contribution, and relevance to the topic.  \n9. Do not include unrelated metadata, extended commentary, or subjective interpretation.  \n10. Prefer generalized or semantically equivalent keywords over verbatim text to ensure broader and more effective search coverage.\n\n## Search Sources\nThe following list defines how each academic source and its parameters should be used for automated querying and analysis:\n\n{{INPUT_SEARCH_URL_INSIGHTS}}"
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "720cf61e-d06e-4643-9680-445df1b9a186",
      "name": "Gemini URL Interpreter",
      "type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini",
      "position": [
        3792,
        -64
      ],
      "parameters": {
        "options": {}
      },
      "typeVersion": 1
    },
    {
      "id": "f82195fb-e239-4053-b125-1c120626bdab",
      "name": "Gemini Research Model",
      "type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini",
      "position": [
        3984,
        512
      ],
      "parameters": {
        "options": {}
      },
      "typeVersion": 1
    },
    {
      "id": "e8c97abf-6f59-4a87-80c1-791a5a92468c",
      "name": "Check Telegram Message Length",
      "type": "n8n-nodes-base.if",
      "position": [
        4448,
        288
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "1ef96c76-7b6c-4ba4-9a4e-3e7271785b86",
              "operator": {
                "type": "number",
                "operation": "gt"
              },
              "leftValue": "={{ $json.output.length }}",
              "rightValue": 4000
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "73ccb2b8-e063-4dfe-929e-da5a9a26eded",
      "name": "Convert Output to Text File",
      "type": "n8n-nodes-base.convertToFile",
      "position": [
        4672,
        192
      ],
      "parameters": {
        "options": {
          "fileName": "research_summary"
        },
        "operation": "toText",
        "sourceProperty": "output"
      },
      "typeVersion": 1.1
    },
    {
      "id": "3f0282db-41dc-4e5c-81fc-214d0dec3e6f",
      "name": "Send Research Summary File",
      "type": "n8n-nodes-base.telegram",
      "position": [
        4896,
        192
      ],
      "parameters": {
        "chatId": "={{ $('Prepare Chat Data').item.json.chatId }}",
        "operation": "sendDocument",
        "binaryData": true,
        "additionalFields": {
          "caption": "=I've compiled the search result into a txt file because the content is too long for a single telegram message"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "85eafa78-d286-4b68-aa27-119c52ed98d3",
      "name": "Send Research Summary Message",
      "type": "n8n-nodes-base.telegram",
      "position": [
        4672,
        384
      ],
      "parameters": {
        "text": "={{ $json.output }}",
        "chatId": "={{ $('Prepare Chat Data').item.json.chatId }}",
        "additionalFields": {
          "parse_mode": "HTML",
          "appendAttribution": false
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "0228d966-3120-4396-a34e-2c832d473043",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2560,
        -720
      ],
      "parameters": {
        "width": 816,
        "height": 816,
        "content": "![Waha Johan](https://drive.google.com/thumbnail?id=1L2Ipo5Q41Uyw7KE_CJSnOPPArR7FXOFG&sz=w2000)\n## AI Research Assistant Using Gemini AI and Decodo\n\nSign up for Decodo [HERE](https://visit.decodo.com/discount) for Discount\n\nThis workflow transforms your Telegram bot into a smart academic research assistant powered by Gemini AI and Decodo. It analyzes queries, interprets URLs, scrapes scholarly data, and returns concise summaries of research papers directly in chat.\n\n## Who\u2019s it for?\nFor researchers, students, and AI enthusiasts who want to search and summarize academic content via Telegram using Google Scholar and arXiv.\n\n## How it works\n1. The Telegram bot captures text, voice, or image messages.\n2. Gemini models interpret academic URLs and user intent.\n3. Decodo extracts paper details like titles, abstracts, and publication info.\n4. The AI agent summarizes results and delivers them as text or file (if too long).\n\n## How to set up\n- Add your Telegram bot credentials in the `Start Telegram Bot` node.\n- Connect Google Gemini and Decodo API credentials.\n- Replace `{{INPUT_SEARCH_URL_INSIGHTS}}` placeholder on `Research Summary Agent`'s system message with your search URL insights (or use the pinned example).\n- Test by sending a text, image, or voice message to your bot.\n- Activate the workflow to run in real-time."
      },
      "typeVersion": 1
    },
    {
      "id": "f5167a16-bfdb-4eb6-befc-ddaf088424c8",
      "name": "Generate Search URL Insights",
      "type": "@n8n/n8n-nodes-langchain.chainLlm",
      "position": [
        3728,
        -288
      ],
      "parameters": {
        "text": "=",
        "batching": {},
        "messages": {
          "messageValues": [
            {
              "message": "=You are an AI URL Interpreter that specializes in analyzing academic search URLs. Your goal is to extract and explain all query parameters in a clear Markdown format so that an AI Research Agent can understand how to use them for research retrieval."
            },
            {
              "type": "HumanMessagePromptTemplate",
              "message": "=Your task is to take a list of academic search URLs and analyze each one.\n\nFor each URL, you must:\n1. Detect its source (e.g., Google Scholar, arXiv, Semantic Scholar, PubMed).\n2. Combine all URLs from the same source into one section.\n3. Extract and merge all unique parameters from those URLs (e.g., query terms, filters, search types, languages).\n3. Ignore UI-related or tracking parameters.\n5. Write one general note explaining what that platform\u2019s search does and how parameters can modify behavior.\n\nThe output must be written in Markdown format, following this template for each URL:\n### [Platform Name]\n1. URL Examples:\n   - [url_1]\n   - [url_2]\n2. Note: [summarized explanation of the platform and how parameters affect the search]\n3. Parameters:\n   - [parameter_name]: [meaning or function]\n   - ..."
            },
            {
              "type": "HumanMessagePromptTemplate",
              "message": "=[\n  \"https://scholar.google.com/scholar?q=artificial+intelligence&hl=en&as_sdt=0,5\",\n  \"https://scholar.google.com/scholar?as_ylo=2025&q=artificial+intelligence&hl=en&as_sdt=0,5\",\n  \"https://arxiv.org/search/?query=artificial+intelligence&searchtype=all&abstracts=show&order=-announced_date_first\",\n  \"https://arxiv.org/search/?query=artificial+intelligence&searchtype=all&source=header\"\n]"
            },
            {
              "type": "AIMessagePromptTemplate",
              "message": "=### Google Scholar\n1. URL Examples:\n   - https://scholar.google.com/scholar?q=artificial+intelligence&hl=en&as_sdt=0,5\n   - https://scholar.google.com/scholar?as_ylo=2025&q=artificial+intelligence&hl=en&as_sdt=0,5\n2. Note: Google Scholar is a search engine for scholarly articles, theses, and academic literature. These URLs perform searches for \u201cartificial intelligence\u201d in English, including all scholarly articles and citations. Additional parameters like `as_ylo` allow filtering by publication year to find the most recent works.\n3. Parameters:\n   - q: The main search query (e.g., \"artificial+intelligence\").\n   - hl: Interface language (e.g., \"en\" for English).\n   - as_sdt: Search scope control. \"0,5\" includes all articles and citations.\n   - as_ylo: Minimum publication year filter (e.g., \"2025\" to show recent works only).\n\n### arXiv\n1. URL Examples:\n   - https://arxiv.org/search/?query=artificial+intelligence&searchtype=all&abstracts=show&order=-announced_date_first\n   - https://arxiv.org/search/?query=artificial+intelligence&searchtype=all&source=header\n2. Note: arXiv is an open-access repository for research preprints in fields such as computer science, physics, and mathematics. These URLs search for \u201cartificial intelligence\u201d papers across all fields, optionally displaying abstracts and sorting by date. Parameters like `order` and `size` control sorting and number of results shown per page.\n3. Parameters:\n   - query: The main keyword being searched (e.g., \"artificial+intelligence\").\n   - searchtype: Defines search scope (\"all\" searches across title, abstract, and authors).\n   - abstracts: Controls whether abstracts are displayed (\"show\" = visible).\n   - order: Sorting order (\"-announced_date_first\" = newest first).\n   - size: Number of results displayed per page."
            },
            {
              "type": "HumanMessagePromptTemplate",
              "message": "=={{ $json.urls }}"
            }
          ]
        },
        "promptType": "define"
      },
      "typeVersion": 1.7
    },
    {
      "id": "a0e3fe58-606f-4733-808d-38b79d71be68",
      "name": "Define Search URLs",
      "type": "n8n-nodes-base.set",
      "position": [
        3504,
        -176
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "83b1c557-4853-4c63-b720-e5f2a7647ed3",
              "name": "urls",
              "type": "string",
              "value": "={{[\n  \"https://scholar.google.com/scholar?q=artificial+intelligence&hl=en&as_sdt=0,5\",\n  \"https://scholar.google.com/scholar?as_ylo=2025&q=artificial+intelligence&hl=en&as_sdt=0,5\",\n  \"https://arxiv.org/search/?query=artificial+intelligence&searchtype=all&abstracts=show&order=-announced_date_first\",\n  \"https://arxiv.org/search/?query=artificial+intelligence&searchtype=all&source=header\",\n]}}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "f916272b-b6be-4192-81b1-c186ae0f6afe",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        3424,
        -608
      ],
      "parameters": {
        "color": 3,
        "width": 624,
        "height": 704,
        "content": "## Search URL Insights\nUse this workflow section to automatically generate clear explanation of academic search URLs (e.g., Google Scholar, arXiv, PubMed, etc.). It helps the `Research Summary Agent` understand how each platform\u2019s query parameters work \u2014 allowing it to construct smarter, semantically rich search queries for scraping and summarization.\n\n## How to Use\n1. Enter an array of academic search URLs you want to analyze on `Define Search URLs`.\n2. Run the workflow to generate insight for corresponding URLs.\n3. Copy the generated insights (or the pinned example) and paste it into the `{{INPUT_SEARCH_URL_INSIGHTS}}` placeholder inside the `Research Summary Agent`\u2019s system message"
      },
      "typeVersion": 1
    },
    {
      "id": "5f1dacfb-b816-40dd-922b-d7f621a28d26",
      "name": "Sticky Note7",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2560,
        272
      ],
      "parameters": {
        "color": 5,
        "width": 256,
        "height": 256,
        "content": "### Create a Telegram bot using BotFather and paste its API key into n8n credentials"
      },
      "typeVersion": 1
    },
    {
      "id": "f34cc5d4-2231-498a-9716-aeafec3ddbc1",
      "name": "Sticky Note8",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        3952,
        192
      ],
      "parameters": {
        "color": 5,
        "width": 384,
        "height": 240,
        "content": "### Replace _{{INPUT_SEARCH_URL_INSIGHTS}}_ in the system message with your search URL insights (see to red sticky note)"
      },
      "typeVersion": 1
    },
    {
      "id": "9aa3825c-e7d2-4162-bdcc-f8aaccdf9b14",
      "name": "Sticky Note9",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        4096,
        -608
      ],
      "parameters": {
        "width": 1120,
        "height": 656,
        "content": "@[youtube](PDc0MwcicDQ)\n"
      },
      "typeVersion": 1
    }
  ],
  "connections": {
    "Decodo": {
      "ai_tool": [
        [
          {
            "node": "Research Summary Agent",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "Simple Memory": {
      "ai_memory": [
        [
          {
            "node": "Research Summary Agent",
            "type": "ai_memory",
            "index": 0
          }
        ]
      ]
    },
    "Format Image Text": {
      "main": [
        [
          {
            "node": "Prepare Chat Data",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Format Voice Text": {
      "main": [
        [
          {
            "node": "Prepare Chat Data",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Prepare Chat Data": {
      "main": [
        [
          {
            "node": "Research Summary Agent",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Define Search URLs": {
      "main": [
        [
          {
            "node": "Generate Search URL Insights",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Start Telegram Bot": {
      "main": [
        [
          {
            "node": "Detect Message Type",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Detect Message Type": {
      "main": [
        [
          {
            "node": "Download Telegram Photo",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Prepare Chat Data",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Download Telegram Voice",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Send Fallback Text",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Analyze Image Content": {
      "main": [
        [
          {
            "node": "Format Image Text",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Gemini Research Model": {
      "ai_languageModel": [
        [
          {
            "node": "Research Summary Agent",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Gemini URL Interpreter": {
      "ai_languageModel": [
        [
          {
            "node": "Generate Search URL Insights",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Research Summary Agent": {
      "main": [
        [
          {
            "node": "Check Telegram Message Length",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Download Telegram Photo": {
      "main": [
        [
          {
            "node": "Analyze Image Content",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Download Telegram Voice": {
      "main": [
        [
          {
            "node": "Transcribe Voice Message",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Transcribe Voice Message": {
      "main": [
        [
          {
            "node": "Format Voice Text",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Convert Output to Text File": {
      "main": [
        [
          {
            "node": "Send Research Summary File",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Check Telegram Message Length": {
      "main": [
        [
          {
            "node": "Convert Output to Text File",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Send Research Summary Message",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}