Add support for vally - #3163
Conversation
- Update agentic-workflow components - Add initial template for pr-vally-eval - Fix namespace in PromptDataStore - Update launchSettings in VallyEvaluator
* Rename environment back to development. * Install vally-cli
* Add additional eval files if available.
* Fetch more history.
|
Azure Pipelines: Successfully started running 1 pipeline(s). There may be pipelines that require an authorized user to comment /azp run to run. |
There was a problem hiding this comment.
Pull request overview
Adds first-class support for running vally evaluations against Azure MCP tools by introducing a Vally evaluation generator (based on e2eTestPrompts.md + build_info.json), wiring it into a new GitHub Actions workflow, and documenting how contributors author/run eval specs.
Changes:
- Introduces
eng/tools/VallyEvaluatorto generateeval.yamlspecs per tool namespace and supporting YAML/JSON serialization models. - Adds a PR-triggered GitHub Actions workflow to build the server, generate evals, run
vally eval, and publishvally-resultsartifacts. - Adds contributor documentation and baseline configuration (
.vally.yaml) plus an initial AppConfig eval spec.
Reviewed changes
Copilot reviewed 38 out of 39 changed files in this pull request and generated 9 comments.
Show a summary per file
| File | Description |
|---|---|
| tools/Azure.Mcp.Tools.AppConfig/tests/eval.yaml | Adds initial vally eval spec for App Configuration prompts. |
| eng/tools/VallyEvaluator/tests/VallyUtilitiesTests.cs | Adds unit test coverage for placeholder replacement utility. |
| eng/tools/VallyEvaluator/tests/VallyEvaluator.Tests.csproj | New test project for VallyEvaluator utilities. |
| eng/tools/VallyEvaluator/src/VallyYamlStaticContext.cs | YAML static context registration for source-generated YAML serialization. |
| eng/tools/VallyEvaluator/src/VallyUtilities.cs | Implements YAML serialization and eval spec generation helpers. |
| eng/tools/VallyEvaluator/src/VallyJsonContext.cs | Source-gen JSON context for reading build info metadata. |
| eng/tools/VallyEvaluator/src/VallyEvaluator.csproj | New VallyEvaluator tool project + dependencies. |
| eng/tools/VallyEvaluator/src/RunConfiguration.cs | Adds configuration model for the evaluator tool CLI binding. |
| eng/tools/VallyEvaluator/src/Resources/eval.template.yaml | Provides a starter YAML template for eval specs. |
| eng/tools/VallyEvaluator/src/Resources/eval.instructions.md | Adds vally-run instructions injected into AGENTS.md during workflow. |
| eng/tools/VallyEvaluator/src/Properties/launchSettings.json | Adds launch profiles for running the evaluator locally. |
| eng/tools/VallyEvaluator/src/Program.cs | Implements CLI entrypoint to generate per-namespace eval specs. |
| eng/tools/VallyEvaluator/src/Models/StimulusGraderConfig.cs | Adds models for vally grader config serialization. |
| eng/tools/VallyEvaluator/src/Models/Stimulus.cs | Adds model for vally stimulus entries. |
| eng/tools/VallyEvaluator/src/Models/Evaluation.cs | Adds model for vally evaluation spec root object. |
| eng/tools/VallyEvaluator/src/Models/BuildInfoModels.cs | Adds models matching build_info.json structure. |
| eng/tools/VallyEvaluator/src/BuildInfo.cs | Adds build-info loader using source-generated JSON context. |
| eng/tools/Tools.sln | Adds new tool projects to the tools solution and updates VS metadata. |
| eng/tools/McpToolEvaluator.Core/tests/PromptParserTests.cs | Updates test namespace to match the new core evaluator library. |
| eng/tools/McpToolEvaluator.Core/tests/McpToolEvaluator.Core.Tests.csproj | New test project for prompt parsing/datastore. |
| eng/tools/McpToolEvaluator.Core/src/Utilities.cs | Adds repo-root discovery utility for tools. |
| eng/tools/McpToolEvaluator.Core/src/PromptParser.cs | Moves/renames prompt parsing into shared core library and makes it public. |
| eng/tools/McpToolEvaluator.Core/src/PromptDatastore.cs | Adds prompt datastore grouping prompts by namespace. |
| eng/tools/McpToolEvaluator.Core/src/Models/TestPrompt.cs | Introduces shared TestPrompt model for evaluators/testers. |
| eng/tools/McpToolEvaluator.Core/src/McpToolEvaluator.Core.csproj | New shared evaluator core library project. |
| eng/tools/CopilotCliTester/src/Program.cs | Updates CopilotCliTester to use the new shared evaluator core types. |
| eng/tools/CopilotCliTester/src/Models/TestPrompt.cs | Removes now-duplicated local TestPrompt model. |
| eng/tools/CopilotCliTester/src/Models/JsonContext.cs | Updates JSON source-gen context to reference shared TestPrompt. |
| eng/tools/CopilotCliTester/src/CopilotCliTester.csproj | Adds project reference to shared evaluator core library. |
| eng/scripts/Invoke-VallyEvalTests.ps1 | Adds script to run vally evals using build_info + generated evals. |
| docs/testing-with-vally.md | Adds contributor doc for authoring and running vally evaluations. |
| Directory.Packages.props | Adds central package versions needed by VallyEvaluator (binder/commandline + YAML generator/analyzers). |
| CONTRIBUTING.md | Links new vally testing documentation from contributing guide. |
| AGENTS.md | Adds guidance about vally runs (assume az login, avoid subscription_list). |
| .vally.yaml | Adds repo-level vally configuration for environments and suites. |
| .gitignore | Ignores .vscode/ and vally-results/ output. |
| .github/workflows/vally-eval.yml | Adds workflow to generate and run vally evals on tool PR changes and upload artifacts. |
| .github/aw/actions-lock.json | Updates gh-aw firewall container pins and adds GitHub MCP server image pin. |
| .github/agents/agentic-workflows.agent.md | Updates referenced gh-aw documentation links to newer version. |
Comments suppressed due to low confidence (1)
.vally.yaml:27
- The suite entries for generated evals reference
.work/evals/..., but the evaluator + workflow place them under.work/vally/evals/.... As written,vally suite basicwon’t include the generated evals.
evals:
- ".work/evals/appconfig/"
- ".work/evals/storage/"
- ".work/evals/keyvault/"
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
| ./eng/scripts/Invoke-VallyEvalTests.ps1 -BuildInfoPath $buildInfo -WorkDirectory $workingDirectory -EvalsDirectory $evalsDirectory -OutputPath $outputPath -NumberOfRuns $numberOfRuns -IsDebug:$isDebug | ||
| shell: pwsh | ||
| env: | ||
| COPILOT_GITHUB_TOKEN: ${{ secrets.COPILOT_GITHUB_TOKEN }} |
There was a problem hiding this comment.
is this used in PR flows or internal CI flows ?
There was a problem hiding this comment.
That's for our internal testing. It won't exist in our actual PR runs but if you want to test it locally, you set-up in your repo.
| // Copyright (c) Microsoft Corporation. | ||
| // Licensed under the MIT License. | ||
|
|
||
| namespace VallyEvaluator.Models; |
There was a problem hiding this comment.
QQ: Should this be in TS not C#? If it's in TS, it can use the actual vally schema directly rather than cloning the stimulus structures in C#. That would eliminate some fragility associated with the language change.
There was a problem hiding this comment.
Yeah. I had thought of that, too. My strengths doesn't lie in TS and we had existing logic that parsed the e2etestprompts in an existing c# tool, so I went with that as the quickest option.
I have no qualms with re-writing this work with the vally-sdk though.
What does this PR do?
GitHub issue number?
Fixes #2848
Pre-merge Checklist
servers/Azure.Mcp.Server/README.mdand/orservers/Fabric.Mcp.Server/README.mddocumentationREADME.mdchanges running the script./eng/scripts/Process-PackageReadMe.ps1. See Package READMEToolDescriptionEvaluatorand obtained a score of0.4or more and a top 3 ranking for all related test promptsconsolidated-tools.jsonbreaking-changelabelservers/Azure.Mcp.Server/docs/azmcp-commands.md./eng/scripts/Update-AzCommandsMetadata.ps1to update tool metadata inazmcp-commands.md(required for CI)servers/Azure.Mcp.Server/docs/e2eTestPrompts.mdcrypto mining, spam, data exfiltration, etc.)/azp run mcp - pullrequest - liveto run Live Test Pipeline