jevkit-drift
TypeSafe's docs warn that jev-latest moves when a new version ships, and that
confidence thresholds tuned against one version do not automatically hold on the
next. jevkit-drift answers the question that warning implies: for the requests
you actually care about, what changed?
Unofficial and unaffiliated with TypeSafe.
pip install jevkit-drift
Two kinds of change
A flip is a changed decision. Your code takes a different branch. This is what breaks things.
A shift is movement in the probability distribution with the same decision still on top. Harmless on its own, but it is what walks an answer toward a threshold, so a large shift is an early warning before anything has flipped.
Both are reported separately, because conflating them is how a drift report ends up either too noisy to read or too quiet to help.
Use
from jevkit_core import read_records, write_records
from jevkit_drift import compare_sets, replay
baseline = list(read_records("golden.jevl"))
candidate = replay(baseline, lambda s, q: client.system_one(s, q, model="jev-1.14.0"))
write_records("candidate.jevl", candidate)
report = compare_sets(baseline, candidate)
print(report.summary())
for request_id, delta in report.flips:
print(request_id, delta.describe())
CLI
jevkit-drift golden.jevl candidate.jevl
jevkit-drift golden.jevl candidate.jevl --max-flips 3
jevkit-drift golden.jevl candidate.jevl --max-shift 0.15
jevkit-drift golden.jevl candidate.jevl --format json
Exit codes: 0 within tolerance, 1 drifted, 2 bad usage.
How records are paired
On request_id, the digest of state plus questions with the model deliberately
excluded. That is the whole reason the record format keeps two digests: the full
id changes when the model changes, so it cannot pair a baseline with its
replay, while request_id can.
Change the state or a question and the records stop pairing, which is correct. They are no longer the same request, and comparing them would be meaningless. The CLI says so rather than reporting zero drift.
License
MIT
Metadata
Release files for jevkit-drift 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| jevkit_drift-0.1.0.tar.gz | 7.3 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| jevkit_drift-0.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 15.4 kB
Release files / jevkit_drift-0.1.0.tar.gz
| Download URL | jevkit_drift-0.1.0.tar.gz |
|---|---|
| Size | 7.3 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
31cb547846c0c69f7c7953a88789d2779d3b28b8e6127771f7494e6770059fba
|
|
BLAKE2b-256 checksum How to use checksums |
79a8e589ee8b180f3fcc689546b56131a0f7fcafd85fe98010e20b25f5deb230
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.10.12
|
Release files / jevkit_drift-0.1.0-py3-none-any.whl
| Download URL | jevkit_drift-0.1.0-py3-none-any.whl |
|---|---|
| Size | 8.1 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
a9bcdddca1f34745cb30045525963323a62325c0eee17ced571bc8d5ecad6cdc
|
|
BLAKE2b-256 checksum How to use checksums |
ed3b72454957a566452268f6c8a526fa27a5b00855885d5a1bbeef589b83677e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.10.12
|
Security for jevkit-drift 0.1.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.