v0.3.29

max-sixty/worktrunkv0.3.29Oct 7, 2026by github-actions[bot]

Upgrading?

AI Summary

This is a release for the laya repository (not worktrunk). It includes documentation fixes, train improvements, evidence inspection, and various bug fixes.

Key Highlights

  • Evidence inspection over checkpoint and eval artifacts
  • Add --eval, abstention threshold fitting, and before/after train_report.json
  • Rewrite the fine-tuning guide around laya-train
  • Docs fixes for examples, evals, hooks, and other areas
  • Fix confidence: clear stale low_confidence flag on re-evaluation

New Features

  • Evidence inspection feature
  • Train improvements with eval support
  • Abstention threshold fitting
  • Laya-train fine-tuning guide
  • Comprehensive documentation corrections

Full Release Notes

## What's Changed
* build(deps): cap NumPy below 2 in the onnx extra by @thread3d in https://github.com/NandhaKishorM/laya/pull/947
* feat(evals): evidence inspection over checkpoint and eval artifacts by @Bruce-Yii in https://github.com/NandhaKishorM/laya/pull/964
* fix(agent): read a state predict_long's questions leave room for in one pass by @JeelGajera in https://github.com/NandhaKishorM/laya/pull/966
* docs(examples): example 18 must not call the shipped answer_confidence calibrated by @aashish254 in https://github.com/NandhaKishorM/laya/pull/973
* docs(examples): example 30 must call score confidence 1 - H/log(k), not the entropy by @aashish254 in https://github.com/NandhaKishorM/laya/pull/974
* docs(examples): example 21 must read its cost claim off the measurement it takes by @aashish254 in https://github.com/NandhaKishorM/laya/pull/975
* docs(evals): the --min-confidence gate flags the answer, it does not overwrite it by @aashish254 in https://github.com/NandhaKishorM/laya/pull/976
* docs(examples): example 26 must count triage_questions()'s three yes/no fields by @aashish254 in https://github.com/NandhaKishorM/laya/pull/978
* docs(tl_kernels): the multiple-of-16 comes from tokens, not rows by @aashish254 in https://github.com/NandhaKishorM/laya/pull/979
* docs(structured): DecisionResult's confidence is per-type, not uniformly entropy by @aashish254 in https://github.com/NandhaKishorM/laya/pull/980
* docs(presets): questions-and-answers must count five, not three by @aashish254 in https://github.com/NandhaKishorM/laya/pull/981
* docs(typescript-sdk): /health returns seven keys, not the three the page listed by @aashish254 in https://github.com/NandhaKishorM/laya/pull/983
* docs(mcp): laya_route_batch row must name its own six keys by @aashish254 in https://github.com/NandhaKishorM/laya/pull/984
* docs(http-api): strict JEV answers carry type, the pages did not say so by @aashish254 in https://github.com/NandhaKishorM/laya/pull/986
* docs(hooks): scope plain callables to on_predict_start=/on_predict_end=, not hooks= by @aashish254 in https://github.com/NandhaKishorM/laya/pull/987
* docs(hooks): api.md blocks must name hooks_timeout like their hooks_raise siblings by @aashish254 in https://github.com/NandhaKishorM/laya/pull/988
* docs(hooks): tracing.md nested-call example must read child run_id from ctx by @aashish254 in https://github.com/NandhaKishorM/laya/pull/989
* docs(hooks): errors.md must enumerate every hooks_raise and hooks_timeout surface by @aashish254 in https://github.com/NandhaKishorM/laya/pull/990
* docs(hooks): lifecycle.md must place process-wide defaults ahead of installed by @aashish254 in https://github.com/NandhaKishorM/laya/pull/991
* docs(readme): batch-hooks bullet must split predict_batch from route_batch by @aashish254 in https://github.com/NandhaKishorM/laya/pull/992
* docs(hooks): patterns.md Composition must name defaults as the head tier by @aashish254 in https://github.com/NandhaKishorM/laya/pull/993
* docs(security): /health sample must filter to revisions, not claim four keys by @aashish254 in https://github.com/NandhaKishorM/laya/pull/994
* docs(hooks): examples.md Composition must name the three tiers, not two by @aashish254 in https://github.com/NandhaKishorM/laya/pull/995
* docs(agent): predict_long gate comments must describe the None contract, not claim a report by @aashish254 in https://github.com/NandhaKishorM/laya/pull/996
* docs(common): render_criterion's docstring must name the separators it passes by @aashish254 in https://github.com/NandhaKishorM/laya/pull/997
* docs(mcp): laya_shortlist's metadata list must name passthrough, the fifth key by @aashish254 in https://github.com/NandhaKishorM/laya/pull/998
* docs(email): email_state's **extra rule must name the None filter it documents by @aashish254 in https://github.com/NandhaKishorM/laya/pull/999
* test(portability): no repo read in tests/ may leave the codec to the runner by @aashish254 in https://github.com/NandhaKishorM/laya/pull/1001
* fix(confidence): a min_confidence map key must name a bucket an answer can produce by @aashish254 in https://github.com/NandhaKishorM/laya/pull/1002
* docs(calibrate): the calibration payload's contract must name binning_map and every shape it refuses by @aashish254 in https://github.com/NandhaKishorM/laya/pull/1003
* docs(examples): example 03 must give `confidence` per question type, not one formula by @aashish254 in https://github.com/NandhaKishorM/laya/pull/1004
* docs: both confidence pages must attribute `confidence` per question type, not as one entropy formula by @aashish254 in https://github.com/NandhaKishorM/laya/pull/1005
* docs(train): rewrite the fine-tuning guide around laya-train by @GuilhermeFusari in https://github.com/NandhaKishorM/laya/pull/1007
* fix(example): the demo's certainty chip must name its question type's formula by @aashish254 in https://github.com/NandhaKishorM/laya/pull/1008
* docs(predict_long): the default window's 64-token floor must be in the docstrings that state the default by @aashish254 in https://github.com/NandhaKishorM/laya/pull/1009
* docs(evals): the calibration column must name its fallback, and the shipped level is not calibrated by @aashish254 in https://github.com/NandhaKishorM/laya/pull/1011
* fix(lang): do not name all-caps acronym and address lines as foreign prose by @keemsisi in https://github.com/NandhaKishorM/laya/pull/1013
* refactor(finetune): converge single-process wrappers on laya.train by @Bruce-Yii in https://github.com/NandhaKishorM/laya/pull/965
* feat(train): add --eval, abstention threshold fitting, and before/after train_report.json (#887) by @Swatantra-66 in https://github.com/NandhaKishorM/laya/pull/967
* fix(train): warn when fine-tune predictions collapse to the class prior by @tiagovilasboas in https://github.com/NandhaKishorM/laya/pull/968
* docs(examples): example 40 must not call answer_confidence calibrated by @aashish254 in https://github.com/NandhaKishorM/laya/pull/972
* docs(mcp): laya_decide row must list min_confidence; every tool row must name every handler param by @aashish254 in https://github.com/NandhaKishorM/laya/pull/985
* feat(research): three-seed RLCD vs soft-CE default-loss panel for #887 by @Bruce-Yii in https://github.com/NandhaKishorM/laya/pull/1012

## New Contributors
* @JeelGajera made their first contribution in https://github.com/NandhaKishorM/laya/pull/966

**Full Changelog**: https://github.com/NandhaKishorM/laya/compare/v0.3.28...v0.3.29

Related Repositories