{
  "name": "Local Assessment Pipeline - Full",
  "active": false,
  "settings": {
    "executionOrder": "v1",
    "binaryMode": "separate"
  },
  "pinData": {},
  "versionId": "2761ce7e-295d-4a6e-8fa7-bf6cd6d3301a",
  "meta": null,
  "nodes": [
    {
      "parameters": {},
      "id": "d694f2b6-9889-4a2c-a808-96554e727f79",
      "name": "Manual Trigger",
      "type": "n8n-nodes-base.manualTrigger",
      "typeVersion": 1,
      "position": [
        0,
        160
      ]
    },
    {
      "parameters": {
        "assignments": {
          "assignments": [
            {
              "id": "c7cb77a7-c333-4885-8040-4000920ff1b3",
              "name": "mode",
              "value": "create_assessment",
              "type": "string"
            },
            {
              "id": "4012c0a9-6ee9-40d5-b242-171363dd64eb",
              "name": "subject",
              "value": "биология",
              "type": "string"
            },
            {
              "id": "4925489c-7f72-49ed-8883-917d762d3637",
              "name": "grade",
              "value": "7 класс",
              "type": "string"
            },
            {
              "id": "a42e617f-0f60-4877-99e7-e62bc3187a30",
              "name": "topic",
              "value": "фотосинтез",
              "type": "string"
            },
            {
              "id": "5c3463d8-5df3-48a3-afb7-7a26abd39423",
              "name": "difficulty",
              "value": "средний",
              "type": "string"
            },
            {
              "id": "f106a340-c9b9-464d-9189-8e332df15d37",
              "name": "task_count",
              "value": "6",
              "type": "string"
            },
            {
              "id": "36e7a563-4b49-4dd7-88e1-8aed60ab9bf0",
              "name": "task_types",
              "value": "2 тестовых, 2 коротких открытых, 1 на объяснение, 1 на применение",
              "type": "string"
            },
            {
              "id": "cc0c698d-4401-4b25-939c-23e52332b37d",
              "name": "assessment_text",
              "value": "Задание 1. Что является главным источником энергии для фотосинтеза?",
              "type": "string"
            },
            {
              "id": "3db024c1-7110-4f47-8f5a-4100fc36f4f4",
              "name": "answer_key",
              "value": "1) Солнечный свет",
              "type": "string"
            },
            {
              "id": "2b3b28ac-df17-43eb-9dd7-3af32d29098e",
              "name": "student_name",
              "value": "Иванов Илья",
              "type": "string"
            },
            {
              "id": "8e03f0fe-6c99-41b3-b976-6351bd4fd61a",
              "name": "student_answers",
              "value": "1) Солнечный свет",
              "type": "string"
            },
            {
              "id": "db890b71-d7a7-4ef6-a473-b71ab443e57e",
              "name": "grading_scheme",
              "value": "1 балл за полностью верный ответ",
              "type": "string"
            },
            {
              "id": "7d8dac4e-5abd-4ea3-a1aa-b4553146ae1d",
              "name": "grading_result",
              "value": "Задание 1 верно. Итог: 1 из 1.",
              "type": "string"
            },
            {
              "id": "dcf7265a-8d78-4ed8-baef-64b34ecf234f",
              "name": "result_format",
              "value": "короткое сообщение ученику и краткая сводка учителю",
              "type": "string"
            }
          ]
        },
        "options": {}
      },
      "id": "e548a9c9-3be9-4901-b8be-1efb12e2c0c1",
      "name": "Set Pipeline Input",
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [
        224,
        160
      ]
    },
    {
      "parameters": {
        "rules": {
          "values": [
            {
              "conditions": {
                "options": {
                  "caseSensitive": true,
                  "leftValue": "",
                  "typeValidation": "strict",
                  "version": 3
                },
                "conditions": [
                  {
                    "id": "a1bae138-8a68-428f-acd2-2275842d5fea",
                    "leftValue": "={{ $json.mode }}",
                    "rightValue": "create_assessment",
                    "operator": {
                      "type": "string",
                      "operation": "equals"
                    }
                  }
                ],
                "combinator": "and"
              }
            },
            {
              "conditions": {
                "options": {
                  "caseSensitive": true,
                  "leftValue": "",
                  "typeValidation": "strict",
                  "version": 3
                },
                "conditions": [
                  {
                    "id": "9b40c8b0-370b-4bf1-9442-9f7ea70c71bc",
                    "leftValue": "={{ $json.mode }}",
                    "rightValue": "grade_submissions",
                    "operator": {
                      "type": "string",
                      "operation": "equals"
                    }
                  }
                ],
                "combinator": "and"
              }
            },
            {
              "conditions": {
                "options": {
                  "caseSensitive": true,
                  "leftValue": "",
                  "typeValidation": "strict",
                  "version": 3
                },
                "conditions": [
                  {
                    "id": "2c01cc8d-ea35-4655-89cb-f41990c5f260",
                    "leftValue": "={{ $json.mode }}",
                    "rightValue": "publish_results",
                    "operator": {
                      "type": "string",
                      "operation": "equals"
                    }
                  }
                ],
                "combinator": "and"
              }
            }
          ]
        },
        "options": {}
      },
      "id": "2da8feb5-267a-49c2-934a-b9439210bd73",
      "name": "Switch",
      "type": "n8n-nodes-base.switch",
      "typeVersion": 3.4,
      "position": [
        464,
        160
      ]
    },
    {
      "parameters": {
        "method": "POST",
        "url": "https://openrouter.ai/api/v1/chat/completions",
        "authentication": "genericCredentialType",
        "genericAuthType": "httpBearerAuth",
        "sendHeaders": true,
        "headerParameters": {
          "parameters": [
            {
              "name": "Content-Type",
              "value": "application/json"
            }
          ]
        },
        "sendBody": true,
        "specifyBody": "json",
        "jsonBody": "={\n  \"model\": \"openrouter/free\",\n  \"temperature\": 0.2,\n  \"messages\": [\n    {\n      \"role\": \"system\",\n      \"content\": \"Ты помогаешь учителю создавать контрольные работы. Пиши ясно, без лишней воды, не выдумывай факты, учитывай возраст и уровень учащихся. Возвращай результат только в трех блоках и ничего больше: CONTROL_WORK, ANSWER_KEY, TEACHER_NOTES. Не показывай reasoning, chain-of-thought или служебные комментарии.\"\n    },\n    {\n      \"role\": \"user\",\n      \"content\": \"Создай контрольную работу.\\n\\nПредмет: {{$json.subject}}\\nКласс: {{$json.grade}}\\nТема: {{$json.topic}}\\nСложность: {{$json.difficulty}}\\nКоличество заданий: {{$json.task_count}}\\nТипы заданий: {{$json.task_types}}\\n\\nТребования:\\n- контрольная должна подходить для реального урока;\\n- задания должны быть разнообразными, но посильными;\\n- после контрольной отдельно дай ключ ответов;\\n- добавь краткое пояснение для учителя, как лучше использовать эту работу.\"\n    }\n  ]\n}\n",
        "options": {}
      },
      "id": "049564c2-cef0-4ee1-88e5-5a9711126fab",
      "name": "LLM Create Assessment",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.4,
      "position": [
        736,
        0
      ],
      "credentials": {
        "httpBearerAuth": {
          "id": "u5iYZqLGWhEcKwbr",
          "name": "Bearer Auth account"
        }
      }
    },
    {
      "parameters": {
        "assignments": {
          "assignments": [
            {
              "id": "79da5f20-53a8-40de-8a50-0f103b72fa6f",
              "name": "assessment_result",
              "value": "={{ $json.choices[0].message.content }}",
              "type": "string"
            }
          ]
        },
        "options": {}
      },
      "id": "59b41afb-7437-46d3-b8b6-58297f196b99",
      "name": "Extract Assessment Text",
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [
        992,
        0
      ]
    },
    {
      "parameters": {
        "method": "POST",
        "url": "https://openrouter.ai/api/v1/chat/completions",
        "authentication": "genericCredentialType",
        "genericAuthType": "httpBearerAuth",
        "sendHeaders": true,
        "headerParameters": {
          "parameters": [
            {
              "name": "Content-Type",
              "value": "application/json"
            }
          ]
        },
        "sendBody": true,
        "specifyBody": "json",
        "jsonBody": "={\n  \"model\": \"openrouter/free\",\n  \"temperature\": 0.1,\n  \"messages\": [\n    {\n      \"role\": \"system\",\n      \"content\": \"Ты помогаешь учителю проверять контрольные работы. Проверяй строго по ключу, не придумывай правильные ответы от себя, объясняй ошибки коротко и понятно. Возвращай результат только в трех блоках: CHECK_BY_TASK, TOTAL_SCORE, TEACHER_COMMENT. Не показывай reasoning, chain-of-thought или служебные комментарии.\"\n    },\n    {\n      \"role\": \"user\",\n      \"content\": \"Проверь работу ученика.\\n\\nПредмет: {{$json.subject}}\\nКласс: {{$json.grade}}\\nТема: {{$json.topic}}\\nСхема оценивания: {{$json.grading_scheme}}\\n\\nТекст контрольной:\\n{{$json.assessment_text}}\\n\\nКлюч ответов:\\n{{$json.answer_key}}\\n\\nУченик: {{$json.student_name}}\\nОтветы ученика:\\n{{$json.student_answers}}\\n\\nТребования:\\n- проверь по каждому заданию;\\n- укажи, где ответ верный, частично верный или неверный;\\n- дай суммарный балл;\\n- коротко поясни основные ошибки;\\n- не делай унижающих или резких формулировок.\"\n    }\n  ]\n}\n",
        "options": {}
      },
      "id": "da37c48e-2e8b-481d-8a42-03a70ebd7677",
      "name": "LLM Grade Submission",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.4,
      "position": [
        736,
        160
      ],
      "credentials": {
        "httpBearerAuth": {
          "id": "u5iYZqLGWhEcKwbr",
          "name": "Bearer Auth account"
        }
      }
    },
    {
      "parameters": {
        "assignments": {
          "assignments": [
            {
              "id": "42148a26-8d89-4752-8f5b-63b2e67fa2ad",
              "name": "grading_result_text",
              "value": "={{ $json.choices[0].message.content }}",
              "type": "string"
            }
          ]
        },
        "options": {}
      },
      "id": "af7a970f-a29c-47ee-9a59-f23cf8932943",
      "name": "Extract Grading Result",
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [
        992,
        160
      ]
    },
    {
      "parameters": {
        "method": "POST",
        "url": "https://openrouter.ai/api/v1/chat/completions",
        "authentication": "genericCredentialType",
        "genericAuthType": "httpBearerAuth",
        "sendHeaders": true,
        "headerParameters": {
          "parameters": [
            {
              "name": "Content-Type",
              "value": "application/json"
            }
          ]
        },
        "sendBody": true,
        "specifyBody": "json",
        "jsonBody": "={\n  \"model\": \"openrouter/free\",\n  \"temperature\": 0.2,\n  \"messages\": [\n    {\n      \"role\": \"system\",\n      \"content\": \"Ты помогаешь учителю выдавать результаты контрольной работы в понятной форме. Возвращай ответ только в трех блоках: STUDENT_MESSAGE, TEACHER_SUMMARY, NEXT_STEPS. Не показывай reasoning, chain-of-thought или служебные комментарии.\"\n    },\n    {\n      \"role\": \"user\",\n      \"content\": \"Подготовь выдачу результатов.\\n\\nУченик: {{$json.student_name}}\\nПредмет: {{$json.subject}}\\nКласс: {{$json.grade}}\\nТема: {{$json.topic}}\\nФормат выдачи: {{$json.result_format}}\\n\\nДанные проверки:\\n{{$json.grading_result}}\\n\\nТребования:\\n- для ученика напиши коротко, понятно и спокойно;\\n- для учителя дай короткое резюме;\\n- добавь 2-3 шага, что повторить или улучшить;\\n- не делай текст слишком длинным.\"\n    }\n  ]\n}\n",
        "options": {}
      },
      "id": "d4c71f24-28c6-4f28-b8be-8527daaf685d",
      "name": "LLM Publish Results",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.4,
      "position": [
        736,
        320
      ],
      "credentials": {
        "httpBearerAuth": {
          "id": "u5iYZqLGWhEcKwbr",
          "name": "Bearer Auth account"
        }
      }
    },
    {
      "parameters": {
        "assignments": {
          "assignments": [
            {
              "id": "c78c4b4e-2e7b-4e62-9661-b4e3975f8ea2",
              "name": "publish_result_text",
              "value": "={{ $json.choices[0].message.content }}",
              "type": "string"
            }
          ]
        },
        "options": {}
      },
      "id": "65ad4fcf-85ef-41f9-8e0d-e7e2481eb864",
      "name": "Extract Publish Result",
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [
        992,
        320
      ]
    }
  ],
  "connections": {
    "Manual Trigger": {
      "main": [
        [
          {
            "node": "Set Pipeline Input",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Set Pipeline Input": {
      "main": [
        [
          {
            "node": "Switch",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Switch": {
      "main": [
        [
          {
            "node": "LLM Create Assessment",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "LLM Grade Submission",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "LLM Publish Results",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "LLM Create Assessment": {
      "main": [
        [
          {
            "node": "Extract Assessment Text",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "LLM Grade Submission": {
      "main": [
        [
          {
            "node": "Extract Grading Result",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "LLM Publish Results": {
      "main": [
        [
          {
            "node": "Extract Publish Result",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}
