Skip to content

v1.0.0 — стабильный контракт

Choose a tag to compare

@slavabars slavabars released this 09 Nov 22:42
· 15 commits to main since this release

decision-cascade 1.0.0 — стабильный контракт

Первый стабильный релиз. Функционально 1.0.0 совпадает с 0.16.0: новых
возможностей нет — меняются статус и обещания. Всё, что вы использовали в
0.16.0, продолжает работать без изменений.

Что теперь обещано

Контракт 1.x не ломается. Достаточно повышения не-major версии, чтобы
обновляться без правок кода:

  • эндпоинты POST /decisions, /decisions/batch, /v1/systemone,
    /v1/feedback, GET /info, /health, /ready, /metrics;
  • schema_version = "1" и типизированные ответы Noul/Choice/Score;
  • формат паков (heads.pt + metadata.json + temperature.json): пак,
    собранный любой версией 1.x, читается всеми версиями линейки;
  • смысл переменных DECISION_* — новые добавляются, старые не меняют значение.

Депрекация — заранее и по правилам. Поверхность объявляется устаревшей
минимум за две минорные версии: заголовки Deprecation/Sunset/Link,
предупреждение в лог, запись в CHANGELOG. Удаление — только в major. Механика
проверяется на старте и тестом, а не «на словах».

Числа воспроизводятся. Любая цифра из docs/benchmarks.md получается
командой из документации: датасеты закреплены ревизиями, uv.lock проверяется
в CI, веса и сырые прогоны лежат ассетами релизов.

Что не обещано

1.0 — про контракт и воспроизводимость, а не про универсальность:

  • Zero-shot нет. Головы «из коробки» случайны: нужно обучить пак на своей
    разметке (train_heads, SFT/RLCD) или скачать опубликованный.
  • Beta-поверхности могут меняться в минорных версиях: risk-aware каскад
    (DECISION_CASCADE_RISK_BUDGET), benefit-каскад
    (DECISION_CASCADE_POLICY=benefit), option-scoring голова, дообучение
    энкодера (finetune_encoder) и по обратной связи (training.feedback).
  • Дрейф домена лечится ограниченно — измерено в docs/drift.md: дообучение
    с replay даёт до +0,8 п.п. сверх контроля при 1000 примерах, а новый набор
    классов требует отдельного пака.

Полная таблица «стабильно / beta» — docs/stability.md §2.

Что изменилось в репозитории

  • src/__init__.py — 1.0.0; pyproject.toml — классификатор
    Development Status :: 5 - Production/Stable.
  • README переведён из беты в стабильный статус, добавлено описание гарантий.
  • docs/stability.md: что обещает 1.x, чем 1.0.0 отличается от 0.16.0,
    какие поверхности остаются beta, политика депрекации с примером 1.0.0 → 1.2.0.
  • tests/test_release.py — версия, README, CHANGELOG и классификатор пакета
    проверяются на согласованность в CI.

Проверки

  • ruff check src api eval training tests examples scripts — чисто;
  • pytest -q — 752 passed, 10 skipped;
  • покрытие src + api — 94% (2444 строки, гейт 90%);
  • shellcheck по всем shell-скриптам — чисто;
  • uv lock --check — ок;
  • pip-audit -r requirements.txt — известных уязвимостей нет;
  • smoke установленного wheel — smoke ok;
  • ночной регресс: 11 прогонов подряд зелёные (30.10–09.11), AG News
    0.8800 и RouterBench 0.5480 стабильны бит-в-бит, delta 0.0 к baseline.

Артефакты

  • decision_cascade-1.0.0-py3-none-any.whl / .tar.gz;
  • v1.0.0-weights.tar.gz + v1.0.0-manifest.json — 7 паков голов
    (public / routerbench / support × distilgpt2 / gpt2 / gpt2-medium);
  • v1.0.0-benchmarks.tar.gz — прогоны сравнения, benefit-замеры, q-файлы,
    калибровка, sha256 (38 файлов).

Веса и замеры сравнения не менялись относительно 0.16.0: релиз — про статус,
а не про новые веса. Контрольные числа: AG News test 0.8800 (gpt2), RouterBench
0.5480, support 0.9258. Дообученный энкодер — из
релиза v0.12.0.

Обновление

Ломающих изменений нет:

cd /opt/decision-model
sudo bash deploy/upgrade.sh /opt/decision-model

Скрипт делает бэкап состояния, git pull, обновляет venv, перезапускает
systemd-юнит и ждёт /ready; при неудаче — сам откатывает данные и код.