--- name: sdk-ai-bot-run-evaluation license: MIT metadata: version: "1.0.0" distribution: local description: 'Run Azure SDK QA bot evaluations on curated datasets locally, including a single test case. WHEN: "run evaluation", "run eval", "evaluate the bot", "run perf evaluation", "run basic evaluation", "run a single test case", "evaluate one question", "run all scenarios", "score the bot", "run evals locally". DO NOT USE FOR: preparing or uploading datasets, pipeline troubleshooting, knowledge-graph indexing.' compatibility: "local azure-sdk-tools clone, python 3.12 venv, az login, bot /completion endpoint" --- # Run QA Bot Evaluation Run the Azure SDK QA bot evaluation locally with `evals_run.py` in the package `tools/sdk-ai-bots/azure-sdk-qa-bot-evaluation`. It calls the bot `/completion` endpoint concurrently to collect answers, then grades them with the Foundry builtin LLM evaluators. Run all commands from `tools/sdk-ai-bots/azure-sdk-qa-bot-evaluation` with the package `.venv` active and `az login` done. See [running evaluations](references/running-evaluations.md) for flags, the bot endpoint options, single-case and all-scenario recipes, and how to read results. ## Triggers USE FOR: run an evaluation on a curated dataset (basic or perf); run a single scenario; run all scenarios; run a single test case; grade against the local or deployed bot; inspect results and the pass/fail gate WHEN: "run evaluation", "run eval", "evaluate the bot", "run perf evaluation", "run basic evaluation", "run a single test case", "evaluate one question", "run all scenarios", "score the bot", "run evals locally" DO NOT USE FOR: preparing or uploading datasets, pipeline troubleshooting, knowledge-graph indexing ## Rules - `--dataset` accepts a local `evaluation_datasets//.jsonl` path **or** a Foundry asset name `qa-bot--[:version]` (the asset name resolves to the local file; the version is informational). - There is **no single-testcase flag**. To run **one case**, make a one-row JSONL file and pass it as `--dataset` (see the reference). - Use `--is_ci False` locally (uses `az login`); CI uses pipeline identity. - The bot endpoint comes from `BOT_SERVICE_ENDPOINT`; if unset it defaults to the **local** `http://localhost:8089` — start the agent `server.py` first for local runs. - Default evaluators are all seven; pass `--evaluators` to subset. ## Environment Confirm and remind the user to set these before running (loads `.env`; copy and fill `tools/sdk-ai-bots/azure-sdk-qa-bot-evaluation/env-variables`): | Purpose | Variables | | --------------- | -------------------------------------------------------------------------------------------- | | Foundry grading | `AZURE_AI_PROJECT_ENDPOINT`, `AZURE_EVALUATION_MODEL_NAME`, `EVALUATE_THRESHOLD` (default 3) | | Deployed bot | `BOT_SERVICE_ENDPOINT` + (`BOT_AGENT_TOKEN_RESOURCE` or `BOT_AGENT_ACCESS_TOKEN`) | | Local bot | none — run agent `server.py` (defaults to `http://localhost:8089`) | | Tenant routing | `STORAGE_BLOB_ACCOUNT`, `BOT_CONFIG_CONTAINER`, `BOT_CONFIG_CHANNEL_BLOB` | | Auth | `az login` (with `--is_ci False`) | ## Common commands ```bash # One scenario (all evaluators), against the local server, no baseline gate: python evals_run.py --dataset evaluation_datasets/perf/typespec.jsonl \ --is_ci False --baseline_check False --cache_result full # Same via the asset name: python evals_run.py --dataset "qa-bot-perf-typespec:latest" --is_ci False --baseline_check False # Subset of evaluators: python evals_run.py --dataset "qa-bot-basic-python:latest" \ --evaluators "bot_evals,groundedness" --is_ci False --baseline_check False ``` For a **single test case**, **all scenarios**, the **deployed bot**, and reading results / the gate, see [running evaluations](references/running-evaluations.md). ## Steps 1. Ensure the required env vars are set; for a local run, start the agent `server.py`. 2. Choose the dataset: a scenario file, an asset name, or a one-row file for a single case. 3. Run `python evals_run.py --dataset <...> --is_ci False` (add `--baseline_check False` for ad-hoc runs, `--evaluators` to subset). 4. Open the printed Foundry **Report URL** and review the per-case score table. 5. With `--cache_result full`, inspect `cache/-*.json` for per-case and failed-case detail.