@n8n/instance-ai 1.6.2 → 1.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/agent/computer-use-prompt.js +33 -2
- package/dist/agent/computer-use-prompt.js.map +1 -1
- package/dist/agent/instance-agent.js +0 -1
- package/dist/agent/instance-agent.js.map +1 -1
- package/dist/agent/shared-prompts.d.ts +1 -1
- package/dist/agent/shared-prompts.js +1 -1
- package/dist/agent/shared-prompts.js.map +1 -1
- package/dist/agent/sub-agent-debriefing.d.ts +2 -2
- package/dist/agent/system-prompt.d.ts +0 -1
- package/dist/agent/system-prompt.js +14 -15
- package/dist/agent/system-prompt.js.map +1 -1
- package/dist/build.tsbuildinfo +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.js +4 -2
- package/dist/index.js.map +1 -1
- package/dist/planned-tasks/planned-task-service.d.ts +3 -0
- package/dist/planned-tasks/planned-task-service.js +14 -7
- package/dist/planned-tasks/planned-task-service.js.map +1 -1
- package/dist/runtime/builder-sandbox-session-registry.d.ts +2 -0
- package/dist/runtime/builder-sandbox-session-registry.js +8 -1
- package/dist/runtime/builder-sandbox-session-registry.js.map +1 -1
- package/dist/runtime/resumable-stream-executor.d.ts +1 -0
- package/dist/runtime/resumable-stream-executor.js +7 -0
- package/dist/runtime/resumable-stream-executor.js.map +1 -1
- package/dist/runtime/run-state-registry.d.ts +11 -4
- package/dist/runtime/run-state-registry.js +14 -10
- package/dist/runtime/run-state-registry.js.map +1 -1
- package/dist/stream/consume-with-hitl.d.ts +2 -0
- package/dist/stream/consume-with-hitl.js +1 -0
- package/dist/stream/consume-with-hitl.js.map +1 -1
- package/dist/tools/attachments/parse-file.tool.d.ts +2 -2
- package/dist/tools/credentials.tool.d.ts +2 -2
- package/dist/tools/credentials.tool.js +6 -0
- package/dist/tools/credentials.tool.js.map +1 -1
- package/dist/tools/evals/analyze-agent-input-columns.service.d.ts +6 -0
- package/dist/tools/evals/analyze-agent-input-columns.service.js +17 -0
- package/dist/tools/evals/analyze-agent-input-columns.service.js.map +1 -0
- package/dist/tools/evals/column-ref-utils.d.ts +18 -0
- package/dist/tools/evals/column-ref-utils.js +116 -0
- package/dist/tools/evals/column-ref-utils.js.map +1 -0
- package/dist/tools/evals/describe-metric-for-workflow.service.d.ts +6 -0
- package/dist/tools/evals/describe-metric-for-workflow.service.js +108 -0
- package/dist/tools/evals/describe-metric-for-workflow.service.js.map +1 -0
- package/dist/tools/evals/detect-agent-named-refs.service.d.ts +9 -0
- package/dist/tools/evals/detect-agent-named-refs.service.js +67 -0
- package/dist/tools/evals/detect-agent-named-refs.service.js.map +1 -0
- package/dist/tools/evals/detect-ai-nodes.d.ts +7 -0
- package/dist/tools/evals/detect-ai-nodes.js +75 -0
- package/dist/tools/evals/detect-ai-nodes.js.map +1 -0
- package/dist/tools/evals/detect-tool-refs.service.d.ts +7 -0
- package/dist/tools/evals/detect-tool-refs.service.js +65 -0
- package/dist/tools/evals/detect-tool-refs.service.js.map +1 -0
- package/dist/tools/evals/eval-data-requirements.service.d.ts +19 -0
- package/dist/tools/evals/eval-data-requirements.service.js +167 -0
- package/dist/tools/evals/eval-data-requirements.service.js.map +1 -0
- package/dist/tools/evals/metric-catalog.d.ts +57 -0
- package/dist/tools/evals/metric-catalog.js +81 -0
- package/dist/tools/evals/metric-catalog.js.map +1 -0
- package/dist/tools/filesystem/create-tools-from-mcp-server.js +7 -1
- package/dist/tools/filesystem/create-tools-from-mcp-server.js.map +1 -1
- package/dist/tools/nodes/node-search-engine.types.d.ts +7 -0
- package/dist/tools/orchestration/build-workflow-agent.prompt.js +34 -223
- package/dist/tools/orchestration/build-workflow-agent.prompt.js.map +1 -1
- package/dist/tools/orchestration/build-workflow-agent.tool.d.ts +12 -1
- package/dist/tools/orchestration/build-workflow-agent.tool.js +130 -27
- package/dist/tools/orchestration/build-workflow-agent.tool.js.map +1 -1
- package/dist/tools/orchestration/delegate.schemas.d.ts +2 -2
- package/dist/tools/orchestration/plan-agent-prompt.d.ts +1 -1
- package/dist/tools/orchestration/plan-agent-prompt.js +7 -1
- package/dist/tools/orchestration/plan-agent-prompt.js.map +1 -1
- package/dist/tools/orchestration/plan.tool.js +21 -4
- package/dist/tools/orchestration/plan.tool.js.map +1 -1
- package/dist/tools/workflows/submit-workflow-identity.d.ts +6 -1
- package/dist/tools/workflows/submit-workflow-identity.js +17 -4
- package/dist/tools/workflows/submit-workflow-identity.js.map +1 -1
- package/dist/tools/workflows/submit-workflow.tool.d.ts +2 -2
- package/dist/tools/workflows/submit-workflow.tool.js +5 -1
- package/dist/tools/workflows/submit-workflow.tool.js.map +1 -1
- package/dist/tools/workflows.tool.js +19 -2
- package/dist/tools/workflows.tool.js.map +1 -1
- package/dist/tracing/langsmith-tracing.d.ts +2 -0
- package/dist/tracing/langsmith-tracing.js +29 -0
- package/dist/tracing/langsmith-tracing.js.map +1 -1
- package/dist/types.d.ts +0 -1
- package/dist/utils/eval-agents.d.ts +3 -0
- package/dist/utils/eval-agents.js +7 -0
- package/dist/utils/eval-agents.js.map +1 -1
- package/dist/utils/scrub-secrets.d.ts +1 -0
- package/dist/utils/scrub-secrets.js +19 -0
- package/dist/utils/scrub-secrets.js.map +1 -0
- package/dist/workflow-loop/guidance.js +2 -1
- package/dist/workflow-loop/guidance.js.map +1 -1
- package/dist/workflow-loop/index.d.ts +1 -0
- package/dist/workflow-loop/index.js +3 -1
- package/dist/workflow-loop/index.js.map +1 -1
- package/dist/workflow-loop/terminal-remediation-guard.d.ts +6 -0
- package/dist/workflow-loop/terminal-remediation-guard.js +18 -0
- package/dist/workflow-loop/terminal-remediation-guard.js.map +1 -0
- package/dist/workspace/builder-sandbox-factory.d.ts +2 -0
- package/dist/workspace/builder-sandbox-factory.js +12 -3
- package/dist/workspace/builder-sandbox-factory.js.map +1 -1
- package/dist/workspace/guarded-filesystem.d.ts +10 -0
- package/dist/workspace/guarded-filesystem.js +136 -0
- package/dist/workspace/guarded-filesystem.js.map +1 -0
- package/dist/workspace/sandbox-fs.js +34 -11
- package/dist/workspace/sandbox-fs.js.map +1 -1
- package/dist/workspace/sandbox-setup.d.ts +2 -0
- package/dist/workspace/sandbox-setup.js +35 -20
- package/dist/workspace/sandbox-setup.js.map +1 -1
- package/dist/workspace/template-telemetry.d.ts +23 -0
- package/dist/workspace/template-telemetry.js +180 -0
- package/dist/workspace/template-telemetry.js.map +1 -0
- package/package.json +20 -16
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { WorkflowJSON } from '@n8n/workflow-sdk';
|
|
2
|
+
export interface NamedRef {
|
|
3
|
+
nodeName: string;
|
|
4
|
+
field: string;
|
|
5
|
+
originalExpression: string;
|
|
6
|
+
column: string;
|
|
7
|
+
targetNodeName: string;
|
|
8
|
+
}
|
|
9
|
+
export declare function detectAgentNamedRefs(workflow: WorkflowJSON, agentNodeName: string): NamedRef[];
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.detectAgentNamedRefs = detectAgentNamedRefs;
|
|
4
|
+
const column_ref_utils_1 = require("./column-ref-utils");
|
|
5
|
+
function slug(name) {
|
|
6
|
+
const result = name
|
|
7
|
+
.toLowerCase()
|
|
8
|
+
.replace(/[^a-z0-9]+/g, '_')
|
|
9
|
+
.replace(/^_+|_+$/g, '');
|
|
10
|
+
return result.length > 0 ? result : 'node';
|
|
11
|
+
}
|
|
12
|
+
function detectAgentNamedRefs(workflow, agentNodeName) {
|
|
13
|
+
const node = (workflow.nodes ?? []).find((n) => (0, column_ref_utils_1.nodeHasName)(n) && n.name === agentNodeName);
|
|
14
|
+
if (!node) {
|
|
15
|
+
throw new Error(`Agent node "${agentNodeName}" not found in workflow`);
|
|
16
|
+
}
|
|
17
|
+
const targets = [agentNodeName, ...(0, column_ref_utils_1.findAgentSubComponents)(workflow, agentNodeName)];
|
|
18
|
+
const nodesByName = new Map((workflow.nodes ?? []).filter(column_ref_utils_1.nodeHasName).map((n) => [n.name, n]));
|
|
19
|
+
const targetMatches = new Map();
|
|
20
|
+
for (const target of targets) {
|
|
21
|
+
const tNode = nodesByName.get(target);
|
|
22
|
+
if (!tNode)
|
|
23
|
+
continue;
|
|
24
|
+
const matches = (0, column_ref_utils_1.collectStrings)(tNode.parameters).flatMap((text) => (0, column_ref_utils_1.extractNamedRefMatches)(text));
|
|
25
|
+
const dedup = new Map();
|
|
26
|
+
for (const m of matches) {
|
|
27
|
+
const key = `${m.nodeName}\x00${m.field}`;
|
|
28
|
+
if (!dedup.has(key))
|
|
29
|
+
dedup.set(key, m);
|
|
30
|
+
}
|
|
31
|
+
if (dedup.size > 0)
|
|
32
|
+
targetMatches.set(target, [...dedup.values()]);
|
|
33
|
+
}
|
|
34
|
+
const allPairs = new Map();
|
|
35
|
+
for (const matches of targetMatches.values()) {
|
|
36
|
+
for (const m of matches) {
|
|
37
|
+
const key = `${m.nodeName}\x00${m.field}`;
|
|
38
|
+
if (!allPairs.has(key)) {
|
|
39
|
+
allPairs.set(key, { nodeName: m.nodeName, field: m.field });
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
const byField = new Map();
|
|
44
|
+
for (const p of allPairs.values()) {
|
|
45
|
+
const arr = byField.get(p.field) ?? [];
|
|
46
|
+
arr.push(p);
|
|
47
|
+
byField.set(p.field, arr);
|
|
48
|
+
}
|
|
49
|
+
function columnFor(nodeName, field) {
|
|
50
|
+
const group = byField.get(field) ?? [];
|
|
51
|
+
return group.length === 1 ? field : `${slug(nodeName)}_${field}`;
|
|
52
|
+
}
|
|
53
|
+
const result = [];
|
|
54
|
+
for (const [target, matches] of targetMatches) {
|
|
55
|
+
for (const m of matches) {
|
|
56
|
+
result.push({
|
|
57
|
+
nodeName: m.nodeName,
|
|
58
|
+
field: m.field,
|
|
59
|
+
originalExpression: m.originalExpression,
|
|
60
|
+
column: columnFor(m.nodeName, m.field),
|
|
61
|
+
targetNodeName: target,
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
return result;
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=detect-agent-named-refs.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"detect-agent-named-refs.service.js","sourceRoot":"","sources":["../../../src/tools/evals/detect-agent-named-refs.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.detectAiNodes = detectAiNodes;
|
|
4
|
+
const LANGCHAIN_TYPE_PREFIX = '@n8n/n8n-nodes-langchain.';
|
|
5
|
+
const EVALUATION_TYPES = new Set([
|
|
6
|
+
'n8n-nodes-base.evaluation',
|
|
7
|
+
'n8n-nodes-base.evaluationTrigger',
|
|
8
|
+
]);
|
|
9
|
+
const ROOT_AI_TYPES = new Set([
|
|
10
|
+
`${LANGCHAIN_TYPE_PREFIX}agent`,
|
|
11
|
+
`${LANGCHAIN_TYPE_PREFIX}openAiAssistant`,
|
|
12
|
+
`${LANGCHAIN_TYPE_PREFIX}chainLlm`,
|
|
13
|
+
`${LANGCHAIN_TYPE_PREFIX}chainRetrievalQa`,
|
|
14
|
+
`${LANGCHAIN_TYPE_PREFIX}chainSummarization`,
|
|
15
|
+
`${LANGCHAIN_TYPE_PREFIX}informationExtractor`,
|
|
16
|
+
`${LANGCHAIN_TYPE_PREFIX}sentimentAnalysis`,
|
|
17
|
+
`${LANGCHAIN_TYPE_PREFIX}textClassifier`,
|
|
18
|
+
`${LANGCHAIN_TYPE_PREFIX}openAi`,
|
|
19
|
+
`${LANGCHAIN_TYPE_PREFIX}anthropic`,
|
|
20
|
+
`${LANGCHAIN_TYPE_PREFIX}googleGemini`,
|
|
21
|
+
`${LANGCHAIN_TYPE_PREFIX}ollama`,
|
|
22
|
+
`${LANGCHAIN_TYPE_PREFIX}alibabaCloud`,
|
|
23
|
+
`${LANGCHAIN_TYPE_PREFIX}miniMax`,
|
|
24
|
+
`${LANGCHAIN_TYPE_PREFIX}moonshot`,
|
|
25
|
+
]);
|
|
26
|
+
const SUB_COMPONENT_PREFIXES = [
|
|
27
|
+
'lm',
|
|
28
|
+
'embedding',
|
|
29
|
+
'memory',
|
|
30
|
+
'tool',
|
|
31
|
+
'outputparser',
|
|
32
|
+
'document',
|
|
33
|
+
'textsplitter',
|
|
34
|
+
'vectorstore',
|
|
35
|
+
'retriever',
|
|
36
|
+
'chattrigger',
|
|
37
|
+
'manualchattrigger',
|
|
38
|
+
];
|
|
39
|
+
function isRootAgentType(type) {
|
|
40
|
+
return ROOT_AI_TYPES.has(type);
|
|
41
|
+
}
|
|
42
|
+
function isAnyLangchainNode(type) {
|
|
43
|
+
return type.startsWith(LANGCHAIN_TYPE_PREFIX);
|
|
44
|
+
}
|
|
45
|
+
function isLikelySubComponent(type) {
|
|
46
|
+
if (!type.startsWith(LANGCHAIN_TYPE_PREFIX))
|
|
47
|
+
return false;
|
|
48
|
+
const localPart = type.slice(LANGCHAIN_TYPE_PREFIX.length).toLowerCase();
|
|
49
|
+
return SUB_COMPONENT_PREFIXES.some((prefix) => localPart.startsWith(prefix));
|
|
50
|
+
}
|
|
51
|
+
function detectAiNodes(workflow) {
|
|
52
|
+
const aiNodeNames = [];
|
|
53
|
+
const fallbackCandidates = [];
|
|
54
|
+
let alreadyConfigured = false;
|
|
55
|
+
for (const node of workflow.nodes ?? []) {
|
|
56
|
+
if (!node.name)
|
|
57
|
+
continue;
|
|
58
|
+
if (isRootAgentType(node.type)) {
|
|
59
|
+
aiNodeNames.push(node.name);
|
|
60
|
+
}
|
|
61
|
+
else if (isAnyLangchainNode(node.type) && !isLikelySubComponent(node.type)) {
|
|
62
|
+
fallbackCandidates.push(node.name);
|
|
63
|
+
}
|
|
64
|
+
if (EVALUATION_TYPES.has(node.type)) {
|
|
65
|
+
alreadyConfigured = true;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
const finalAiNodeNames = aiNodeNames.length > 0 ? aiNodeNames : fallbackCandidates;
|
|
69
|
+
return {
|
|
70
|
+
isAiWorkflow: finalAiNodeNames.length > 0,
|
|
71
|
+
aiNodeNames: finalAiNodeNames,
|
|
72
|
+
alreadyConfigured,
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=detect-ai-nodes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"detect-ai-nodes.js","sourceRoot":"","sources":["../../../src/tools/evals/detect-ai-nodes.ts"],"names":[],"mappings":";;AA4EA,sCA6BC;AAvGD,MAAM,qBAAqB,GAAG,2BAA2B,CAAC;AAC1D,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAS;IACxC,2BAA2B;IAC3B,kCAAkC;CAClC,CAAC,CAAC;AASH,MAAM,aAAa,GAAG,IAAI,GAAG,CAAS;IAErC,GAAG,qBAAqB,OAAO;IAC/B,GAAG,qBAAqB,iBAAiB;IACzC,GAAG,qBAAqB,UAAU;IAClC,GAAG,qBAAqB,kBAAkB;IAC1C,GAAG,qBAAqB,oBAAoB;IAC5C,GAAG,qBAAqB,sBAAsB;IAC9C,GAAG,qBAAqB,mBAAmB;IAC3C,GAAG,qBAAqB,gBAAgB;IAGxC,GAAG,qBAAqB,QAAQ;IAChC,GAAG,qBAAqB,WAAW;IACnC,GAAG,qBAAqB,cAAc;IACtC,GAAG,qBAAqB,QAAQ;IAChC,GAAG,qBAAqB,cAAc;IACtC,GAAG,qBAAqB,SAAS;IACjC,GAAG,qBAAqB,UAAU;CAClC,CAAC,CAAC;AAKH,MAAM,sBAAsB,GAAG;IAC9B,IAAI;IACJ,WAAW;IACX,QAAQ;IACR,MAAM;IACN,cAAc;IACd,UAAU;IACV,cAAc;IACd,aAAa;IACb,WAAW;IACX,aAAa;IACb,mBAAmB;CACnB,CAAC;AAQF,SAAS,eAAe,CAAC,IAAY;IACpC,OAAO,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAChC,CAAC;AAED,SAAS,kBAAkB,CAAC,IAAY;IACvC,OAAO,IAAI,CAAC,UAAU,CAAC,qBAAqB,CAAC,CAAC;AAC/C,CAAC;AAKD,SAAS,oBAAoB,CAAC,IAAY;IACzC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,qBAAqB,CAAC;QAAE,OAAO,KAAK,CAAC;IAC1D,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC;IACzE,OAAO,sBAAsB,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,SAAS,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;AAC9E,CAAC;AAED,SAAgB,aAAa,CAAC,QAAsB;IACnD,MAAM,WAAW,GAAa,EAAE,CAAC;IACjC,MAAM,kBAAkB,GAAa,EAAE,CAAC;IACxC,IAAI,iBAAiB,GAAG,KAAK,CAAC;IAE9B,KAAK,MAAM,IAAI,IAAI,QAAQ,CAAC,KAAK,IAAI,EAAE,EAAE,CAAC;QACzC,IAAI,CAAC,IAAI,CAAC,IAAI;YAAE,SAAS;QACzB,IAAI,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YAChC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC7B,CAAC;aAAM,IAAI,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YAI9E,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACpC,CAAC;QACD,IAAI,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YACrC,iBAAiB,GAAG,IAAI,CAAC;QAC1B,CAAC;IACF,CAAC;IAID,MAAM,gBAAgB,GAAG,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,kBAAkB,CAAC;IAEnF,OAAO;QACN,YAAY,EAAE,gBAAgB,CAAC,MAAM,GAAG,CAAC;QACzC,WAAW,EAAE,gBAAgB;QAC7B,iBAAiB;KACjB,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.detectToolRefs = detectToolRefs;
|
|
4
|
+
const column_ref_utils_1 = require("./column-ref-utils");
|
|
5
|
+
function reachableDownstreamMain(workflow, startNodeName) {
|
|
6
|
+
const reached = new Set();
|
|
7
|
+
const queue = [startNodeName];
|
|
8
|
+
while (queue.length > 0) {
|
|
9
|
+
const current = queue.shift();
|
|
10
|
+
const slot = workflow.connections?.[current]?.main;
|
|
11
|
+
if (!Array.isArray(slot))
|
|
12
|
+
continue;
|
|
13
|
+
for (const inner of slot) {
|
|
14
|
+
if (!Array.isArray(inner))
|
|
15
|
+
continue;
|
|
16
|
+
for (const conn of inner) {
|
|
17
|
+
if (!(0, column_ref_utils_1.isRecord)(conn) || typeof conn.node !== 'string')
|
|
18
|
+
continue;
|
|
19
|
+
if (reached.has(conn.node))
|
|
20
|
+
continue;
|
|
21
|
+
reached.add(conn.node);
|
|
22
|
+
queue.push(conn.node);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
return reached;
|
|
27
|
+
}
|
|
28
|
+
function detectToolRefs(workflow, agentNodeName) {
|
|
29
|
+
const agent = (workflow.nodes ?? []).find((n) => (0, column_ref_utils_1.nodeHasName)(n) && n.name === agentNodeName);
|
|
30
|
+
if (!agent) {
|
|
31
|
+
throw new Error(`Agent node "${agentNodeName}" not found in workflow`);
|
|
32
|
+
}
|
|
33
|
+
const subComponents = (0, column_ref_utils_1.findAgentSubComponents)(workflow, agentNodeName);
|
|
34
|
+
if (subComponents.length === 0)
|
|
35
|
+
return [];
|
|
36
|
+
const nodesByName = new Map((workflow.nodes ?? []).filter(column_ref_utils_1.nodeHasName).map((n) => [n.name, n]));
|
|
37
|
+
const downstream = reachableDownstreamMain(workflow, agentNodeName);
|
|
38
|
+
const seen = new Set();
|
|
39
|
+
const result = [];
|
|
40
|
+
for (const toolNodeName of subComponents) {
|
|
41
|
+
const toolNode = nodesByName.get(toolNodeName);
|
|
42
|
+
if (!toolNode)
|
|
43
|
+
continue;
|
|
44
|
+
const matches = (0, column_ref_utils_1.collectStrings)(toolNode.parameters).flatMap((text) => (0, column_ref_utils_1.extractNamedRefMatches)(text));
|
|
45
|
+
for (const m of matches) {
|
|
46
|
+
if (m.nodeName === agentNodeName)
|
|
47
|
+
continue;
|
|
48
|
+
if (downstream.has(m.nodeName))
|
|
49
|
+
continue;
|
|
50
|
+
if (!nodesByName.has(m.nodeName))
|
|
51
|
+
continue;
|
|
52
|
+
const key = `${toolNodeName}\x00${m.nodeName}\x00${m.field}`;
|
|
53
|
+
if (seen.has(key))
|
|
54
|
+
continue;
|
|
55
|
+
seen.add(key);
|
|
56
|
+
result.push({
|
|
57
|
+
sourceNodeName: m.nodeName,
|
|
58
|
+
field: m.field,
|
|
59
|
+
toolNodeName,
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
return result;
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=detect-tool-refs.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"detect-tool-refs.service.js","sourceRoot":"","sources":["../../../src/tools/evals/detect-tool-refs.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { WorkflowJSON } from '@n8n/workflow-sdk';
|
|
2
|
+
export interface EvalDataTarget {
|
|
3
|
+
dataTableId: string;
|
|
4
|
+
evaluationTriggerName: string;
|
|
5
|
+
targetNodeName?: string;
|
|
6
|
+
inputColumns: string[];
|
|
7
|
+
expectedOutputColumns: string[];
|
|
8
|
+
actualOutputColumns: string[];
|
|
9
|
+
metricNodeNames: string[];
|
|
10
|
+
expectedToActualPairs: Array<{
|
|
11
|
+
expectedColumn: string;
|
|
12
|
+
actualField: string;
|
|
13
|
+
}>;
|
|
14
|
+
}
|
|
15
|
+
export interface EvalDataRequirements {
|
|
16
|
+
targets: EvalDataTarget[];
|
|
17
|
+
reason?: string;
|
|
18
|
+
}
|
|
19
|
+
export declare function analyzeEvalDataRequirements(workflow: WorkflowJSON): EvalDataRequirements;
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.analyzeEvalDataRequirements = analyzeEvalDataRequirements;
|
|
4
|
+
const analyze_agent_input_columns_service_1 = require("./analyze-agent-input-columns.service");
|
|
5
|
+
const column_ref_utils_1 = require("./column-ref-utils");
|
|
6
|
+
const detect_ai_nodes_1 = require("./detect-ai-nodes");
|
|
7
|
+
function readOperation(node) {
|
|
8
|
+
const parameters = node.parameters;
|
|
9
|
+
if (!(0, column_ref_utils_1.isRecord)(parameters))
|
|
10
|
+
return undefined;
|
|
11
|
+
const operation = parameters.operation;
|
|
12
|
+
return typeof operation === 'string' ? operation : undefined;
|
|
13
|
+
}
|
|
14
|
+
function readDataTableId(node) {
|
|
15
|
+
const parameters = node.parameters;
|
|
16
|
+
if (!(0, column_ref_utils_1.isRecord)(parameters))
|
|
17
|
+
return undefined;
|
|
18
|
+
const dataTableId = parameters.dataTableId;
|
|
19
|
+
if (typeof dataTableId === 'string')
|
|
20
|
+
return dataTableId;
|
|
21
|
+
if (!(0, column_ref_utils_1.isRecord)(dataTableId))
|
|
22
|
+
return undefined;
|
|
23
|
+
const value = dataTableId.value;
|
|
24
|
+
return typeof value === 'string' && value.length > 0 ? value : undefined;
|
|
25
|
+
}
|
|
26
|
+
function childNames(workflow, sourceName, outputIndex) {
|
|
27
|
+
const connectionsByType = workflow.connections?.[sourceName];
|
|
28
|
+
if (!connectionsByType || typeof connectionsByType !== 'object')
|
|
29
|
+
return [];
|
|
30
|
+
const main = connectionsByType.main;
|
|
31
|
+
if (!Array.isArray(main))
|
|
32
|
+
return [];
|
|
33
|
+
const slots = outputIndex === undefined
|
|
34
|
+
? main
|
|
35
|
+
: [main[outputIndex]].filter((slot) => Array.isArray(slot));
|
|
36
|
+
return (0, column_ref_utils_1.unique)(slots.flatMap((slot) => {
|
|
37
|
+
if (!Array.isArray(slot))
|
|
38
|
+
return [];
|
|
39
|
+
return slot.flatMap((connection) => {
|
|
40
|
+
if (!(0, column_ref_utils_1.isRecord)(connection))
|
|
41
|
+
return [];
|
|
42
|
+
const node = connection.node;
|
|
43
|
+
return typeof node === 'string' ? [node] : [];
|
|
44
|
+
});
|
|
45
|
+
}));
|
|
46
|
+
}
|
|
47
|
+
function collectReachableNodeNames(workflow, startName) {
|
|
48
|
+
const seen = new Set();
|
|
49
|
+
const queue = [startName];
|
|
50
|
+
while (queue.length > 0) {
|
|
51
|
+
const current = queue.shift();
|
|
52
|
+
if (!current || seen.has(current))
|
|
53
|
+
continue;
|
|
54
|
+
seen.add(current);
|
|
55
|
+
for (const child of childNames(workflow, current)) {
|
|
56
|
+
if (!seen.has(child))
|
|
57
|
+
queue.push(child);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
seen.delete(startName);
|
|
61
|
+
return [...seen];
|
|
62
|
+
}
|
|
63
|
+
function expectedColumnsFromMetricNodes(nodes) {
|
|
64
|
+
return (0, column_ref_utils_1.unique)(nodes.flatMap((node) => {
|
|
65
|
+
if (!(0, column_ref_utils_1.nodeTypeEndsWith)(node, 'evaluation') || readOperation(node) !== 'setMetrics')
|
|
66
|
+
return [];
|
|
67
|
+
const parameters = node.parameters;
|
|
68
|
+
if (!(0, column_ref_utils_1.isRecord)(parameters))
|
|
69
|
+
return [];
|
|
70
|
+
const expectedRaw = parameters.expectedAnswer;
|
|
71
|
+
return typeof expectedRaw === 'string' ? (0, column_ref_utils_1.extractJsonColumnRefs)(expectedRaw) : [];
|
|
72
|
+
}));
|
|
73
|
+
}
|
|
74
|
+
function actualColumnsFromSetOutputs(nodes) {
|
|
75
|
+
return (0, column_ref_utils_1.unique)(nodes.flatMap((node) => {
|
|
76
|
+
if (!(0, column_ref_utils_1.nodeTypeEndsWith)(node, 'evaluation') || readOperation(node) !== 'setOutputs')
|
|
77
|
+
return [];
|
|
78
|
+
const parameters = node.parameters;
|
|
79
|
+
if (!(0, column_ref_utils_1.isRecord)(parameters))
|
|
80
|
+
return [];
|
|
81
|
+
const outputs = parameters.outputs;
|
|
82
|
+
if (!(0, column_ref_utils_1.isRecord)(outputs))
|
|
83
|
+
return [];
|
|
84
|
+
const values = outputs.values;
|
|
85
|
+
if (!Array.isArray(values))
|
|
86
|
+
return [];
|
|
87
|
+
return values.flatMap((value) => {
|
|
88
|
+
if (!(0, column_ref_utils_1.isRecord)(value))
|
|
89
|
+
return [];
|
|
90
|
+
const outputName = value.outputName;
|
|
91
|
+
return typeof outputName === 'string' ? [outputName] : [];
|
|
92
|
+
});
|
|
93
|
+
}));
|
|
94
|
+
}
|
|
95
|
+
function pairsFromMetricNodes(nodes) {
|
|
96
|
+
const pairs = [];
|
|
97
|
+
for (const node of nodes) {
|
|
98
|
+
if (!(0, column_ref_utils_1.nodeTypeEndsWith)(node, 'evaluation') || readOperation(node) !== 'setMetrics')
|
|
99
|
+
continue;
|
|
100
|
+
const parameters = node.parameters;
|
|
101
|
+
if (!(0, column_ref_utils_1.isRecord)(parameters))
|
|
102
|
+
continue;
|
|
103
|
+
const expectedRaw = parameters.expectedAnswer;
|
|
104
|
+
const actualRaw = parameters.actualAnswer;
|
|
105
|
+
if (typeof expectedRaw !== 'string' || typeof actualRaw !== 'string')
|
|
106
|
+
continue;
|
|
107
|
+
const expectedRefs = (0, column_ref_utils_1.extractJsonColumnRefs)(expectedRaw).filter((ref) => ref.startsWith('expected'));
|
|
108
|
+
const actualRefs = (0, column_ref_utils_1.extractJsonColumnRefs)(actualRaw);
|
|
109
|
+
const len = Math.min(expectedRefs.length, actualRefs.length);
|
|
110
|
+
for (let i = 0; i < len; i++) {
|
|
111
|
+
pairs.push({ expectedColumn: expectedRefs[i], actualField: actualRefs[i] });
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
const map = new Map();
|
|
115
|
+
for (const p of pairs)
|
|
116
|
+
map.set(p.expectedColumn, p.actualField);
|
|
117
|
+
return [...map.entries()].map(([expectedColumn, actualField]) => ({
|
|
118
|
+
expectedColumn,
|
|
119
|
+
actualField,
|
|
120
|
+
}));
|
|
121
|
+
}
|
|
122
|
+
function firstReachableTargetNodeName(workflow, evalTriggerName) {
|
|
123
|
+
const reachableNodeNames = collectReachableNodeNames(workflow, evalTriggerName);
|
|
124
|
+
const reachableNameSet = new Set(reachableNodeNames);
|
|
125
|
+
const reachableNodes = (workflow.nodes ?? []).filter((node) => (0, column_ref_utils_1.nodeHasName)(node) && reachableNameSet.has(node.name));
|
|
126
|
+
const aiNodeNames = new Set((0, detect_ai_nodes_1.detectAiNodes)({ ...workflow, nodes: reachableNodes }).aiNodeNames);
|
|
127
|
+
return reachableNodeNames.find((name) => aiNodeNames.has(name));
|
|
128
|
+
}
|
|
129
|
+
function analyzeEvalDataRequirements(workflow) {
|
|
130
|
+
const evaluationTriggers = (workflow.nodes ?? []).filter((node) => (0, column_ref_utils_1.nodeHasName)(node) && (0, column_ref_utils_1.nodeTypeEndsWith)(node, 'evaluationTrigger'));
|
|
131
|
+
if (evaluationTriggers.length === 0) {
|
|
132
|
+
return { targets: [], reason: 'Workflow has no EvaluationTrigger nodes.' };
|
|
133
|
+
}
|
|
134
|
+
const targets = evaluationTriggers.flatMap((trigger) => {
|
|
135
|
+
const dataTableId = readDataTableId(trigger);
|
|
136
|
+
if (!dataTableId)
|
|
137
|
+
return [];
|
|
138
|
+
const reachableNames = new Set(collectReachableNodeNames(workflow, trigger.name));
|
|
139
|
+
const reachableNodes = (workflow.nodes ?? []).filter((node) => (0, column_ref_utils_1.nodeHasName)(node) && reachableNames.has(node.name));
|
|
140
|
+
const metricNodeNames = reachableNodes
|
|
141
|
+
.filter((node) => (0, column_ref_utils_1.nodeTypeEndsWith)(node, 'evaluation') && readOperation(node) === 'setMetrics')
|
|
142
|
+
.map((node) => node.name);
|
|
143
|
+
const targetNodeName = firstReachableTargetNodeName(workflow, trigger.name);
|
|
144
|
+
return [
|
|
145
|
+
{
|
|
146
|
+
dataTableId,
|
|
147
|
+
evaluationTriggerName: trigger.name,
|
|
148
|
+
targetNodeName,
|
|
149
|
+
inputColumns: targetNodeName
|
|
150
|
+
? (0, analyze_agent_input_columns_service_1.analyzeAgentInputColumns)(workflow, targetNodeName).inputColumns
|
|
151
|
+
: [],
|
|
152
|
+
expectedOutputColumns: expectedColumnsFromMetricNodes(reachableNodes),
|
|
153
|
+
actualOutputColumns: actualColumnsFromSetOutputs(reachableNodes),
|
|
154
|
+
metricNodeNames,
|
|
155
|
+
expectedToActualPairs: pairsFromMetricNodes(reachableNodes),
|
|
156
|
+
},
|
|
157
|
+
];
|
|
158
|
+
});
|
|
159
|
+
if (targets.length === 0) {
|
|
160
|
+
return {
|
|
161
|
+
targets: [],
|
|
162
|
+
reason: 'Workflow has EvaluationTrigger nodes, but none are wired to a DataTable id.',
|
|
163
|
+
};
|
|
164
|
+
}
|
|
165
|
+
return { targets };
|
|
166
|
+
}
|
|
167
|
+
//# sourceMappingURL=eval-data-requirements.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"eval-data-requirements.service.js","sourceRoot":"","sources":["../../../src/tools/evals/eval-data-requirements.service.ts"],"names":[],"mappings":";;AAqKA,kEAkDC;AArND,+FAAiF;AACjF,yDAO4B;AAC5B,uDAAkD;AAwBlD,SAAS,aAAa,CAAC,IAAkB;IACxC,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;IACnC,IAAI,CAAC,IAAA,2BAAQ,EAAC,UAAU,CAAC;QAAE,OAAO,SAAS,CAAC;IAC5C,MAAM,SAAS,GAAG,UAAU,CAAC,SAAS,CAAC;IACvC,OAAO,OAAO,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;AAC9D,CAAC;AAED,SAAS,eAAe,CAAC,IAAkB;IAC1C,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;IACnC,IAAI,CAAC,IAAA,2BAAQ,EAAC,UAAU,CAAC;QAAE,OAAO,SAAS,CAAC;IAC5C,MAAM,WAAW,GAAG,UAAU,CAAC,WAAW,CAAC;IAC3C,IAAI,OAAO,WAAW,KAAK,QAAQ;QAAE,OAAO,WAAW,CAAC;IACxD,IAAI,CAAC,IAAA,2BAAQ,EAAC,WAAW,CAAC;QAAE,OAAO,SAAS,CAAC;IAC7C,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC;IAChC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AAC1E,CAAC;AAED,SAAS,UAAU,CAAC,QAAsB,EAAE,UAAkB,EAAE,WAAoB;IACnF,MAAM,iBAAiB,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,CAAC;IAC7D,IAAI,CAAC,iBAAiB,IAAI,OAAO,iBAAiB,KAAK,QAAQ;QAAE,OAAO,EAAE,CAAC;IAC3E,MAAM,IAAI,GAAI,iBAA6C,CAAC,IAAI,CAAC;IACjE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;QAAE,OAAO,EAAE,CAAC;IACpC,MAAM,KAAK,GACV,WAAW,KAAK,SAAS;QACxB,CAAC,CAAC,IAAI;QACN,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAqB,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;IACjF,OAAO,IAAA,yBAAM,EACZ,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;QACtB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;YAAE,OAAO,EAAE,CAAC;QACpC,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,UAAU,EAAE,EAAE;YAClC,IAAI,CAAC,IAAA,2BAAQ,EAAC,UAAU,CAAC;gBAAE,OAAO,EAAE,CAAC;YACrC,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC;YAC7B,OAAO,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/C,CAAC,CAAC,CAAC;IACJ,CAAC,CAAC,CACF,CAAC;AACH,CAAC;AAED,SAAS,yBAAyB,CAAC,QAAsB,EAAE,SAAiB;IAC3E,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,MAAM,KAAK,GAAG,CAAC,SAAS,CAAC,CAAC;IAC1B,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACzB,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC;QAC9B,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC;YAAE,SAAS;QAC5C,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAClB,KAAK,MAAM,KAAK,IAAI,UAAU,CAAC,QAAQ,EAAE,OAAO,CAAC,EAAE,CAAC;YACnD,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;gBAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACzC,CAAC;IACF,CAAC;IACD,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IACvB,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC;AAClB,CAAC;AAED,SAAS,8BAA8B,CAAC,KAAqB;IAC5D,OAAO,IAAA,yBAAM,EACZ,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;QACtB,IAAI,CAAC,IAAA,mCAAgB,EAAC,IAAI,EAAE,YAAY,CAAC,IAAI,aAAa,CAAC,IAAI,CAAC,KAAK,YAAY;YAAE,OAAO,EAAE,CAAC;QAC7F,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;QACnC,IAAI,CAAC,IAAA,2BAAQ,EAAC,UAAU,CAAC;YAAE,OAAO,EAAE,CAAC;QACrC,MAAM,WAAW,GAAG,UAAU,CAAC,cAAc,CAAC;QAC9C,OAAO,OAAO,WAAW,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAA,wCAAqB,EAAC,WAAW,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAClF,CAAC,CAAC,CACF,CAAC;AACH,CAAC;AAED,SAAS,2BAA2B,CAAC,KAAqB;IACzD,OAAO,IAAA,yBAAM,EACZ,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;QACtB,IAAI,CAAC,IAAA,mCAAgB,EAAC,IAAI,EAAE,YAAY,CAAC,IAAI,aAAa,CAAC,IAAI,CAAC,KAAK,YAAY;YAAE,OAAO,EAAE,CAAC;QAC7F,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;QACnC,IAAI,CAAC,IAAA,2BAAQ,EAAC,UAAU,CAAC;YAAE,OAAO,EAAE,CAAC;QACrC,MAAM,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC;QACnC,IAAI,CAAC,IAAA,2BAAQ,EAAC,OAAO,CAAC;YAAE,OAAO,EAAE,CAAC;QAClC,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;QAC9B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;YAAE,OAAO,EAAE,CAAC;QACtC,OAAO,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;YAC/B,IAAI,CAAC,IAAA,2BAAQ,EAAC,KAAK,CAAC;gBAAE,OAAO,EAAE,CAAC;YAChC,MAAM,UAAU,GAAG,KAAK,CAAC,UAAU,CAAC;YACpC,OAAO,OAAO,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3D,CAAC,CAAC,CAAC;IACJ,CAAC,CAAC,CACF,CAAC;AACH,CAAC;AAED,SAAS,oBAAoB,CAC5B,KAAqB;IAErB,MAAM,KAAK,GAA2D,EAAE,CAAC;IACzE,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QAC1B,IAAI,CAAC,IAAA,mCAAgB,EAAC,IAAI,EAAE,YAAY,CAAC,IAAI,aAAa,CAAC,IAAI,CAAC,KAAK,YAAY;YAAE,SAAS;QAC5F,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;QACnC,IAAI,CAAC,IAAA,2BAAQ,EAAC,UAAU,CAAC;YAAE,SAAS;QACpC,MAAM,WAAW,GAAG,UAAU,CAAC,cAAc,CAAC;QAC9C,MAAM,SAAS,GAAG,UAAU,CAAC,YAAY,CAAC;QAC1C,IAAI,OAAO,WAAW,KAAK,QAAQ,IAAI,OAAO,SAAS,KAAK,QAAQ;YAAE,SAAS;QAC/E,MAAM,YAAY,GAAG,IAAA,wCAAqB,EAAC,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CACtE,GAAG,CAAC,UAAU,CAAC,UAAU,CAAC,CAC1B,CAAC;QACF,MAAM,UAAU,GAAG,IAAA,wCAAqB,EAAC,SAAS,CAAC,CAAC;QACpD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,MAAM,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC;QAC7D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;YAC9B,KAAK,CAAC,IAAI,CAAC,EAAE,cAAc,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAC7E,CAAC;IACF,CAAC;IAID,MAAM,GAAG,GAAG,IAAI,GAAG,EAAkB,CAAC;IACtC,KAAK,MAAM,CAAC,IAAI,KAAK;QAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC,WAAW,CAAC,CAAC;IAChE,OAAO,CAAC,GAAG,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,cAAc,EAAE,WAAW,CAAC,EAAE,EAAE,CAAC,CAAC;QACjE,cAAc;QACd,WAAW;KACX,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,4BAA4B,CACpC,QAAsB,EACtB,eAAuB;IAEvB,MAAM,kBAAkB,GAAG,yBAAyB,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAC;IAChF,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC,kBAAkB,CAAC,CAAC;IACrD,MAAM,cAAc,GAAG,CAAC,QAAQ,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,MAAM,CACnD,CAAC,IAAI,EAA2C,EAAE,CACjD,IAAA,8BAAW,EAAC,IAAI,CAAC,IAAI,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CACrD,CAAC;IACF,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,IAAA,+BAAa,EAAC,EAAE,GAAG,QAAQ,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC,CAAC,WAAW,CAAC,CAAC;IAE/F,OAAO,kBAAkB,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;AACjE,CAAC;AAED,SAAgB,2BAA2B,CAAC,QAAsB;IACjE,MAAM,kBAAkB,GAAG,CAAC,QAAQ,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,MAAM,CACvD,CAAC,IAAI,EAA2C,EAAE,CACjD,IAAA,8BAAW,EAAC,IAAI,CAAC,IAAI,IAAA,mCAAgB,EAAC,IAAI,EAAE,mBAAmB,CAAC,CACjE,CAAC;IACF,IAAI,kBAAkB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACrC,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,0CAA0C,EAAE,CAAC;IAC5E,CAAC;IAED,MAAM,OAAO,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QACtD,MAAM,WAAW,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;QAC7C,IAAI,CAAC,WAAW;YAAE,OAAO,EAAE,CAAC;QAE5B,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC,yBAAyB,CAAC,QAAQ,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;QAClF,MAAM,cAAc,GAAG,CAAC,QAAQ,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,MAAM,CACnD,CAAC,IAAI,EAA2C,EAAE,CACjD,IAAA,8BAAW,EAAC,IAAI,CAAC,IAAI,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CACnD,CAAC;QACF,MAAM,eAAe,GAAG,cAAc;aACpC,MAAM,CACN,CAAC,IAAI,EAAE,EAAE,CAAC,IAAA,mCAAgB,EAAC,IAAI,EAAE,YAAY,CAAC,IAAI,aAAa,CAAC,IAAI,CAAC,KAAK,YAAY,CACtF;aACA,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAE3B,MAAM,cAAc,GAAG,4BAA4B,CAAC,QAAQ,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;QAE5E,OAAO;YACN;gBACC,WAAW;gBACX,qBAAqB,EAAE,OAAO,CAAC,IAAI;gBACnC,cAAc;gBACd,YAAY,EAAE,cAAc;oBAC3B,CAAC,CAAC,IAAA,8DAAwB,EAAC,QAAQ,EAAE,cAAc,CAAC,CAAC,YAAY;oBACjE,CAAC,CAAC,EAAE;gBACL,qBAAqB,EAAE,8BAA8B,CAAC,cAAc,CAAC;gBACrE,mBAAmB,EAAE,2BAA2B,CAAC,cAAc,CAAC;gBAChE,eAAe;gBACf,qBAAqB,EAAE,oBAAoB,CAAC,cAAc,CAAC;aAC3D;SACD,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO;YACN,OAAO,EAAE,EAAE;YACX,MAAM,EAAE,6EAA6E;SACrF,CAAC;IACH,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,CAAC;AACpB,CAAC"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import type { WorkflowJSON } from '@n8n/workflow-sdk';
|
|
2
|
+
export declare const METRIC_IDS: readonly ["correctness", "relevance", "tool_use", "helpfulness"];
|
|
3
|
+
export type MetricId = (typeof METRIC_IDS)[number];
|
|
4
|
+
export interface MetricCatalogEntry {
|
|
5
|
+
id: MetricId;
|
|
6
|
+
name: string;
|
|
7
|
+
kind: 'llm-judge';
|
|
8
|
+
cannedMetricKey: MetricId;
|
|
9
|
+
description: string;
|
|
10
|
+
prompt: string;
|
|
11
|
+
defaultEnabled: boolean;
|
|
12
|
+
requiresExpected: boolean;
|
|
13
|
+
}
|
|
14
|
+
export declare const METRIC_CATALOG: {
|
|
15
|
+
correctness: {
|
|
16
|
+
id: "correctness";
|
|
17
|
+
name: string;
|
|
18
|
+
kind: "llm-judge";
|
|
19
|
+
cannedMetricKey: "correctness";
|
|
20
|
+
description: string;
|
|
21
|
+
prompt: string;
|
|
22
|
+
defaultEnabled: true;
|
|
23
|
+
requiresExpected: true;
|
|
24
|
+
};
|
|
25
|
+
relevance: {
|
|
26
|
+
id: "relevance";
|
|
27
|
+
name: string;
|
|
28
|
+
kind: "llm-judge";
|
|
29
|
+
cannedMetricKey: "relevance";
|
|
30
|
+
description: string;
|
|
31
|
+
prompt: string;
|
|
32
|
+
defaultEnabled: false;
|
|
33
|
+
requiresExpected: false;
|
|
34
|
+
};
|
|
35
|
+
tool_use: {
|
|
36
|
+
id: "tool_use";
|
|
37
|
+
name: string;
|
|
38
|
+
kind: "llm-judge";
|
|
39
|
+
cannedMetricKey: "tool_use";
|
|
40
|
+
description: string;
|
|
41
|
+
prompt: string;
|
|
42
|
+
defaultEnabled: false;
|
|
43
|
+
requiresExpected: false;
|
|
44
|
+
};
|
|
45
|
+
helpfulness: {
|
|
46
|
+
id: "helpfulness";
|
|
47
|
+
name: string;
|
|
48
|
+
kind: "llm-judge";
|
|
49
|
+
cannedMetricKey: "helpfulness";
|
|
50
|
+
description: string;
|
|
51
|
+
prompt: string;
|
|
52
|
+
defaultEnabled: false;
|
|
53
|
+
requiresExpected: false;
|
|
54
|
+
};
|
|
55
|
+
};
|
|
56
|
+
export declare function getMetricsByIds(ids: string[]): MetricCatalogEntry[];
|
|
57
|
+
export declare function proposeDefaultMetricIds(workflow: WorkflowJSON, agentNodeName: string): MetricId[];
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.METRIC_CATALOG = exports.METRIC_IDS = void 0;
|
|
4
|
+
exports.getMetricsByIds = getMetricsByIds;
|
|
5
|
+
exports.proposeDefaultMetricIds = proposeDefaultMetricIds;
|
|
6
|
+
const column_ref_utils_1 = require("./column-ref-utils");
|
|
7
|
+
exports.METRIC_IDS = ['correctness', 'relevance', 'tool_use', 'helpfulness'];
|
|
8
|
+
exports.METRIC_CATALOG = {
|
|
9
|
+
correctness: {
|
|
10
|
+
id: 'correctness',
|
|
11
|
+
name: 'Correctness',
|
|
12
|
+
kind: 'llm-judge',
|
|
13
|
+
cannedMetricKey: 'correctness',
|
|
14
|
+
description: 'Judge whether the workflow output matches the expected ground-truth response.',
|
|
15
|
+
prompt: 'Given the input and expected output, rate from 0 to 1 how correct the actual output is.',
|
|
16
|
+
defaultEnabled: true,
|
|
17
|
+
requiresExpected: true,
|
|
18
|
+
},
|
|
19
|
+
relevance: {
|
|
20
|
+
id: 'relevance',
|
|
21
|
+
name: 'Relevance',
|
|
22
|
+
kind: 'llm-judge',
|
|
23
|
+
cannedMetricKey: 'relevance',
|
|
24
|
+
description: 'Judge whether retrieved context is relevant to the user query (RAG).',
|
|
25
|
+
prompt: 'Rate from 0 to 1 how relevant the retrieved documents are to the user query.',
|
|
26
|
+
defaultEnabled: false,
|
|
27
|
+
requiresExpected: false,
|
|
28
|
+
},
|
|
29
|
+
tool_use: {
|
|
30
|
+
id: 'tool_use',
|
|
31
|
+
name: 'Tool use',
|
|
32
|
+
kind: 'llm-judge',
|
|
33
|
+
cannedMetricKey: 'tool_use',
|
|
34
|
+
description: 'Judge whether the agent selected and used the correct tools for the input.',
|
|
35
|
+
prompt: 'Rate from 0 to 1 how appropriate the tool selection and arguments were for the user query.',
|
|
36
|
+
defaultEnabled: false,
|
|
37
|
+
requiresExpected: false,
|
|
38
|
+
},
|
|
39
|
+
helpfulness: {
|
|
40
|
+
id: 'helpfulness',
|
|
41
|
+
name: 'Helpfulness',
|
|
42
|
+
kind: 'llm-judge',
|
|
43
|
+
cannedMetricKey: 'helpfulness',
|
|
44
|
+
description: 'Judge whether the agent response is helpful to the user.',
|
|
45
|
+
prompt: 'Rate from 0 to 1 how helpful the response is to the user query.',
|
|
46
|
+
defaultEnabled: false,
|
|
47
|
+
requiresExpected: false,
|
|
48
|
+
},
|
|
49
|
+
};
|
|
50
|
+
function isMetricId(id) {
|
|
51
|
+
return exports.METRIC_IDS.includes(id);
|
|
52
|
+
}
|
|
53
|
+
function getMetricsByIds(ids) {
|
|
54
|
+
return ids.filter(isMetricId).map((id) => exports.METRIC_CATALOG[id]);
|
|
55
|
+
}
|
|
56
|
+
function agentHasTools(workflow, agentNodeName) {
|
|
57
|
+
const connections = workflow.connections ?? {};
|
|
58
|
+
for (const sourceConnections of Object.values(connections)) {
|
|
59
|
+
if (!(0, column_ref_utils_1.isRecord)(sourceConnections))
|
|
60
|
+
continue;
|
|
61
|
+
const aiTool = sourceConnections.ai_tool;
|
|
62
|
+
if (!Array.isArray(aiTool))
|
|
63
|
+
continue;
|
|
64
|
+
for (const slot of aiTool) {
|
|
65
|
+
if (!Array.isArray(slot))
|
|
66
|
+
continue;
|
|
67
|
+
for (const conn of slot) {
|
|
68
|
+
if ((0, column_ref_utils_1.isRecord)(conn) && conn.node === agentNodeName)
|
|
69
|
+
return true;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
return false;
|
|
74
|
+
}
|
|
75
|
+
function proposeDefaultMetricIds(workflow, agentNodeName) {
|
|
76
|
+
const ids = ['correctness'];
|
|
77
|
+
if (agentHasTools(workflow, agentNodeName))
|
|
78
|
+
ids.push('tool_use');
|
|
79
|
+
return ids;
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=metric-catalog.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"metric-catalog.js","sourceRoot":"","sources":["../../../src/tools/evals/metric-catalog.ts"],"names":[],"mappings":";;;AAmEA,0CAEC;AAkBD,0DAIC;AAzFD,yDAA8C;AAEjC,QAAA,UAAU,GAAG,CAAC,aAAa,EAAE,WAAW,EAAE,UAAU,EAAE,aAAa,CAAU,CAAC;AAc9E,QAAA,cAAc,GAAG;IAC7B,WAAW,EAAE;QACZ,EAAE,EAAE,aAAa;QACjB,IAAI,EAAE,aAAa;QACnB,IAAI,EAAE,WAAW;QACjB,eAAe,EAAE,aAAa;QAC9B,WAAW,EAAE,+EAA+E;QAC5F,MAAM,EACL,yFAAyF;QAC1F,cAAc,EAAE,IAAI;QACpB,gBAAgB,EAAE,IAAI;KACtB;IACD,SAAS,EAAE;QACV,EAAE,EAAE,WAAW;QACf,IAAI,EAAE,WAAW;QACjB,IAAI,EAAE,WAAW;QACjB,eAAe,EAAE,WAAW;QAC5B,WAAW,EAAE,sEAAsE;QACnF,MAAM,EAAE,8EAA8E;QACtF,cAAc,EAAE,KAAK;QACrB,gBAAgB,EAAE,KAAK;KACvB;IACD,QAAQ,EAAE;QACT,EAAE,EAAE,UAAU;QACd,IAAI,EAAE,UAAU;QAChB,IAAI,EAAE,WAAW;QACjB,eAAe,EAAE,UAAU;QAC3B,WAAW,EAAE,4EAA4E;QACzF,MAAM,EACL,4FAA4F;QAC7F,cAAc,EAAE,KAAK;QACrB,gBAAgB,EAAE,KAAK;KACvB;IACD,WAAW,EAAE;QACZ,EAAE,EAAE,aAAa;QACjB,IAAI,EAAE,aAAa;QACnB,IAAI,EAAE,WAAW;QACjB,eAAe,EAAE,aAAa;QAC9B,WAAW,EAAE,0DAA0D;QACvE,MAAM,EAAE,iEAAiE;QACzE,cAAc,EAAE,KAAK;QACrB,gBAAgB,EAAE,KAAK;KACvB;CAC8C,CAAC;AAEjD,SAAS,UAAU,CAAC,EAAU;IAC7B,OAAQ,kBAAgC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AACvD,CAAC;AAED,SAAgB,eAAe,CAAC,GAAa;IAC5C,OAAO,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,sBAAc,CAAC,EAAE,CAAC,CAAC,CAAC;AAC/D,CAAC;AAED,SAAS,aAAa,CAAC,QAAsB,EAAE,aAAqB;IACnE,MAAM,WAAW,GAAG,QAAQ,CAAC,WAAW,IAAI,EAAE,CAAC;IAC/C,KAAK,MAAM,iBAAiB,IAAI,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC;QAC5D,IAAI,CAAC,IAAA,2BAAQ,EAAC,iBAAiB,CAAC;YAAE,SAAS;QAC3C,MAAM,MAAM,GAAG,iBAAiB,CAAC,OAAO,CAAC;QACzC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;YAAE,SAAS;QACrC,KAAK,MAAM,IAAI,IAAI,MAAM,EAAE,CAAC;YAC3B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;gBAAE,SAAS;YACnC,KAAK,MAAM,IAAI,IAAI,IAAI,EAAE,CAAC;gBACzB,IAAI,IAAA,2BAAQ,EAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,KAAK,aAAa;oBAAE,OAAO,IAAI,CAAC;YAChE,CAAC;QACF,CAAC;IACF,CAAC;IACD,OAAO,KAAK,CAAC;AACd,CAAC;AAED,SAAgB,uBAAuB,CAAC,QAAsB,EAAE,aAAqB;IACpF,MAAM,GAAG,GAAe,CAAC,aAAa,CAAC,CAAC;IACxC,IAAI,aAAa,CAAC,QAAQ,EAAE,aAAa,CAAC;QAAE,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACjE,OAAO,GAAG,CAAC;AACZ,CAAC"}
|
|
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.createToolsFromLocalMcpServer = createToolsFromLocalMcpServer;
|
|
4
4
|
const tools_1 = require("@mastra/core/tools");
|
|
5
5
|
const api_types_1 = require("@n8n/api-types");
|
|
6
|
+
const credential_1 = require("@n8n/mcp-browser/dist/tools/credential");
|
|
6
7
|
const nanoid_1 = require("nanoid");
|
|
7
8
|
const zod_1 = require("zod");
|
|
8
9
|
const zod_from_json_schema_v3_1 = require("zod-from-json-schema-v3");
|
|
@@ -115,7 +116,12 @@ function createToolsFromLocalMcpServer(server, logger) {
|
|
|
115
116
|
}
|
|
116
117
|
let inputSchema;
|
|
117
118
|
try {
|
|
118
|
-
|
|
119
|
+
if (toolName === 'browser_create_credential') {
|
|
120
|
+
inputSchema = credential_1.browserCreateCredentialSchema;
|
|
121
|
+
}
|
|
122
|
+
else {
|
|
123
|
+
inputSchema = (0, zod_from_json_schema_v3_1.convertJsonSchemaToZod)(mcpTool.inputSchema);
|
|
124
|
+
}
|
|
119
125
|
}
|
|
120
126
|
catch {
|
|
121
127
|
inputSchema = zod_1.z.record(zod_1.z.unknown());
|