Skip to content

Add Vally skill-effectiveness experiments and Python test scenarios#383

Open
LarryOsterman wants to merge 6 commits into
mainfrom
larryo/split/vally-python-scenarios
Open

Add Vally skill-effectiveness experiments and Python test scenarios#383
LarryOsterman wants to merge 6 commits into
mainfrom
larryo/split/vally-python-scenarios

Conversation

@LarryOsterman

Copy link
Copy Markdown
Member

Split from #375 (5 of 5).

Adds the Vally skill-effectiveness experiment framework and Python test scenarios:

  • New scripts: run-skill-experiments.ps1, run-all-evals.ps1, generate-skill-experiments.ps1, compare-experiment.mjs
  • Standardized vally/ eval + experiment yaml and scenarios.yaml for ~40 Python skills
  • Shared Python grader tooling under tests/scenarios/_shared/
  • Updates to run-harness-by-language.ps1 and test dependency manifests

178 files under tests/ (excludes tests/harness/ and *-rust scenarios, covered by #380 and #381).

Split from #375: adds the Vally skill-effectiveness experiment framework
(run-skill-experiments.ps1, run-all-evals.ps1, generate-skill-experiments.ps1,
compare-experiment.mjs), standardized vally eval/experiment yaml and
scenarios.yaml for ~40 Python skills, shared Python grader tooling, and
harness runner script/dependency updates.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 9429ad33-6f31-4ec5-ba00-0f11b5afb82e
Copilot AI review requested due to automatic review settings July 15, 2026 17:29
@LarryOsterman
LarryOsterman requested a review from thegovind as a code owner July 15, 2026 17:29

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Adds a standardized Vally “skill effectiveness” experiment setup for Python skills under tests/scenarios/, including shared Python grader tooling and updated test-runner dependencies/ignores. This PR is part of the split from #375 and focuses on the Python scenario/eval content (not harness/CI).

Changes:

  • Adds shared Node-based graders for Python syntax + basic idiomatic checks under tests/scenarios/_shared/vally/tools/.
  • Introduces per-skill Vally eval.yaml + skill_effectiveness_experiment.yaml (and, for some, skill_effectiveness_eval.yaml) plus updates many scenarios.yaml model defaults.
  • Updates tests/package.json (Vally version + package manager metadata) and expands tests/.gitignore to ignore evaluation output folders.

Reviewed changes

Copilot reviewed 176 out of 178 changed files in this pull request and generated 6 comments.

Show a summary per file
File Description
tests/package.json Bumps @microsoft/vally and adds packageManager metadata for tests tooling.
tests/.gitignore Ignores additional eval output directories under tests/.
tests/scenarios/_shared/vally/tools/check-python-syntax.mjs New shared Python syntax validation grader (supports optional exclude patterns config).
tests/scenarios/_shared/vally/tools/check-python-idiomatic.mjs New shared heuristic Python “idiomatic” checks grader.
tests/scenarios/_shared/vally/azure-sdk-python-skill-evaluations.yaml Aggregates many Python skill evals into a single suite file.
tests/scenarios/agent-framework-azure-ai-py/vally/skill_effectiveness_experiment.yaml Adds skill-vs-baseline experiment definition for this skill.
tests/scenarios/agent-framework-azure-ai-py/vally/eval.yaml Adds Vally eval suite for this skill’s scenarios.
tests/scenarios/agent-framework-azure-ai-py/vally/skill_effectiveness_eval.yaml Adds the skill-effectiveness eval suite definition for this skill.
tests/scenarios/agent-framework-azure-ai-py/scenarios.yaml Sets scenario model config for this skill.
tests/scenarios/agent-framework-azure-ai-py/test-output.txt Adds a captured output artifact for this scenario directory.
tests/scenarios/azure-search-documents-py/vally/skill_effectiveness_experiment.yaml Adds skill-vs-baseline experiment definition for this skill.
tests/scenarios/azure-search-documents-py/vally/eval.yaml Adds Vally eval suite for this skill’s scenarios.
tests/scenarios/azure-search-documents-py/scenarios.yaml Updates scenario model config for this skill.
tests/scenarios/azure-eventgrid-py/vally/skill_effectiveness_experiment.yaml Adds skill-vs-baseline experiment definition for this skill.
tests/scenarios/azure-eventgrid-py/vally/eval.yaml Adds Vally eval suite for this skill’s scenarios.
tests/scenarios/azure-eventgrid-py/scenarios.yaml Updates scenario model config for this skill.
tests/scenarios/azure-messaging-webpubsubservice-py/vally/skill_effectiveness_experiment.yaml Adds skill-vs-baseline experiment definition for this skill.
tests/scenarios/azure-messaging-webpubsubservice-py/vally/eval.yaml Adds Vally eval suite for this skill’s scenarios.
tests/scenarios/azure-messaging-webpubsubservice-py/scenarios.yaml Updates scenario model config for this skill.
tests/scenarios/azure-monitor-opentelemetry-py/vally/skill_effectiveness_experiment.yaml Adds skill-vs-baseline experiment definition for this skill.
tests/scenarios/azure-monitor-opentelemetry-py/vally/eval.yaml Adds Vally eval suite for this skill’s scenarios.
tests/scenarios/azure-monitor-opentelemetry-py/scenarios.yaml Updates scenario model config for this skill.
tests/scenarios/pydantic-models-py/vally/syntax-check-config.json Adds per-scenario syntax-check exclusion config.
tests/scenarios/pydantic-models-py/vally/skill_effectiveness_experiment.yaml Adds skill-vs-baseline experiment definition for this skill.
tests/scenarios/pydantic-models-py/scenarios.yaml Updates scenario model config for this skill.
tests/scenarios/fastapi-router-py/vally/syntax-check-config.json Adds per-scenario syntax-check exclusion config.
tests/scenarios/fastapi-router-py/vally/skill_effectiveness_experiment.yaml Adds skill-vs-baseline experiment definition for this skill.
tests/scenarios/azure-storage-queue-py/vally/skill_effectiveness_experiment.yaml Adds skill-vs-baseline experiment definition for this skill.
tests/scenarios/azure-storage-queue-py/vally/eval.yaml Adds Vally eval suite for this skill’s scenarios.
tests/scenarios/azure-storage-queue-py/vally/skill_effectiveness_eval.yaml Adds the skill-effectiveness eval suite definition for this skill.
tests/scenarios/azure-storage-queue-py/scenarios.yaml Updates scenario model config for this skill.
tests/scenarios/m365-agents-py/vally/skill_effectiveness_experiment.yaml Adds skill-vs-baseline experiment definition for this skill.
tests/scenarios/m365-agents-py/vally/eval.yaml Adds Vally eval suite for this skill’s scenarios.
tests/scenarios/m365-agents-py/vally/skill_effectiveness_eval.yaml Adds the skill-effectiveness eval suite definition for this skill.
tests/scenarios/m365-agents-py/scenarios.yaml Updates scenario model config for this skill.
tests/scenarios/azure-ai-language-conversations-py/scenarios.yaml Adds scenario definitions and mock responses for this skill.
tests/scenarios/azure-ai-language-conversations-py/acceptance-criteria.md Expands/clarifies acceptance criteria with correct/incorrect examples.
Files not reviewed (1)
  • tests/pnpm-lock.yaml: Generated file

Comment thread tests/scenarios/agent-framework-azure-ai-py/test-output.txt Outdated
Comment thread tests/scenarios/azure-search-documents-py/vally/eval.yaml Outdated
Comment thread tests/scenarios/azure-monitor-opentelemetry-py/vally/eval.yaml Outdated
Comment thread tests/scenarios/azure-eventgrid-py/vally/eval.yaml Outdated
Comment thread tests/scenarios/azure-messaging-webpubsubservice-py/vally/eval.yaml Outdated
Comment thread tests/scenarios/_shared/vally/tools/check-python-idiomatic.mjs Outdated
@LarryOsterman

Copy link
Copy Markdown
Member Author

Split from #375 (see #375 for the full split plan). Do not merge #375 until this and the sibling split PRs (#379, #380, #381, #382, #383) are merged.

Copilot AI review requested due to automatic review settings July 15, 2026 19:21

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 176 out of 178 changed files in this pull request and generated 7 comments.

Files not reviewed (1)
  • tests/pnpm-lock.yaml: Generated file

Comment thread tests/scenarios/pydantic-models-py/vally/skill_effectiveness_eval.yaml Outdated
Comment thread tests/scenarios/pydantic-models-py/vally/eval.yaml Outdated
@@ -0,0 +1 @@
Error: Experiment config file not found: Q:\src\skills\tests\scenarios\agent-framework-azure-ai-py\skill_effectiveness_experiment.yaml
Comment on lines +23 to +26
- CRITICAL: Include explicit exception handling:
* Wrap client initialization and send/receive operations in try/except blocks
* Handle: ServiceBusError, EventHubError, OperationTimeoutError, AzureError
* Example: try: sender.send_batch(batch) except ServiceBusError as e: print(f'Error: {e}')
Comment on lines +23 to +26
- CRITICAL: Include explicit exception handling:
* Wrap client initialization and send/receive operations in try/except blocks
* Handle: ServiceBusError, EventHubError, OperationTimeoutError, AzureError
* Example: try: sender.send_batch(batch) except ServiceBusError as e: print(f'Error: {e}')
Comment on lines +23 to +26
- CRITICAL: Include explicit exception handling:
* Wrap client initialization and send/receive operations in try/except blocks
* Handle: ServiceBusError, EventHubError, OperationTimeoutError, AzureError
* Example: try: sender.send_batch(batch) except ServiceBusError as e: print(f'Error: {e}')
Comment on lines +23 to +26
- CRITICAL: Include explicit exception handling:
* Wrap client initialization and send/receive operations in try/except blocks
* Handle: ServiceBusError, EventHubError, OperationTimeoutError, AzureError
* Example: try: sender.send_batch(batch) except ServiceBusError as e: print(f'Error: {e}')
Copilot AI review requested due to automatic review settings July 15, 2026 21:25

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 176 out of 178 changed files in this pull request and generated 16 comments.

Files not reviewed (1)
  • tests/pnpm-lock.yaml: Generated file

Comment thread tests/run-skill-experiments.ps1 Outdated
# Run compare-experiment.mjs for the experiment directory
$compareScript = Join-Path $PSScriptRoot "compare-experiment.mjs"
if (Test-Path $compareScript) {
& node $compareScript $experimentResultsDir
Comment thread tests/run-all-evals.ps1 Outdated
@@ -0,0 +1 @@
Error: Experiment config file not found: Q:\src\skills\tests\scenarios\agent-framework-azure-ai-py\skill_effectiveness_experiment.yaml
Comment thread tests/scenarios/pydantic-models-py/vally/eval.yaml Outdated
Comment thread tests/scenarios/pydantic-models-py/vally/skill_effectiveness_eval.yaml Outdated
Comment on lines +24 to +26
* Wrap client initialization and send/receive operations in try/except blocks
* Handle: ServiceBusError, EventHubError, OperationTimeoutError, AzureError
* Example: try: sender.send_batch(batch) except ServiceBusError as e: print(f'Error: {e}')
Comment on lines +24 to +26
* Wrap client initialization and send/receive operations in try/except blocks
* Handle: ServiceBusError, EventHubError, OperationTimeoutError, AzureError
* Example: try: sender.send_batch(batch) except ServiceBusError as e: print(f'Error: {e}')
Comment thread tests/run-all-evals.ps1 Outdated
Comment on lines +252 to +260
$jsonlPath = Join-Path $runDir.FullName "results.jsonl"
if (Test-Path -LiteralPath $jsonlPath) {
$line = Get-Content -Path $jsonlPath |
Where-Object { $_ -match '"type"\s*:\s*"run-summary"' } |
Select-Object -Last 1
if ($line) {
try { $summary = $line | ConvertFrom-Json -Depth 20 } catch {}
}
}
}
}

function matchGlobPattern(filePath, pattern) {
".vally",
]);

function collectPythonFiles(dir, acc) {
Copilot AI review requested due to automatic review settings July 16, 2026 23:20
@LarryOsterman
LarryOsterman removed the request for review from Copilot July 16, 2026 23:20

@richardpark-msft richardpark-msft left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Some stuff I think is worth fixing:

  • Let's use a real python linter (pylint?). Our skills should produce clean code anyways.
  • Can you add in a README.md too? There's some handy little workflows in here, hard to discover without a small roadmap.

Comment thread tests/scenarios/_shared/vally/tools/check-python-idiomatic.mjs Outdated
Comment thread tests/scenarios/_shared/vally/tools/check-python-syntax.mjs
Comment thread tests/scenarios/agent-framework-azure-ai-py/vally/eval.yaml Outdated
Comment thread tests/scenarios/agent-framework-azure-ai-py/vally/skill_effectiveness_eval.yaml Outdated
Comment thread tests/scenarios/agent-framework-azure-ai-py/vally/skill_effectiveness_eval.yaml Outdated
Copilot AI review requested due to automatic review settings July 17, 2026 21:06

Copilot AI commented Jul 17, 2026

Copy link
Copy Markdown
Contributor

Pull request overview

Copilot reviewed 176 out of 178 changed files in this pull request and generated 16 comments....

Fixed in commit f7b82c6. Here's a summary of all changes made:

  • pydantic-models-py eval.yaml and skill_effectiveness_eval.yaml: Removed the duplicate syntax-check-config.json file mapping in the environment.files section.
  • azure-eventgrid-py/vally/skill_effectiveness_eval.yaml: Replaced Service Bus/Event Hubs exception types (ServiceBusError, EventHubError, OperationTimeoutError) and sender.send_batch example with correct Event Grid exceptions (HttpResponseError, AzureError, Exception) and client.send(...) example.
  • azure-messaging-webpubsubservice-py/vally/skill_effectiveness_eval.yaml: Same fix — replaced Service Bus exceptions with Web PubSub-appropriate exceptions and client.send_to_all(...) example.
  • azure-monitor-opentelemetry-py/vally/eval.yaml and skill_effectiveness_eval.yaml: Changed the explicit_connection_string stimulus from asking for a hardcoded literal to asking for an environment-provided value, aligning the prompt with the rubric's credential security requirement. Also corrected the one_line_setup exception example from client.query_workspace(...) to configure_azure_monitor().
  • check-python-idiomatic.mjs: Changed tab detection from text.includes("\t") (flags any tab in the file) to /^\t|^ *\t/m.test(text) (flags only tabs in leading whitespace), avoiding false positives on separator = "\t" string literals.
  • run-all-evals.ps1: Three fixes: (1) replaced npx vally with pnpm --dir $PSScriptRoot exec vally to use the pinned Vally version from the lockfile; (2) guarded $runDir discovery behind $exitCode -eq 0 so a failed run cannot surface a stale previous result; (3) changed summary lookup from scanning results.jsonl for a run-summary type line to reading run-summary.jsonl directly.
  • run-skill-experiments.ps1: Changed -Compare to invoke compare-experiment.mjs once per $result.ExperimentDir (the per-skill variant directory) instead of once with $experimentResultsDir (the batch root).

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 175 out of 177 changed files in this pull request and generated 8 comments.

Files not reviewed (1)
  • tests/pnpm-lock.yaml: Generated file

Comment on lines +1 to +2
Running experiment 'azure-monitor-ingestion-py-skill-experiment'
Output: Q:\src\skills\tests\scenarios\azure-monitor-ingestion-py\vally\vally-experiment-results\2026-06-30T23-35-17-490Z
Comment on lines +1 to +2
Running experiment 'azure-monitor-ingestion-py-skill-experiment'
Output: Q:\src\skills\tests\scenarios\azure-monitor-ingestion-py\vally\vally-experiment-results\2026-06-30T23-40-22-287Z
Comment thread tests/run-skill-experiments.ps1 Outdated
Comment thread tests/run-all-evals.ps1 Outdated
Comment on lines +23 to +26
- CRITICAL: Include explicit exception handling:
* Wrap client initialization and send/receive operations in try/except blocks
* Handle: ServiceBusError, EventHubError, OperationTimeoutError, AzureError
* Example: try: sender.send_batch(batch) except ServiceBusError as e: print(f'Error: {e}')
Comment on lines +23 to +26
- CRITICAL: Include explicit exception handling:
* Wrap client initialization and send/receive operations in try/except blocks
* Handle: ServiceBusError, EventHubError, OperationTimeoutError, AzureError
* Example: try: sender.send_batch(batch) except ServiceBusError as e: print(f'Error: {e}')
Comment on lines +23 to +26
- Return the final answer as Python code only.
- CRITICAL: Include explicit exception handling:
* Wrap client initialization and query/ingestion operations in try/except blocks
* Handle: ServiceError, HttpResponseError, ValidationError, AzureError
Comment on lines +23 to +26
- Return the final answer as Python code only.
- CRITICAL: Include explicit exception handling:
* Wrap client initialization and query/ingestion operations in try/except blocks
* Handle: ServiceError, HttpResponseError, ValidationError, AzureError
Copilot AI review requested due to automatic review settings July 20, 2026 22:30
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants