--- name: sdk-ai-bot-eval-dataset license: MIT metadata: version: "1.0.0" distribution: local description: 'Create a new evaluation dataset or add cases to an existing one for the Azure SDK QA bot evaluation. WHEN: "add eval dataset item", "add a test case", "new evaluation dataset", "create dataset", "add question to dataset", "curate eval data", "promote staging cases", "upload dataset asset", "new scenario dataset". DO NOT USE FOR: running evaluations, pipeline troubleshooting, knowledge-graph indexing.' compatibility: "local azure-sdk-tools clone, python 3.12 venv, az login" --- # QA Bot Evaluation Dataset Create a new per-scenario evaluation dataset or add cases to an existing one for the QA bot evaluation package at `tools/sdk-ai-bots/azure-sdk-qa-bot-evaluation`. Datasets are per-scenario JSONL files under `evaluation_datasets//.jsonl` (`target` = `basic` or `perf`) holding **inputs + expectations only**. Run all commands from `tools/sdk-ai-bots/azure-sdk-qa-bot-evaluation` with the package `.venv` active and `az login` done. See [schema and workflows](references/dataset-schema-and-workflows.md) for the canonical row format and step-by-step recipes. ## Triggers USE FOR: create a new evaluation dataset (new scenario file); add cases to an existing per-scenario dataset; curate cases from storage markdown; promote reviewed staging cases; upload a dataset as a Foundry asset WHEN: "add eval dataset item", "add a test case", "new evaluation dataset", "create dataset", "add question to dataset", "curate eval data", "promote staging cases", "upload dataset asset", "new scenario dataset" DO NOT USE FOR: running evaluations, pipeline troubleshooting, knowledge-graph indexing ## Rules - A **dataset** is one file: `evaluation_datasets//.jsonl`. **Creating a new dataset = creating a new `.jsonl`** in `basic/` or `perf/`. - The canonical **dedup key is the normalized `query`** (applied at curation). `testcase` titles may legitimately repeat (e.g. `Untitled`) — never dedup or fail on `testcase`. - Only `reviewed: "pass"` rows are curated/committed; see the [review status lifecycle](references/dataset-schema-and-workflows.md) for the three states and how leftovers are finalized. - `evaluation_datasets/_staging/` **is committed** (shared review state) so concurrent contributors don't re-curate the same cases; `basic/`, `perf/` and `registry.json` are committed too. - Always validate before upload, and after editing any curated file. ## Environment Before running any command that touches Azure, **ensure the required variables are set** and remind the user to configure them. Dataset prep loads a local `.env` (copy and fill in `tools/sdk-ai-bots/azure-sdk-qa-bot-evaluation/env-variables`) and authenticates with `az login`. | Command | Requires | | ------------------------------------ | ---------------------------------------------------------------------------------------- | | `dataset.curate` | `az login`, `STORAGE_BLOB_ACCOUNT`, `AI_ONLINE_PERFORMANCE_EVALUATION_STORAGE_CONTAINER` | | `dataset.upload` | `az login`, `AZURE_AI_PROJECT_ENDPOINT` | | `dataset.validate`, `dataset.review` | none (local file operations) | If a required variable is missing the command fails (`KeyError` / auth error) — set it in `.env` or the shell and re-run. A purely **manual add** (edit JSONL + validate) needs no env vars; only `dataset.upload` then requires `AZURE_AI_PROJECT_ENDPOINT` + `az login`. ## Choose a workflow | Goal | Workflow | | ------------------------------------------------- | ------------------------------------------------------------------------------- | | Add a few specific cases you already have | [Manual add](references/dataset-schema-and-workflows.md#manual-add) | | Harvest new cases from collected storage markdown | [Curate from blob](references/dataset-schema-and-workflows.md#curate-from-blob) | | Create a brand-new scenario dataset | [New dataset](references/dataset-schema-and-workflows.md#new-dataset) | ## Core commands ```bash # Validate a file or folder (--require-reviewed gates official datasets on reviewed=="pass") python -m dataset.validate evaluation_datasets//.jsonl --require-reviewed # Promote reviewed (pass) staging rows; leftover items are finalized to abandoned python -m dataset.review --target [--scenario ] # Upload one versioned Foundry asset per scenario; writes registry.json python -m dataset.upload --target [--scenario ] ``` After adding or creating a dataset: **validate → upload → commit** the per-scenario file, `registry.json`, and updated `_staging/` files. ## Steps 1. Pick a workflow from the table above (manual add, curate from blob, or new dataset). 2. Add or stage canonical rows in `evaluation_datasets//.jsonl`. 3. For staged cases, promote the reviewed ones with `python -m dataset.review`. 4. Validate the file with `python -m dataset.validate ... --require-reviewed`. 5. Publish with `python -m dataset.upload`, then commit the per-scenario file, `registry.json`, and updated `_staging/`.