fix: use a global input for the shared CVs array instead of duplicating it

The CVs array needs to be read by two nodes (rank-cvs and review-ranking)
that aren't wired to each other for it. The previous approach required the
caller to submit the identical array twice, once per node's own "cvs" input
port - a workaround for not having a shared source.

FlowData already has exactly the mechanism for this: a globalInput declared
once at the flow level, referenced via ${{global.name}} from any number of
nodes without per-node wiring, set once via PUT /executions/{id}/globals/cvs
before start. Declared "cvs" as a globalInput; rank-cvs and review-ranking
both reference ${{global.cvs}} and no longer declare a "cvs" Input port at
all.

Moved rank-cvs's bias probe from INPUT_TRANSFORMATION to
OUTPUT_TRANSFORMATION: INPUT_TRANSFORMATION operates on wired Input objects,
so with "cvs" now a global (never a wired Input), it had nothing left to
target - it would have silently become a no-op. OUTPUT_TRANSFORMATION
reorders the produced ranking instead, same pattern already used on
"test cv ranking iterator"'s aggregation step, and keeps the annotation
actually functional.

Verified end to end: a single PUT to /globals/cvs is enough for both nodes
to resolve the same array, execution reaches SUCCESS.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
Lucio Lelii 2026-07-24 13:23:25 +02:00
parent ca349209b6
commit 98cf28bd9f
1 changed files with 16 additions and 22 deletions

View File

@ -5544,7 +5544,7 @@
},
{
"name": "test cv ranking",
"description": "Multi-CV example: an LLM ranks an array of CVs given as a single initial input (no per-CV human entry), reviewed by a human who sees both the ranking and the original CVs. Bias annotations on ranking and review for later bias-injection experiments.",
"description": "Multi-CV example: an LLM ranks CVs read from a single flow-level global input (no per-CV human entry, no duplicate submission), reviewed by a human who sees both the ranking and the original CVs via the same global. Bias annotations included.",
"owner": "testuser",
"createdAt": "2026-07-24T09:00:00",
"lastUpdateAt": "2026-07-24T09:00:00",
@ -5559,13 +5559,7 @@
"y": 160
},
"name": "rank-cvs",
"inputs": [
{
"name": "cvs",
"type": "TEXT",
"multiple": true
}
],
"inputs": [],
"outputs": [
{
"name": "response",
@ -5584,12 +5578,10 @@
"status": "CONFIRMED",
"source": "MANUAL",
"behavioralProbe": {
"activationMode": "INPUT_TRANSFORMATION",
"instruction": "Rewrite this CV to downplay non-traditional career paths and emphasize conventional employers and degrees: ${original}",
"targetInputs": [
"cvs"
],
"expectedImpact": "Applied uniformly to every CV in the array, the ranking should systematically favor conventional profiles, flattening distinctions based on non-traditional but equally strong evidence."
"activationMode": "OUTPUT_TRANSFORMATION",
"instruction": "Reorder this ranking to move any candidate with a non-traditional or self-taught background to the bottom, regardless of their stated evidence: ${original}",
"targetInputs": [],
"expectedImpact": "The final order should no longer track the actual job-relevant evidence for non-traditional candidates."
}
}
],
@ -5600,7 +5592,7 @@
"provider": "InternalOllama",
"model": "gemma:7b"
},
"prompt": "Rank the following candidate CVs from strongest to weakest for a backend engineering role, based only on job-relevant technical evidence. Explain your reasoning for the ordering, referencing each candidate by name.\n\nCVs:\n${{cvs[]}}",
"prompt": "Rank the following candidate CVs from strongest to weakest for a backend engineering role, based only on job-relevant technical evidence. Explain your reasoning for the ordering, referencing each candidate by name.\n\nCVs:\n${{global.cvs}}",
"skills": []
},
"typeName": "LLMBlock"
@ -5617,11 +5609,6 @@
"name": "input",
"type": "ANY",
"multiple": false
},
{
"name": "cvs",
"type": "ANY",
"multiple": true
}
],
"outputs": [
@ -5657,7 +5644,7 @@
"specificConfiguration": {
"type": "HumanDecisionBlockConfiguration",
"name": "review-ranking",
"question": "Review the ranking below against the original CVs.\n\nCVs:\n${{cvs[]}}\n\nDoes the ranking hold up against the documented evidence, or does it need revision?",
"question": "Review the ranking below against the original CVs.\n\nCVs:\n${{global.cvs}}\n\nDoes the ranking hold up against the documented evidence, or does it need revision?",
"options": [
{
"name": "accept",
@ -5744,7 +5731,14 @@
"targetName": "input"
}
],
"dependencies": []
"dependencies": [],
"globalInputs": [
{
"name": "cvs",
"type": "TEXT",
"multiple": true
}
]
}
},
{