- Dependabot updates GitHub Actions and pip dependencies weekly (see
.github/dependabot.yml). - Audit workflow runs
pip-auditon pushes, PRs, and weekly; install pinspip>=26before auditing. - Pre-commit (optional locally): Ruff and Mypy on
src/quorabust(see.pre-commit-config.yaml).
- Python package: PEP 621 metadata in
pyproject.toml; install withpip install .orpip install -e ".[dev]". - Container:
docker build -t quorabust .then mount data and pass CLI flags, e.g.
docker run --rm -v "$PWD/data:/data:ro" -v "$PWD/models:/models" quorabust --csv /data/raw/train.csv --out /models/model.pkl
Training writes csv_sha256, git_revision, quorabust_version, feature_schema,
reference_feature_means (for drift checks), holdout-selected decision_threshold
when an eval split exists, and metric fields into the pickle meta dict. Treat .pkl
files as trusted (pickle); load only from controlled storage.
Use quorabust-train --metadata-out models/quorabust.meta.json to write the same
lineage and metric metadata as JSON. Reviewers and release tooling can inspect that
sidecar without loading executable pickle content. The sidecar is not a replacement for
the model artifact; it is a safer inspection path. For untrusted artifact distribution,
prefer a non-pickle format such as skops or ONNX in a future release.
quorabust-serve: FastAPI with/health,/ready,/predict,/metrics(Prometheus). ConfigureQUORABUST_MODEL_PATHand optionalQUORABUST_MODEL_Bfor A/B; clients may sendX-Quorabust-Variant: b.- Decisioning:
/predictreturns bothproba_duplicateand thresholdedis_duplicate. Clients can pass?threshold=0.7; otherwise serving uses the holdout-selected artifact metadatadecision_threshold, thenQUORABUST_DECISION_THRESHOLD, then0.5. - Wire ingress timeouts and autoscaling to your latency SLO using the histogram in
/metrics. See LOAD_TESTING.md for k6 and GRAFANA.md for a starter dashboard JSON.
See SCALING.md for chunked CSV I/O, optional embedding training
(pip install ".[nlp]", quorabust-train --feature-backend embedding), optional
cross-encoder pair scoring (quorabust-train --feature-backend cross-encoder), and
pointers to distributed XGBoost.
quorabust.registry: append JSONL rows with--registry-dirafter training; swap for MLflow when you need a UI.quorabust.drift: compare live batch feature means tometa["reference_feature_means"].quorabust-validate-report: validate JSON model-card reports in CI/release jobs; use--require-holdout --require-calibrationbefore promoting a benchmarked artifact.
Tag versions, update CHANGELOG.md, and align [project].version in pyproject.toml. Publish to an internal index or PyPI as appropriate.