All notable changes to this project are documented in this file.
The format is loosely based on Keep a Changelog.
This cycle adds CGIR and Windows ML Runtime workflows, native PyTorch evaluation, physical-adapter selection, and broader operator profiling. It improves pattern-aware analysis, targeted optimization, model-loading memory measurements, and release evaluation. The release also carries forward the fixes already published in v0.3.1. See the behavior changes below.
- Runtime selection - runtime names are now
winml-ortandort-genaiinstead ofwinmlandwinml-genai;winml perfdefaults to automatic runtime selection while retaining explicit choices (#1366, #1308). winml perf- canonical cache controls are--use-cache/--no-use-cache; the older--ignore-cache/--no-ignore-cacheforms remain hidden deprecated aliases, and conflicting toggles are rejected (#1271).winml analyze- removes the obsolete--htp-metadataoption in favor of pattern-rule-based runtime support checks (#1218).winml serve- replaces wildcard CORS with same-origin request protection, validates allowed CLI commands, and rejects HTTP attempts to enable remote code, including through nested model/configuration loading (#1321).- Memory reports - classic
memory_measurement.schema_versionis now3, with revised baseline/delta boundaries; the outer report remains schema version2, and load-only measurements useload_memory.version = 1(#1429). - Operator tracing - measured tracing runs default to 10 iterations; explicit iteration overrides remain available (#1406).
- Evaluation recipe labels - recipes previously labelled FP16 without an actual quantization/conversion step are labelled FP32; historical result paths and reference labels are preserved rather than rewritten (#1411).
- CGIR workflows -
export,config,build,compile,perf, andevalintegrate standalone MLIR, Windows ML Runtime with CGC compilation, and ONNX through the WinMLCG EP, using the required preview Runtime/EP packages (#1426). winml eval --runtime pytorch- evaluates Hugging Face models natively on CPU or CUDA and accepts existing PyTorch models through the evaluation API, preserving checkpoint dtype and reporting the selected runtime (#1282).winml eval- adds independent--reference-deviceand--reference-epcontrols for ONNX comparison and integrates the shared device-selection path (#1324, #1412).winml perf --device-luid- selects the physical adapter reported bywinml sys, keeps inference and monitoring on that adapter, and distinguishes identical GPUs; the option does not apply toort-genai(#1398).- Operator profiling - adds basic OpenVINO CPU/NPU and TensorRT RTX GPU tracing, excludes warmup samples, preserves raw trace artifacts, and improves QNN schematics and detail-fallback diagnostics (#1377, #1406, #1288, #1289).
- Model-loading memory - adds load-only measurements from runtime/device readiness through model compilation, separates sampled peaks from OS lifetime diagnostics, and prepares missing process counters on the explicitly selected GPU while preserving unavailable values and signed deltas (#1429).
winml sys- uses DXCore for GPU/NPU identity and adapter LUIDs, retains WMI/PnP enrichment and fallback, and recognizes NVIDIA ACPI PnP identifiers (#1351, #1290).winml sys- expands memory metadata, dedicated/shared GPU memory, NPU memory, and Windows build details in system reports (#1312, #1387, #1421, #1425).winml analyze- evaluates matched subgraphs with pattern-level runtime rules before operator-level fallback, reports pattern coverage, and includes optimization findings in JSON output (#1218, #1285).winml optimize- adds EP/device targeting, displays custom operator domains, and accelerates capability checks (#1256, #1306, #1298).- Graph optimization - adds routed affine and positive-Exp scale folding while preserving fast QNN grouped-convolution regions (#1301, #1317).
- Qwen3 GenAI bundles - shares decoder context/iterator weights through a common EP context and adds VitisAI support for the transformer stages (#1305).
- Model caches - unifies cache/rebuild controls across build, eval, and perf; evaluation enables model-cache reuse by default and reports controls that do not apply to prebuilt inputs (#1269, #1270, #1271).
winml export --batch-size- supports validated static batch sizes and carries them through input specifications and export metadata (#1315).- Model adapters - adds the Unlimited-OCR vision tower for feature extraction and audeering Wav2Vec2 dimensional-emotion speech regression (#1018, #1084).
- Vision recipes - adds CPU configurations for RT-DETR, ViTPose, and OWLv2 zero-shot detection, plus QNN NPU LayoutLM document-QA configurations (#1190, #1189, #1196, #1296, #1369).
- Language recipes - adds mMARCO MiniLM, NLI MiniLM, multilingual E5, and Spanish BERT configurations (#1191, #1192, #1210, #1185).
- Audio recipes - adds Wav2Vec2 deepfake classification, MMS-1B-all CPU configurations, and a QNN NPU W8A16 configuration for dimensional-emotion regression (#1194, #1177, #1318).
- Hugging Face export - repairs Marian, TrOCR/Manga-OCR, LayoutLM QA, BLIP decoder, and SAM wrapper paths, and corrects eager-attention selection during model loading (#1323, #1330, #1392, #1403, #1375).
- FP16 conversion - handles initializer-backed graph outputs, prevents quantization naming collisions, and validates captured local-function tensors against stricter ONNX Runtime graph-attribute requirements (#1280, #1417, #1377).
- Calibration and quantization - clamps DistilBERT mask constants before calibration and fixes input-dtype, synthetic-calibration, and large-model QDQ serialization regressions found during release evaluation (#1420, #1411).
- FP16 recipes - restores missing quantization configuration for RoBERTa-large SQuAD2 and DeBERTa-v3-base NLI recipes (#1245, #1244).
- ViTPose export - derives dummy inputs from the model configuration (#1299).
- Compiled-model caches - keys EPContext reuse by compile identity and handles multiple QNN EP context partitions in perf (#1295, #1361).
- GenAI perf - honors the selected device and EP during automatic builds and aligns performance metric schemas (#1404, #1307).
- Performance monitoring - corrects multi-GPU monitoring, preserves memory baselines, and distinguishes unavailable measurements from real samples (#1313, #1414).
- Runtime initialization - includes CPU in vendor compatibility, lazily loads session backends and monitors, and removes the manual ONNX Runtime DLL preload path (#1303, #1382, #1380).
winml analyze- repairs schema fallback for runtime-specific operators (#1304).- Image-to-text evaluation - repairs evaluator behavior (#1410).
winml sys --format json- keeps EP installation notices and download progress out of JSON output while retaining them in human-readable modes (#1314).
- Release evaluation - adds an opt-in manifest-driven release sweep with explicit model/task, precision, and machine/EP/device targeting, while preserving non-release selection modes; cross-EP evaluation and structured perf-result handling are improved (#1411, #1281, #1316).
- Evaluation reliability - adds targeted timeout exclusions and failure categorization, separates download time from execution budgets, prioritizes model execution, and prevents stage logs from being mistaken for final artifact paths (#1358, #1357, #1400, #1427).
- LLM evaluation - adds a schema-normalized evaluation runner (#1277).
- E2E stability - isolates native EP CLI invocations in subprocesses, improves shared-RDP GPU coverage, and updates memory assertions to the current RAM label (#1416, #1418, #1430).
- GitHub releases - uses the GitHub App service connection and preserves UTF-8 release notes, including BOM-aware output for release tasks (#1292, #1293).
- CI supply chain - pins GitHub Actions, updates action dependencies, and introduces a seven-day Dependabot cooldown (#1408, #1409).
- Dependency maintenance - updates aiohttp, cryptography, Jupyter dependencies, and the Windows ML ONNX Runtime compatibility range; removes unused Jupyter server packages from the development dependency set (#1278, #1279, #1216, #1386, #1423).
- Runtime dispatch - centralizes perf runtime names in shared constants (#1345).
- Contributor workflows - adds skills for model-support contributions and correctness-gated auto-optimization (#1415, #1428).
- Release-line synchronization - carries the v0.3.0 and v0.3.1 release changes back to main, including the dataset-ID and native-warning-spooling fixes already shipped through earlier release cherry-picks (#1291, #1397, #1262, #1266).
winml_cli-0.4.0-py3-none-any.whlrules-v0.4.0.zip
This hotfix restores compatibility with current Transformers and Windows runtime dependencies, fixes VitisAI cache permissions, and stabilizes Hugging Face model export and evaluation.
- Hugging Face export and evaluation β stabilized SDPA and attention-mask handling, decoder wrappers, BLIP export, QNN/HTP tracing, and processor resolution for Transformers 4.57 (#1372, #1379, #1384).
- VitisAI compilation β moved the compilation cache under the user-writable WinML cache root instead of installation-relative protected paths (#1378).
- Runtime dependencies β constrained
plotextto the compatible 5.x series, required the published Windows ML runtime build, and routed QNN acquisition through the architecture-aware Windows ML EP Catalog so wheel installations preserve both QNN and DirectML without installing a conflicting standard ONNX Runtime distribution (#1372).
winml_cli-0.3.1-py3-none-any.whlrules-v0.3.1.zip
This cycle expands model preparation and evaluation across the CLI: precision-driven quantization, composite-model and dynamic-axis workflows, real-input perf/eval, optimization previews, and opt-in Dynamo export. It also introduces one-command Qwen3 onnxruntime-genai bundles, GenAI benchmarking, broader model recipes, and more reliable EP discovery, compilation, and monitoring. See the behavior changes below.
- Output-producing commands now refuse to replace existing files or non-empty directories unless
--overwriteis passed;winml buildretains its existing incremental--rebuildbehavior (#970). winml quantizerenames--model-nameto--model-id, including the corresponding quantization-config field (#984).- Compile configuration no longer silently defaults a missing execution provider to QNN; incomplete configurations now fail validation instead (#1026).
winml inspect/winml perfhide third-party and native warning noise by default; use-v,-vv, orWINMLCLI_SHOW_ALL_WARNINGS=1to restore diagnostics (#1232, #1246).
- Quantization β
--precisionselects FP16 conversion, RTN INT4, static QDQ, or calibration-free dynamic INT8;winml quantizecan compose multiple precision passes such as INT4 followed by FP16 (#872, #985, #1047). winml buildβ--export-type optimizedproduces a complete Qwen3 onnxruntime-genai NPU/QNN bundle, including prefill/decode, embeddings, LM head, tokenizer, and manifest files (#836, #996, #1008, #1081, #1104).winml perf --runtime ort-genaiβ benchmarks prebuilt or automatically cached GenAI bundles with TTFT, token throughput, prompt-template controls, EP overrides, and isolated pre-compilation (#1015, #1042, #1046, #1054, #1109).- Composite models β
exportandbuildautomatically fan out pipeline components;export/build/perfsupport--submodel, and explicit composite tasks such as summarization and translation are accepted (#1031, #1037, #1058, #1071, #1089). - Export controls β dynamic axes and symbolic input dimensions are supported while static TorchScript export remains the default;
build,config,perf, andevalexpose matching shape/input/export overrides (#1074, #1083, #1106, #1141, #1156, #1188). winml perfβ real.npzinputs, time-budgeted--durationruns, cached per-module builds, actual dynamic dimensions, and QNN profiler ONNX metrics (#1004, #1055, #1066, #1102, #1168).- QNN op tracing β per-model tracing can be enabled automatically; basic traces exclude warmup samples and null fields, while detail tracing accepts compile EP options and auto-compiles raw ONNX inputs when required (#1006, #1032, #1249, #1252).
winml eval --mode compareβ compares two ONNX models directly or uses real.npzsamples against a Hugging Face reference; Qwen3 adds perplexity evaluation (#1139, #1209, #1221).winml optimize/winml analyzeβ--check-optimpreviews applicable rewrites and verifies their produced operators against the target EP; new rewrites cover static Split-to-Slice and Conv affine/BatchNormalization folding (#1142, #1167, #1171, #1238, #1257).- EP discovery and monitoring β registration is isolated and failures are structured, startup remains lazy, op-tracing dispatch is unified, and provider-download progress is restored (#1019, #1239).
- CLI quality of life β EP/device and pipeline-stage flags are consistent across commands;
--no-colordisables ANSI output for one invocation (#923, #978, #992). - Hub-hosted ONNX β commands accept
<org>/<repo>/<path>.onnxreferences from Hugging Face Hub, enabling SAM 3 encoder/decoder workflows (#582). - Keypoint detection β ViTPose supports
config,build, andperf, plus COCO OKS-AP evaluation (#905, #949). - Vision and document recipes β refreshed coverage adds DINOv2, SwinV2, OWL-ViT/OWLv2, BEiT, SegFormer, YOLOS, ViTPose/SynthPose, LayoutLM/LayoutLMv3, and document/question-answering models (#925, #1064, #1088, #1093, #1100, #1101, #1123, #1125, #1145, #1155, #1173, #1174, #1178, #1187, #1201, #1202, #1205, #1208).
- Language recipes β expanded BART, BERT, DeBERTa, DistilBERT, KoELECTRA, MiniLM, MPNet, Marian/OPUS, GTE reranker, feature-extraction, and entity-linking coverage (#1068, #1080, #1112, #1115, #1116, #1117, #1118, #1120, #1121, #1124, #1134, #1143, #1144, #1153, #1169, #1170, #1179, #1200, #1214).
- Audio recipes β expanded Wav2Vec2, HuBERT, AST, MMS, language/gender/music classification, forced alignment, and multilingual ASR coverage (#1094, #1095, #1114, #1131, #1148, #1154, #1176, #1186, #1206, #1207, #1211, #1225).
winml perfβ throughput uses the batch size actually executed; analyzer EP resolution and op-trace paths now match the runtime target (#930, #941, #1000).winml buildβ honors explicit--ep, supports non-compiling cross-target builds, keeps ONNX caches distinct by resolved path and configuration, preserves configured model classes, reports disk-full failures clearly, and keeps CPU/GPU automatic precision at FP32 (#856, #947, #987, #997, #998).- GenAI and composite export β fixed component export/build failures, compile fallback paths, accelerator selection, isolated EPContext preparation, and final Qwen3 bundle assembly (#1037, #1051, #1103, #1138, #1248).
- Task and model resolution β reconciled the task registry, corrected model-specific task listings and Hub
pipeline_tagfallback, accepted composite tasks, and resolved CTC-based ASR model classes correctly (#724, #986, #1070, #1071, #1113, #1154). - Depth and keypoint evaluation β fixed inference-time evaluator failures (#1023).
- Analyzer and optimizer rules β corrected coverage counting, aligned pattern checks with node support, consolidated recommendation metadata, and fixed dtype constraints and unknown-pattern handling (#922, #1020, #1063, #1130, #1162).
- EP / device resolution β WindowsML catalog providers register correctly; device listings retain hardware details without duplicate aliases; analyzer auto-selection prefers the strongest exact target; CPU bridge providers resolve safely; invalid EP/device pairs fail early (#1076, #1220, #1227, #1228, #1231, #1237).
- Native EP execution β hardened spawned-provider progress, prevented compiler-output deadlocks, released native sessions before process exit, and replaced pipe-backed warning capture with a bounded file spool to avoid EP compiler hangs (#1017, #1223, #1230, #1266, release cherry-pick #1267).
- Export and quantization β standalone quantization suppresses duplicate ORT preprocessing warnings; decoder KV-cache dimensions survive tracing; large external-data models can convert to FP16; and EPs that quantize internally no longer receive redundant WinML quantization (#956, #1176, #1235, #1242).
- QNN evaluation and tracing β repaired evaluation failures, detail-trace DLL/summary handling, and compile-time provider options (#1247, #1249).
winml evalβ default text datasets and sentiment recipes use fully qualified Hugging Face dataset IDs (#1262, release cherry-pick #1263).- CLI help β
winml --helpshows the correctsyssummary and concise, untruncatedbuild/quantizedescriptions (#1254). - Telemetry β local
Pathmodel references no longer cause successful commands to fail during telemetry scrubbing (#1273).
- Release pipelines β E2E aligns ModelKitArtifacts with the matching release branch, stable GitHub releases receive CHANGELOG notes and βLatestβ status, and the official-build toolchain is pinned for reproducibility (#940, #967, #1268).
- Evaluation CI β recipe-driven build/eval supports per-EP matrices, pre-exported ONNX, reliable resume behavior, actual applied-precision reporting, unquantized-track EPs, and broader MIGraphX/TensorRT RTX coverage (#845, #902, #1009, #1039, #1086, #1160, #1163, #1226, #1243, #1286).
- Telemetry β action events record scrubbed model identifiers, while error events retain scrubbed root-cause details for diagnosis (#1108, #1111).
- Development environment β expanded type checking, added a tracked
uvlockfile, selected CPU-only PyTorch wheels, and consolidated development dependencies (#932, #957, #1105, #1251, #1255). - Documentation publishing β added and published the version-stamped model accuracy report from the current documentation site (#974, #975, #979, #1203).
winml_cli-0.3.0-py3-none-any.whlrules-v0.3.0.zip
This cycle unifies task detection across the CLI (modality- and architecture-aware) and expands the eval and perf surfaces β new depth-estimation and tensor-similarity evaluators, a full SA eval pipeline with an HTML report, winml perf --memory / --ep-options, and --format json on eval / analyze / perf. winml compile gains a multi-model shared EP context, winml build gains --precision, and timm image-classification is supported. See the behavior changes below.
winml perfno longer compiles by default β added--compile/--no-compile, defaulting to no-compile (#879).- Boolean CLI options are now
--flag/--no-flagpairs (#844). - Telemetry is enabled in the shipped wheel; consent reworded as "unlinked pseudonymized" (#810).
- Task detection β modality- and architecture-aware
detect_task, unified across commands viaresolve_task/TaskResolution(#807, #841, #878). winml perfβ--memoryreports RAM/VRAM per phase (#861);--ep-optionspasses runtime EP options (#865, #889); output now shows the model path and precision (#875).winml compileβ multi-model shared EP context with a selectable backend (#871).winml buildβ added--precision(#914).winml inspectβ renders composite (pipeline-led) model structure (#903).winml analyzeβ--ep/--deviceauto resolves to a single best target (#919); faster re-runs plus a--debugrule locator (#906).winml evalβ new SA eval pipeline with per-stage perf and an HTML report (#599); depth-estimation (#326, #437) and tensor-similarity (#805) evaluators; scripts track ONNX size and sanitize output (#755).- Cross-command β
--format jsononeval/analyze/perf(#855);--allow-unsupported-nodesonperf/build/eval/run(#821). - Quality of life β timm image-classification via library routing (#790);
~expanded in paths (#815); progress bar during EP warmup (#788); refreshed--list-devicecoloring (#812).
winml perfβ declaredpsutilas a runtime dependency, fixing a crash on clean install (#937); composite (dual-encoder) models supported (#866); HF and ONNX paths unified throughPerfBenchmark(#659);--monitorlive chart in--modulemode (#654, #920);richLive thread crashes (#832).winml analyzeβ coverage-counting bugs (#922); analyzer API EP list matches the CLI (#803); Pad / Gemm rule conflicts (#906).- Task / config validation β fill-mask heads detected as
text2text-generation(#851); vision feature-extraction model-task inconsistency (#786); model task validated in config (#723); full encoder-decoder composite built for no-task seq2seq (#850, #862); device/EP combination validated without a system check (#780). winml exportβ.datafiles written to the output dir, not the cwd (#853); timmimage_sizefrompretrained_cfg(#806).winml inspect/winml catalogβ--taskvalidated at parse time (#546, #771);catalog -tshort flag aligned (#541, #772); VitisAI EP ordered last, catalog table width fixed (#763).- Feature extraction β
last_hidden_statenow populated in the output (#863). winml optimizeβ untie batched constantMatMulfor OpenVINO GPU (#817).winml evalβ fixed failures on AMD hosts (#783); cleanup runs onSKIP_*/ exception paths (#890).- CLI output β quieted
optimumlogger noise (#904); unified verbosity, logger routed to stderr (#566, #793).
winml_cli-0.2.0-py3-none-any.whlrules-v0.2.0.zip
First public preview release. With the Windows ML 2.0 baseline now in place, this release shifts focus to polishing the CLI surface: faster winml inspect / winml eval, more accurate device & EP resolution, a real PyPI release pipeline, and a meaningful pass over sysinfo and quantization behavior.
- Promoted to
Development Status :: 4 - Betainpyproject.toml. - First release published to PyPI via the new ESRP-signed release pipeline (#473).
winml inspect: banner + spinner during HF metadata fetch (#718, hidden in JSON mode #745);--list-tasks<500 ms (#717); processorAuto*lookups gated (#719, #746).winml eval: lazy module loading drops cold-start latency (#711); inputs validated up-front with friendlier errors and a structured--schemaoutput (#694).winml export:model-idandtaskvalidated before the export runs (#714).winml analyze: cleaner EP/device selection, clearer "op-check skipped" UI, merged optimization config (#702).winml perf: estimated model precision (QDQ / block-wise quant / dominant float dtype) is now reported byWinMLSession(#706); expanded perf e2e coverage across EPs and devices (#698).winml monitor: queries all NPU/GPU engines and reports the max utilization (#716).- CLI-wide: did-you-mean suggestions on mistyped subcommands (#699); consistent option-vs-config-file value priority across commands (#720);
op_tracinghidden from the public surface (#738). - Adopted the official
windowsmlusage example β removed the redundantWinMLsingleton, fixing a benign "library already registered" traceback onwinml perf --device npu(#729).
- Quantization (P0) β
--precisionnow rejects invalid values instead of silently falling back touint8/uint8; default image calibration dataset streams rather than downloading ~5 GB; DETR-family object detection supportspixel_maskpadding (#680). winml evalβ pinnedpyarrow <24to avoid an EP DLL load-order crash (#750).winml perfβ QDQ precision detection fix (#753); NPU monitoring adds3Dengine, device line shows requested vs. actual (#747).- EP / device resolution β
resolve_device/resolve_epsnow useget_registered_ep_devices(#712); dropped misleadingov/vitis/trtrtxaliases (#690);winml sysraises when an EP isn't available on the host (#686); per-providerensure_readyfailures demoted to debug (#703); analyze regression caught during compile e2e (#740). - Native ORT / WinML β suppressed ORT native stderr, fixed a HANDLE leak (#709); nulled the EP catalog handle after enumeration to prevent a QNN NPU crash on exit (#701); fixed the
onnxruntimeDLL search path (#689). winml sysβ diagnostic sections gated behind-v, json-mode logs routed to stderr (#737); CPU/Mem scoped to the current process and PDH percent counters no longer artificially capped (#715); host arch reported viaIsWow64Process2on Windows ARM64 (#705).- OpenVINO β
is_npudetection updated (#722).
- Added a
winml-cliCopilot skill (#733).
winml_cli-0.1.0-py3-none-any.whlrules-v0.1.0.zip
- Windows ML β 2.0 (#441)
- Python β 3.11 (
requires-python = ">=3.11,<3.12")
- Incompatible
--ep/--devicepairs are now rejected instead of silently overridden (#641, #661). winml config/build --device npuexits non-zero when no compatible NPU EP is available (#660).winml analyze --ep cpuresolves to CPU instead of falling back to NPU (#641).trust_remote_codenow prints a bold-red stderr warning whenever it is honoured (#641).
winml buildwritesanalyze_result.jsonto the output folder (#673) and validates the config up-front (#675).- Exported ONNX is auto-normalized via
optimize_onnx()(#681). winml inspectdistinguishes local-path-not-found from network errors (#679).
--run-unknown-opcompile=false regression (#662).winml build --device npufailing withquant.task is required(#673).- HF build path dropped explicit
--epon compile-less paths (#678). run_eval.pynot forwarding--devicetowinml build(#674).- Seq2seq decoder calibration crash on image-to-text models (#671).
- Strong-typed EP parameters across analyze/compiler/optracing (#632).
EP_SUPPORTED_DEVICESas single source of truth (#641).- Expanded E2E / CLI surface tests for
analyze,compile,inspect,catalog, and perf (#645, #652, #661, #665, #669, #672, #676).
winml_cli-0.0.4-py3-none-any.whlrules-v0.0.4.zip
The format and packaging of the analyzer runtime rule artifacts changed in v0.0.3. Anyone who scripted against the v0.0.2 release assets, or who points the analyzer at an external rules directory, needs to update.
1. Release asset layout: many per-EP/opset ZIPs β one versioned ZIP of Parquet files
- v0.0.2 published dozens of individual rule archives, one per EP Γ device Γ opset (e.g.
QNNExecutionProvider_NPU_ai.onnx_opset17.zip,OpenVINOExecutionProvider_GPU_ai.onnx_opset20.zip, β¦). - v0.0.3 publishes a single
rules-v0.0.3.zipcontaining Parquet rule files. The filename is version-qualified (rules-v<version>.zip). - Inside the archive, rule data is now stored as
*.parquetrather than the previous ZIP-wrapped JSON. Old ZIP-expansion tooling has been removed.
2. Environment variable rename: MODELKIT_RULES_DIR β WINMLCLI_RULES_DIR
The override for additional runtime-rule lookup directories was renamed as part of the broader ModelKit β WinML CLI product rename. There is no compatibility shim β the old name is silently ignored.
If you build from source or otherwise need to fetch rules manually:
gh release download v0.0.3 --repo microsoft/winml-cli --pattern 'rules-v0.0.3.zip' --dir .Expand-Archive -Path .\rules-v0.0.3.zip -DestinationPath src\winml\modelkit\analyze\rules\runtime_check_rules -Forcegh release download skips pre-releases unless you pass --tag, so the explicit v0.0.3 is required.
If you set MODELKIT_RULES_DIR anywhere (shell profile, CI pipeline, user env), rename it to WINMLCLI_RULES_DIR. It points to a single rules directory (not split on os.pathsep); relative paths still resolve from src/winml/modelkit/analyze/utils/.
Related PRs: #411 (Parquet migration), #600 (rules zip in release), #627 (versioned filename), #587 (env var rename as part of ModelKit β WinML CLI Wave 1).
winml_cli-0.0.3-py3-none-any.whlrules-v0.0.3.zip