mirror of
https://github.com/dotnet/skills.git
synced 2026-09-20 09:49:54 +08:00
78054c1161
* Make Vally the sole LLM eval engine, retiring skill-validator evaluate Collapses the parallel skill-validator + Vally eval pipeline into a single Vally-only path while preserving every capability skill-validator provided: PR gate, PR comment, dotnet/skills-data historical push, and the dashboard. The skill-validator `check` linter is retained (skill-check.yml) pending microsoft/vally #463. - evaluation.yml: delete build-validator and the skill-validator `evaluate` job; single `evaluate:` job now uses vally-evaluation.yml. Forward the COPILOT_PAT_0..9 pool onto it (from #911) so the reusable workflow's token gate is satisfied. Rewire comment-on-pr / report-status / publish-* / deploy-dashboard onto `evaluate` and vally-results-* artifacts. - vally-evaluation.yml: pin @microsoft/vally-cli@0.9.0; keep the #911 prepare guard; write the generated per-plugin experiment to $GITHUB_WORKSPACE so relative eval globs resolve. - adapt.mjs: reconcile #887's runCompareWithRetry + conclusive/unmatched hardening with the consolidation helpers (nonActivation, compareByStim, roleToDashboard, etc.). Add consolidate.mjs and gen-experiment.mjs. - build-replay-sessions.ps1: read Vally executor-session-logs/events.jsonl instead of skill-validator session output. - Rename all tests/*/*/eval.vally.yaml to eval.yaml (Vally format is now the only eval format); author Vally evals for the four skills that lacked one. - CONTRIBUTING.md + InvestigatingResults: point contributors at the Vally harness; drop non-public links. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Fix setup-local-sdk eval for Vally schema The hand-authored setup-local-sdk eval used skill-validator grader/environment schema that Vally rejects at validation (no stimuli executed): - file-contains/file-not-contains graders require 'value:' not 'substring:' (output-contains correctly keeps 'substring:'). - environment.files entries require 'src:'/'dest:' (copy a fixture) rather than inline 'path:'/'content:'. Moved the global.json body into fixtures/global.json. Verified with 'vally lint --eval-spec' (0 errors) across all 97 eval.yaml. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Fix markdownlint violations in migration docs Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Address PR review feedback on eval migration - Consolidate run-vally-evals.sh into a single neutral entrypoint eng/run-skill-evals.sh (deletes the thin wrapper; adapt.mjs stays in eng/vally-adapter/ since CI invokes it directly) - Rename reusable workflow vally-evaluation.yml -> evaluation-run.yml and update all references/self-trigger regexes - Rename local output dir vally-results -> eval-results - Bake prerequisite preflight (Node 20+, GITHUB_TOKEN/gh) into the runner - Simplify CONTRIBUTING "Running tests locally" prerequisites - Scrub harness name from consumer-facing surfaces Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Reinstate overfitting detection under the Vally harness Overfitting detection previously ran inside skill-validator's `evaluate` command, which the Vally migration replaced, so it silently stopped running. Reinstate it as a standalone step wired into the Vally pipeline: - Add `skill-validator overfitting` command that discovers skills, parses each eval.yaml, runs the existing OverfittingJudge, and emits [{plugin, skill, overfittingResult}] JSON (per-skill failures non-fatal, bounded parallelism). - Add a Vally-format parser bridge (ParseEvalConfigFlexible) so the judge handles the current stimuli/graders eval.yaml format; the legacy scenarios-only parser rejected all 98 evals, so the judge never ran. - adapt.mjs: merge overfitting results onto each verdict via --overfitting <file> (keyed by plugin/skill); output is byte-identical when the flag is absent. - evaluation-run.yml: build skill-validator (shared cache with check), run the judge per leg reading GITHUB_TOKEN, and pass --overfitting to adapt.mjs so the dashboard/skills-data consume it unchanged. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Reconcile #919 Vally eval configs into the sole eval.yaml convention PR #919 landed on main adding fresh Vally specs for three coverage-gap skills (setup-local-sdk, convert-blazor-server-to-webapp, dotnet-webapi) under the interim eval.vally.yaml filename. This branch collapses to a single Vally spec named eval.yaml, so the merge left each skill with both my migrated eval.yaml and #919's newer eval.vally.yaml (a git-clean but semantic duplicate the pipeline would not discover). Adopt #919's reviewed Vally content as the canonical eval.yaml for all three skills and drop the redundant eval.vally.yaml files, preserving the 'sole eval.yaml, zero eval.vally.yaml' invariant. Content is byte-identical to #919's blobs (b14121c6/47d43823/18a9362f), which already passed vally-evaluate on main. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --------- Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
87 lines
4.1 KiB
YAML
87 lines
4.1 KiB
YAML
name: exp-simd-vectorization
|
||
description: Evaluates the dotnet-experimental/exp-simd-vectorization skill
|
||
type: capability
|
||
config:
|
||
timeout: 3m
|
||
stimuli:
|
||
- name: Optimize manual min/max with TensorPrimitives
|
||
prompt: This .NET 10 project has a method that finds the minimum and maximum values in a float array. It's used in a
|
||
real-time sensor monitoring system to compute value ranges over sliding windows of 10K–100K readings. Please
|
||
optimize FindMinMax for maximum throughput.
|
||
environment:
|
||
files:
|
||
- src: fixtures/simd-tensor-primitives-minmax.cs
|
||
dest: RangeCalculator.cs
|
||
graders:
|
||
- type: exit-success
|
||
- type: prompt
|
||
rubric:
|
||
- Identifies that finding min and max of a float span is already covered by TensorPrimitives.Min and
|
||
TensorPrimitives.Max
|
||
- Replaces the scalar loop with TensorPrimitives.Min/Max or equivalent framework API — not manual SIMD
|
||
- Does not introduce Vector128/Vector256/Vector512 intrinsics for operations already optimized by TensorPrimitives
|
||
- name: Optimize manual product with TensorPrimitives
|
||
prompt: This .NET 10 project computes the product of all elements in a float array for probability calculations. Arrays
|
||
are 100-1000 elements. Please optimize Product for maximum throughput.
|
||
environment:
|
||
files:
|
||
- src: fixtures/simd-tensor-primitives-product.cs
|
||
dest: MathOps.cs
|
||
graders:
|
||
- type: exit-success
|
||
- type: prompt
|
||
rubric:
|
||
- Identifies that aggregate product is already covered by TensorPrimitives.Product
|
||
- Replaces the scalar loop with TensorPrimitives.Product — not manual SIMD
|
||
- Does not introduce Vector128/Vector256/Vector512 intrinsics for an operation already optimized by
|
||
TensorPrimitives
|
||
- name: No optimization opportunity — dictionary-based lookup service
|
||
prompt: This .NET 10 project is a product catalog lookup service that maps product codes to categories using
|
||
dictionaries. The development team suspects it could benefit from SIMD optimization. Please analyze and optimize
|
||
for maximum throughput.
|
||
environment:
|
||
files:
|
||
- src: fixtures/simd-no-opportunity-catalog.cs
|
||
dest: ProductCatalog.cs
|
||
graders:
|
||
- type: exit-success
|
||
- type: prompt
|
||
rubric:
|
||
- Correctly identifies that this code has no meaningful SIMD optimization opportunity
|
||
- Explains why SIMD is not applicable (dictionary lookups, hash-based operations, small string keys, branching
|
||
logic)
|
||
- Does not introduce unnecessary SIMD code that adds complexity without benefit
|
||
- name: Optimize int array conditional increment with SIMD
|
||
prompt: This .NET 10 project conditionally increments each element of an int array based on a threshold for counter
|
||
updates. Arrays are 100K+ elements. Please optimize ConditionalIncrement.IncrementAbove for maximum throughput.
|
||
environment:
|
||
files:
|
||
- src: fixtures/simd-conditional-increment.cs
|
||
dest: ConditionalIncrement.cs
|
||
graders:
|
||
- type: output-contains
|
||
config:
|
||
substring: Vector
|
||
- type: exit-success
|
||
- type: prompt
|
||
rubric:
|
||
- Introduces Vector128/Vector256/Vector512 with GreaterThan comparison mask and ConditionalSelect or masked Add
|
||
for conditional increment
|
||
- Preserves scalar fallback for trailing elements or non-accelerated hardware
|
||
- name: Optimize byte buffer bit reversal with SIMD
|
||
prompt: This .NET 10 project reverses the bit order of each byte in a buffer for serial protocol decoding. Buffers are
|
||
64KB+. Please optimize BitReverser.ReverseInPlace for maximum throughput.
|
||
environment:
|
||
files:
|
||
- src: fixtures/simd-bit-reverser.cs
|
||
dest: BitReverser.cs
|
||
graders:
|
||
- type: output-contains
|
||
config:
|
||
substring: Vector
|
||
- type: exit-success
|
||
- type: prompt
|
||
rubric:
|
||
- Introduces Vector128/Vector256/Vector512 with nibble-based Shuffle lookup tables for parallel bit reversal
|
||
- Preserves scalar fallback for trailing elements or non-accelerated hardware
|