{
  "name": "Steingart-o-meter",
  "nodes": [
    {
      "parameters": {
        "httpMethod": "POST",
        "path": "steingart-o-meter",
        "responseMode": "responseNode",
        "options": {
          "ignoreBots": true
        }
      },
      "type": "n8n-nodes-base.webhook",
      "typeVersion": 2.1,
      "position": [
        -512,
        48
      ],
      "id": "1a2b03fa-660e-4403-944f-9388e01a3087",
      "name": "Webhook",
      "webhookId": "fa73d622-698e-4e1a-8044-2ba2a89015bd"
    },
    {
      "parameters": {
        "model": {
          "__rl": true,
          "value": "gpt-5-mini",
          "mode": "list",
          "cachedResultName": "gpt-5-mini"
        },
        "builtInTools": {
          "webSearch": {
            "searchContextSize": "medium"
          }
        },
        "options": {}
      },
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "typeVersion": 1.3,
      "position": [
        -304,
        496
      ],
      "id": "0962d5aa-de61-483b-9025-058025fa0b12",
      "name": "gpt-5-mini",
      "credentials": {
        "openAiApi": {
          "id": "HjnUCTYU97cWztQv",
          "name": "JE_OpenAI"
        }
      }
    },
    {
      "parameters": {
        "promptType": "define",
        "text": "={{ $json.body.text }}",
        "hasOutputParser": true,
        "options": {
          "systemMessage": "Du bis Journalist: du beurteilst, wie steil die These ist (wie zugespitzt, absichtlich polemisierend, übertreibend, provozierend die These des Artikels daherkommt). Urteile mit einem Wert zwischen 0 (keine steile These) und 1."
        }
      },
      "type": "@n8n/n8n-nodes-langchain.agent",
      "typeVersion": 3.1,
      "position": [
        -176,
        352
      ],
      "id": "e5c173cb-1f98-4bcf-b4f9-daab861494ec",
      "name": "Thesenwinkelmessung"
    },
    {
      "parameters": {
        "jsCode": "// Steingart-o-meter: vereint die drei Agent-Bewertungen.\n// steingart_score = meinung / ahnung * these  (ahnung min. 1 gegen Division durch 0)\nconst merged = {};\nfor (const item of $input.all()) {\n  const data = (item.json && item.json.output) ? item.json.output : item.json;\n  for (const key of ['these', 'ahnung', 'meinung']) {\n    if (data && data[key] !== undefined && data[key] !== null) merged[key] = Number(data[key]);\n  }\n}\nconst missing = ['these','ahnung','meinung'].filter(k => merged[k] === undefined || Number.isNaN(merged[k]));\nif (missing.length) return [{ json: { error: 'Fehlende Bewertung(en): ' + missing.join(', '), partial: merged } }];\nconst ahnung = Math.max(merged.ahnung, 1);\nconst score = merged.meinung / ahnung * merged.these;\nreturn [{ json: {\n  these: merged.these, ahnung: merged.ahnung, meinung: merged.meinung,\n  steingart_score: Math.round(score * 100) / 100,\n  formel: 'meinung / ahnung * these (ahnung min. 1)',\n} }];\n"
      },
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        448,
        48
      ],
      "id": "80eb498e-a558-404b-bffe-370b82b6b74e",
      "name": "Code in JavaScript"
    },
    {
      "parameters": {
        "promptType": "define",
        "text": "={{ $json.body.text }}",
        "hasOutputParser": true,
        "options": {
          "systemMessage": "# Rolle und Aufgabe\n\nDu bist ein Recherche-Assistent. Du sollst die faktische Qualität eines Textes beurteilen Du bemühst dich, die Fakten rund um den Text zu sichern, und beurteilst mit einer ganzen Zahl von 0-10, wie sehr der Autor des Textes sich mit den Fakten auseinandersetzt: \n\n# Vorgehen\n\n- Recherchiere in journalistischen Quellen nach den Fakten\n- Wirf einen Blick auf die Ausgangstexte, auf die der Text Bezug nimmt. \n\n# Tools\n\n- HTTP-Tool zum Einlesen von Quellen\n- Nutze dein Websearch Tool für die Suche nach Quellen und Positionen\n\n# Bewertungsskala\n\n- 0 heißt: in Ignoranz oder in Widerspruch zur Faktenlage, \n- 10: differenzierte und eingehende Berücksichtigung der Fakten und faire Behandlung der Quellen",
          "maxIterations": 10
        }
      },
      "type": "@n8n/n8n-nodes-langchain.agent",
      "typeVersion": 3.1,
      "position": [
        -224,
        -288
      ],
      "id": "2586aabe-f998-433b-89c2-4c6780fa2118",
      "name": "Recherchedetektor"
    },
    {
      "parameters": {
        "sessionIdType": "customKey",
        "sessionKey": "={{ $execution.id }}",
        "contextWindowLength": 10
      },
      "type": "@n8n/n8n-nodes-langchain.memoryBufferWindow",
      "typeVersion": 1.4,
      "position": [
        -224,
        -64
      ],
      "id": "c53b9ecb-1b8d-4661-9b10-1038f80cb8e8",
      "name": "Simple Memory"
    },
    {
      "parameters": {
        "url": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('URL', ``, 'string') }}",
        "options": {}
      },
      "type": "n8n-nodes-base.httpRequestTool",
      "typeVersion": 4.4,
      "position": [
        -144,
        -80
      ],
      "id": "8f4902d1-ab13-4aa4-b3f0-282d6b04b2cd",
      "name": "HTTP Request"
    },
    {
      "parameters": {
        "promptType": "define",
        "text": "={{ $json.body.text }}",
        "hasOutputParser": true,
        "options": {
          "systemMessage": "# Aufgabe und Rolle\n\nDu bist ein Redakteur und beurteilst, wie meinungsstark ein Text ist. \n\n# Vorgehen\n\n- Beurteile, wie meinungsstark der Text ist. \n- Wenn der Text Ambivalenzen zulässt oder Gegenpositionen wertend diskutiert, führt das zu niedrigeren Wertungen. \n\n# Antwortformat\n\nDu antwortest mit einer ganzen Zahl zwischen 0 (keine Meinung) und 10 (extrem meinungsstark). "
        }
      },
      "type": "@n8n/n8n-nodes-langchain.agent",
      "typeVersion": 3.1,
      "position": [
        -192,
        80
      ],
      "id": "95bee8d5-eb85-49e9-a691-8baf57853081",
      "name": "Meinungsstärkemesser"
    },
    {
      "parameters": {
        "respondWith": "json",
        "responseBody": "={{ $json }}",
        "options": {}
      },
      "type": "n8n-nodes-base.respondToWebhook",
      "typeVersion": 1.5,
      "position": [
        640,
        48
      ],
      "id": "0236b93c-9a8c-494a-a42e-7da344aa4ae1",
      "name": "Respond to Webhook"
    },
    {
      "parameters": {
        "jsonSchemaExample": "{\n\t\"meinung\": 5\n}"
      },
      "type": "@n8n/n8n-nodes-langchain.outputParserStructured",
      "typeVersion": 1.3,
      "position": [
        64,
        208
      ],
      "id": "4b760c73-7eab-4eba-b245-e31e1db47f49",
      "name": "Structured Meinung 0-10"
    },
    {
      "parameters": {
        "jsonSchemaExample": "{\n\t\"ahnung\": 5\n}"
      },
      "type": "@n8n/n8n-nodes-langchain.outputParserStructured",
      "typeVersion": 1.3,
      "position": [
        0,
        -96
      ],
      "id": "d439704b-6706-485d-b531-8612913b3d5a",
      "name": "Structured Ahnung 1-10"
    },
    {
      "parameters": {
        "jsonSchemaExample": "{\n\t\"these\": 0.67\n}"
      },
      "type": "@n8n/n8n-nodes-langchain.outputParserStructured",
      "typeVersion": 1.3,
      "position": [
        64,
        496
      ],
      "id": "8baf8b1d-f4df-4fb5-a302-21f847381f1f",
      "name": "Structured Thesensteilheit 0-1"
    },
    {
      "parameters": {
        "numberInputs": 3
      },
      "type": "n8n-nodes-base.merge",
      "typeVersion": 3.2,
      "position": [
        304,
        32
      ],
      "id": "b2c3d4e5-1111-4111-8111-merge0000002",
      "name": "Merge Bewertungen"
    }
  ],
  "pinData": {},
  "connections": {
    "Webhook": {
      "main": [
        [
          {
            "node": "Thesenwinkelmessung",
            "type": "main",
            "index": 0
          },
          {
            "node": "Recherchedetektor",
            "type": "main",
            "index": 0
          },
          {
            "node": "Meinungsstärkemesser",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "gpt-5-mini": {
      "ai_languageModel": [
        [
          {
            "node": "Thesenwinkelmessung",
            "type": "ai_languageModel",
            "index": 0
          },
          {
            "node": "Recherchedetektor",
            "type": "ai_languageModel",
            "index": 0
          },
          {
            "node": "Meinungsstärkemesser",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Thesenwinkelmessung": {
      "main": [
        [
          {
            "node": "Merge Bewertungen",
            "type": "main",
            "index": 2
          }
        ]
      ]
    },
    "Simple Memory": {
      "ai_memory": [
        [
          {
            "node": "Recherchedetektor",
            "type": "ai_memory",
            "index": 0
          }
        ]
      ]
    },
    "HTTP Request": {
      "ai_tool": [
        [
          {
            "node": "Recherchedetektor",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "Recherchedetektor": {
      "main": [
        [
          {
            "node": "Merge Bewertungen",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Meinungsstärkemesser": {
      "main": [
        [
          {
            "node": "Merge Bewertungen",
            "type": "main",
            "index": 1
          }
        ]
      ]
    },
    "Code in JavaScript": {
      "main": [
        [
          {
            "node": "Respond to Webhook",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Structured Meinung 0-10": {
      "ai_outputParser": [
        [
          {
            "node": "Meinungsstärkemesser",
            "type": "ai_outputParser",
            "index": 0
          }
        ]
      ]
    },
    "Structured Ahnung 1-10": {
      "ai_outputParser": [
        [
          {
            "node": "Recherchedetektor",
            "type": "ai_outputParser",
            "index": 0
          }
        ]
      ]
    },
    "Structured Thesensteilheit 0-1": {
      "ai_outputParser": [
        [
          {
            "node": "Thesenwinkelmessung",
            "type": "ai_outputParser",
            "index": 0
          }
        ]
      ]
    },
    "Merge Bewertungen": {
      "main": [
        [
          {
            "node": "Code in JavaScript",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  },
  "active": true,
  "settings": {
    "executionOrder": "v1",
    "binaryMode": "separate"
  },
  "versionId": "64ea0bae-05a2-48fc-85de-28b4eb6979bb",
  "meta": {
    "templateCredsSetupCompleted": true,
    "instanceId": "b1330edb2c8f8c89301cbbb49d5d072930133eae799156bae8d837036c3ad871"
  },
  "id": "TDv57kbHwmopyC5g",
  "tags": []
}