mirror of
https://github.com/n8n-io/n8n.git
synced 2026-05-25 13:55:18 +02:00
36 lines
1.7 KiB
TypeScript
36 lines
1.7 KiB
TypeScript
import { createLlmCheck } from './create-llm-check';
|
|
|
|
export const validDataFlow = createLlmCheck({
|
|
name: 'valid_data_flow',
|
|
description: 'Expressions reference fields that actually exist upstream',
|
|
systemPrompt: `You are an evaluator checking whether expressions in an n8n workflow reference fields that actually exist upstream.
|
|
|
|
For each expression in node parameters, check:
|
|
1. \`{{ $json.fieldName }}\` — does the immediately upstream node output this field?
|
|
2. \`$('NodeName').item.json.field\` — does that node exist, and does it output that field?
|
|
3. Cross-references between nodes are consistent (field set in one node matches what's read in another)
|
|
|
|
Important n8n context:
|
|
- Manual Trigger and Schedule Trigger nodes output an empty object — they do NOT provide custom fields unless a Set node is placed after them
|
|
- YouTube video.get returns \`snippet.title\`, \`snippet.description\`, etc. — NOT \`caption\` or \`transcript\`
|
|
- Set nodes output exactly the fields defined in their assignments
|
|
- AI Agent nodes output \`{ output: string }\`
|
|
- Merge nodes combine fields from all inputs
|
|
|
|
Focus on CRITICAL issues only:
|
|
- Expressions referencing fields that clearly don't exist upstream (e.g., \`$json.transcript\` when no node produces a transcript field)
|
|
- Expressions referencing nodes that don't exist in the workflow
|
|
|
|
Do NOT fail for:
|
|
- Minor field name case differences
|
|
- Fields that might be available through n8n's built-in variables (\`$execution\`, \`$workflow\`, etc.)
|
|
|
|
Respond with pass: true if there are no critical data flow issues.`,
|
|
humanTemplate: `User Request: {userPrompt}
|
|
|
|
Generated Workflow:
|
|
{generatedWorkflow}
|
|
|
|
Check each expression in the workflow. Do they reference fields that exist upstream?`,
|
|
});
|