feat(agents): consolidate eval-dataset-creator docs into one guide and close RAI gaps - #2578
Conversation
…d close RAI gaps - merge three doc templates into one sectioned eval guide (5 files/run to 3) - add RAI risk mapping plus a responsibility and safety metric family - add population_coverage, validation_status, generation_method to metadata - bound pair synthesis and refusal recording; realign eval expectations ♻️ - Generated by Copilot
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## main #2578 +/- ##
==========================================
+ Coverage 82.85% 82.91% +0.06%
==========================================
Files 166 152 -14
Lines 22508 22142 -366
Branches 29 0 -29
==========================================
- Hits 18648 18359 -289
+ Misses 3857 3783 -74
+ Partials 3 0 -3
Flags with carried forward coverage won't be shown. Click here to find out more. 🚀 New features to boost your workflow:
|
Eval Execution✅ Status: Passed — no merge-blocking failures (1 advisory assertion failure(s) present)
|
Katrien De Graeve (katriendg)
left a comment
There was a problem hiding this comment.
Thanks for consolidating the eval-dataset-creator docs and closing out the RAI gaps in one pass — the heading demotion, filename repointing, and RAI additions all check out cleanly against the diff.
One thing to fix before merge: the three new failure_modes entries in the rai-metadata-completeness expectation (evals/agent-behavior/expectations/eval-dataset-creator.expectations.yml, ~lines 102–106) start with an unquoted backtick, which is invalid YAML (backtick is a reserved indicator character). Confirmed with both PyYAML and js-yaml — the file fails to parse at those lines. This directory is currently excluded from Test-EvalSpec.ps1's validation glob so CI is green, but the file's own header says it feeds a future automated rewrite pass, so it's worth fixing now. Quoting or (better) rewording those three bullets to match the file's own verb-led convention resolves both this and a related Medium-severity style note in the review.
Approving so you can get some of these closed in the conversation, and merge.
- Reword failure_modes bullets to avoid leading backtick indicator - Block-quote signal scalars that begin with a backtick or contain a colon - File now parses cleanly under both PyYAML and js-yaml
- Patches high-severity quadratic CPU consumption in !!omap resolution - Clears all 6 high-severity findings reported by npm-audit
Dependency Review✅ No vulnerabilities or license issues or OpenSSF Scorecard issues found.OpenSSF Scorecard
Scanned Files
|
feat(agents): consolidate eval-dataset-creator docs into one guide and close RAI gaps
Description
The
Evaluation Dataset Creatoragent emitted 5 files per run: two dataset serializations plus three separate Markdown documents. This PR merged those three documents into a single sectioned{agent-name}-eval-guide.md, taking the run to 3 files while leaving the dataset dual-format output untouched. A Responsible AI review of the same agent surfaced six additive gaps in the same two files, so both bodies of work closed here together.The agent builds a measuring instrument. That shaped the Responsible AI half of this change: a gap here yields false assurance about some other system rather than an obviously wrong answer, so every remediation landed in the NIST AI RMF Measure function and every edit was additive.
Consolidation
## Output Artifactstree to onedata/evaluation/docs/{agent-name}-eval-guide.mdentry, replacing the three separate document filenames.<eval-guide-template>whose H2 sections are## Curation Notes,## Metric Selection, and## Tool Recommendations. Heading levels were demoted uniformly beneath the new guide H1 (former H1 to H2, H2 to H3, H3 to H4), preserving every subsection, table, and checklist.Responsible AI remediation
### Responsible AI Riskstable mapping each risk to the metric selected to detect it. A risk with no detecting metric is stated explicitly rather than dropped.#### Responsibility and Safety Metricstable (Fairness, Harmful Content, Groundedness under adversarial framing) with matching entries in the Metric Definitions Reference. The agent previously advertised Azure AI Foundry Risk/Safety metrics in its comparison table while offering no way to select one.metadata.population_coveragesits as a sibling ofdistribution, keyed by the populations named in the interview, and Question 6 now asks for distinct user populations rather than job titles alone. The generation rule states that population is its own axis and is never expressed as adifficultyvalue or adistributionkey.metadata.validation_status(ai-generated,expert-reviewed, ormixed, defaulting toai-generated) andmetadata.generation_methodwere added, a new Required Protocol item states that the dataset is provisional while the status isai-generated, and the guide's Domain Expert Review subsection now states that completing its checkboxes warrants updating the status.Eval spec
three-supporting-docstoconsolidated-eval-guideand rewrote its signal, pass criteria, failure modes, and contract reference to assert one guide carrying its three sections. Reverting to three separate files was retained as an explicit failure mode.persona-driven-tool-recommendationandoutput-path-under-data-evaluationfrom the retired filenames to the guide and its Tool Recommendations section.rai-metadata-completeness, asserting the three new metadata fields, with failure modes for each missing field, for an out-of-setvalidation_status, and for expressing population as a sixth difficulty value.Compatibility
The graded
difficultyenum and thedistributionkeys were deliberately left untouched.dataset-schema-conformancenames out-of-set difficulty values as an explicit failure mode, so adding afairnesscategory, the intuitive fix, would have failed the eval on contact. Its schema assertion also requires its listed fields "at minimum", so the three newmetadatakeys pass without an eval change. Every pre-existing expectation other than the three named above is byte-unchanged, and datasets already produced under the current contract stay valid.The new Required Protocol item was appended as item 12 rather than inserted, because
interview-driven-flow,dual-format-dataset-output, andphase-transition-announcementcite protocol items by ordinal incontract_ref.Related Issue(s)
Closes #2576
Type of Change
Select all that apply:
Code & Documentation:
Infrastructure & Configuration:
AI Artifacts:
hve-builderand addressed all actionable findings.github/instructions/*.instructions.md).github/prompts/*.prompt.md).github/agents/*.agent.md).github/skills/*/SKILL.md).github/hooks/*/*.json)evals/)Other:
.ps1,.sh,.py)Sample Prompts (for AI Artifact Contributions)
User Request:
"Create an evaluation dataset for my IT HelpDesk Bot."
Execution Flow:
The agent runs a four-phase structured interview one question at a time, gated on user confirmation of the summary before any artifact is generated. Phase 1 now captures Responsible AI risks with a stated downstream consumer and asks for distinct user populations rather than job titles alone. Phase 5 generates the Q&A pairs against the balanced distribution plus the new coverage, provenance, and synthesis rules. Phase 6 presents 5-8 representative pairs for review, returning to Phase 5 on a regeneration request. Phase 7 writes the consolidated guide and summarizes every artifact with its path.
Output Artifacts:
Three files per run under
data/evaluation/:The guide opens as follows:
Success Indicators:
The run reports exactly three artifact paths, all workspace-relative under
data/evaluation/. The guide carries all three H2 sections. The datasetmetadatablock carriespopulation_coverage,validation_status, andgeneration_method, whiledistributionstill holds exactly its five difficulty keys. Every risk named in the interview appears as a row in the Responsible AI Risks table.For detailed contribution requirements, see:
Testing
Automated validation:
npm run validate:localnpm run spell-checknpm run lint:md-linksnpm run lint:tablesnpm run lint:mdnpm run lint:frontmatternpm run lint:yamlnpm run lint:asset-docsnpm run lint:modelsnpm run docs:generate:checknpm run validate:docsdocs/changes)npm run ci:eval:lint:vallylint:tablesis the lane that reaches the changed agent file, because it enumerates withgit ls-files -- '*.md'; thelint:mdglob excludes.github/agents/**.Diff-based assessment:
distributionretains exactlyeasy,grounding_source_checks,hard,negative, andsafety, and that thedifficultyfield retains exactly those five permitted values.dataset-schema-conformance,distribution-floor,dual-format-dataset-output,interview-driven-flow,phase-transition-announcement, andno-source-modificationsare unchanged."notes": "optional-curation-notes"JSON schema example value and unrelated prose in a different skill.evals/agent-behavior/stimuli/eval-dataset-creator.ymlcarries no documentation assertion and therefore needed no update.Security analysis: no customer data, secrets, or credentials appear in the diff; no non-compliant language; no unintended files; all referenced paths exist.
Manual testing: not performed. The agent was not run end to end against a live interview.
Checklist
Required Checks
AI Artifact Contributions
hve-builderreview mode to review contributionhve-builderreviewRequired Local Checks
The following local-safe validation commands must pass before merging:
npm run validate:localnpm run validate:docs(N/A - nodocs/changes)npm run spell-checknpm run lint:md-linksSecurity Considerations
Additional Notes
The eval expectations file does not parse as strict YAML under either PyYAML or the repository's
powershell-yamlmodule. That is not a regression: the committed baseline onmainfails identically, and the backtick-leading sequence items introduced here match a convention already committed in four sibling expectation files. Separately,scripts/evals/Test-EvalSpec.ps1explicitly excludes/agent-behavior/expectations/from spec discovery andscripts/evals/Build-AgentBehaviorSpec.ps1reads onlystimuli/*.yml, so it is worth confirming which lane, if any, grades this file class.Follow-up Tasks
evals/agent-behavior/expectations/*.ymland whether the agent-to-expectations contract is graded anywhere, so future work states the correct validation ownership for this file class.metadatafields are populated rather than echoed as placeholders.docs/reference/README.md, which reproduces on a clean tree and is unrelated to this change.♻️ - Generated by Copilot