{
  "name": "Grade exam answers with GPT‑4.1 mini, plagiarism checks, Slack alerts and Google Sheets logging",
  "nodes": [
    {
      "id": "f534983f-265a-4f9f-bb89-ab2756191105",
      "name": "Manual Trigger",
      "type": "n8n-nodes-base.manualTrigger",
      "position": [
        -1312,
        1248
      ]
    },
    {
      "id": "1b240cf7-c1c3-49d1-8a19-a7ff7bef4c6d",
      "name": "Workflow Configuration",
      "type": "n8n-nodes-base.set",
      "position": [
        -1120,
        1248
      ]
    },
    {
      "id": "81142903-b550-4145-adb6-e0404f9203dd",
      "name": "Retrieve Student Answer and Rubric",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        -928,
        1256
      ]
    },
    {
      "id": "095df195-f3bd-4d71-9942-f7d50eebac0a",
      "name": "Rubric Interpreter Agent",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        -704,
        1256
      ]
    },
    {
      "id": "4fd4d8d2-7a19-4c26-8602-1a99b81e8813",
      "name": "Primary Marker Agent",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        -352,
        1256
      ]
    },
    {
      "id": "e7ed2b7b-4933-46ec-8d3d-2782611485ef",
      "name": "Quality Moderator Agent",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        800,
        848
      ]
    },
    {
      "id": "f3414890-10be-4703-95df-d08e9bf3686e",
      "name": "Feedback Generator Agent",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        1152,
        848
      ]
    },
    {
      "id": "68034cc6-5449-4086-b1fa-c55ebec3b848",
      "name": "Final Output Compilation",
      "type": "n8n-nodes-base.set",
      "position": [
        2480,
        864
      ]
    },
    {
      "id": "51cf7982-60fa-4187-b999-fe65bb383ba7",
      "name": "OpenAI Chat Model - Rubric",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "position": [
        -800,
        1488
      ]
    },
    {
      "id": "8362c4a1-aec6-46c0-8802-e1a80b7d5f6a",
      "name": "OpenAI Chat Model - Marker",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "position": [
        -344,
        1480
      ]
    },
    {
      "id": "63bae304-c5e1-4df4-aaf5-10a6786f830b",
      "name": "OpenAI Chat Model - Moderator",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "position": [
        808,
        1072
      ]
    },
    {
      "id": "ef4bfc22-98c3-41c7-a4fd-7246ff4407d9",
      "name": "OpenAI Chat Model - Feedback",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "position": [
        1160,
        1072
      ]
    },
    {
      "id": "ad9351ba-3fe8-49c7-8c60-4df456475fc4",
      "name": "Structured Output Parser - Rubric",
      "type": "@n8n/n8n-nodes-langchain.outputParserStructured",
      "position": [
        -568,
        1480
      ]
    },
    {
      "id": "bdadd2d2-e661-4c08-87cc-fe7fdf65ab1d",
      "name": "Structured Output Parser - Marker",
      "type": "@n8n/n8n-nodes-langchain.outputParserStructured",
      "position": [
        -176,
        1472
      ]
    },
    {
      "id": "da616f20-2853-4d0b-8026-adfe3e7acb36",
      "name": "Structured Output Parser - Moderator",
      "type": "@n8n/n8n-nodes-langchain.outputParserStructured",
      "position": [
        960,
        1072
      ]
    },
    {
      "id": "289604d8-44f4-4190-a30d-407308569888",
      "name": "Structured Output Parser - Feedback",
      "type": "@n8n/n8n-nodes-langchain.outputParserStructured",
      "position": [
        1328,
        1072
      ]
    },
    {
      "id": "24080315-fe89-465f-a948-1a51116376d4",
      "name": "Route by Moderation Decision",
      "type": "n8n-nodes-base.switch",
      "position": [
        1504,
        816
      ]
    },
    {
      "id": "1b2e86cf-03f2-4ff9-89db-f48152311445",
      "name": "Check Integrity Flags",
      "type": "n8n-nodes-base.if",
      "position": [
        0,
        1500
      ]
    },
    {
      "id": "938754da-07b0-427f-8b07-1300c454938c",
      "name": "Calculate Statistics",
      "type": "n8n-nodes-base.code",
      "position": [
        2080,
        1040
      ]
    },
    {
      "id": "184ceb6b-edee-4a52-8ca1-cb973f7c5cdc",
      "name": "Secondary Marker Agent",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        1728,
        448
      ]
    },
    {
      "id": "fc286b43-a963-40a0-81fd-400d4e7cf615",
      "name": "Plagiarism Analyzer Agent",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        224,
        1624
      ]
    },
    {
      "id": "8e696d2e-a391-4672-a88c-7b4ac402940f",
      "name": "OpenAI Chat Model - Secondary",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "position": [
        1736,
        672
      ]
    },
    {
      "id": "d5bb10b6-6f60-4615-868a-19d44662ab14",
      "name": "OpenAI Chat Model - Plagiarism",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "position": [
        232,
        1848
      ]
    },
    {
      "id": "df0df50f-261f-4c50-9bff-3fa0d90bd37d",
      "name": "Structured Output Parser - Secondary",
      "type": "@n8n/n8n-nodes-langchain.outputParserStructured",
      "position": [
        1904,
        672
      ]
    },
    {
      "id": "e4201a43-a66c-489f-a8b3-6cd8cf9f208e",
      "name": "Structured Output Parser - Plagiarism",
      "type": "@n8n/n8n-nodes-langchain.outputParserStructured",
      "position": [
        432,
        1856
      ]
    },
    {
      "id": "1f9abded-4139-47b7-97b7-fb6b08f52874",
      "name": "Merge Marking Results",
      "type": "n8n-nodes-base.merge",
      "position": [
        576,
        1088
      ]
    },
    {
      "id": "a930e99c-d26a-4595-bb6f-63f5fd17a26c",
      "name": "Log to Google Sheets",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        2704,
        880
      ]
    },
    {
      "id": "59c32d26-1a33-4cc3-bd84-1a1da7486272",
      "name": "Send Escalation Alert",
      "type": "n8n-nodes-base.slack",
      "position": [
        2080,
        848
      ]
    },
    {
      "id": "db3b9c30-e433-4dcf-b96a-b6b199e9a858",
      "name": "Prepare Escalation Data",
      "type": "n8n-nodes-base.set",
      "position": [
        1792,
        848
      ]
    },
    {
      "id": "20061d0e-8da8-4191-bd0f-c910b71cd57c",
      "name": "Prepare Integrity Report",
      "type": "n8n-nodes-base.set",
      "position": [
        576,
        1624
      ]
    },
    {
      "id": "e41ba4e5-5b18-4ff0-a12d-de9fc0d77a02",
      "name": "Merge All Paths",
      "type": "n8n-nodes-base.merge",
      "position": [
        2304,
        868
      ]
    },
    {
      "id": "70e5dbde-9b66-4942-95b5-cb002b463b6e",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -96,
        592
      ],
      "parameters": {
        "width": 400,
        "height": 384,
        "content": "## Prerequisites\n- Google Sheets with service account credentials\n- Student answer and rubric data source (API or spreadsheet)\n## Use Cases\n- Automated essay and short-answer marking for university as"
      }
    },
    {
      "id": "6f935ec4-48a1-47cb-8a8f-2bb165914f79",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -576,
        688
      ],
      "parameters": {
        "width": 384,
        "height": 272,
        "content": "## Setup Steps\n1. Configure manual trigger and connect student answer and rubric data sources.\n2. Add OpenAI API credentials to all OpenAI Chat Model nodes.\n3. Define moderation thresholds in the Rout"
      }
    },
    {
      "id": "54860cb7-23d6-4e9e-9597-a1822a42877c",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1296,
        688
      ],
      "parameters": {
        "width": 672,
        "height": 272,
        "content": "## How It Works\n\nThis workflow streamlines academic assessment through a multi-agent AI system that interprets rubrics, grades submissions, checks for plagiarism, performs quality moderation, generate"
      }
    },
    {
      "id": "e31fafed-bae9-42d5-8bd8-88181e79c41a",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        176,
        1600
      ],
      "parameters": {
        "width": 704,
        "height": 544,
        "content": "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n## Plagiarism Analyser Agent\n**What** – Checks submissions for integrity flags in parallel with marking.\n**Why** – Embeds academic integrity verification without slowing"
      }
    },
    {
      "id": "f409a244-2e3e-4c34-a8d3-8b1819c04197",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -400,
        1040
      ],
      "parameters": {
        "width": 544,
        "height": 768,
        "content": "## Primary Marker Agent\n**What** – Marks student answers against interpreted rubric criteria.\n**Why** – Delivers objective, criteria-aligned scoring at scale."
      }
    },
    {
      "id": "420f3507-dadb-4d5c-a6a5-10350b12b102",
      "name": "Sticky Note5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1312,
        1056
      ],
      "parameters": {
        "width": 896,
        "height": 848,
        "content": "## Trigger, Data Retrieval & Rubric Interpretation\n**What** – On manual trigger, fetches student answers and rubrics \n**Why** – Ensures marking begins with complete, validated inputs and applies consi"
      }
    },
    {
      "id": "137c7cca-ccd0-4dc8-b812-8c8ffdd3586a",
      "name": "Sticky Note6",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        544,
        688
      ],
      "parameters": {
        "width": 576,
        "height": 752,
        "content": "\n## Quality Moderator Agent\n**What** – Reviews marking quality and routes borderline cases for secondary marking.\n**Why** – Maintains assessment reliability and flags inconsistent or marginal scores."
      }
    },
    {
      "id": "db18a757-5be1-414f-a9bf-02e6ee04f7c1",
      "name": "Sticky Note7",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1136,
        352
      ],
      "parameters": {
        "width": 1824,
        "height": 1008,
        "content": "## Feedback Generator & Escalation\n**What** – Generates student feedback, sends Slack alerts, and logs to Google Sheets.\n**Why** – Closes the assessment loop with actionable feedback and full audit re"
      }
    }
  ],
  "connections": {
    "Manual Trigger": {
      "main": [
        [
          {
            "node": "Workflow Configuration",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Merge All Paths": {
      "main": [
        [
          {
            "node": "Final Output Compilation",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Calculate Statistics": {
      "main": [
        [
          {
            "node": "Merge All Paths",
            "type": "main",
            "index": 1
          }
        ]
      ]
    },
    "Primary Marker Agent": {
      "main": [
        [
          {
            "node": "Quality Moderator Agent",
            "type": "main",
            "index": 0
          },
          {
            "node": "Check Integrity Flags",
            "type": "main",
            "index": 0
          },
          {
            "node": "Merge Marking Results",
            "type": "main",
            "index": 1
          }
        ]
      ]
    },
    "Check Integrity Flags": {
      "main": [
        [
          {
            "node": "Plagiarism Analyzer Agent",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Quality Moderator Agent",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Merge Marking Results": {
      "main": [
        [
          {
            "node": "Quality Moderator Agent",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Send Escalation Alert": {
      "main": [
        [
          {
            "node": "Merge All Paths",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Secondary Marker Agent": {
      "main": [
        [
          {
            "node": "Merge Marking Results",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Workflow Configuration": {
      "main": [
        [
          {
            "node": "Retrieve Student Answer and Rubric",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Prepare Escalation Data": {
      "main": [
        [
          {
            "node": "Send Escalation Alert",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Quality Moderator Agent": {
      "main": [
        [
          {
            "node": "Feedback Generator Agent",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Feedback Generator Agent": {
      "main": [
        [
          {
            "node": "Route by Moderation Decision",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Final Output Compilation": {
      "main": [
        [
          {
            "node": "Log to Google Sheets",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Prepare Integrity Report": {
      "main": [
        [
          {
            "node": "Quality Moderator Agent",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Rubric Interpreter Agent": {
      "main": [
        [
          {
            "node": "Primary Marker Agent",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Plagiarism Analyzer Agent": {
      "main": [
        [
          {
            "node": "Prepare Integrity Report",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "OpenAI Chat Model - Marker": {
      "ai_languageModel": [
        [
          {
            "node": "Primary Marker Agent",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "OpenAI Chat Model - Rubric": {
      "ai_languageModel": [
        [
          {
            "node": "Rubric Interpreter Agent",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "OpenAI Chat Model - Feedback": {
      "ai_languageModel": [
        [
          {
            "node": "Feedback Generator Agent",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Route by Moderation Decision": {
      "main": [
        [
          {
            "node": "Secondary Marker Agent",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Prepare Escalation Data",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Calculate Statistics",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "OpenAI Chat Model - Moderator": {
      "ai_languageModel": [
        [
          {
            "node": "Quality Moderator Agent",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "OpenAI Chat Model - Secondary": {
      "ai_languageModel": [
        [
          {
            "node": "Secondary Marker Agent",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "OpenAI Chat Model - Plagiarism": {
      "ai_languageModel": [
        [
          {
            "node": "Plagiarism Analyzer Agent",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Structured Output Parser - Marker": {
      "ai_outputParser": [
        [
          {
            "node": "Primary Marker Agent",
            "type": "ai_outputParser",
            "index": 0
          }
        ]
      ]
    },
    "Structured Output Parser - Rubric": {
      "ai_outputParser": [
        [
          {
            "node": "Rubric Interpreter Agent",
            "type": "ai_outputParser",
            "index": 0
          }
        ]
      ]
    },
    "Retrieve Student Answer and Rubric": {
      "main": [
        [
          {
            "node": "Rubric Interpreter Agent",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Structured Output Parser - Feedback": {
      "ai_outputParser": [
        [
          {
            "node": "Feedback Generator Agent",
            "type": "ai_outputParser",
            "index": 0
          }
        ]
      ]
    },
    "Structured Output Parser - Moderator": {
      "ai_outputParser": [
        [
          {
            "node": "Quality Moderator Agent",
            "type": "ai_outputParser",
            "index": 0
          }
        ]
      ]
    },
    "Structured Output Parser - Secondary": {
      "ai_outputParser": [
        [
          {
            "node": "Secondary Marker Agent",
            "type": "ai_outputParser",
            "index": 0
          }
        ]
      ]
    },
    "Structured Output Parser - Plagiarism": {
      "ai_outputParser": [
        [
          {
            "node": "Plagiarism Analyzer Agent",
            "type": "ai_outputParser",
            "index": 0
          }
        ]
      ]
    }
  }
}