From 0ad433e82a6d2b89e068b9b56c3ed7c1e36ccaf8 Mon Sep 17 00:00:00 2001 From: Roko Date: Wed, 23 Sep 2026 05:11:35 -0700 Subject: [PATCH 1/2] fix: restore write encoding perf by encoding vectors before transform walk (#266) --- src/turbopuffer/_utils/_transform.py | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/src/turbopuffer/_utils/_transform.py b/src/turbopuffer/_utils/_transform.py index 25e3c643..ac2c41de 100644 --- a/src/turbopuffer/_utils/_transform.py +++ b/src/turbopuffer/_utils/_transform.py @@ -182,10 +182,11 @@ class Params(TypedDict, total=False): It should be noted that the transformations that this function does are not represented in the type system. """ # turbopuffer: Use simple vector encoding instead of generic type-based transform. - data = cast(_T, _turbopuffer_transform(data)) + # Encode vectors before walking the body so the walk sees one base64 string + # per vector instead of recursing into every float. if expected_type is NamespaceWriteParams: - return cast(_T, _encode_write_vectors(data)) - return data + data = cast(_T, _encode_write_vectors(data)) + return cast(_T, _turbopuffer_transform(data)) @lru_cache(maxsize=8096) @@ -404,10 +405,11 @@ class Params(TypedDict, total=False): It should be noted that the transformations that this function does are not represented in the type system. """ # turbopuffer: Use simple vector encoding instead of generic type-based transform. - data = cast(_T, _turbopuffer_transform(data)) + # Encode vectors before walking the body so the walk sees one base64 string + # per vector instead of recursing into every float. if expected_type is NamespaceWriteParams: - return cast(_T, _encode_write_vectors(data)) - return data + data = cast(_T, _encode_write_vectors(data)) + return cast(_T, _turbopuffer_transform(data)) async def _async_transform_recursive( From 08953966bc238d81d5a532da18ee3168aa8e41aa Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Wed, 23 Sep 2026 12:11:58 +0000 Subject: [PATCH 2/2] release: 2.10.2 --- .release-please-manifest.json | 2 +- CHANGELOG.md | 8 ++++++++ pyproject.toml | 2 +- src/turbopuffer/_version.py | 2 +- 4 files changed, 11 insertions(+), 3 deletions(-) diff --git a/.release-please-manifest.json b/.release-please-manifest.json index d3625700..45e2f0ab 100644 --- a/.release-please-manifest.json +++ b/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "2.10.1" + ".": "2.10.2" } \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index fe66b0a8..bc3f9e62 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,13 @@ # Changelog +## 2.10.2 (2026-09-23) + +Full Changelog: [v2.10.1...v2.10.2](https://github.com/turbopuffer/turbopuffer-python/compare/v2.10.1...v2.10.2) + +### Bug Fixes + +* restore write encoding perf by encoding vectors before transform walk ([#266](https://github.com/turbopuffer/turbopuffer-python/issues/266)) ([0ad433e](https://github.com/turbopuffer/turbopuffer-python/commit/0ad433e82a6d2b89e068b9b56c3ed7c1e36ccaf8)) + ## 2.10.1 (2026-09-19) Full Changelog: [v2.10.0...v2.10.1](https://github.com/turbopuffer/turbopuffer-python/compare/v2.10.0...v2.10.1) diff --git a/pyproject.toml b/pyproject.toml index a55b6cb3..3bdfad6f 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "turbopuffer" -version = "2.10.1" +version = "2.10.2" description = "The official Python library for the turbopuffer API" dynamic = ["readme"] license = "MIT" diff --git a/src/turbopuffer/_version.py b/src/turbopuffer/_version.py index bba442e7..86165407 100644 --- a/src/turbopuffer/_version.py +++ b/src/turbopuffer/_version.py @@ -1,4 +1,4 @@ # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. __title__ = "turbopuffer" -__version__ = "2.10.1" # x-release-please-version +__version__ = "2.10.2" # x-release-please-version