v0.3.24

NandhaKishorM/layav0.3.24Oct 2, 2026by github-actions[bot]

Upgrading?

AI Summary

A feature-rich release introducing selective-classification metrics, histogram-binning recalibration, and the `LAYA_JEV_STRICT` wire contract, alongside numerous fixes for routing, hooks, and language handling.

Key Highlights

  • Selective-classification metrics (brier, aurc, selective accuracy)
  • Histogram-binning recalibration for answer_confidence
  • Strict JEV wire contract support (`LAYA_JEV_STRICT`)
  • Per-option-count abstention thresholds

New Features

  • Selective-classification metrics
  • Histogram-binning recalibration
  • Strict JEV wire contract
  • Per-option-count abstention thresholds

Full Release Notes

## What's Changed
* docs: expand install guide and add minimal quick-start by @xiehuanyi in https://github.com/NandhaKishorM/laya/pull/162
* fix(agent): resolve checkpoint names and aliases in load() by @Yi-111-a in https://github.com/NandhaKishorM/laya/pull/789
* fix(serve): refuse an unpaired surrogate on /v1/systemone/batch too by @aashish254 in https://github.com/NandhaKishorM/laya/pull/814
* docs(http-api): report every key a decision response actually carries by @aashish254 in https://github.com/NandhaKishorM/laya/pull/816
* docs(router): add routing guide by @Asthenia0412 in https://github.com/NandhaKishorM/laya/pull/461
* chore(deps-dev): Bump vitest from 2.1.9 to 5.0.1 in /laya-ts by @dependabot[bot] in https://github.com/NandhaKishorM/laya/pull/631
* chore(deps-dev): Bump typescript from 5.9.3 to 7.0.2 in /laya-ts by @dependabot[bot] in https://github.com/NandhaKishorM/laya/pull/633
* feat(ts): report the options a head budget collapsed, as laya.common does by @aashish254 in https://github.com/NandhaKishorM/laya/pull/817
* fix(docker): upgrade bundled pip and setuptools in the runtime venv by @xiehuanyi in https://github.com/NandhaKishorM/laya/pull/818
* docs(structured): gate every documented usage shape against the code by @aashish254 in https://github.com/NandhaKishorM/laya/pull/819
* fix(router): synchronize unload per checkpoint instead of globally by @Sarthak-Pandey in https://github.com/NandhaKishorM/laya/pull/881
* fix(hooks): accept sequences in hooks_installed and enforce in API contract by @Swatantra-66 in https://github.com/NandhaKishorM/laya/pull/882
* fix(hooks): reject non-finite hooks_timeout and enforce in API contract by @Swatantra-66 in https://github.com/NandhaKishorM/laya/pull/883
* fix(evals): fail the gates on a NaN metric, limit or tolerance by @abhijithneilabraham in https://github.com/NandhaKishorM/laya/pull/836
* docs(sdk): the design page must name the controls the client really forwards by @aashish254 in https://github.com/NandhaKishorM/laya/pull/837
* docs(examples): the truncation pages must teach the report and the clamp they deny by @aashish254 in https://github.com/NandhaKishorM/laya/pull/841
* docs(examples): example 35 must teach the MPS autocast policy it denies by @aashish254 in https://github.com/NandhaKishorM/laya/pull/842
* fix(examples): example 39 must run, and must name the error it really raises by @aashish254 in https://github.com/NandhaKishorM/laya/pull/843
* fix(examples): example 24 must state the resident cap Router defaults to by @aashish254 in https://github.com/NandhaKishorM/laya/pull/844
* fix(examples): example 33 must teach the head budget build_head implements by @aashish254 in https://github.com/NandhaKishorM/laya/pull/845
* fix(calibration): validate fitting inputs and save maps atomically by @antonio-mello-ai in https://github.com/NandhaKishorM/laya/pull/846
* docs(http-api): list laya-php, the PHP client that targets laya-serve by @Yi-111-a in https://github.com/NandhaKishorM/laya/pull/847
* fix(router): build checkpoints outside the lifecycle lock by @tiagovilasboas in https://github.com/NandhaKishorM/laya/pull/849
* fix(examples): example 28 must compute the conclusions it prints by @aashish254 in https://github.com/NandhaKishorM/laya/pull/850
* docs(shortlist): publish the ordering contract the code ranks by by @aashish254 in https://github.com/NandhaKishorM/laya/pull/852
* feat(confidence): per-option-count abstention thresholds (Closes #394) by @AlKor13 in https://github.com/NandhaKishorM/laya/pull/853
* feat(evals): selective-classification metrics (brier, aurc, selective accuracy) by @AlKor13 in https://github.com/NandhaKishorM/laya/pull/854
* fix(langchain): .batch() forwards lang and min_confidence like .invoke() by @AlKor13 in https://github.com/NandhaKishorM/laya/pull/855
* fix(serve): /v1/systemone/batch total_usage sums output_tokens instead of reporting 0 by @AlKor13 in https://github.com/NandhaKishorM/laya/pull/856
* fix(mcp): laya_predict_batch validates min_confidence and hooks_timeout up front by @AlKor13 in https://github.com/NandhaKishorM/laya/pull/857
* fix(mcp): type-check a batch item's lang_guess like the single-request path by @AlKor13 in https://github.com/NandhaKishorM/laya/pull/858
* ci(windows): install the extras and httpx the suite list assumes by @thread3d in https://github.com/NandhaKishorM/laya/pull/860
* fix(agent): warn on fallbacks instead of printing to stdout by @thread3d in https://github.com/NandhaKishorM/laya/pull/861
* fix(agent): catch an in-place question rewrite in the scan-budget guard by @thread3d in https://github.com/NandhaKishorM/laya/pull/862
* fix(agent): reject non-scalar choice labels exactly, not by deny-list by @thread3d in https://github.com/NandhaKishorM/laya/pull/863
* ci(typescript-sdk): pin the three floating actions by SHA by @thread3d in https://github.com/NandhaKishorM/laya/pull/864
* ci(evals): run the offline research suites no workflow executes by @thread3d in https://github.com/NandhaKishorM/laya/pull/865
* ci(evals): run the ONNX parity and demo-server suites in the weight lane by @thread3d in https://github.com/NandhaKishorM/laya/pull/866
* docs(readme): link absolutely in the published READMEs, and name the gate fields by @thread3d in https://github.com/NandhaKishorM/laya/pull/867
* fix(laya-ts): keep bytecode out of the npm tarball and ship the LICENSE by @thread3d in https://github.com/NandhaKishorM/laya/pull/868
* ci: run one shared test list in CI and before a release by @thread3d in https://github.com/NandhaKishorM/laya/pull/869
* feat(serve): LAYA_JEV_STRICT projects the response onto the strict Jev wire contract by @davidberardozzi in https://github.com/NandhaKishorM/laya/pull/870
* feat(calibrate): histogram-binning recalibration for answer_confidence by @AlKor13 in https://github.com/NandhaKishorM/laya/pull/871
* fix(laya-ts): verify ONNX artifacts before importing the native runtime by @thread3d in https://github.com/NandhaKishorM/laya/pull/872
* fix(serve): reject a null score level with 422 instead of an unparseable null legend (#302) by @AlKor13 in https://github.com/NandhaKishorM/laya/pull/873
* fix(fast): partition the decision head's attention by the head's own head count by @AlKor13 in https://github.com/NandhaKishorM/laya/pull/874
* docs(agent): fix predict_long's note on when a window is cut by @somtri in https://github.com/NandhaKishorM/laya/pull/875
* fix(hooks): close unawaited coroutine when run_coroutine_sync rejects loop by @kaushikharsh99 in https://github.com/NandhaKishorM/laya/pull/877
* feat(sdk): type and validate the whole usage report /v1/systemone answers with by @aashish254 in https://github.com/NandhaKishorM/laya/pull/820
* fix(sdk): type the mixed_segment a routing detection answer carries by @aashish254 in https://github.com/NandhaKishorM/laya/pull/821
* fix(sdk): read the confidence an answer is gated on and the abstention report by @aashish254 in https://github.com/NandhaKishorM/laya/pull/822
* docs(serve): document the abstention gate's report on every answer, and hold the answer table to the code by @aashish254 in https://github.com/NandhaKishorM/laya/pull/824
* fix(agent): hold the tokenizer lock while predict_long encodes the state by @abhijithneilabraham in https://github.com/NandhaKishorM/laya/pull/831
* fix(calibrate): run records_from_labeled with gradients off by @abhijithneilabraham in https://github.com/NandhaKishorM/laya/pull/832
* fix(integrations): gate a LayaTaskGuard score question on its upper-half probability by @abhijithneilabraham in https://github.com/NandhaKishorM/laya/pull/833
* docs: correct cross-references, remove duplicated text and repair two stale paths by @ashyyhere in https://github.com/NandhaKishorM/laya/pull/840

## New Contributors
* @xiehuanyi made their first contribution in https://github.com/NandhaKishorM/laya/pull/162
* @Asthenia0412 made their first contribution in https://github.com/NandhaKishorM/laya/pull/461
* @abhijithneilabraham made their first contribution in https://github.com/NandhaKishorM/laya/pull/836
* @antonio-mello-ai made their first contribution in https://github.com/NandhaKishorM/laya/pull/846
* @tiagovilasboas made their first contribution in https://github.com/NandhaKishorM/laya/pull/849
* @kaushikharsh99 made their first contribution in https://github.com/NandhaKishorM/laya/pull/877
* @ashyyhere made their first contribution in https://github.com/NandhaKishorM/laya/pull/840

**Full Changelog**: https://github.com/NandhaKishorM/laya/compare/v0.3.23...v0.3.24

Related Repositories