From 3421ea0ba6b98a2500e72dadd4e61aa4b0410f60 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Tue, 9 Jun 2026 23:48:58 +0000 Subject: [PATCH 1/5] feat: tpuf-engine: support dest_encryption in copy_from_namespace --- .stats.yml | 4 ++-- src/turbopuffer/resources/namespaces.py | 8 ++++++++ src/turbopuffer/types/namespace_copy_from_params.py | 5 +++++ tests/api_resources/test_namespaces.py | 8 ++++++++ 4 files changed, 23 insertions(+), 2 deletions(-) diff --git a/.stats.yml b/.stats.yml index 92e92e62..f602c230 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 14 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/turbopuffer-benesch/turbopuffer-17e5bcde1d39d5673f2b1bf4446afa000d90a0fdb9ae4b86a05bd15f12f9e547.yml -openapi_spec_hash: 4aaf757ac332b99a28f9a44a47891a5f +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/turbopuffer-benesch/turbopuffer-0841bbcabedf7be7aa04e2a1fe9092987f51c5cb0d9ad4202eeb1ba4eef1f2b0.yml +openapi_spec_hash: bd6fdabde2b66bca3b7a3427ca943d9d config_hash: bab72dc9f937352c7a01a37dadd44122 diff --git a/src/turbopuffer/resources/namespaces.py b/src/turbopuffer/resources/namespaces.py index 876edec2..24396608 100644 --- a/src/turbopuffer/resources/namespaces.py +++ b/src/turbopuffer/resources/namespaces.py @@ -128,6 +128,7 @@ def copy_from( *, namespace: str | None = None, source_namespace: str, + dest_encryption: EncryptionParam | Omit = omit, source_api_key: str | Omit = omit, source_region: str | Omit = omit, # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. @@ -143,6 +144,8 @@ def copy_from( Args: source_namespace: The namespace to copy documents from. + dest_encryption: (Optional) The encryption configuration for the destination namespace. + source_api_key: (Optional) An API key for the organization containing the source namespace source_region: (Optional) The region of the source namespace. @@ -165,6 +168,7 @@ def copy_from( "copy_from_namespace": maybe_transform( { "source_namespace": source_namespace, + "dest_encryption": dest_encryption, "source_api_key": source_api_key, "source_region": source_region, }, @@ -887,6 +891,7 @@ async def copy_from( *, namespace: str | None = None, source_namespace: str, + dest_encryption: EncryptionParam | Omit = omit, source_api_key: str | Omit = omit, source_region: str | Omit = omit, # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. @@ -902,6 +907,8 @@ async def copy_from( Args: source_namespace: The namespace to copy documents from. + dest_encryption: (Optional) The encryption configuration for the destination namespace. + source_api_key: (Optional) An API key for the organization containing the source namespace source_region: (Optional) The region of the source namespace. @@ -924,6 +931,7 @@ async def copy_from( "copy_from_namespace": await async_maybe_transform( { "source_namespace": source_namespace, + "dest_encryption": dest_encryption, "source_api_key": source_api_key, "source_region": source_region, }, diff --git a/src/turbopuffer/types/namespace_copy_from_params.py b/src/turbopuffer/types/namespace_copy_from_params.py index 596f07c6..ff30f0f5 100644 --- a/src/turbopuffer/types/namespace_copy_from_params.py +++ b/src/turbopuffer/types/namespace_copy_from_params.py @@ -4,6 +4,8 @@ from typing_extensions import Required, TypedDict +from .encryption_param import EncryptionParam + __all__ = ["NamespaceCopyFromParams"] @@ -13,6 +15,9 @@ class NamespaceCopyFromParams(TypedDict, total=False): source_namespace: Required[str] """The namespace to copy documents from.""" + dest_encryption: EncryptionParam + """(Optional) The encryption configuration for the destination namespace.""" + source_api_key: str """(Optional) An API key for the organization containing the source namespace""" diff --git a/tests/api_resources/test_namespaces.py b/tests/api_resources/test_namespaces.py index 553f47c0..0c9c6145 100644 --- a/tests/api_resources/test_namespaces.py +++ b/tests/api_resources/test_namespaces.py @@ -85,6 +85,10 @@ def test_method_copy_from(self, client: Turbopuffer) -> None: def test_method_copy_from_with_all_params(self, client: Turbopuffer) -> None: namespace = client.namespace("namespace").copy_from( source_namespace="source_namespace", + dest_encryption={ + "key_name": "key_name", + "mode": "customer-managed", + }, source_api_key="source_api_key", source_region="source_region", ) @@ -701,6 +705,10 @@ async def test_method_copy_from(self, async_client: AsyncTurbopuffer) -> None: async def test_method_copy_from_with_all_params(self, async_client: AsyncTurbopuffer) -> None: namespace = await async_client.namespace("namespace").copy_from( source_namespace="source_namespace", + dest_encryption={ + "key_name": "key_name", + "mode": "customer-managed", + }, source_api_key="source_api_key", source_region="source_region", ) From 68e7cd6fb1b073b5112def1ee4083f62ab994610 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Fri, 12 Jun 2026 20:44:45 +0000 Subject: [PATCH 2/5] docs: rename /docs/overview to /docs/api-overview --- .stats.yml | 4 ++-- README.md | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.stats.yml b/.stats.yml index f602c230..0e748ff0 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 14 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/turbopuffer-benesch/turbopuffer-0841bbcabedf7be7aa04e2a1fe9092987f51c5cb0d9ad4202eeb1ba4eef1f2b0.yml +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/turbopuffer-benesch/turbopuffer-949092f69521d36010ea13571dc7ed1015a95e90897a971a398e1a5c968a8163.yml openapi_spec_hash: bd6fdabde2b66bca3b7a3427ca943d9d -config_hash: bab72dc9f937352c7a01a37dadd44122 +config_hash: cf1d73eb027654e6e18f24ca8b37f2af diff --git a/README.md b/README.md index e5637be4..e786e28c 100644 --- a/README.md +++ b/README.md @@ -20,7 +20,7 @@ Use the turbopuffer MCP Server to enable AI assistants to interact with this API ## Documentation -The HTTP API documentation can be found at [turbopuffer.com/docs/overview](https://turbopuffer.com/docs/overview). +The HTTP API documentation can be found at [turbopuffer.com/docs/api-overview](https://turbopuffer.com/docs/api-overview). ## Installation From e779eca3645e79cb84b065f2ca8de4eb0e755103 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Thu, 25 Jun 2026 22:35:18 +0000 Subject: [PATCH 3/5] chore: remove unused MCP package --- .stats.yml | 4 ++-- README.md | 9 --------- uv.lock | 2 +- 3 files changed, 3 insertions(+), 12 deletions(-) diff --git a/.stats.yml b/.stats.yml index 0e748ff0..561cacc5 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 14 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/turbopuffer-benesch/turbopuffer-949092f69521d36010ea13571dc7ed1015a95e90897a971a398e1a5c968a8163.yml +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/turbopuffer-benesch/turbopuffer-2fd82fbbc7c30bea4808115816a40a4c1aaacebd243bb3bd50a2ac377deb835a.yml openapi_spec_hash: bd6fdabde2b66bca3b7a3427ca943d9d -config_hash: cf1d73eb027654e6e18f24ca8b37f2af +config_hash: 068c4c3b2277de182691cc65c1e50a7c diff --git a/README.md b/README.md index e786e28c..9f185409 100644 --- a/README.md +++ b/README.md @@ -9,15 +9,6 @@ and offers both synchronous and asynchronous clients powered by [httpx](https:// It is generated with [Stainless](https://www.stainless.com/). -## MCP Server - -Use the turbopuffer MCP Server to enable AI assistants to interact with this API, allowing them to explore endpoints, make test requests, and use documentation to help integrate this SDK into your application. - -[![Add to Cursor](https://cursor.com/deeplink/mcp-install-dark.svg)](https://cursor.com/en-US/install-mcp?name=%40turbopuffer%2Fturbopuffer-mcp&config=eyJuYW1lIjoiQHR1cmJvcHVmZmVyL3R1cmJvcHVmZmVyLW1jcCIsInRyYW5zcG9ydCI6Imh0dHAiLCJ1cmwiOiJodHRwczovL3R1cmJvcHVmZmVyLnN0bG1jcC5jb20iLCJoZWFkZXJzIjp7IngtdHVyYm9wdWZmZXItYXBpLWtleSI6InRwdWZfQTEuLi4ifX0) -[![Install in VS Code](https://img.shields.io/badge/_-Add_to_VS_Code-blue?style=for-the-badge&logo=data:image/svg%2bxml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGZpbGw9Im5vbmUiIHZpZXdCb3g9IjAgMCA0MCA0MCI+PHBhdGggZmlsbD0iI0VFRSIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNMzAuMjM1IDM5Ljg4NGEyLjQ5MSAyLjQ5MSAwIDAgMS0xLjc4MS0uNzNMMTIuNyAyNC43OGwtMy40NiAyLjYyNC0zLjQwNiAyLjU4MmExLjY2NSAxLjY2NSAwIDAgMS0xLjA4Mi4zMzggMS42NjQgMS42NjQgMCAwIDEtMS4wNDYtLjQzMWwtMi4yLTJhMS42NjYgMS42NjYgMCAwIDEgMC0yLjQ2M0w3LjQ1OCAyMCA0LjY3IDE3LjQ1MyAxLjUwNyAxNC41N2ExLjY2NSAxLjY2NSAwIDAgMSAwLTIuNDYzbDIuMi0yYTEuNjY1IDEuNjY1IDAgMCAxIDIuMTMtLjA5N2w2Ljg2MyA1LjIwOUwyOC40NTIuODQ0YTIuNDg4IDIuNDg4IDAgMCAxIDEuODQxLS43MjljLjM1MS4wMDkuNjk5LjA5MSAxLjAxOS4yNDVsOC4yMzYgMy45NjFhMi41IDIuNSAwIDAgMSAxLjQxNSAyLjI1M3YuMDk5LS4wNDVWMzMuMzd2LS4wNDUuMDk1YTIuNTAxIDIuNTAxIDAgMCAxLTEuNDE2IDIuMjU3bC04LjIzNSAzLjk2MWEyLjQ5MiAyLjQ5MiAwIDAgMS0xLjA3Ny4yNDZabS43MTYtMjguOTQ3LTExLjk0OCA5LjA2MiAxMS45NTIgOS4wNjUtLjAwNC0xOC4xMjdaIi8+PC9zdmc+)](https://vscode.stainless.com/mcp/%7B%22name%22%3A%22%40turbopuffer%2Fturbopuffer-mcp%22%2C%22type%22%3A%22http%22%2C%22url%22%3A%22https%3A%2F%2Fturbopuffer.stlmcp.com%22%2C%22headers%22%3A%7B%22x-turbopuffer-api-key%22%3A%22tpuf_A1...%22%7D%7D) - -> Note: You may need to set environment variables in your MCP client. - ## Documentation The HTTP API documentation can be found at [turbopuffer.com/docs/api-overview](https://turbopuffer.com/docs/api-overview). diff --git a/uv.lock b/uv.lock index 1ee02410..4c617a75 100644 --- a/uv.lock +++ b/uv.lock @@ -2246,7 +2246,7 @@ wheels = [ [[package]] name = "turbopuffer" -version = "1.21.0" +version = "2.4.0" source = { editable = "." } dependencies = [ { name = "aiohttp" }, From efea1546e3c152c65fb5d2d252a82a3a6c9fe8ed Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Thu, 25 Jun 2026 22:38:11 +0000 Subject: [PATCH 4/5] codegen metadata --- .stats.yml | 4 ++-- src/turbopuffer/types/custom.py | 2 ++ 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/.stats.yml b/.stats.yml index 561cacc5..7ec9737b 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 14 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/turbopuffer-benesch/turbopuffer-2fd82fbbc7c30bea4808115816a40a4c1aaacebd243bb3bd50a2ac377deb835a.yml -openapi_spec_hash: bd6fdabde2b66bca3b7a3427ca943d9d +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/turbopuffer-benesch/turbopuffer-c47147eabda459ce775ffbab42a531bb3f2778c4cce15f88e05a4eed97013a21.yml +openapi_spec_hash: a981d1b889452ec8c0108ee0ec69dc6d config_hash: 068c4c3b2277de182691cc65c1e50a7c diff --git a/src/turbopuffer/types/custom.py b/src/turbopuffer/types/custom.py index e1d9f2f8..a37fce3d 100644 --- a/src/turbopuffer/types/custom.py +++ b/src/turbopuffer/types/custom.py @@ -54,6 +54,7 @@ GroupByFunction = Tuple[Literal["ForEachUnique"], str] GroupBy = Union[str, Mapping[str, GroupByFunction]] RankByAnn = Tuple[str, Literal["ANN"], Sequence[float]] +RankByAnnMulti = Tuple[str, Literal["ANN"], Sequence[Sequence[float]]] RankByAnnExpr = Tuple[str, Literal["ANN"], Expr] RankByKnn = Tuple[str, Literal["kNN"], Sequence[float]] RankByKnnExpr = Tuple[str, Literal["kNN"], Expr] @@ -78,6 +79,7 @@ RankByAttributes = Sequence[RankByAttribute] RankBy = Union[ RankByAnn, + RankByAnnMulti, RankByAnnExpr, RankByKnn, RankByKnnExpr, From 656c8aeeca281c3b31a4d476adf27e7202e6d04d Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Thu, 25 Jun 2026 22:38:35 +0000 Subject: [PATCH 5/5] release: 2.5.0 --- .release-please-manifest.json | 2 +- CHANGELOG.md | 18 ++++++++++++++++++ pyproject.toml | 2 +- src/turbopuffer/_version.py | 2 +- 4 files changed, 21 insertions(+), 3 deletions(-) diff --git a/.release-please-manifest.json b/.release-please-manifest.json index b44b2870..4dedeaeb 100644 --- a/.release-please-manifest.json +++ b/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "2.4.0" + ".": "2.5.0" } \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index 9679d134..acb87147 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,23 @@ # Changelog +## 2.5.0 (2026-06-25) + +Full Changelog: [v2.4.0...v2.5.0](https://github.com/turbopuffer/turbopuffer-python/compare/v2.4.0...v2.5.0) + +### Features + +* tpuf-engine: support dest_encryption in copy_from_namespace ([3421ea0](https://github.com/turbopuffer/turbopuffer-python/commit/3421ea0ba6b98a2500e72dadd4e61aa4b0410f60)) + + +### Chores + +* remove unused MCP package ([e779eca](https://github.com/turbopuffer/turbopuffer-python/commit/e779eca3645e79cb84b065f2ca8de4eb0e755103)) + + +### Documentation + +* rename /docs/overview to /docs/api-overview ([68e7cd6](https://github.com/turbopuffer/turbopuffer-python/commit/68e7cd6fb1b073b5112def1ee4083f62ab994610)) + ## 2.4.0 (2026-06-08) Full Changelog: [v2.3.0...v2.4.0](https://github.com/turbopuffer/turbopuffer-python/compare/v2.3.0...v2.4.0) diff --git a/pyproject.toml b/pyproject.toml index 087f157b..7ed157d3 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "turbopuffer" -version = "2.4.0" +version = "2.5.0" 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 432073e2..53e0214e 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.4.0" # x-release-please-version +__version__ = "2.5.0" # x-release-please-version