diff --git a/.release-please-manifest.json b/.release-please-manifest.json
index 8ea07c9a..1b5dc400 100644
--- a/.release-please-manifest.json
+++ b/.release-please-manifest.json
@@ -1,3 +1,3 @@
{
- ".": "0.38.0"
+ ".": "0.39.0"
}
\ No newline at end of file
diff --git a/.stats.yml b/.stats.yml
index eb55da54..82ef3004 100644
--- a/.stats.yml
+++ b/.stats.yml
@@ -1,4 +1,4 @@
configured_endpoints: 62
-openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/mixedbread%2Fmixedbread-b091721a627d75feb8567f628f99405d5778b0b88e9cc09fc664dd8e97c6d720.yml
-openapi_spec_hash: a23a2aecdcff5fa1d6c8cdc0df0bdfb7
-config_hash: c56a6c9375e7640ce70ff00420e8605a
+openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/mixedbread%2Fmixedbread-c53a9b02bf4bd345435a03b4178aed1b7c8ac04a2508f370b5361bf305a3f803.yml
+openapi_spec_hash: f05a6df876280efad08ed2f0ab78d5fc
+config_hash: 6fa04d08d4e1a3a45f562e37fab0ea71
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 2ba2bfc7..e8f38812 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,15 @@
# Changelog
+## 0.39.0 (2025-11-07)
+
+Full Changelog: [v0.38.0...v0.39.0](https://github.com/mixedbread-ai/mixedbread-python/compare/v0.38.0...v0.39.0)
+
+### Features
+
+* **api:** api update ([ece68dd](https://github.com/mixedbread-ai/mixedbread-python/commit/ece68dd6350b58e8dac815213c918ad879c89ddd))
+* **api:** api update ([6ed00c6](https://github.com/mixedbread-ai/mixedbread-python/commit/6ed00c65da6477ba7bf453aae4a7e9f9cded6841))
+* **api:** update via SDK Studio ([2ca5086](https://github.com/mixedbread-ai/mixedbread-python/commit/2ca508619c2308981e7c1171f9f15637c35b77d4))
+
## 0.38.0 (2025-11-04)
Full Changelog: [v0.37.0...v0.38.0](https://github.com/mixedbread-ai/mixedbread-python/compare/v0.37.0...v0.38.0)
diff --git a/api.md b/api.md
index 326815b5..4332059c 100644
--- a/api.md
+++ b/api.md
@@ -123,7 +123,7 @@ Methods:
- client.stores.files.create(store_identifier, \*\*params) -> StoreFile
- client.stores.files.retrieve(file_identifier, \*, store_identifier, \*\*params) -> StoreFile
- client.stores.files.list(store_identifier, \*\*params) -> FileListResponse
-- client.stores.files.delete(file_id, \*, store_identifier) -> FileDeleteResponse
+- client.stores.files.delete(file_identifier, \*, store_identifier) -> FileDeleteResponse
- client.stores.files.search(\*\*params) -> FileSearchResponse
# Parsing
diff --git a/pyproject.toml b/pyproject.toml
index 37b16b5c..f2df0f6e 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -1,6 +1,6 @@
[project]
name = "mixedbread"
-version = "0.38.0"
+version = "0.39.0"
description = "The official Python library for the Mixedbread API"
dynamic = ["readme"]
license = "Apache-2.0"
diff --git a/src/mixedbread/_version.py b/src/mixedbread/_version.py
index 07ad0132..d0ade071 100644
--- a/src/mixedbread/_version.py
+++ b/src/mixedbread/_version.py
@@ -1,4 +1,4 @@
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
__title__ = "mixedbread"
-__version__ = "0.38.0" # x-release-please-version
+__version__ = "0.39.0" # x-release-please-version
diff --git a/src/mixedbread/resources/stores/files.py b/src/mixedbread/resources/stores/files.py
index 1e871645..a44c12ae 100644
--- a/src/mixedbread/resources/stores/files.py
+++ b/src/mixedbread/resources/stores/files.py
@@ -245,7 +245,7 @@ def list(
def delete(
self,
- file_id: str,
+ file_identifier: str,
*,
store_identifier: str,
# Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
@@ -267,7 +267,7 @@ def delete(
Args:
store_identifier: The ID or name of the store
- file_id: The ID or name of the file to delete
+ file_identifier: The ID or name of the file to delete
extra_headers: Send extra headers
@@ -279,10 +279,10 @@ def delete(
"""
if not store_identifier:
raise ValueError(f"Expected a non-empty value for `store_identifier` but received {store_identifier!r}")
- if not file_id:
- raise ValueError(f"Expected a non-empty value for `file_id` but received {file_id!r}")
+ if not file_identifier:
+ raise ValueError(f"Expected a non-empty value for `file_identifier` but received {file_identifier!r}")
return self._delete(
- f"/v1/stores/{store_identifier}/files/{file_id}",
+ f"/v1/stores/{store_identifier}/files/{file_identifier}",
options=make_request_options(
extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
),
@@ -730,7 +730,7 @@ async def list(
async def delete(
self,
- file_id: str,
+ file_identifier: str,
*,
store_identifier: str,
# Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
@@ -752,7 +752,7 @@ async def delete(
Args:
store_identifier: The ID or name of the store
- file_id: The ID or name of the file to delete
+ file_identifier: The ID or name of the file to delete
extra_headers: Send extra headers
@@ -764,10 +764,10 @@ async def delete(
"""
if not store_identifier:
raise ValueError(f"Expected a non-empty value for `store_identifier` but received {store_identifier!r}")
- if not file_id:
- raise ValueError(f"Expected a non-empty value for `file_id` but received {file_id!r}")
+ if not file_identifier:
+ raise ValueError(f"Expected a non-empty value for `file_identifier` but received {file_identifier!r}")
return await self._delete(
- f"/v1/stores/{store_identifier}/files/{file_id}",
+ f"/v1/stores/{store_identifier}/files/{file_identifier}",
options=make_request_options(
extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
),
diff --git a/src/mixedbread/types/shared/search_filter_condition.py b/src/mixedbread/types/shared/search_filter_condition.py
index 9e6f8c6e..36309f1d 100644
--- a/src/mixedbread/types/shared/search_filter_condition.py
+++ b/src/mixedbread/types/shared/search_filter_condition.py
@@ -14,5 +14,5 @@ class SearchFilterCondition(BaseModel):
value: object
"""The value to compare against"""
- operator: Literal["eq", "not_eq", "gt", "gte", "lt", "lte", "in", "not_in", "like", "not_like"]
+ operator: Literal["eq", "not_eq", "gt", "gte", "lt", "lte", "in", "not_in", "like", "starts_with", "not_like"]
"""The operator for the condition"""
diff --git a/src/mixedbread/types/shared_params/search_filter_condition.py b/src/mixedbread/types/shared_params/search_filter_condition.py
index f2241f70..83863974 100644
--- a/src/mixedbread/types/shared_params/search_filter_condition.py
+++ b/src/mixedbread/types/shared_params/search_filter_condition.py
@@ -14,5 +14,7 @@ class SearchFilterCondition(TypedDict, total=False):
value: Required[object]
"""The value to compare against"""
- operator: Required[Literal["eq", "not_eq", "gt", "gte", "lt", "lte", "in", "not_in", "like", "not_like"]]
+ operator: Required[
+ Literal["eq", "not_eq", "gt", "gte", "lt", "lte", "in", "not_in", "like", "starts_with", "not_like"]
+ ]
"""The operator for the condition"""
diff --git a/tests/api_resources/stores/test_files.py b/tests/api_resources/stores/test_files.py
index ea9fc27b..97ac0e9e 100644
--- a/tests/api_resources/stores/test_files.py
+++ b/tests/api_resources/stores/test_files.py
@@ -225,7 +225,7 @@ def test_path_params_list(self, client: Mixedbread) -> None:
@parametrize
def test_method_delete(self, client: Mixedbread) -> None:
file = client.stores.files.delete(
- file_id="file_id",
+ file_identifier="file_identifier",
store_identifier="store_identifier",
)
assert_matches_type(FileDeleteResponse, file, path=["response"])
@@ -233,7 +233,7 @@ def test_method_delete(self, client: Mixedbread) -> None:
@parametrize
def test_raw_response_delete(self, client: Mixedbread) -> None:
response = client.stores.files.with_raw_response.delete(
- file_id="file_id",
+ file_identifier="file_identifier",
store_identifier="store_identifier",
)
@@ -245,7 +245,7 @@ def test_raw_response_delete(self, client: Mixedbread) -> None:
@parametrize
def test_streaming_response_delete(self, client: Mixedbread) -> None:
with client.stores.files.with_streaming_response.delete(
- file_id="file_id",
+ file_identifier="file_identifier",
store_identifier="store_identifier",
) as response:
assert not response.is_closed
@@ -260,13 +260,13 @@ def test_streaming_response_delete(self, client: Mixedbread) -> None:
def test_path_params_delete(self, client: Mixedbread) -> None:
with pytest.raises(ValueError, match=r"Expected a non-empty value for `store_identifier` but received ''"):
client.stores.files.with_raw_response.delete(
- file_id="file_id",
+ file_identifier="file_identifier",
store_identifier="",
)
- with pytest.raises(ValueError, match=r"Expected a non-empty value for `file_id` but received ''"):
+ with pytest.raises(ValueError, match=r"Expected a non-empty value for `file_identifier` but received ''"):
client.stores.files.with_raw_response.delete(
- file_id="",
+ file_identifier="",
store_identifier="store_identifier",
)
@@ -570,7 +570,7 @@ async def test_path_params_list(self, async_client: AsyncMixedbread) -> None:
@parametrize
async def test_method_delete(self, async_client: AsyncMixedbread) -> None:
file = await async_client.stores.files.delete(
- file_id="file_id",
+ file_identifier="file_identifier",
store_identifier="store_identifier",
)
assert_matches_type(FileDeleteResponse, file, path=["response"])
@@ -578,7 +578,7 @@ async def test_method_delete(self, async_client: AsyncMixedbread) -> None:
@parametrize
async def test_raw_response_delete(self, async_client: AsyncMixedbread) -> None:
response = await async_client.stores.files.with_raw_response.delete(
- file_id="file_id",
+ file_identifier="file_identifier",
store_identifier="store_identifier",
)
@@ -590,7 +590,7 @@ async def test_raw_response_delete(self, async_client: AsyncMixedbread) -> None:
@parametrize
async def test_streaming_response_delete(self, async_client: AsyncMixedbread) -> None:
async with async_client.stores.files.with_streaming_response.delete(
- file_id="file_id",
+ file_identifier="file_identifier",
store_identifier="store_identifier",
) as response:
assert not response.is_closed
@@ -605,13 +605,13 @@ async def test_streaming_response_delete(self, async_client: AsyncMixedbread) ->
async def test_path_params_delete(self, async_client: AsyncMixedbread) -> None:
with pytest.raises(ValueError, match=r"Expected a non-empty value for `store_identifier` but received ''"):
await async_client.stores.files.with_raw_response.delete(
- file_id="file_id",
+ file_identifier="file_identifier",
store_identifier="",
)
- with pytest.raises(ValueError, match=r"Expected a non-empty value for `file_id` but received ''"):
+ with pytest.raises(ValueError, match=r"Expected a non-empty value for `file_identifier` but received ''"):
await async_client.stores.files.with_raw_response.delete(
- file_id="",
+ file_identifier="",
store_identifier="store_identifier",
)