{ "name": "Relmio release acceptance", "nodes": [ { "parameters": {}, "id": "00000000-0000-4000-8000-000000000001", "name": "Run acceptance", "type": "n8n-nodes-base.manualTrigger", "typeVersion": 1, "position": [ 0, 600 ] }, { "parameters": { "mode": "manual", "assignments": { "assignments": [ { "id": "00000000-0000-4000-8000-000000000002", "name": "model", "value": "gpt-6-astra", "type": "string" }, { "id": "00000000-0000-4000-8000-000000000003", "name": "localModel", "value": "qwen3:0.6b", "type": "string" }, { "id": "00000000-0000-4000-8000-000000000020", "name": "sidecarBaseUrl", "value": "http://n8n-openai-oauth:10531/v1", "type": "string" }, { "id": "00000000-0000-4000-8000-000000000021", "name": "acceptanceVersion", "value": "2026-10-07.3", "type": "string" } ] }, "options": {} }, "id": "00000000-0000-4000-8000-000000000004", "name": "Settings", "type": "n8n-nodes-base.set", "typeVersion": 3.4, "position": [ 240, 600 ] }, { "parameters": { "method": "POST", "url": "={{ $('Settings').first().json.sidecarBaseUrl.replace(/\\/+$/, '') }}/responses", "authentication": "predefinedCredentialType", "nodeCredentialType": "openAiApi", "sendBody": true, "specifyBody": "json", "jsonBody": "={{ JSON.stringify({ model: $('Settings').first().json.model, input: [{ role: 'user', content: 'Reply with exactly: http responses ok' }] }) }}", "options": { "timeout": 120000 } }, "id": "00000000-0000-4000-8000-000000000005", "name": "HTTP Request: Responses", "type": "n8n-nodes-base.httpRequest", "typeVersion": 4.2, "position": [ 520, 0 ], "credentials": { "openAiApi": { "name": "OpenAI Relmio" } }, "onError": "continueRegularOutput" }, { "parameters": { "method": "POST", "url": "={{ $('Settings').first().json.sidecarBaseUrl.replace(/\\/+$/, '') }}/chat/completions", "authentication": "predefinedCredentialType", "nodeCredentialType": "openAiApi", "sendBody": true, "specifyBody": "json", "jsonBody": "={{ JSON.stringify({ model: $('Settings').first().json.model, messages: [{ role: 'user', content: 'Reply with exactly: http chat ok' }] }) }}", "options": { "timeout": 120000 } }, "id": "00000000-0000-4000-8000-000000000006", "name": "HTTP Request: Chat Completions", "type": "n8n-nodes-base.httpRequest", "typeVersion": 4.2, "position": [ 520, 200 ], "credentials": { "openAiApi": { "name": "OpenAI Relmio" } }, "onError": "continueRegularOutput" }, { "parameters": { "promptType": "define", "text": "Use the calculator tool to work out 17 * 23, then reply with only the number.", "options": { "returnIntermediateSteps": true } }, "id": "00000000-0000-4000-8000-000000000007", "name": "AI Agent", "type": "@n8n/n8n-nodes-langchain.agent", "typeVersion": 3.1, "position": [ 520, 400 ], "onError": "continueRegularOutput" }, { "parameters": { "model": { "__rl": true, "mode": "id", "value": "={{ $('Settings').first().json.model }}" }, "responsesApiEnabled": true, "options": {} }, "id": "00000000-0000-4000-8000-000000000008", "name": "Agent Chat Model", "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi", "typeVersion": 1.3, "position": [ 440, 620 ], "credentials": { "openAiApi": { "name": "OpenAI Relmio" } } }, { "parameters": {}, "id": "00000000-0000-4000-8000-000000000009", "name": "Calculator", "type": "@n8n/n8n-nodes-langchain.toolCalculator", "typeVersion": 1, "position": [ 640, 620 ] }, { "parameters": { "promptType": "define", "text": "Reply with exactly: chain ok" }, "id": "00000000-0000-4000-8000-000000000010", "name": "Basic LLM Chain", "type": "@n8n/n8n-nodes-langchain.chainLlm", "typeVersion": 1.9, "position": [ 520, 800 ], "onError": "continueRegularOutput" }, { "parameters": { "model": { "__rl": true, "mode": "id", "value": "={{ $('Settings').first().json.model }}" }, "responsesApiEnabled": true, "options": {} }, "id": "00000000-0000-4000-8000-000000000011", "name": "Chain Chat Model", "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi", "typeVersion": 1.3, "position": [ 520, 1000 ], "credentials": { "openAiApi": { "name": "OpenAI Relmio" } } }, { "parameters": { "resource": "text", "operation": "response", "modelId": { "__rl": true, "mode": "id", "value": "={{ $('Settings').first().json.model }}" }, "responses": { "values": [ { "type": "text", "role": "user", "content": "Reply with exactly: openai node ok" } ] }, "simplify": true, "options": {} }, "id": "00000000-0000-4000-8000-000000000012", "name": "OpenAI: Message a Model", "type": "@n8n/n8n-nodes-langchain.openAi", "typeVersion": 2.3, "position": [ 520, 1200 ], "credentials": { "openAiApi": { "name": "OpenAI Relmio" } }, "onError": "continueRegularOutput" }, { "parameters": { "resource": "image", "operation": "generate", "modelId": { "__rl": true, "mode": "id", "value": "gpt-image-2" }, "prompt": "A small green square centred on a plain white background", "options": {} }, "id": "00000000-0000-4000-8000-000000000013", "name": "OpenAI: Generate an Image", "type": "@n8n/n8n-nodes-langchain.openAi", "typeVersion": 2.3, "position": [ 520, 1400 ], "credentials": { "openAiApi": { "name": "OpenAI Relmio" } }, "onError": "continueRegularOutput" }, { "parameters": { "promptType": "define", "text": "What is 2 + 2? Reply with only the number." }, "id": "00000000-0000-4000-8000-000000000014", "name": "Local Model Chain", "type": "@n8n/n8n-nodes-langchain.chainLlm", "typeVersion": 1.9, "position": [ 520, 1600 ], "onError": "continueRegularOutput" }, { "parameters": { "model": { "__rl": true, "mode": "id", "value": "={{ $('Settings').first().json.localModel }}" }, "responsesApiEnabled": false, "options": {} }, "id": "00000000-0000-4000-8000-000000000015", "name": "Local Chat Model", "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi", "typeVersion": 1.3, "position": [ 520, 1800 ], "credentials": { "openAiApi": { "name": "Relmio Local Model" } } }, { "parameters": { "content": "Inactive on purpose. Run with **Execute workflow** only.\n\nKeep one copy of this workflow per n8n and reuse it for every QA run. When `acceptanceVersion` in **Settings** is older than the file in the Relmio repository, update this workflow in place instead of importing a second copy.\n\nCredentials: **OpenAI Relmio** (the sidecar, Base URL `http://n8n-openai-oauth:10531/v1`) on every node except the local model, and **Relmio Local Model** (Base URL `http://n8n-local-model:11434/v1`) on Local Chat Model. On another self-hosted n8n, set `sidecarBaseUrl` in **Settings** and the credential Base URL to the address that n8n reaches the sidecar at.\n\nSet the text model in **Settings**. Each check node keeps going on error, so open its output: a check passes only when it shows the expected text.", "height": 400, "width": 420 }, "id": "00000000-0000-4000-8000-000000000016", "name": "Before you run", "type": "n8n-nodes-base.stickyNote", "typeVersion": 1, "position": [ -520, 0 ] }, { "parameters": { "content": "## Expected results\n\n- HTTP Request: Responses returns `http responses ok`\n- HTTP Request: Chat Completions returns `http chat ok`\n- AI Agent returns `391`, and its `intermediateSteps` show one Calculator call that returned `391`\n- Basic LLM Chain returns `chain ok`\n- OpenAI: Message a Model returns `openai node ok`\n- OpenAI: Generate an Image returns one binary image (image add-on only)\n- Local Model Chain returns `4` (local model only)\n\nAn `error` field in any output is a failure.", "height": 300, "width": 420 }, "id": "00000000-0000-4000-8000-000000000017", "name": "Expected results", "type": "n8n-nodes-base.stickyNote", "typeVersion": 1, "position": [ -520, 440 ] } ], "connections": { "Run acceptance": { "main": [ [ { "node": "Settings", "type": "main", "index": 0 } ] ] }, "Settings": { "main": [ [ { "node": "HTTP Request: Responses", "type": "main", "index": 0 }, { "node": "HTTP Request: Chat Completions", "type": "main", "index": 0 }, { "node": "AI Agent", "type": "main", "index": 0 }, { "node": "Basic LLM Chain", "type": "main", "index": 0 }, { "node": "OpenAI: Message a Model", "type": "main", "index": 0 }, { "node": "OpenAI: Generate an Image", "type": "main", "index": 0 }, { "node": "Local Model Chain", "type": "main", "index": 0 } ] ] }, "Agent Chat Model": { "ai_languageModel": [ [ { "node": "AI Agent", "type": "ai_languageModel", "index": 0 } ] ] }, "Calculator": { "ai_tool": [ [ { "node": "AI Agent", "type": "ai_tool", "index": 0 } ] ] }, "Chain Chat Model": { "ai_languageModel": [ [ { "node": "Basic LLM Chain", "type": "ai_languageModel", "index": 0 } ] ] }, "Local Chat Model": { "ai_languageModel": [ [ { "node": "Local Model Chain", "type": "ai_languageModel", "index": 0 } ] ] } }, "active": false, "settings": { "executionOrder": "v1" }, "pinData": {}, "tags": [] }