{
  "workflow": {
    "id": 6691,
    "name": "Multi-source RAG system with GPT-4 Turbo, news & academic papers integration",
    "views": 1140,
    "recentViews": 0,
    "totalViews": 1140,
    "createdAt": "2025-07-30T09:51:27.855Z",
    "description": "# Multi-Source RAG System with GPT-4 Turbo, News & Academic Papers Integration\n\nThis workflow provides an enterprise-grade RAG (Retrieval-Augmented Generation) system that intelligently searches multiple sources and generates AI-powered responses using GPT-4 Turbo.\n\n## How it works\n\nThis workflow provides an enterprise-grade RAG (Retrieval-Augmented Generation) system that intelligently searches multiple sources and generates AI-powered responses using GPT-4 Turbo.\n\n## Key Steps\n\n1. **Form Input** - Collects user queries with customizable search scope, response style, and language preferences\n2. **Intelligent Search** - Routes queries to appropriate sources (web, academic papers, news, internal documents)\n3. **Data Aggregation** - Unifies and processes information from multiple sources with quality scoring\n4. **AI Processing** - Uses GPT-4 Turbo to generate context-aware, source-grounded responses\n5. **Response Enhancement** - Formats outputs in various styles (comprehensive, concise, technical, etc.)\n6. **Multi-Channel Delivery** - Delivers results via webhook, email, Slack, and optional PDF generation\n\n## Data Sources & AI Models\n\n### Search Sources\n- **Web Search**: Google, Bing, DuckDuckGo integration\n- **Academic Papers**: arXiv, PubMed, Google Scholar\n- **News Articles**: News API, RSS feeds, real-time news\n- **Technical Documentation**: GitHub, Stack Overflow, documentation sites\n- **Internal Knowledge**: Google Drive, Confluence, Notion integration\n\n### AI Models\n- **GPT-4 Turbo**: Primary language model for response generation\n- **Embedding Models**: For semantic search and similarity matching\n- **Custom Prompts**: Specialized prompts for different response styles\n\n## Set up steps\n\n**Setup time: 15-20 minutes**\n\n1. **Configure API credentials** - Set up OpenAI API, ScrapeGraphAI, Google Drive, and other service credentials\n2. **Set up search sources** - Configure academic databases, news APIs, and internal knowledge sources\n3. **Connect analytics** - Link Google Sheets for usage tracking and performance monitoring\n4. **Configure notifications** - Set up Slack channels and email templates for automated alerts\n5. **Test the workflow** - Run sample queries to verify all components are working correctly\n\n**Keep detailed configuration notes in sticky notes inside your workflow**\n",
    "workflow": {
      "id": "VhEwspDqzu7ssFVE",
      "meta": {
        "instanceId": "f4b0efaa33080e7774e0d9285c40c7abcd2c6f7cf1a8b901fa7106170dd4cda3",
        "templateCredsSetupCompleted": true
      },
      "name": "My workflow 2",
      "tags": [
        {
          "id": "DxXGubfBzRKh6L8T",
          "name": "Revenue Optimization",
          "createdAt": "2025-07-25T16:24:30.370Z",
          "updatedAt": "2025-07-25T16:24:30.370Z"
        },
        {
          "id": "IxkcJ2IpYIxivoHV",
          "name": "Content Strategy",
          "createdAt": "2025-07-25T12:57:37.677Z",
          "updatedAt": "2025-07-25T12:57:37.677Z"
        },
        {
          "id": "PAKIJ2Mm9EvRcR3u",
          "name": "Trend Monitoring",
          "createdAt": "2025-07-25T12:57:37.670Z",
          "updatedAt": "2025-07-25T12:57:37.670Z"
        },
        {
          "id": "YtfXmaZk44MYedPO",
          "name": "Dynamic Pricing",
          "createdAt": "2025-07-25T16:24:30.369Z",
          "updatedAt": "2025-07-25T16:24:30.369Z"
        },
        {
          "id": "wJ30mjhtrposO8Qt",
          "name": "Simple RAG",
          "createdAt": "2025-07-28T12:55:14.424Z",
          "updatedAt": "2025-07-28T12:55:14.424Z"
        }
      ],
      "nodes": [
        {
          "id": "0247527a-478c-4ce6-a999-cea55f4923ac",
          "name": "🚀 Advanced RAG Form",
          "type": "n8n-nodes-base.formTrigger",
          "position": [
            -1696,
            160
          ],
          "webhookId": "8f393097-f14b-40a2-8d4c-c28066c84bec",
          "parameters": {
            "options": {},
            "formTitle": "🧠 Enterprise RAG Assistant",
            "formFields": {
              "values": [
                {
                  "fieldType": "textarea",
                  "fieldLabel": "query",
                  "requiredField": true
                },
                {
                  "fieldType": "select",
                  "fieldLabel": "search_scope",
                  "requiredField": true
                },
                {
                  "fieldType": "select",
                  "fieldLabel": "response_style"
                },
                {
                  "fieldType": "select",
                  "fieldLabel": "language"
                },
                {
                  "fieldType": "select",
                  "fieldLabel": "output_format"
                },
                {
                  "fieldType": "email",
                  "fieldLabel": "user_email"
                },
                {
                  "fieldType": "select",
                  "fieldLabel": "priority_level"
                }
              ]
            },
            "formDescription": "Advanced RAG system for intelligent research and content generation"
          },
          "typeVersion": 2.2
        },
        {
          "id": "97c556f7-c675-4fb7-9e31-10926885485a",
          "name": "📋 Form Configuration",
          "type": "n8n-nodes-base.stickyNote",
          "position": [
            -1760,
            -512
          ],
          "parameters": {
            "color": 4,
            "width": 650,
            "height": 600,
            "content": "# Advanced RAG Form 🚀\n\n**Intelligent Input System:**\n- Advanced query processing\n- Search scope selection\n- Response style customization\n- Multi-language support\n- Diverse output formats\n\n**Main Fields:**\n- **Query**: User input (textarea)\n- **Search Scope**: Web/Academic/News/Technical/Internal\n- **Response Style**: Comprehensive/Concise/Technical/Executive\n- **Language**: IT/EN/ES/FR/DE\n- **Output Format**: MD/HTML/PDF/JSON/PPT\n- **Email**: For notifications\n- **Priority**: Queue management\n\n**Features:**\n✅ Real-time input validation\n✅ Webhook response for feedback\n✅ Multi-format support\n✅ Priority queue management"
          },
          "typeVersion": 1
        },
        {
          "id": "de5b5d88-8e1e-4bfc-91bf-905d709a6cb9",
          "name": "🔍 Query Preprocessor",
          "type": "n8n-nodes-base.code",
          "position": [
            -1376,
            160
          ],
          "parameters": {
            "jsCode": "// Input validation and preprocessing\nconst input = $input.all()[0].json;\n\n// Validate required fields\nif (!input.query || input.query.trim().length < 3) {\n    throw new Error('Query too short. Please enter at least 3 characters.');\n}\n\n// Clean and preprocess query\nconst processedQuery = {\n    original_query: input.query,\n    cleaned_query: input.query.trim().replace(/\\s+/g, ' '),\n    query_length: input.query.trim().length,\n    estimated_complexity: input.query.split(' ').length > 10 ? 'high' : 'medium',\n    search_scope: input.search_scope || 'web_general',\n    response_style: input.response_style || 'comprehensive',\n    language: input.language || 'italian',\n    output_format: input.output_format || 'markdown',\n    priority_level: input.priority_level || 'medium',\n    user_email: input.user_email || null,\n    session_id: `rag_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`,\n    timestamp: new Date().toISOString(),\n    processing_steps: []\n};\n\n// Add processing metadata\nprocessedQuery.processing_steps.push({\n    step: 'input_validation',\n    status: 'completed',\n    timestamp: new Date().toISOString()\n});\n\n// Generate search keywords from query\nconst keywords = processedQuery.cleaned_query\n    .toLowerCase()\n    .split(' ')\n    .filter(word => word.length > 3)\n    .slice(0, 8);\n\nprocessedQuery.search_keywords = keywords;\n\n// Determine search strategy based on scope\nconst searchStrategies = {\n    'web_general': ['google', 'bing', 'duckduckgo'],\n    'academic_papers': ['scholar', 'arxiv', 'pubmed'],\n    'news_articles': ['news_api', 'rss_feeds'],\n    'technical_docs': ['github', 'stackoverflow', 'documentation'],\n    'company_internal': ['drive', 'confluence', 'notion'],\n    'multi_source': ['google', 'scholar', 'news_api', 'github']\n};\n\nprocessedQuery.search_strategy = searchStrategies[processedQuery.search_scope] || ['google'];\n\nconsole.log('Processed query:', JSON.stringify(processedQuery, null, 2));\n\nreturn [{ json: processedQuery }];"
          },
          "typeVersion": 2
        },
        {
          "id": "00133ca9-7379-4692-9500-35289f24c5f0",
          "name": "🔄 Search Router",
          "type": "n8n-nodes-base.if",
          "position": [
            -1056,
            160
          ],
          "parameters": {
            "options": {},
            "conditions": {
              "options": {
                "leftValue": "",
                "caseSensitive": true,
                "typeValidation": "strict"
              },
              "combinator": "and",
              "conditions": [
                {
                  "id": "scope-check",
                  "operator": {
                    "type": "string",
                    "operation": "equals"
                  },
                  "leftValue": "={{ $json.search_scope }}",
                  "rightValue": "company_internal"
                }
              ]
            }
          },
          "typeVersion": 2
        },
        {
          "id": "377114fa-2f1b-4135-a054-86ac460fc319",
          "name": "🏢 Internal Knowledge Search",
          "type": "n8n-nodes-base.googleDriveSearch",
          "position": [
            -1056,
            368
          ],
          "parameters": {},
          "typeVersion": 1
        },
        {
          "id": "48da1505-73dd-424f-8c70-fa54ef66cf2c",
          "name": "🌐 Enhanced Web Search",
          "type": "n8n-nodes-base.webSearch",
          "position": [
            -1056,
            -48
          ],
          "parameters": {},
          "typeVersion": 1
        },
        {
          "id": "9a805200-52bb-4e8b-8435-87be41b23c40",
          "name": "🎓 Academic Papers Search",
          "type": "n8n-nodes-base.httpRequest",
          "position": [
            -736,
            64
          ],
          "parameters": {
            "url": "https://api.crossref.org/works",
            "options": {
              "timeout": 30000
            },
            "sendQuery": true,
            "queryParameters": {
              "parameters": [
                {
                  "name": "query",
                  "value": "={{ $json.cleaned_query }}"
                },
                {
                  "name": "rows",
                  "value": "10"
                },
                {
                  "name": "sort",
                  "value": "relevance"
                },
                {
                  "name": "order",
                  "value": "desc"
                }
              ]
            }
          },
          "typeVersion": 4.2
        },
        {
          "id": "e441e67d-4de3-41cf-939b-3232f7389fe3",
          "name": "📰 News Search API",
          "type": "n8n-nodes-base.httpRequest",
          "position": [
            -736,
            272
          ],
          "parameters": {
            "url": "https://newsapi.org/v2/everything",
            "options": {
              "timeout": 30000
            },
            "sendQuery": true,
            "authentication": "headerAuth",
            "queryParameters": {
              "parameters": [
                {
                  "name": "q",
                  "value": "={{ $json.cleaned_query }}"
                },
                {
                  "name": "sortBy",
                  "value": "relevancy"
                },
                {
                  "name": "pageSize",
                  "value": "10"
                },
                {
                  "name": "language",
                  "value": "={{ $json.language === 'italian' ? 'it' : 'en' }}"
                }
              ]
            }
          },
          "typeVersion": 4.2
        },
        {
          "id": "4faa39af-1e65-4f1b-8a54-3648f0cc285a",
          "name": "📊 Data Aggregator",
          "type": "n8n-nodes-base.code",
          "position": [
            -416,
            160
          ],
          "parameters": {
            "jsCode": "// Advanced data aggregation and processing\nconst allInputs = $input.all();\nlet aggregatedData = {\n    session_id: '',\n    query_info: {},\n    sources: [],\n    total_results: 0,\n    processing_time: Date.now(),\n    quality_score: 0\n};\n\n// Process each input source\nallInputs.forEach((input, index) => {\n    const data = input.json;\n    \n    // Extract session info from first input\n    if (index === 0) {\n        aggregatedData.session_id = data.session_id || `rag_${Date.now()}`;\n        aggregatedData.query_info = {\n            original_query: data.original_query || data.cleaned_query,\n            cleaned_query: data.cleaned_query,\n            search_scope: data.search_scope,\n            response_style: data.response_style || 'comprehensive',\n            language: data.language || 'italian'\n        };\n    }\n    \n    // Process web search results\n    if (data.results && Array.isArray(data.results)) {\n        data.results.forEach(item => {\n            aggregatedData.sources.push({\n                type: 'web_content',\n                title: item.title || 'Web Content',\n                content: item.snippet || item.description || '',\n                url: item.url || item.link || '',\n                relevance_score: 0.8,\n                source_quality: 'high',\n                timestamp: new Date().toISOString()\n            });\n        });\n    }\n    \n    // Process Google Drive results\n    if (data.name && data.mimeType) {\n        aggregatedData.sources.push({\n            type: 'internal_document',\n            title: data.name,\n            content: data.content || data.description || '',\n            url: data.webViewLink || '',\n            relevance_score: 0.9,\n            source_quality: 'internal',\n            timestamp: data.modifiedTime || new Date().toISOString()\n        });\n    }\n    \n    // Process academic papers\n    if (data.message && data.message.items) {\n        data.message.items.forEach(paper => {\n            if (paper.title && paper.abstract) {\n                aggregatedData.sources.push({\n                    type: 'academic_paper',\n                    title: Array.isArray(paper.title) ? paper.title[0] : paper.title,\n                    content: paper.abstract || '',\n                    url: paper.URL || '',\n                    relevance_score: 0.95,\n                    source_quality: 'academic',\n                    authors: paper.author ? paper.author.map(a => `${a.given || ''} ${a.family || ''}`).join(', ') : '',\n                    timestamp: paper.published ? (paper.published['date-parts'] ? paper.published['date-parts'][0].join('-') : new Date().toISOString()) : new Date().toISOString()\n                });\n            }\n        });\n    }\n    \n    // Process news articles\n    if (data.articles && Array.isArray(data.articles)) {\n        data.articles.forEach(article => {\n            aggregatedData.sources.push({\n                type: 'news_article',\n                title: article.title || 'News Article',\n                content: article.description || article.content || '',\n                url: article.url || '',\n                relevance_score: 0.85,\n                source_quality: 'news',\n                author: article.author || '',\n                timestamp: article.publishedAt || new Date().toISOString()\n            });\n        });\n    }\n});\n\n// Calculate quality metrics\naggregatedData.total_results = aggregatedData.sources.length;\naggregatedData.quality_score = aggregatedData.sources.reduce((sum, source) => \n    sum + source.relevance_score, 0) / Math.max(aggregatedData.total_results, 1);\n\n// Sort sources by relevance\naggregatedData.sources.sort((a, b) => b.relevance_score - a.relevance_score);\n\n// Limit to top 15 most relevant sources\naggregatedData.sources = aggregatedData.sources.slice(0, 15);\n\n// Add processing metadata\naggregatedData.processing_time = Date.now() - aggregatedData.processing_time;\naggregatedData.aggregation_timestamp = new Date().toISOString();\n\nconsole.log(`Aggregated ${aggregatedData.total_results} sources with quality score: ${aggregatedData.quality_score.toFixed(2)}`);\n\nreturn [{ json: aggregatedData }];"
          },
          "typeVersion": 2
        },
        {
          "id": "52fe7489-732b-4610-afc0-2c55d4b8f535",
          "name": "🧠 Context Builder",
          "type": "n8n-nodes-base.code",
          "position": [
            -96,
            160
          ],
          "parameters": {
            "jsCode": "// Advanced context preparation for LLM\nconst data = $input.all()[0].json;\n\n// Build comprehensive context\nlet contextSections = [];\n\n// Add query information\ncontextSections.push(`## QUERY INFORMATION\\nOriginal Query: ${data.query_info.original_query}\\nCleaned Query: ${data.query_info.cleaned_query}\\nSearch Scope: ${data.query_info.search_scope}\\nResponse Style: ${data.query_info.response_style}\\nLanguage: ${data.query_info.language}`);\n\n// Add sources with structured formatting\nif (data.sources && data.sources.length > 0) {\n    contextSections.push('## RETRIEVED SOURCES');\n    \n    data.sources.forEach((source, index) => {\n        const sourceSection = `\\n### Source ${index + 1}: ${source.title}\\n**Type**: ${source.type}\\n**Relevance**: ${(source.relevance_score * 100).toFixed(1)}%\\n**Quality**: ${source.source_quality}\\n**URL**: ${source.url}\\n${source.author ? `**Author**: ${source.author}` : ''}\\n**Timestamp**: ${source.timestamp}\\n\\n**Content**:\\n${source.content.substring(0, 1500)}${source.content.length > 1500 ? '...' : ''}\\n`;\n        \n        contextSections.push(sourceSection);\n    });\n}\n\n// Add metadata\ncontextSections.push(`## METADATA\\nTotal Sources: ${data.total_results}\\nQuality Score: ${(data.quality_score * 100).toFixed(1)}%\\nProcessing Time: ${data.processing_time}ms\\nSession ID: ${data.session_id}`);\n\n// Create comprehensive context\nconst fullContext = contextSections.join('\\n\\n');\n\n// Prepare messages for LLM based on response style\nconst stylePrompts = {\n    'comprehensive': 'Provide a complete and detailed response, using all relevant information from the sources. Include specific examples and citations.',\n    'concise': 'Provide a brief and direct response, keeping only the most important information.',\n    'technical': 'Provide a detailed technical response with specific terminology and implementation details.',\n    'executive_summary': 'Provide an executive summary with key points, recommendations and next steps.',\n    'bullet_points': 'Organize the response in clear and structured bullet points.',\n    'detailed_analysis': 'Provide an in-depth analysis with pros/cons, implications and multiple considerations.'\n};\n\nconst stylePrompt = stylePrompts[data.query_info.response_style] || stylePrompts['comprehensive'];\n\n// Language-specific instructions\nconst languageInstructions = {\n    'italian': 'Respond in Italian',\n    'english': 'Respond in English',\n    'spanish': 'Respond in Spanish',\n    'french': 'Respond in French',\n    'german': 'Respond in German'\n};\n\nconst langInstruction = languageInstructions[data.query_info.language] || languageInstructions['english'];\n\n// Create system message\nconst systemMessage = `You are an advanced AI assistant specialized in RAG (Retrieval-Augmented Generation). \\n\\nINSTRUCTIONS:\\n1. ${langInstruction}\\n2. ${stylePrompt}\\n3. ALWAYS use information from the provided sources\\n4. Cite sources using [Source X] when appropriate\\n5. If information is insufficient, clearly indicate what is missing\\n6. Maintain accuracy and objectivity\\n7. Structure the response logically and readably\\n\\nCONTEXT AND SOURCES:\\n${fullContext}`;\n\n// Create user message\nconst userMessage = `Based exclusively on the sources provided in the context, ${data.query_info.original_query}`;\n\nconst result = {\n    messages: [\n        {\n            role: 'system',\n            content: systemMessage\n        },\n        {\n            role: 'user', \n            content: userMessage\n        }\n    ],\n    context_length: fullContext.length,\n    sources_count: data.sources.length,\n    session_id: data.session_id,\n    query_info: data.query_info,\n    context_prepared_at: new Date().toISOString()\n};\n\nconsole.log(`Context prepared: ${result.context_length} chars, ${result.sources_count} sources`);\n\nreturn [{ json: result }];"
          },
          "typeVersion": 2
        },
        {
          "id": "172349cf-ce97-46d0-bb69-f679605e89c2",
          "name": "🤖 Advanced LLM Processor",
          "type": "n8n-nodes-base.openAi",
          "position": [
            224,
            160
          ],
          "parameters": {
            "model": "gpt-4-turbo-preview",
            "options": {
              "topP": 0.9,
              "maxTokens": 2048,
              "temperature": 0.3
            },
            "requestOptions": {}
          },
          "typeVersion": 1
        },
        {
          "id": "b34adec5-1506-485e-a671-8ee862a0fa7d",
          "name": "✨ Response Enhancer",
          "type": "n8n-nodes-base.code",
          "position": [
            544,
            160
          ],
          "parameters": {
            "jsCode": "// Post-processing and response enhancement\nconst llmResponse = $input.all()[0].json;\nconst contextData = $('Context Builder').first().json;\n\n// Extract the AI response\nconst aiResponse = llmResponse.choices?.[0]?.message?.content || llmResponse.content || '';\n\n// Build comprehensive response object\nconst enhancedResponse = {\n    // Core response\n    response: aiResponse,\n    \n    // Metadata\n    session_id: contextData.session_id,\n    query: contextData.query_info.original_query,\n    response_style: contextData.query_info.response_style,\n    language: contextData.query_info.language,\n    \n    // Quality metrics\n    response_length: aiResponse.length,\n    sources_used: contextData.sources_count,\n    context_length: contextData.context_length,\n    \n    // Processing info\n    generated_at: new Date().toISOString(),\n    model_used: 'gpt-4-turbo-preview',\n    \n    // Usage statistics\n    tokens_used: llmResponse.usage?.total_tokens || 0,\n    prompt_tokens: llmResponse.usage?.prompt_tokens || 0,\n    completion_tokens: llmResponse.usage?.completion_tokens || 0,\n    \n    // Source summary\n    source_breakdown: {\n        web_content: contextData.query_info.search_scope === 'web_general' ? contextData.sources_count : 0,\n        internal_docs: contextData.query_info.search_scope === 'company_internal' ? contextData.sources_count : 0,\n        academic_papers: contextData.query_info.search_scope === 'academic_papers' ? contextData.sources_count : 0,\n        news_articles: contextData.query_info.search_scope === 'news_articles' ? contextData.sources_count : 0\n    },\n    \n    // Response quality indicators\n    quality_indicators: {\n        has_citations: aiResponse.includes('[Source') || aiResponse.includes('fonte'),\n        response_completeness: aiResponse.length > 200 ? 'complete' : 'partial',\n        source_integration: contextData.sources_count > 0 ? 'good' : 'limited',\n        estimated_accuracy: contextData.sources_count >= 3 ? 'high' : 'medium'\n    }\n};\n\n// Format response based on output format preference\nconst outputFormat = contextData.query_info.output_format || 'markdown';\n\nswitch (outputFormat) {\n    case 'html':\n        enhancedResponse.formatted_response = `\n<!DOCTYPE html>\n<html>\n<head>\n    <title>RAG Response - ${contextData.query_info.original_query}</title>\n    <style>\n        body { font-family: Arial, sans-serif; max-width: 800px; margin: 0 auto; padding: 20px; }\n        .header { background: #f5f5f5; padding: 15px; border-radius: 5px; margin-bottom: 20px; }\n        .response { line-height: 1.6; }\n        .metadata { background: #e9f4ff; padding: 10px; border-radius: 5px; margin-top: 20px; font-size: 0.9em; }\n    </style>\n</head>\n<body>\n    <div class=\"header\">\n        <h1>RAG Response</h1>\n        <p><strong>Query:</strong> ${contextData.query_info.original_query}</p>\n        <p><strong>Generated:</strong> ${enhancedResponse.generated_at}</p>\n    </div>\n    <div class=\"response\">\n        ${aiResponse.replace(/\\n/g, '<br>')}\n    </div>\n    <div class=\"metadata\">\n        <strong>Sources Used:</strong> ${enhancedResponse.sources_used} | \n        <strong>Tokens:</strong> ${enhancedResponse.tokens_used} | \n        <strong>Session:</strong> ${enhancedResponse.session_id}\n    </div>\n</body>\n</html>`;\n        break;\n        \n    case 'json_structured':\n        enhancedResponse.formatted_response = JSON.stringify({\n            query: contextData.query_info.original_query,\n            response: aiResponse,\n            metadata: {\n                sources_count: enhancedResponse.sources_used,\n                tokens_used: enhancedResponse.tokens_used,\n                quality_score: enhancedResponse.quality_indicators,\n                session_id: enhancedResponse.session_id\n            }\n        }, null, 2);\n        break;\n        \n    default: // markdown\n        enhancedResponse.formatted_response = `# RAG Response\\n\\n**Query:** ${contextData.query_info.original_query}\\n\\n---\\n\\n${aiResponse}\\n\\n---\\n\\n**Metadata:**\\n- Sources Used: ${enhancedResponse.sources_used}\\n- Tokens Used: ${enhancedResponse.tokens_used}\\n- Generated: ${enhancedResponse.generated_at}\\n- Session ID: ${enhancedResponse.session_id}`;\n}\n\nconsole.log(`Response generated: ${enhancedResponse.response_length} chars, ${enhancedResponse.tokens_used} tokens`);\n\nreturn [{ json: enhancedResponse }];"
          },
          "typeVersion": 2
        },
        {
          "id": "e720959c-0c8a-40b9-b608-7b6c5835f6e7",
          "name": "📤 Webhook Response",
          "type": "n8n-nodes-base.respondToWebhook",
          "position": [
            864,
            160
          ],
          "parameters": {
            "options": {},
            "respondWith": "allIncomingData"
          },
          "typeVersion": 1
        },
        {
          "id": "sticky-query-preprocessor",
          "name": "Query Preprocessor Info",
          "type": "n8n-nodes-base.stickyNote",
          "position": [
            -1376,
            -200
          ],
          "parameters": {
            "color": 3,
            "width": 500,
            "height": 400,
            "content": "# 🔍 Query Preprocessor\n\n**Purpose:** Validates and preprocesses user input for optimal search performance.\n\n**Key Functions:**\n- Input validation (minimum 3 characters)\n- Query cleaning and normalization\n- Keyword extraction for search optimization\n- Search strategy determination based on scope\n- Session ID generation for tracking\n\n**Output:** Structured query object with metadata for downstream processing."
          },
          "typeVersion": 1
        },
        {
          "id": "sticky-search-router",
          "name": "Search Router Info",
          "type": "n8n-nodes-base.stickyNote",
          "position": [
            -1056,
            -200
          ],
          "parameters": {
            "color": 4,
            "width": 500,
            "height": 400,
            "content": "# 🔄 Search Router\n\n**Purpose:** Routes queries to appropriate search sources based on scope selection.\n\n**Routing Logic:**\n- **Web General**: Google, Bing, DuckDuckGo\n- **Academic Papers**: Scholar, arXiv, PubMed\n- **News Articles**: News API, RSS feeds\n- **Technical Docs**: GitHub, Stack Overflow\n- **Company Internal**: Drive, Confluence, Notion\n- **Multi Source**: Combined approach\n\n**Benefits:** Optimized search results for specific use cases."
          },
          "typeVersion": 1
        },
        {
          "id": "sticky-context-builder",
          "name": "Context Builder Info",
          "type": "n8n-nodes-base.stickyNote",
          "position": [
            -96,
            -200
          ],
          "parameters": {
            "color": 5,
            "width": 500,
            "height": 450,
            "content": "# 🧠 Context Builder\n\n**Purpose:** Prepares comprehensive context for GPT-4 Turbo processing.\n\n**Context Elements:**\n- Query information and metadata\n- Retrieved sources with relevance scores\n- Source quality indicators\n- Processing metadata and session tracking\n\n**AI Instructions:**\n- Language-specific prompts\n- Response style customization\n- Source citation requirements\n- Quality and accuracy guidelines\n\n**Output:** Structured messages for LLM processing."
          },
          "typeVersion": 1
        },
        {
          "id": "sticky-llm-processor",
          "name": "LLM Processor Info",
          "type": "n8n-nodes-base.stickyNote",
          "position": [
            224,
            -200
          ],
          "parameters": {
            "color": 6,
            "width": 500,
            "height": 400,
            "content": "# 🤖 Advanced LLM Processor\n\n**Model:** GPT-4 Turbo (gpt-4-turbo-preview)\n\n**Configuration:**\n- Max Tokens: 2048\n- Temperature: 0.3 (balanced creativity/accuracy)\n- Top P: 0.9\n\n**Processing:**\n- Receives structured context from Context Builder\n- Generates source-grounded responses\n- Maintains citation integrity\n- Follows style and language preferences\n\n**Output:** Raw AI-generated response with usage statistics."
          },
          "typeVersion": 1
        },
        {
          "id": "sticky-response-enhancer",
          "name": "Response Enhancer Info",
          "type": "n8n-nodes-base.stickyNote",
          "position": [
            544,
            -200
          ],
          "parameters": {
            "color": 7,
            "width": 500,
            "height": 450,
            "content": "# ✨ Response Enhancer\n\n**Purpose:** Formats and enhances AI responses for multiple output formats.\n\n**Format Options:**\n- **Markdown**: Default structured format\n- **HTML**: Web-ready with styling\n- **JSON**: API-friendly structured data\n- **PDF**: Document generation (optional)\n\n**Enhancements:**\n- Quality indicators and metrics\n- Source breakdown and citations\n- Usage statistics and performance data\n- Session tracking and metadata\n\n**Output:** Formatted response ready for delivery."
          },
          "typeVersion": 1
        },
        {
          "id": "sticky-webhook-response",
          "name": "Webhook Response Info",
          "type": "n8n-nodes-base.stickyNote",
          "position": [
            864,
            -200
          ],
          "parameters": {
            "color": 2,
            "width": 500,
            "height": 400,
            "content": "# 📤 Webhook Response\n\n**Purpose:** Delivers formatted responses back to the user interface.\n\n**Response Types:**\n- Complete response data\n- Formatted output (MD/HTML/JSON)\n- Metadata and quality metrics\n- Session information\n\n**Integration:**\n- Webhook endpoint for real-time responses\n- Email notifications (optional)\n- Slack integration (optional)\n- Analytics tracking\n\n**Benefits:** Immediate feedback and comprehensive data delivery."
          },
          "typeVersion": 1
        }
      ],
      "active": false,
      "pinData": {},
      "settings": {
        "executionOrder": "v1"
      },
      "versionId": "552ac041-e7ae-4695-9b21-47675446cff0",
      "connections": {
        "🔄 Search Router": {
          "main": [
            [
              {
                "node": "🎓 Academic Papers Search",
                "type": "main",
                "index": 0
              },
              {
                "node": "📰 News Search API",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "📊 Data Aggregator": {
          "main": [
            [
              {
                "node": "🧠 Context Builder",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "📰 News Search API": {
          "main": [
            [
              {
                "node": "📊 Data Aggregator",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "🧠 Context Builder": {
          "main": [
            [
              {
                "node": "🤖 Advanced LLM Processor",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "✨ Response Enhancer": {
          "main": [
            [
              {
                "node": "📤 Webhook Response",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "🚀 Advanced RAG Form": {
          "main": [
            [
              {
                "node": "🔍 Query Preprocessor",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "🔍 Query Preprocessor": {
          "main": [
            [
              {
                "node": "🔄 Search Router",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "🎓 Academic Papers Search": {
          "main": [
            [
              {
                "node": "📊 Data Aggregator",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "🤖 Advanced LLM Processor": {
          "main": [
            [
              {
                "node": "✨ Response Enhancer",
                "type": "main",
                "index": 0
              }
            ]
          ]
        }
      }
    },
    "lastUpdatedBy": 29,
    "workflowInfo": {
      "nodeCount": 19,
      "nodeTypes": {
        "n8n-nodes-base.if": {
          "count": 1
        },
        "n8n-nodes-base.code": {
          "count": 4
        },
        "n8n-nodes-base.openAi": {
          "count": 1
        },
        "n8n-nodes-base.webSearch": {
          "count": 1
        },
        "n8n-nodes-base.stickyNote": {
          "count": 7
        },
        "n8n-nodes-base.formTrigger": {
          "count": 1
        },
        "n8n-nodes-base.httpRequest": {
          "count": 2
        },
        "n8n-nodes-base.respondToWebhook": {
          "count": 1
        },
        "n8n-nodes-base.googleDriveSearch": {
          "count": 1
        }
      }
    },
    "status": "published",
    "user": {
      "name": "vinci-king-01",
      "username": "vinci-king-01",
      "bio": "",
      "verified": true,
      "links": [
        "https://www.linkedin.com/in/marco-vinciguerra-7ba365242/"
      ],
      "avatar": "https://gravatar.com/avatar/d939eeef03a5fcb5df08bee8196f12ccb248c38209487414e419032004f0c014?r=pg&d=retro&size=200"
    },
    "nodes": [
      {
        "id": 19,
        "icon": "file:httprequest.svg",
        "name": "n8n-nodes-base.httpRequest",
        "codex": {
          "data": {
            "alias": [
              "API",
              "Request",
              "URL",
              "Build",
              "cURL"
            ],
            "resources": {
              "generic": [
                {
                  "url": "https://n8n.io/blog/2021-the-year-to-automate-the-new-you-with-n8n/",
                  "icon": "☀️",
                  "label": "2021: The Year to Automate the New You with n8n"
                },
                {
                  "url": "https://n8n.io/blog/why-business-process-automation-with-n8n-can-change-your-daily-life/",
                  "icon": "🧬",
                  "label": "Why business process automation with n8n can change your daily life"
                },
                {
                  "url": "https://n8n.io/blog/automatically-pulling-and-visualizing-data-with-n8n/",
                  "icon": "📈",
                  "label": "Automatically pulling and visualizing data with n8n"
                },
                {
                  "url": "https://n8n.io/blog/learn-how-to-automatically-cross-post-your-content-with-n8n/",
                  "icon": "✍️",
                  "label": "Learn how to automatically cross-post your content with n8n"
                },
                {
                  "url": "https://n8n.io/blog/automatically-adding-expense-receipts-to-google-sheets-with-telegram-mindee-twilio-and-n8n/",
                  "icon": "🧾",
                  "label": "Automatically Adding Expense Receipts to Google Sheets with Telegram, Mindee, Twilio, and n8n"
                },
                {
                  "url": "https://n8n.io/blog/running-n8n-on-ships-an-interview-with-maranics/",
                  "icon": "🛳",
                  "label": "Running n8n on ships: An interview with Maranics"
                },
                {
                  "url": "https://n8n.io/blog/what-are-apis-how-to-use-them-with-no-code/",
                  "icon": " 🪢",
                  "label": "What are APIs and how to use them with no code"
                },
                {
                  "url": "https://n8n.io/blog/5-tasks-you-can-automate-with-notion-api/",
                  "icon": "⚡️",
                  "label": "5 tasks you can automate with the new Notion API "
                },
                {
                  "url": "https://n8n.io/blog/world-poetry-day-workflow/",
                  "icon": "📜",
                  "label": "Celebrating World Poetry Day with a daily poem in Telegram"
                },
                {
                  "url": "https://n8n.io/blog/automate-google-apps-for-productivity/",
                  "icon": "💡",
                  "label": "15 Google apps you can combine and automate to increase productivity"
                },
                {
                  "url": "https://n8n.io/blog/automate-designs-with-bannerbear-and-n8n/",
                  "icon": "🎨",
                  "label": "Automate Designs with Bannerbear and n8n"
                },
                {
                  "url": "https://n8n.io/blog/how-uproc-scraped-a-multi-page-website-with-a-low-code-workflow/",
                  "icon": " 🕸️",
                  "label": "How uProc scraped a multi-page website with a low-code workflow"
                },
                {
                  "url": "https://n8n.io/blog/building-an-expense-tracking-app-in-10-minutes/",
                  "icon": "📱",
                  "label": "Building an expense tracking app in 10 minutes"
                },
                {
                  "url": "https://n8n.io/blog/5-workflow-automations-for-mattermost-that-we-love-at-n8n/",
                  "icon": "🤖",
                  "label": "5 workflow automations for Mattermost that we love at n8n"
                },
                {
                  "url": "https://n8n.io/blog/how-to-use-the-http-request-node-the-swiss-army-knife-for-workflow-automation/",
                  "icon": "🧰",
                  "label": "How to use the HTTP Request Node - The Swiss Army Knife for Workflow Automation"
                },
                {
                  "url": "https://n8n.io/blog/learn-how-to-use-webhooks-with-mattermost-slash-commands/",
                  "icon": "🦄",
                  "label": "Learn how to use webhooks with Mattermost slash commands"
                },
                {
                  "url": "https://n8n.io/blog/how-a-membership-development-manager-automates-his-work-and-investments/",
                  "icon": "📈",
                  "label": "How a Membership Development Manager automates his work and investments"
                },
                {
                  "url": "https://n8n.io/blog/a-low-code-bitcoin-ticker-built-with-questdb-and-n8n-io/",
                  "icon": "📈",
                  "label": "A low-code bitcoin ticker built with QuestDB and n8n.io"
                },
                {
                  "url": "https://n8n.io/blog/how-to-set-up-a-ci-cd-pipeline-with-no-code/",
                  "icon": "🎡",
                  "label": "How to set up a no-code CI/CD pipeline with GitHub and TravisCI"
                },
                {
                  "url": "https://n8n.io/blog/automations-for-activists/",
                  "icon": "✨",
                  "label": "How Common Knowledge use workflow automation for activism"
                },
                {
                  "url": "https://n8n.io/blog/creating-scheduled-text-affirmations-with-n8n/",
                  "icon": "🤟",
                  "label": "Creating scheduled text affirmations with n8n"
                },
                {
                  "url": "https://n8n.io/blog/how-goomer-automated-their-operations-with-over-200-n8n-workflows/",
                  "icon": "🛵",
                  "label": "How Goomer automated their operations with over 200 n8n workflows"
                },
                {
                  "url": "https://n8n.io/blog/aws-workflow-automation/",
                  "label": "7 no-code workflow automations for Amazon Web Services"
                }
              ],
              "primaryDocumentation": [
                {
                  "url": "https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.httprequest/"
                }
              ]
            },
            "categories": [
              "Development",
              "Core Nodes"
            ],
            "nodeVersion": "1.0",
            "codexVersion": "1.0",
            "subcategories": {
              "Core Nodes": [
                "Helpers"
              ]
            }
          }
        },
        "group": "[\"output\"]",
        "defaults": {
          "name": "HTTP Request",
          "color": "#0004F5"
        },
        "iconData": {
          "type": "file",
          "fileBuffer": "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDAiIGhlaWdodD0iNDAiIHZpZXdCb3g9IjAgMCA0MCA0MCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik00MCAyMEM0MCA4Ljk1MzE0IDMxLjA0NjkgMCAyMCAwQzguOTUzMTQgMCAwIDguOTUzMTQgMCAyMEMwIDMxLjA0NjkgOC45NTMxNCA0MCAyMCA0MEMzMS4wNDY5IDQwIDQwIDMxLjA0NjkgNDAgMjBaTTIwIDM2Ljk0NThDMTguODg1MiAzNi45NDU4IDE3LjEzNzggMzUuOTY3IDE1LjQ5OTggMzIuNjk4NUMxNC43OTY0IDMxLjI5MTggMTQuMTk2MSAyOS41NDMxIDEzLjc1MjYgMjcuNjg0N0gyNi4xODk4QzI1LjgwNDUgMjkuNTQwMyAyNS4yMDQ0IDMxLjI5MDEgMjQuNTAwMiAzMi42OTg1QzIyLjg2MjIgMzUuOTY3IDIxLjExNDggMzYuOTQ1OCAyMCAzNi45NDU4Wk0xMi45MDY0IDIwQzEyLjkwNjQgMjEuNjA5NyAxMy4wMDg3IDIzLjE2NCAxMy4yMDAzIDI0LjYzMDVIMjYuNzk5N0MyNi45OTEzIDIzLjE2NCAyNy4wOTM2IDIxLjYwOTcgMjcuMDkzNiAyMEMyNy4wOTM2IDE4LjM5MDMgMjYuOTkxMyAxNi44MzYgMjYuNzk5NyAxNS4zNjk1SDEzLjIwMDNDMTMuMDA4NyAxNi44MzYgMTIuOTA2NCAxOC4zOTAzIDEyLjkwNjQgMjBaTTIwIDMuMDU0MTlDMjEuMTE0OSAzLjA1NDE5IDIyLjg2MjIgNC4wMzA3OCAyNC41MDAxIDcuMzAwMzlDMjUuMjA2NiA4LjcxNDA4IDI1LjgwNzIgMTAuNDA2NyAyNi4xOTIgMTIuMzE1M0gxMy43NTAxQzE0LjE5MzMgMTAuNDA0NyAxNC43OTQyIDguNzEyNTQgMTUuNDk5OCA3LjMwMDY0QzE3LjEzNzcgNC4wMzA4MyAxOC44ODUxIDMuMDU0MTkgMjAgMy4wNTQxOVpNMzAuMTQ3OCAyMEMzMC4xNDc4IDE4LjQwOTkgMzAuMDU0MyAxNi44NjE3IDI5LjgyMjcgMTUuMzY5NUgzNi4zMDQyQzM2LjcyNTIgMTYuODQyIDM2Ljk0NTggMTguMzk2NCAzNi45NDU4IDIwQzM2Ljk0NTggMjEuNjAzNiAzNi43MjUyIDIzLjE1OCAzNi4zMDQyIDI0LjYzMDVIMjkuODIyN0MzMC4wNTQzIDIzLjEzODMgMzAuMTQ3OCAyMS41OTAxIDMwLjE0NzggMjBaTTI2LjI3NjcgNC4yNTUxMkMyNy42MzY1IDYuMzYwMTkgMjguNzExIDkuMTMyIDI5LjM3NzQgMTIuMzE1M0gzNS4xMDQ2QzMzLjI1MTEgOC42NjggMzAuMTA3IDUuNzgzNDYgMjYuMjc2NyA0LjI1NTEyWk0xMC42MjI2IDEyLjMxNTNINC44OTI5M0M2Ljc1MTQ3IDguNjY3ODQgOS44OTM1MSA1Ljc4MzQxIDEzLjcyMzIgNC4yNTUxM0MxMi4zNjM1IDYuMzYwMjEgMTEuMjg5IDkuMTMyMDEgMTAuNjIyNiAxMi4zMTUzWk0zLjA1NDE5IDIwQzMuMDU0MTkgMjEuNjAzIDMuMjc3NDMgMjMuMTU3NSAzLjY5NDg0IDI0LjYzMDVIMTAuMTIxN0M5Ljk0NjE5IDIzLjE0MiA5Ljg1MjIyIDIxLjU5NDMgOS44NTIyMiAyMEM5Ljg1MjIyIDE4LjQwNTcgOS45NDYxOSAxNi44NTggMTAuMTIxNyAxNS4zNjk1SDMuNjk0ODRDMy4yNzc0MyAxNi44NDI1IDMuMDU0MTkgMTguMzk3IDMuMDU0MTkgMjBaTTI2LjI3NjYgMzUuNzQyN0MyNy42MzY1IDMzLjYzOTMgMjguNzExIDMwLjg2OCAyOS4zNzc0IDI3LjY4NDdIMzUuMTA0NkMzMy4yNTEgMzEuMzMyMiAzMC4xMDY4IDM0LjIxNzkgMjYuMjc2NiAzNS43NDI3Wk0xMy43MjM0IDM1Ljc0MjdDOS44OTM2OSAzNC4yMTc5IDYuNzUxNTUgMzEuMzMyNCA0Ljg5MjkzIDI3LjY4NDdIMTAuNjIyNkMxMS4yODkgMzAuODY4IDEyLjM2MzUgMzMuNjM5MyAxMy43MjM0IDM1Ljc0MjdaIiBmaWxsPSIjM0E0MkU5Ii8+Cjwvc3ZnPgo="
        },
        "displayName": "HTTP Request",
        "typeVersion": 4,
        "nodeCategories": [
          {
            "id": 5,
            "name": "Development"
          },
          {
            "id": 9,
            "name": "Core Nodes"
          }
        ]
      },
      {
        "id": 20,
        "icon": "fa:map-signs",
        "name": "n8n-nodes-base.if",
        "codex": {
          "data": {
            "alias": [
              "Router",
              "Filter",
              "Condition",
              "Logic",
              "Boolean",
              "Branch"
            ],
            "details": "The IF node can be used to implement binary conditional logic in your workflow. You can set up one-to-many conditions to evaluate each item of data being inputted into the node. That data will either evaluate to TRUE or FALSE and route out of the node accordingly.\n\nThis node has multiple types of conditions: Bool, String, Number, and Date & Time.",
            "resources": {
              "generic": [
                {
                  "url": "https://n8n.io/blog/learn-to-automate-your-factorys-incident-reporting-a-step-by-step-guide/",
                  "icon": "🏭",
                  "label": "Learn to Automate Your Factory's Incident Reporting: A Step by Step Guide"
                },
                {
                  "url": "https://n8n.io/blog/2021-the-year-to-automate-the-new-you-with-n8n/",
                  "icon": "☀️",
                  "label": "2021: The Year to Automate the New You with n8n"
                },
                {
                  "url": "https://n8n.io/blog/why-business-process-automation-with-n8n-can-change-your-daily-life/",
                  "icon": "🧬",
                  "label": "Why business process automation with n8n can change your daily life"
                },
                {
                  "url": "https://n8n.io/blog/create-a-toxic-language-detector-for-telegram/",
                  "icon": "🤬",
                  "label": "Create a toxic language detector for Telegram in 4 step"
                },
                {
                  "url": "https://n8n.io/blog/no-code-ecommerce-workflow-automations/",
                  "icon": "store",
                  "label": "6 e-commerce workflows to power up your Shopify s"
                },
                {
                  "url": "https://n8n.io/blog/how-to-build-a-low-code-self-hosted-url-shortener/",
                  "icon": "🔗",
                  "label": "How to build a low-code, self-hosted URL shortener in 3 steps"
                },
                {
                  "url": "https://n8n.io/blog/automate-your-data-processing-pipeline-in-9-steps-with-n8n/",
                  "icon": "⚙️",
                  "label": "Automate your data processing pipeline in 9 steps"
                },
                {
                  "url": "https://n8n.io/blog/how-to-get-started-with-crm-automation-and-no-code-workflow-ideas/",
                  "icon": "👥",
                  "label": "How to get started with CRM automation (with 3 no-code workflow ideas"
                },
                {
                  "url": "https://n8n.io/blog/5-tasks-you-can-automate-with-notion-api/",
                  "icon": "⚡️",
                  "label": "5 tasks you can automate with the new Notion API "
                },
                {
                  "url": "https://n8n.io/blog/automate-google-apps-for-productivity/",
                  "icon": "💡",
                  "label": "15 Google apps you can combine and automate to increase productivity"
                },
                {
                  "url": "https://n8n.io/blog/automation-for-maintainers-of-open-source-projects/",
                  "icon": "🏷️",
                  "label": "How to automatically manage contributions to open-source projects"
                },
                {
                  "url": "https://n8n.io/blog/how-uproc-scraped-a-multi-page-website-with-a-low-code-workflow/",
                  "icon": " 🕸️",
                  "label": "How uProc scraped a multi-page website with a low-code workflow"
                },
                {
                  "url": "https://n8n.io/blog/5-workflow-automations-for-mattermost-that-we-love-at-n8n/",
                  "icon": "🤖",
                  "label": "5 workflow automations for Mattermost that we love at n8n"
                },
                {
                  "url": "https://n8n.io/blog/why-this-product-manager-loves-workflow-automation-with-n8n/",
                  "icon": "🧠",
                  "label": "Why this Product Manager loves workflow automation with n8n"
                },
                {
                  "url": "https://n8n.io/blog/sending-automated-congratulations-with-google-sheets-twilio-and-n8n/",
                  "icon": "🙌",
                  "label": "Sending Automated Congratulations with Google Sheets, Twilio, and n8n "
                },
                {
                  "url": "https://n8n.io/blog/how-to-set-up-a-ci-cd-pipeline-with-no-code/",
                  "icon": "🎡",
                  "label": "How to set up a no-code CI/CD pipeline with GitHub and TravisCI"
                },
                {
                  "url": "https://n8n.io/blog/benefits-of-automation-and-n8n-an-interview-with-hubspots-hugh-durkin/",
                  "icon": "🎖",
                  "label": "Benefits of automation and n8n: An interview with HubSpot's Hugh Durkin"
                },
                {
                  "url": "https://n8n.io/blog/aws-workflow-automation/",
                  "label": "7 no-code workflow automations for Amazon Web Services"
                }
              ],
              "primaryDocumentation": [
                {
                  "url": "https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.if/"
                }
              ]
            },
            "categories": [
              "Core Nodes"
            ],
            "nodeVersion": "1.0",
            "codexVersion": "1.0",
            "subcategories": {
              "Core Nodes": [
                "Flow"
              ]
            }
          }
        },
        "group": "[\"transform\"]",
        "defaults": {
          "name": "If",
          "color": "#408000"
        },
        "iconData": {
          "icon": "map-signs",
          "type": "icon"
        },
        "displayName": "If",
        "typeVersion": 2,
        "nodeCategories": [
          {
            "id": 9,
            "name": "Core Nodes"
          }
        ]
      },
      {
        "id": 535,
        "icon": "file:webhook.svg",
        "name": "n8n-nodes-base.respondToWebhook",
        "codex": {
          "data": {
            "resources": {
              "primaryDocumentation": [
                {
                  "url": "https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.respondtowebhook/"
                }
              ]
            },
            "categories": [
              "Core Nodes",
              "Utility"
            ],
            "nodeVersion": "1.0",
            "codexVersion": "1.0",
            "subcategories": {
              "Core Nodes": [
                "Helpers"
              ]
            }
          }
        },
        "group": "[\"transform\"]",
        "defaults": {
          "name": "Respond to Webhook"
        },
        "iconData": {
          "type": "file",
          "fileBuffer": "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0OCIgaGVpZ2h0PSI0OCI+PHBhdGggZmlsbD0iIzM3NDc0ZiIgZD0iTTM1IDM3Yy0yLjIgMC00LTEuOC00LTRzMS44LTQgNC00IDQgMS44IDQgNC0xLjggNC00IDQiLz48cGF0aCBmaWxsPSIjMzc0NzRmIiBkPSJNMzUgNDNjLTMgMC01LjktMS40LTcuOC0zLjdsMy4xLTIuNWMxLjEgMS40IDIuOSAyLjMgNC43IDIuMyAzLjMgMCA2LTIuNyA2LTZzLTIuNy02LTYtNmMtMSAwLTIgLjMtMi45LjdsLTEuNyAxTDIzLjMgMTZsMy41LTEuOSA1LjMgOS40YzEtLjMgMi0uNSAzLS41IDUuNSAwIDEwIDQuNSAxMCAxMFM0MC41IDQzIDM1IDQzIi8+PHBhdGggZmlsbD0iIzM3NDc0ZiIgZD0iTTE0IDQzQzguNSA0MyA0IDM4LjUgNCAzM2MwLTQuNiAzLjEtOC41IDcuNS05LjdsMSAzLjlDOS45IDI3LjkgOCAzMC4zIDggMzNjMCAzLjMgMi43IDYgNiA2czYtMi43IDYtNnYtMmgxNXY0SDIzLjhjLS45IDQuNi01IDgtOS44IDgiLz48cGF0aCBmaWxsPSIjZTkxZTYzIiBkPSJNMTQgMzdjLTIuMiAwLTQtMS44LTQtNHMxLjgtNCA0LTQgNCAxLjggNCA0LTEuOCA0LTQgNCIvPjxwYXRoIGZpbGw9IiMzNzQ3NGYiIGQ9Ik0yNSAxOWMtMi4yIDAtNC0xLjgtNC00czEuOC00IDQtNCA0IDEuOCA0IDQtMS44IDQtNCA0Ii8+PHBhdGggZmlsbD0iI2U5MWU2MyIgZD0ibTE1LjcgMzQtMy40LTIgNS45LTkuN2MtMi0xLjktMy4yLTQuNS0zLjItNy4zIDAtNS41IDQuNS0xMCAxMC0xMHMxMCA0LjUgMTAgMTBjMCAuOS0uMSAxLjctLjMgMi41bC0zLjktMWMuMS0uNS4yLTEgLjItMS41IDAtMy4zLTIuNy02LTYtNnMtNiAyLjctNiA2YzAgMi4xIDEuMSA0IDIuOSA1LjFsMS43IDF6Ii8+PC9zdmc+"
        },
        "displayName": "Respond to Webhook",
        "typeVersion": 2,
        "nodeCategories": [
          {
            "id": 7,
            "name": "Utility"
          },
          {
            "id": 9,
            "name": "Core Nodes"
          }
        ]
      },
      {
        "id": 565,
        "icon": "fa:sticky-note",
        "name": "n8n-nodes-base.stickyNote",
        "codex": {
          "data": {
            "alias": [
              "Comments",
              "Notes",
              "Sticky"
            ],
            "categories": [
              "Core Nodes"
            ],
            "nodeVersion": "1.0",
            "codexVersion": "1.0",
            "subcategories": {
              "Core Nodes": [
                "Helpers"
              ]
            }
          }
        },
        "group": "[\"input\"]",
        "defaults": {
          "name": "Sticky Note",
          "color": "#FFD233"
        },
        "iconData": {
          "icon": "sticky-note",
          "type": "icon"
        },
        "displayName": "Sticky Note",
        "typeVersion": 1,
        "nodeCategories": [
          {
            "id": 9,
            "name": "Core Nodes"
          }
        ]
      },
      {
        "id": 834,
        "icon": "file:code.svg",
        "name": "n8n-nodes-base.code",
        "codex": {
          "data": {
            "alias": [
              "cpde",
              "Javascript",
              "JS",
              "Python",
              "Script",
              "Custom Code",
              "Function"
            ],
            "details": "The Code node allows you to execute JavaScript in your workflow.",
            "resources": {
              "primaryDocumentation": [
                {
                  "url": "https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.code/"
                }
              ]
            },
            "categories": [
              "Development",
              "Core Nodes"
            ],
            "nodeVersion": "1.0",
            "codexVersion": "1.0",
            "subcategories": {
              "Core Nodes": [
                "Helpers",
                "Data Transformation"
              ]
            }
          }
        },
        "group": "[\"transform\"]",
        "defaults": {
          "name": "Code"
        },
        "iconData": {
          "type": "file",
          "fileBuffer": "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTEyIiBoZWlnaHQ9IjUxMiIgdmlld0JveD0iMCAwIDUxMiA1MTIiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxnIGNsaXAtcGF0aD0idXJsKCNjbGlwMF8xMTcxXzQ0MSkiPgo8cGF0aCBkPSJNMTcwLjI4MyA0OEgxOTYuNUMyMDMuMTI3IDQ4IDIwOC41IDQyLjYyNzQgMjA4LjUgMzZWMTJDMjA4LjUgNS4zNzI1OCAyMDMuMTI3IDAgMTk2LjUgMEgxNzAuMjgzQzEyNi4xIDAgOTAuMjgzIDM1LjgxNzIgOTAuMjgzIDgwVjE3NkM5MC4yODMgMjA2LjkyOCA2NS4yMTA5IDIzMiAzNC4yODMgMjMySDIzQzE2LjM3MjYgMjMyIDExIDIzNy4zNzIgMTEgMjQ0VjI2OEMxMSAyNzQuNjI3IDE2LjM3MjQgMjgwIDIyLjk5OTYgMjgwTDM0LjI4MyAyODBDNjUuMjEwOSAyODAgOTAuMjgzIDMwNS4wNzIgOTAuMjgzIDMzNlY0NDBDOTAuMjgzIDQ3OS43NjQgMTIyLjUxOCA1MTIgMTYyLjI4MyA1MTJIMTk2LjVDMjAzLjEyNyA1MTIgMjA4LjUgNTA2LjYyNyAyMDguNSA1MDBWNDc2QzIwOC41IDQ2OS4zNzMgMjAzLjEyNyA0NjQgMTk2LjUgNDY0SDE2Mi4yODNDMTQ5LjAyOCA0NjQgMTM4LjI4MyA0NTMuMjU1IDEzOC4yODMgNDQwVjMzNkMxMzguMjgzIDMwOS4wMjIgMTI4LjAxMSAyODQuNDQzIDExMS4xNjQgMjY1Ljk2MUMxMDYuMTA5IDI2MC40MTYgMTA2LjEwOSAyNTEuNTg0IDExMS4xNjQgMjQ2LjAzOUMxMjguMDExIDIyNy41NTcgMTM4LjI4MyAyMDIuOTc4IDEzOC4yODMgMTc2VjgwQzEzOC4yODMgNjIuMzI2OSAxNTIuNjEgNDggMTcwLjI4MyA0OFoiIGZpbGw9IiNGRjk5MjIiLz4KPHBhdGggZD0iTTMwNSAzNkMzMDUgNDIuNjI3NCAzMTAuMzczIDQ4IDMxNyA0OEgzNDIuOTc5QzM2MC42NTIgNDggMzc0Ljk3OCA2Mi4zMjY5IDM3NC45NzggODBWMTc2QzM3NC45NzggMjAyLjk3OCAzODUuMjUxIDIyNy41NTcgNDAyLjA5OCAyNDYuMDM5QzQwNy4xNTMgMjUxLjU4NCA0MDcuMTUzIDI2MC40MTYgNDAyLjA5OCAyNjUuOTYxQzM4NS4yNTEgMjg0LjQ0MyAzNzQuOTc4IDMwOS4wMjIgMzc0Ljk3OCAzMzZWNDMyQzM3NC45NzggNDQ5LjY3MyAzNjAuNjUyIDQ2NCAzNDIuOTc5IDQ2NEgzMTdDMzEwLjM3MyA0NjQgMzA1IDQ2OS4zNzMgMzA1IDQ3NlY1MDBDMzA1IDUwNi42MjcgMzEwLjM3MyA1MTIgMzE3IDUxMkgzNDIuOTc5QzM4Ny4xNjEgNTEyIDQyMi45NzggNDc2LjE4MyA0MjIuOTc4IDQzMlYzMzZDNDIyLjk3OCAzMDUuMDcyIDQ0OC4wNTEgMjgwIDQ3OC45NzkgMjgwSDQ5MEM0OTYuNjI3IDI4MCA1MDIgMjc0LjYyOCA1MDIgMjY4VjI0NEM1MDIgMjM3LjM3MyA0OTYuNjI4IDIzMiA0OTAgMjMyTDQ3OC45NzkgMjMyQzQ0OC4wNTEgMjMyIDQyMi45NzggMjA2LjkyOCA0MjIuOTc4IDE3NlY4MEM0MjIuOTc4IDM1LjgxNzIgMzg3LjE2MSAwIDM0Mi45NzkgMEgzMTdDMzEwLjM3MyAwIDMwNSA1LjM3MjU4IDMwNSAxMlYzNloiIGZpbGw9IiNGRjk5MjIiLz4KPC9nPgo8ZGVmcz4KPGNsaXBQYXRoIGlkPSJjbGlwMF8xMTcxXzQ0MSI+CjxyZWN0IHdpZHRoPSI1MTIiIGhlaWdodD0iNTEyIiBmaWxsPSJ3aGl0ZSIvPgo8L2NsaXBQYXRoPgo8L2RlZnM+Cjwvc3ZnPgo="
        },
        "displayName": "Code",
        "typeVersion": 2,
        "nodeCategories": [
          {
            "id": 5,
            "name": "Development"
          },
          {
            "id": 9,
            "name": "Core Nodes"
          }
        ]
      },
      {
        "id": 840,
        "icon": "file:openAi.svg",
        "name": "n8n-nodes-base.openAi",
        "codex": {
          "data": {
            "alias": [
              "ChatGPT",
              "DallE"
            ],
            "resources": {
              "primaryDocumentation": [
                {
                  "url": "https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-langchain.openai/"
                }
              ],
              "credentialDocumentation": [
                {
                  "url": "https://docs.n8n.io/integrations/builtin/credentials/openai/"
                }
              ]
            },
            "categories": [
              "Utility"
            ],
            "nodeVersion": "1.0",
            "codexVersion": "1.0"
          }
        },
        "group": "[\"transform\"]",
        "defaults": {
          "name": "OpenAI"
        },
        "iconData": {
          "type": "file",
          "fileBuffer": "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNTYiIGhlaWdodD0iMjYwIiBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJ4TWlkWU1pZCI+PHBhdGggZD0iTTIzOS4xODQgMTA2LjIwM2E2NC43MiA2NC43MiAwIDAgMC01LjU3Ni01My4xMDNDMjE5LjQ1MiAyOC40NTkgMTkxIDE1Ljc4NCAxNjMuMjEzIDIxLjc0QTY1LjU4NiA2NS41ODYgMCAwIDAgNTIuMDk2IDQ1LjIyYTY0LjcyIDY0LjcyIDAgMCAwLTQzLjIzIDMxLjM2Yy0xNC4zMSAyNC42MDItMTEuMDYxIDU1LjYzNCA4LjAzMyA3Ni43NGE2NC42NyA2NC42NyAwIDAgMCA1LjUyNSA1My4xMDJjMTQuMTc0IDI0LjY1IDQyLjY0NCAzNy4zMjQgNzAuNDQ2IDMxLjM2YTY0LjcyIDY0LjcyIDAgMCAwIDQ4Ljc1NCAyMS43NDRjMjguNDgxLjAyNSA1My43MTQtMTguMzYxIDYyLjQxNC00NS40ODFhNjQuNzcgNjQuNzcgMCAwIDAgNDMuMjI5LTMxLjM2YzE0LjEzNy0yNC41NTggMTAuODc1LTU1LjQyMy04LjA4My03Ni40ODNtLTk3LjU2IDEzNi4zMzhhNDguNCA0OC40IDAgMCAxLTMxLjEwNS0xMS4yNTVsMS41MzUtLjg3IDUxLjY3LTI5LjgyNWE4LjYgOC42IDAgMCAwIDQuMjQ3LTcuMzY3di03Mi44NWwyMS44NDUgMTIuNjM2Yy4yMTguMTExLjM3LjMyLjQwOS41NjN2NjAuMzY3Yy0uMDU2IDI2LjgxOC0yMS43ODMgNDguNTQ1LTQ4LjYwMSA0OC42MDFNMzcuMTU4IDE5Ny45M2E0OC4zNSA0OC4zNSAwIDAgMS01Ljc4MS0zMi41ODlsMS41MzQuOTIxIDUxLjcyMiAyOS44MjZhOC4zNCA4LjM0IDAgMCAwIDguNDQxIDBsNjMuMTgxLTM2LjQyNXYyNS4yMjFhLjg3Ljg3IDAgMCAxLS4zNTguNjY1bC01Mi4zMzUgMzAuMTg0Yy0yMy4yNTcgMTMuMzk4LTUyLjk3IDUuNDMxLTY2LjQwNC0xNy44MDNNMjMuNTQ5IDg1LjM4YTQ4LjUgNDguNSAwIDAgMSAyNS41OC0yMS4zMzN2NjEuMzlhOC4yOSA4LjI5IDAgMCAwIDQuMTk1IDcuMzE2bDYyLjg3NCAzNi4yNzItMjEuODQ1IDEyLjYzNmEuODIuODIgMCAwIDEtLjc2NyAwTDQxLjM1MyAxNTEuNTNjLTIzLjIxMS0xMy40NTQtMzEuMTcxLTQzLjE0NC0xNy44MDQtNjYuNDA1em0xNzkuNDY2IDQxLjY5NS02My4wOC0zNi42M0wxNjEuNzMgNzcuODZhLjgyLjgyIDAgMCAxIC43NjggMGw1Mi4yMzMgMzAuMTg0YTQ4LjYgNDguNiAwIDAgMS03LjMxNiA4Ny42MzV2LTYxLjM5MWE4LjU0IDguNTQgMCAwIDAtNC40LTcuMjEzbTIxLjc0Mi0zMi42OS0xLjUzNS0uOTIyLTUxLjYxOS0zMC4wODFhOC4zOSA4LjM5IDAgMCAwLTguNDkyIDBMOTkuOTggOTkuODA4Vjc0LjU4N2EuNzIuNzIgMCAwIDEgLjMwNy0uNjY1bDUyLjIzMy0zMC4xMzNhNDguNjUyIDQ4LjY1MiAwIDAgMSA3Mi4yMzYgNTAuMzkxek04OC4wNjEgMTM5LjA5N2wtMjEuODQ1LTEyLjU4NWEuODcuODcgMCAwIDEtLjQxLS42MTRWNjUuNjg1YTQ4LjY1MiA0OC42NTIgMCAwIDEgNzkuNzU3LTM3LjM0NmwtMS41MzUuODctNTEuNjcgMjkuODI1YTguNiA4LjYgMCAwIDAtNC4yNDYgNy4zNjd6bTExLjg2OC0yNS41OEwxMjguMDY3IDk3LjNsMjguMTg4IDE2LjIxOHYzMi40MzRsLTI4LjA4NiAxNi4yMTgtMjguMTg4LTE2LjIxOHoiLz48L3N2Zz4="
        },
        "displayName": "OpenAI",
        "typeVersion": 1,
        "nodeCategories": [
          {
            "id": 7,
            "name": "Utility"
          }
        ]
      },
      {
        "id": 1225,
        "icon": "file:form.svg",
        "name": "n8n-nodes-base.formTrigger",
        "codex": {
          "data": {
            "alias": [
              "table",
              "submit",
              "post"
            ],
            "resources": {
              "generic": [],
              "primaryDocumentation": [
                {
                  "url": "https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.formtrigger/"
                }
              ]
            },
            "categories": [
              "Core Nodes"
            ],
            "nodeVersion": "1.0",
            "codexVersion": "1.0",
            "subcategories": {
              "Core Nodes": [
                "Other Trigger Nodes"
              ]
            }
          }
        },
        "group": "[\"trigger\"]",
        "defaults": {
          "name": "On form submission"
        },
        "iconData": {
          "type": "file",
          "fileBuffer": "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0NiIgaGVpZ2h0PSI0MCIgZmlsbD0ibm9uZSI+PHBhdGggZmlsbD0iIzAwQjdCQyIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNMzQuOTc4IDM3LjczMmExLjU2IDEuNTYgMCAwIDEtMS41NjIgMS41NjNINi4yNmExLjU2IDEuNTYgMCAwIDEtMS41NjMtMS41NjNWOS42MDdjMC0uNDA1LjE1Ny0uNzk0LjQzOC0xLjA4Nmw2LjMwNC02LjUzMXY1LjM0NEg4LjIxM2ExLjE3MiAxLjE3MiAwIDEgMCAwIDIuMzQzaDQuNDNhMS4xNyAxLjE3IDAgMCAwIDEuMTcxLTEuMTcxVi4yMzJoMTkuNjAyYTEuNTYgMS41NiAwIDAgMSAxLjU2MiAxLjU2M3YxMC4zMjdsLTIuODYgMi44Ni04LjI1MiA4LjI3NmE0MTMuMDA2IDQxMy4wMDYgMCAwIDEtMS42NTQgMS42NjJsLS4zMzcuMzM3YTIgMiAwIDAgMC0uNTU3IDEuMDhMMjAuMyAzMS45MjJjLS4xMDguNjM4LS4yMTUgMS4wNzkuMjExIDEuNDE4LjQwMy4zMi45LjE3NCAxLjU0LjA2Nmw1LjQwOC0uOTI4YTIgMiAwIDAgMCAxLjA4LS41NTZsNi40NC02LjQyOXptLTI0LjAzLTIxLjI2NWExLjE4IDEuMTggMCAwIDAgMS4xNzEgMS4xNzJoMTMuMTYzYTEuMTcyIDEuMTcyIDAgMSAwIDAtMi4zNDRIMTIuMTE5YTEuMTcgMS4xNyAwIDAgMC0xLjE3MiAxLjE3Mm03LjI5NCAxNC43NjZhMS4xNyAxLjE3IDAgMCAwLTEuMTcyLTEuMTcySDEyLjEyYTEuMTcyIDEuMTcyIDAgMSAwIDAgMi4zNDNoNC45NTFhMS4xNyAxLjE3IDAgMCAwIDEuMTcyLTEuMTcybS44Ni03LjM5MWExLjE3IDEuMTcgMCAwIDAtMS4xNzItMS4xNzJoLTUuODExYTEuMTcyIDEuMTcyIDAgMSAwIDAgMi4zNDNoNS44MWExLjE2NCAxLjE2NCAwIDAgMCAxLjE3My0xLjE3MSIgY2xpcC1ydWxlPSJldmVub2RkIi8+PHBhdGggZmlsbD0iIzAwQjdCQyIgZD0ibTMzLjUzMiAxNi4zOTcgNC4yODktNC4yODkgMy43NTggMy43MSAxLjYxNy0xLjYxNiAyLjI1OCAyLjI1N2MuMjE4LjIxOC4zNC41MTMuMzQzLjgyLS4wMDIuMzExLS4xMjUuNjA4LS4zNDQuODNsLTYuODA0IDYuNzk2YTEuMTMgMS4xMyAwIDAgMS0uODI4LjM0MyAxLjE1IDEuMTUgMCAwIDEtLjgyOC0uMzQzIDEuMTggMS4xOCAwIDAgMSAwLTEuNjU3bDUuOTc2LTUuOTY4LTEuMzEyLTEuMzEzLTEuMzgzIDEuNDE0LTEzLjE0OSAxMy4xMjUtNC42MTcuNzgyLjc4Mi00LjYxNy4zMzYtLjMzNyAyLjU2MiAyLjU1NWExLjEgMS4xIDAgMCAwIC44MjguMzQ0Yy4zMTIuMDA1LjYxMi0uMTIuODI4LS4zNDRhMS4xOCAxLjE4IDAgMCAwIDAtMS42NTZsLTIuNTYyLTIuNTYyek00NC43MzYgMTIuMjRjMCAuNDE0LS4xNjMuODEtLjQ1NCAxLjEwMmwtLjkyMi45MTQtMy44NTItMy44MjguOTMtLjkzYTEuNTYzIDEuNTYzIDAgMCAxIDIuMjAzIDBsMS42NCAxLjY0MWMuMjkxLjI5My40NTUuNjkuNDU1IDEuMTAyIi8+PC9zdmc+"
        },
        "displayName": "n8n Form Trigger",
        "typeVersion": 3,
        "nodeCategories": [
          {
            "id": 9,
            "name": "Core Nodes"
          }
        ]
      }
    ],
    "categories": [
      {
        "id": 5,
        "name": "Engineering"
      },
      {
        "id": 48,
        "name": "AI RAG"
      }
    ],
    "image": []
  }
}