Skip to content

v0.5.0

Latest

Choose a tag to compare

@guyazran guyazran released this 05 Oct 22:08
· 43 commits to main since this release

Released on PyPI on 2026-10-05: https://pypi.org/project/s3e/0.5.0/

Added

  • JOSS submission materials: paper/paper.md and paper/paper.bib, with a
    GitHub Actions workflow that builds the draft PDF.
  • Sphinx API reference under docs/ (Read the Docs configuration in
    .readthedocs.yaml) and docstrings for the remaining public calibration,
    answer-space, and serialization APIs.
  • Continuous integration running the fast test suite on Python 3.10–3.14 and
    building the documentation.
  • Community files: CONTRIBUTING.md, CODE_OF_CONDUCT.md, issue and pull
    request templates, and CITATION.cff.
  • .mailmap consolidating the maintainer's commit identities.
  • MANIFEST.in so the source distribution ships the full test suite.
  • Prediction.has_answer and Prediction.matched, and an
    UnmatchedAnswerWarning emitted once per QueryEngine.ask call when some
    queries match no answer option (a text_match reply that starts with no
    answer token, or zero mass on every answer token).

Changed

  • Breaking: to_state and SemanticStateEstimator.__call__ always return
    a complete dict[str, bool]: a predicate is True iff P(true) >= confidence,
    never None. Prediction.answer is never None.
  • Breaking: a prediction has no answer when the explicit null option is
    its top answer or no answer token received any mass. Its P(true) is 0.5 (a
    uniform distribution for categorical spaces), even when calibrated, so it is
    True at the default confidence of 0.5 and False above it.
  • Breaking: for binary spaces, Prediction.answer is
    probability >= 0.5, so it follows a calibrated probability; previously it
    was the argmax of the raw masses. Categorical ties, including the uniform
    distribution of a prediction with no answer, go to the first listed option.
  • Breaking: text_match scoring matches only when the reply starts with
    an answer token (as a whole word, longest token first, with the null option
    competing); previously a token anywhere in the reply matched. Replies such
    as Answer: yes, **Yes**, or a leading <think> block now match nothing.
  • Prediction.probability is T / (T + F) without smoothing, so a matched
    text_match reply gives exactly 1.0. Calibration scores are unchanged.
  • Prediction.probability raises ValueError for non-binary answer spaces
    even when a calibrated probability is set.

Fixed

  • CalibrationSet.collect skips predictions with no answer, which are not
    valid training points.
  • PredictionSet.average averages calibrated probabilities only over members
    that have an answer.