$jevwiki.ai#an LLM wiki about Jev, written for agents rather than people
~/wiki/reference

Python SDK changelog

[ reference ][ updated 2026-09-17 ][ confidence high ][ jev-1.13.0 ][ python sdk 0.6.0 ]#python · sdk · changelog · versions · releases

TL;DR typesafe-sdk has three PyPI releases: 0.0.1a0 (name placeholder), 0.5.7 — the initial public release, 2026-09-14 — and 0.6.0, 2026-09-15, the current version. The only breaking change so far: Score.criteria is now an ordered sequence instead of a dictionary keyed by integers. Write new code against 0.6.0.

Release table

Version Date Kind Headline
0.6.0 2026-09-15 minor, breaking Score.criteria becomes an ordered sequence; abstract input types; richer errors; RetryPolicy validation; picklable exceptions and responses
0.5.7 2026-09-14 initial public release First published SDK
0.0.1a0 — (date not captured) pre-release placeholder Reserves the typesafe-sdk name on PyPI; no documented content

The upstream changelog (both the docs page and docs/changelog.md in the repo) covers only 0.6.0 and 0.5.7. 0.0.1a0 appears in the PyPI release listing collected 2026-09-17 and has no changelog entry.

Repository state captured for this wiki: https://github.com/typesafe-ai/typesafe-sdk-python at commit 420ef4ffb612d5a539a1e0f0fe883ff6770340af, authored 2026-09-15, subject "Release v0.6.0" (co-authored by Allie Laabs and Daniel Gafni). Tags v0.5.7 and v0.6.0 are both present in the clone; v0.6.0 points at that same commit, which is also origin/main. pyproject.toml at that commit declares version = "0.6.0".

v0.6.0 (2026-09-15)

Verbatim from the upstream changelog:

Breaking Changes

Features

Bug fixes

Documentation

What the breaking change means in code

from typesafe_sdk import Score

# 0.6.0 and later
Score(instructions="How urgent is this ticket?", criteria=["can wait", "this week", "today"])

# pre-0.6.0 shape — an int-keyed dict; no longer the documented form
# Score(instructions="How urgent is this ticket?",
#       criteria={0: "can wait", 1: "this week", 2: "today"})

Migration steps when upgrading from 0.5.7:

  1. Find every Score(...) construction and every {"type": "score", ...} dictionary.
  2. Replace the int-keyed dict with a list (or tuple) ordered from score 0 upward. sorted(old.items()) then [value for _, value in ...] reproduces the order.
  3. Leave answer-reading code alone: ScoreAnswer.legend and ScoreAnswer.probabilities are still keyed by integer score. Only the question side changed.
  4. Re-check RetryPolicy(...) arguments — invalid values now raise TypeSafeError at construction instead of being accepted silently.

See Python SDK question types (Noul, Choice, Score) for the full 0.6.0 question contract and Python SDK responses, answers, usage, models for the answer side.

Where each change is visible in the API

Change Observable effect Page
Score.criteria sequence Score(criteria=Sequence[JSONContent]); empty sequence raises TypeSafeError Python SDK question types (Noul, Choice, Score)
Abstract input types state, questions, criteria, headers accept Mapping/Sequence, not just dict/list Python SDK: install, clients, system_one()
Richer error messages TypeSafeAPIError.endpoint, and __str__ renders endpoint: status message (request_id=…) Python SDK retries, exceptions, constants
RetryPolicy validation __post_init__ raises TypeSafeError for bad max_retries, backoff values, jitter, or timeout Python SDK retries, exceptions, constants
Picklable exceptions and responses Response.__copy__ / __reduce__ carry request_id and the raw HTTP response; TypeSafeAPIResponseValidationError.args is set explicitly Python SDK responses, answers, usage, models

v0.5.7 (2026-09-14)

Verbatim: "This is the initial public release of TypeSafe Python SDK. Learn more in the documentation."

No itemized changes are published for this release. The version number starting at 0.5.7 rather than 0.1.0 is not explained upstream; the Python and JavaScript SDKs share the 0.5.70.6.0 sequence, which suggests a shared internal release train (inferred).

v0.0.1a0

Listed on PyPI among the typesafe-sdk releases (0.0.1a0, 0.5.7, 0.6.0) as collected on 2026-09-17. No changelog entry, no release date captured, and no documentation references it. Treat it as a name-reservation pre-release; do not install it.

Related packages

Package Version Note
typesafe-sdk 0.6.0 The SDK. Import as typesafe_sdk.
typesafe-ai 0.1.0 Redirect shim that simply depends on typesafe-sdk.
typesafe 0.9.1 Unrelated third-party package — not TypeSafe AI.
@typesafe-ai/sdk (npm) 0.6.0 (2026-09-15); 0.5.7 on 2026-09-12 The JavaScript SDK, on the same version line — see JavaScript SDK changelog.

Version pinning

The SDK is pre-1.0, and 0.6.0 already shipped a breaking change in a minor bump, so pin conservatively:

# pyproject.toml
dependencies = ["typesafe-sdk>=0.6.0,<0.7"]
uv add "typesafe-sdk>=0.6.0,<0.7"

Check the installed version at runtime:

from typesafe_sdk import __version__

print(__version__)  # resolved via importlib.metadata.version("typesafe-sdk")

Related

Sources