Repository navigation
v1.13.0
Release v1.13.0
Action required
Removed deprecated features (#765)
Four previously-deprecated entry points now fail loudly instead of warning:
python-piprequirements provider → useuv-pip.build_config.python_version→ nest it underrequirements:build_config.requirements.python_version.- Direct
Tesseract(...)instantiation → now raisesTypeError; useTesseract.from_url(),from_image(), orfrom_tesseract_api(). InputFileReference/OutputFileReference→ useInputPath/OutputPath.
Updated tesseract_config.yaml:
build_config:
requirements:
provider: uv-pip
python_version: "3.12"GPU transport is now a separate knob from CPU array encoding (#737)
The json+cuda_ipc output format and the enable_experimental_cuda_ipc runtime flag have been removed. Previously, json+cuda_ipc meant "use IPC for everything", so a Tesseract returning a mix of GPU- and CPU-backed arrays failed outright. GPU transport is now controlled by its own gpu_transport knob (default "none"), orthogonal to output_format, and each array is routed by where it lives — CPU arrays inline as usual, GPU arrays leave as cuda_ipc handles.
To restore the old behavior, request cuda_ipc explicitly (this also folds in the former enable_experimental_cuda_ipc opt-in):
from tesseract_core import Tesseract
tess = Tesseract.from_image("my-gpu-tesseract", gpu_transport="cuda_ipc")gpu_transport is a first-class kwarg on Tesseract.from_image, Tesseract.from_tesseract_api, and engine.serve, and can also be set via runtime_config (the kwarg takes precedence). Raw HTTP clients can negotiate it per request through an Accept media-type parameter, e.g. application/json+base64; gpu_transport=cuda_ipc.
Highlights
Configurable startup timeout for slow-starting Tesseracts (#696)
Waiting for a container to answer /health was previously fixed at 30 seconds, so a Tesseract slow to initialize — loading a large model, or spinning up a Julia runtime — could not be served without disabling the health check entirely. serve and from_image now accept a startup_timeout (in seconds, default 30):
tess = Tesseract.from_image("slow-to-load-tesseract", startup_timeout=300)Containers that never become healthy are now also disposed of automatically, and the resulting error carries the container's exit code and output for diagnosis rather than leaving a stopped container behind on a taken port.
Other changes
- Both packages can now be run as modules:
python -m tesseract_core build ...andpython -m tesseract_core.runtime --help(#719). - Unsupported
Acceptformats now return406(with the list of accepted formats) instead of500, and multi-type/wildcard/q-value headers sent by browsers are parsed correctly (#728). - The OpenAPI schema now advertises accepted output formats via a top-level
x-supported-output-formatslist (#732). check-gradientsgains a per-inputepsand VJP output sampling (#713, #739, #712).Tesseract.closenow also closes open HTTP sessions (#761), and empty (zero-length) arrays now pass through encoding (#760).
See the full changelog below for the complete list of fixes and internal changes.
What's Changed
Features
- Let a Tesseract be given longer to start, and dispose of one that never does (#696)
- Advertise the accepted output formats in the OpenAPI schema (#732)
- Let both packages be run as modules (#719)
- [breaking] Split CPU array encoding from GPU transport by introducing separate
gpu_transportknobs (#737) - (runtime) Accept a per-input eps in check-gradients (#713)
- (runtime) Sample VJP outputs in check-gradients (#739)
- (runtime) Serialize TesseractReference outputs (#725) (#742)
- (runtime) Accept a per-input eps in the finite-difference helpers (#712)
Bug Fixes
- (runtime) Stop advertising negative list indices in gradient path patterns (#700)
- (runtime) Advertise every dict key the path resolver can reach (#707)
- (runtime) Serialize stdio redirection across overlapping runs (#710)
- (runtime) Find wheel-installed libcudart for cuda_ipc decode (#716)
- (sdk) Recognise Podman machine's wording for a taken host port (#733)
- (runtime) Answer an unsupported Accept format with 406, not 500; accept more valid header formats (#728)
- (runtime) Clear the sticky CUDA error from a failed IPC handle export (#727)
- (sdk) Stop leaking a container when a port publish collides (#721)
- (runtime) Reject input values that do not fit the declared dtype (#730)
- Build Tesseracts on base images that set UV_SYSTEM_PYTHON (#750)
- (runtime) Allow empty (zero-length) arrays through encoding (#760)
- Make sure
Tesseract.closealso ends open http sessions (#761)
Refactor
- Give
Containera liveis_runningmethod, and lift the serving primitives out of engine.py (#693) - (runtime) Isolate CUDA access in a standalone cuda library module (#736)
- (runtime) Introduce a pluggable device-transport interface (#722)
- [breaking] Remove deprecations scheduled for 1.13.0 (#765)
Documentation
- Remove Tesseract Hackathon 2026 banner from landing page (#735)
- Make "View on GitHub" links track the build ref (#752)
Full diff: v1.12.0...v1.13.0