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/.stats.yml b/.stats.yml index 92e92e62..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-17e5bcde1d39d5673f2b1bf4446afa000d90a0fdb9ae4b86a05bd15f12f9e547.yml -openapi_spec_hash: 4aaf757ac332b99a28f9a44a47891a5f -config_hash: bab72dc9f937352c7a01a37dadd44122 +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/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/README.md b/README.md index e5637be4..9f185409 100644 --- a/README.md +++ b/README.md @@ -9,18 +9,9 @@ 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/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 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 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/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, 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", ) 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" },