This file adds an explicit guard for generator rule edits.
Before making any change under:
src/aiconfigurator/generator/**
MUST read:
.claude/rules/generator-development.md
Before making any change under collector/** MUST read:
.claude/rules/collector/layer_permissions.md(layer permission table, module boundary, dispatch-vs-skip rule).claude/rules/collector/failure_handling.md(observe-don't-predict doctrine, escalation decision tree)- For case YAML work:
.claude/rules/collector/case_authoring.md
For adding a new Collector operation, additionally follow
.claude/skills/aic-collector-op-development/SKILL.md (consumer-contract,
case-identity, deduplication, and validation gates). Skills are procedural
runbooks; if a skill and a .claude/rules/ file ever disagree, the rule
file wins.
AIConfigurator is a Python CLI/SDK tool for optimizing LLM inference deployment configurations. See README.md for full details.
Dependencies are managed via uv with a uv.lock lockfile. The virtual environment lives at .venv/. All commands below assume .venv/bin/ is on PATH or you prefix with .venv/bin/.
- Install/refresh deps:
python3 -m uv sync --extra dev - Performance data: Current op profiles are parquet files under
aic-core/src/aiconfigurator_core/systems/data/<system>/<family>/<backend>/<version>/and are checked in directly. Legacy*.txtperf files, when present, use Git LFS; rungit lfs pullonly when working with those legacy assets.
- Lint:
ruff check .andruff format --check .(seeDEVELOPMENT.md) - Unit tests:
pytest -m unit(868+ tests; no external deps or LFS data needed) - Build tests (PR subset):
pytest -m "unit or build"(requires LFS data for thebuild-marked tests) - CLI:
aiconfigurator cli generate --model-path Qwen/Qwen3-32B-FP8 --total-gpus 8 --system h200_sxm(works without LFS data)
- Legacy LFS data:
github-cloud.githubusercontent.commay be blocked by network egress restrictions. Ifgit lfs pullfails, tests that explicitly exercise legacy text assets may fail; current parquet-backed workflows do not depend on those legacy files. - TTY tests: 4 tests in
tests/unit/cli/test_plain_output.pymay fail because the agent runs in a non-TTY environment. - Rust tests:
tests/unit/sdk/test_rust_engine_step.pyrequirescargowith network access tocrates.io. It will fail if that domain is blocked. - macOS pytest-timeout crash dialogs: The
timeout = 120setting inpytest.iniuses SIGALRM by default, which triggers "Python unexpectedly quit" crash reporter popups on macOS. Pass-p no:timeoutto disable it locally:.venv/bin/pytest -m unit -p no:timeout - torch-dependent tests:
tests/unit/sdk/database/test_moe_dispatch.pyrequirestorch(not installed in the default dev venv). Ignore it with--ignore=tests/unit/sdk/database/test_moe_dispatch.py.
The root CODEOWNERS is generated from .github/codeowners/areas.yaml - never
hand-edit it; CI fails on drift. Repository rules must require the codeowners
check to make failures merge-blocking. If the check fails on a new directory,
claim it in areas.yaml, regenerate with
emit_codeowners.py, and commit every changed source and generated artifact
together. The aic-codeowners skill covers all flows (who reviews a change,
gate failures, routing changes, external contributor grants).