From de6e4e466ad9e9f40be8d8d4f7ea6208c076267e Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Thu, 5 Mar 2026 09:54:22 +0000 Subject: [PATCH 1/4] refactor(types): use `extra_items` from PEP 728 --- src/dedalus_labs/types/shared_params/reasoning.py | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/src/dedalus_labs/types/shared_params/reasoning.py b/src/dedalus_labs/types/shared_params/reasoning.py index ea0bb7c..dfe11f2 100644 --- a/src/dedalus_labs/types/shared_params/reasoning.py +++ b/src/dedalus_labs/types/shared_params/reasoning.py @@ -2,13 +2,13 @@ from __future__ import annotations -from typing import Dict, Union, Optional -from typing_extensions import Literal, TypeAlias, TypedDict +from typing import Optional +from typing_extensions import Literal, TypedDict __all__ = ["Reasoning"] -class ReasoningTyped(TypedDict, total=False): +class Reasoning(TypedDict, total=False, extra_items=object): # type: ignore[call-arg] """**gpt-5 and o-series models only** Configuration options for @@ -20,6 +20,3 @@ class ReasoningTyped(TypedDict, total=False): generate_summary: Optional[Literal["auto", "concise", "detailed"]] summary: Optional[Literal["auto", "concise", "detailed"]] - - -Reasoning: TypeAlias = Union[ReasoningTyped, Dict[str, object]] From e3ed83614aa445a6af6d48fbab67edd96d651123 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Sat, 7 Mar 2026 12:56:18 +0000 Subject: [PATCH 2/4] chore(ci): skip uploading artifacts on stainless-internal branches --- .github/workflows/ci.yml | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 4557576..a085107 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -55,14 +55,18 @@ jobs: run: uv build - name: Get GitHub OIDC Token - if: github.repository == 'stainless-sdks/dedalus-sdk-python' + if: |- + github.repository == 'stainless-sdks/dedalus-sdk-python' && + !startsWith(github.ref, 'refs/heads/stl/') id: github-oidc uses: actions/github-script@v8 with: script: core.setOutput('github_token', await core.getIDToken()); - name: Upload tarball - if: github.repository == 'stainless-sdks/dedalus-sdk-python' + if: |- + github.repository == 'stainless-sdks/dedalus-sdk-python' && + !startsWith(github.ref, 'refs/heads/stl/') env: URL: https://pkg.stainless.com/s AUTH: ${{ steps.github-oidc.outputs.github_token }} From 3a623d4779430378efe9ceb6540ba6fddbc70041 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Sat, 7 Mar 2026 13:16:49 +0000 Subject: [PATCH 3/4] chore: update placeholder string --- .../audio/test_transcriptions.py | 16 ++++----- .../api_resources/audio/test_translations.py | 16 ++++----- tests/api_resources/test_images.py | 36 +++++++++---------- 3 files changed, 34 insertions(+), 34 deletions(-) diff --git a/tests/api_resources/audio/test_transcriptions.py b/tests/api_resources/audio/test_transcriptions.py index d15a157..ccb9930 100644 --- a/tests/api_resources/audio/test_transcriptions.py +++ b/tests/api_resources/audio/test_transcriptions.py @@ -21,7 +21,7 @@ class TestTranscriptions: @parametrize def test_method_create(self, client: Dedalus) -> None: transcription = client.audio.transcriptions.create( - file=b"raw file contents", + file=b"Example data", model="model", ) assert_matches_type(TranscriptionCreateResponse, transcription, path=["response"]) @@ -30,7 +30,7 @@ def test_method_create(self, client: Dedalus) -> None: @parametrize def test_method_create_with_all_params(self, client: Dedalus) -> None: transcription = client.audio.transcriptions.create( - file=b"raw file contents", + file=b"Example data", model="model", language="language", prompt="prompt", @@ -43,7 +43,7 @@ def test_method_create_with_all_params(self, client: Dedalus) -> None: @parametrize def test_raw_response_create(self, client: Dedalus) -> None: response = client.audio.transcriptions.with_raw_response.create( - file=b"raw file contents", + file=b"Example data", model="model", ) @@ -56,7 +56,7 @@ def test_raw_response_create(self, client: Dedalus) -> None: @parametrize def test_streaming_response_create(self, client: Dedalus) -> None: with client.audio.transcriptions.with_streaming_response.create( - file=b"raw file contents", + file=b"Example data", model="model", ) as response: assert not response.is_closed @@ -77,7 +77,7 @@ class TestAsyncTranscriptions: @parametrize async def test_method_create(self, async_client: AsyncDedalus) -> None: transcription = await async_client.audio.transcriptions.create( - file=b"raw file contents", + file=b"Example data", model="model", ) assert_matches_type(TranscriptionCreateResponse, transcription, path=["response"]) @@ -86,7 +86,7 @@ async def test_method_create(self, async_client: AsyncDedalus) -> None: @parametrize async def test_method_create_with_all_params(self, async_client: AsyncDedalus) -> None: transcription = await async_client.audio.transcriptions.create( - file=b"raw file contents", + file=b"Example data", model="model", language="language", prompt="prompt", @@ -99,7 +99,7 @@ async def test_method_create_with_all_params(self, async_client: AsyncDedalus) - @parametrize async def test_raw_response_create(self, async_client: AsyncDedalus) -> None: response = await async_client.audio.transcriptions.with_raw_response.create( - file=b"raw file contents", + file=b"Example data", model="model", ) @@ -112,7 +112,7 @@ async def test_raw_response_create(self, async_client: AsyncDedalus) -> None: @parametrize async def test_streaming_response_create(self, async_client: AsyncDedalus) -> None: async with async_client.audio.transcriptions.with_streaming_response.create( - file=b"raw file contents", + file=b"Example data", model="model", ) as response: assert not response.is_closed diff --git a/tests/api_resources/audio/test_translations.py b/tests/api_resources/audio/test_translations.py index b005e5c..a3dce3d 100644 --- a/tests/api_resources/audio/test_translations.py +++ b/tests/api_resources/audio/test_translations.py @@ -21,7 +21,7 @@ class TestTranslations: @parametrize def test_method_create(self, client: Dedalus) -> None: translation = client.audio.translations.create( - file=b"raw file contents", + file=b"Example data", model="model", ) assert_matches_type(TranslationCreateResponse, translation, path=["response"]) @@ -30,7 +30,7 @@ def test_method_create(self, client: Dedalus) -> None: @parametrize def test_method_create_with_all_params(self, client: Dedalus) -> None: translation = client.audio.translations.create( - file=b"raw file contents", + file=b"Example data", model="model", prompt="prompt", response_format="response_format", @@ -42,7 +42,7 @@ def test_method_create_with_all_params(self, client: Dedalus) -> None: @parametrize def test_raw_response_create(self, client: Dedalus) -> None: response = client.audio.translations.with_raw_response.create( - file=b"raw file contents", + file=b"Example data", model="model", ) @@ -55,7 +55,7 @@ def test_raw_response_create(self, client: Dedalus) -> None: @parametrize def test_streaming_response_create(self, client: Dedalus) -> None: with client.audio.translations.with_streaming_response.create( - file=b"raw file contents", + file=b"Example data", model="model", ) as response: assert not response.is_closed @@ -76,7 +76,7 @@ class TestAsyncTranslations: @parametrize async def test_method_create(self, async_client: AsyncDedalus) -> None: translation = await async_client.audio.translations.create( - file=b"raw file contents", + file=b"Example data", model="model", ) assert_matches_type(TranslationCreateResponse, translation, path=["response"]) @@ -85,7 +85,7 @@ async def test_method_create(self, async_client: AsyncDedalus) -> None: @parametrize async def test_method_create_with_all_params(self, async_client: AsyncDedalus) -> None: translation = await async_client.audio.translations.create( - file=b"raw file contents", + file=b"Example data", model="model", prompt="prompt", response_format="response_format", @@ -97,7 +97,7 @@ async def test_method_create_with_all_params(self, async_client: AsyncDedalus) - @parametrize async def test_raw_response_create(self, async_client: AsyncDedalus) -> None: response = await async_client.audio.translations.with_raw_response.create( - file=b"raw file contents", + file=b"Example data", model="model", ) @@ -110,7 +110,7 @@ async def test_raw_response_create(self, async_client: AsyncDedalus) -> None: @parametrize async def test_streaming_response_create(self, async_client: AsyncDedalus) -> None: async with async_client.audio.translations.with_streaming_response.create( - file=b"raw file contents", + file=b"Example data", model="model", ) as response: assert not response.is_closed diff --git a/tests/api_resources/test_images.py b/tests/api_resources/test_images.py index b797e15..35b7f9c 100644 --- a/tests/api_resources/test_images.py +++ b/tests/api_resources/test_images.py @@ -21,7 +21,7 @@ class TestImages: @parametrize def test_method_create_variation(self, client: Dedalus) -> None: image = client.images.create_variation( - image=b"raw file contents", + image=b"Example data", ) assert_matches_type(ImagesResponse, image, path=["response"]) @@ -29,7 +29,7 @@ def test_method_create_variation(self, client: Dedalus) -> None: @parametrize def test_method_create_variation_with_all_params(self, client: Dedalus) -> None: image = client.images.create_variation( - image=b"raw file contents", + image=b"Example data", model="model", n=0, response_format="response_format", @@ -42,7 +42,7 @@ def test_method_create_variation_with_all_params(self, client: Dedalus) -> None: @parametrize def test_raw_response_create_variation(self, client: Dedalus) -> None: response = client.images.with_raw_response.create_variation( - image=b"raw file contents", + image=b"Example data", ) assert response.is_closed is True @@ -54,7 +54,7 @@ def test_raw_response_create_variation(self, client: Dedalus) -> None: @parametrize def test_streaming_response_create_variation(self, client: Dedalus) -> None: with client.images.with_streaming_response.create_variation( - image=b"raw file contents", + image=b"Example data", ) as response: assert not response.is_closed assert response.http_request.headers.get("X-Stainless-Lang") == "python" @@ -68,7 +68,7 @@ def test_streaming_response_create_variation(self, client: Dedalus) -> None: @parametrize def test_method_edit(self, client: Dedalus) -> None: image = client.images.edit( - image=b"raw file contents", + image=b"Example data", prompt="prompt", ) assert_matches_type(ImagesResponse, image, path=["response"]) @@ -77,9 +77,9 @@ def test_method_edit(self, client: Dedalus) -> None: @parametrize def test_method_edit_with_all_params(self, client: Dedalus) -> None: image = client.images.edit( - image=b"raw file contents", + image=b"Example data", prompt="prompt", - mask=b"raw file contents", + mask=b"Example data", model="model", n=0, response_format="response_format", @@ -92,7 +92,7 @@ def test_method_edit_with_all_params(self, client: Dedalus) -> None: @parametrize def test_raw_response_edit(self, client: Dedalus) -> None: response = client.images.with_raw_response.edit( - image=b"raw file contents", + image=b"Example data", prompt="prompt", ) @@ -105,7 +105,7 @@ def test_raw_response_edit(self, client: Dedalus) -> None: @parametrize def test_streaming_response_edit(self, client: Dedalus) -> None: with client.images.with_streaming_response.edit( - image=b"raw file contents", + image=b"Example data", prompt="prompt", ) as response: assert not response.is_closed @@ -181,7 +181,7 @@ class TestAsyncImages: @parametrize async def test_method_create_variation(self, async_client: AsyncDedalus) -> None: image = await async_client.images.create_variation( - image=b"raw file contents", + image=b"Example data", ) assert_matches_type(ImagesResponse, image, path=["response"]) @@ -189,7 +189,7 @@ async def test_method_create_variation(self, async_client: AsyncDedalus) -> None @parametrize async def test_method_create_variation_with_all_params(self, async_client: AsyncDedalus) -> None: image = await async_client.images.create_variation( - image=b"raw file contents", + image=b"Example data", model="model", n=0, response_format="response_format", @@ -202,7 +202,7 @@ async def test_method_create_variation_with_all_params(self, async_client: Async @parametrize async def test_raw_response_create_variation(self, async_client: AsyncDedalus) -> None: response = await async_client.images.with_raw_response.create_variation( - image=b"raw file contents", + image=b"Example data", ) assert response.is_closed is True @@ -214,7 +214,7 @@ async def test_raw_response_create_variation(self, async_client: AsyncDedalus) - @parametrize async def test_streaming_response_create_variation(self, async_client: AsyncDedalus) -> None: async with async_client.images.with_streaming_response.create_variation( - image=b"raw file contents", + image=b"Example data", ) as response: assert not response.is_closed assert response.http_request.headers.get("X-Stainless-Lang") == "python" @@ -228,7 +228,7 @@ async def test_streaming_response_create_variation(self, async_client: AsyncDeda @parametrize async def test_method_edit(self, async_client: AsyncDedalus) -> None: image = await async_client.images.edit( - image=b"raw file contents", + image=b"Example data", prompt="prompt", ) assert_matches_type(ImagesResponse, image, path=["response"]) @@ -237,9 +237,9 @@ async def test_method_edit(self, async_client: AsyncDedalus) -> None: @parametrize async def test_method_edit_with_all_params(self, async_client: AsyncDedalus) -> None: image = await async_client.images.edit( - image=b"raw file contents", + image=b"Example data", prompt="prompt", - mask=b"raw file contents", + mask=b"Example data", model="model", n=0, response_format="response_format", @@ -252,7 +252,7 @@ async def test_method_edit_with_all_params(self, async_client: AsyncDedalus) -> @parametrize async def test_raw_response_edit(self, async_client: AsyncDedalus) -> None: response = await async_client.images.with_raw_response.edit( - image=b"raw file contents", + image=b"Example data", prompt="prompt", ) @@ -265,7 +265,7 @@ async def test_raw_response_edit(self, async_client: AsyncDedalus) -> None: @parametrize async def test_streaming_response_edit(self, async_client: AsyncDedalus) -> None: async with async_client.images.with_streaming_response.edit( - image=b"raw file contents", + image=b"Example data", prompt="prompt", ) as response: assert not response.is_closed From e3f484a522575a259c15fa2646d144907eed3866 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Sat, 7 Mar 2026 13:17:05 +0000 Subject: [PATCH 4/4] release: 0.3.1 --- .release-please-manifest.json | 2 +- CHANGELOG.md | 14 ++++++++++++++ pyproject.toml | 2 +- src/dedalus_labs/_version.py | 2 +- 4 files changed, 17 insertions(+), 3 deletions(-) diff --git a/.release-please-manifest.json b/.release-please-manifest.json index 6b7b74c..cce9240 100644 --- a/.release-please-manifest.json +++ b/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "0.3.0" + ".": "0.3.1" } \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index 06bcc8b..1187b22 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,19 @@ # Changelog +## 0.3.1 (2026-03-07) + +Full Changelog: [v0.3.0...v0.3.1](https://github.com/dedalus-labs/dedalus-sdk-python/compare/v0.3.0...v0.3.1) + +### Chores + +* **ci:** skip uploading artifacts on stainless-internal branches ([e3ed836](https://github.com/dedalus-labs/dedalus-sdk-python/commit/e3ed83614aa445a6af6d48fbab67edd96d651123)) +* update placeholder string ([3a623d4](https://github.com/dedalus-labs/dedalus-sdk-python/commit/3a623d4779430378efe9ceb6540ba6fddbc70041)) + + +### Refactors + +* **types:** use `extra_items` from PEP 728 ([de6e4e4](https://github.com/dedalus-labs/dedalus-sdk-python/commit/de6e4e466ad9e9f40be8d8d4f7ea6208c076267e)) + ## 0.3.0 (2026-02-28) Full Changelog: [v0.2.0...v0.3.0](https://github.com/dedalus-labs/dedalus-sdk-python/compare/v0.2.0...v0.3.0) diff --git a/pyproject.toml b/pyproject.toml index c409c14..74ba4c8 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "dedalus_labs" -version = "0.3.0" +version = "0.3.1" description = "The official Python library for the Dedalus API" dynamic = ["readme"] license = "MIT" diff --git a/src/dedalus_labs/_version.py b/src/dedalus_labs/_version.py index 9329938..87c8f21 100644 --- a/src/dedalus_labs/_version.py +++ b/src/dedalus_labs/_version.py @@ -1,4 +1,4 @@ # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. __title__ = "dedalus_labs" -__version__ = "0.3.0" # x-release-please-version +__version__ = "0.3.1" # x-release-please-version