From e8109bdf07184d1f1c66ed5cee66d6b43ac1b448 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Mon, 25 May 2026 11:15:57 +0000 Subject: [PATCH 1/2] feat(api): api update --- .stats.yml | 4 +- src/fashn/resources/predictions.py | 132 ++++++++++++++++++++++- src/fashn/types/prediction_run_params.py | 122 +++++++++++++++++---- tests/api_resources/test_predictions.py | 128 ++++++++++++++++++++-- 4 files changed, 351 insertions(+), 35 deletions(-) diff --git a/.stats.yml b/.stats.yml index 4852241..96ebb52 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 2 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/fashn/fashn-sdk-3add3c2ba2bcebda859e6c6c04e71f8e5f865d4a0edb7fe8ec5ba2e1985d00ca.yml -openapi_spec_hash: 06d789906d61e3fefdfb789d532da5fe +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/fashn/fashn-sdk-c1e5a54d159efed8e9803ae5c34a94bad33a8c14a3fcef7331868db4d724ffc4.yml +openapi_spec_hash: 58c9627440e1c4a21f879fcb900e3bdc config_hash: 6f35cc512a77534117eeac956e613816 diff --git a/src/fashn/resources/predictions.py b/src/fashn/resources/predictions.py index fd837ee..2ce4fda 100644 --- a/src/fashn/resources/predictions.py +++ b/src/fashn/resources/predictions.py @@ -456,6 +456,7 @@ def run( - Image reframing (reframe) - Image to video (image-to-video) - Image editing (edit) + - Product packshot (packshot) All requests use the versioned format with model_name and inputs structure. @@ -505,6 +506,7 @@ def run( - Image reframing (reframe) - Image to video (image-to-video) - Image editing (edit) + - Product packshot (packshot) All requests use the versioned format with model_name and inputs structure. @@ -553,6 +555,7 @@ def run( - Image reframing (reframe) - Image to video (image-to-video) - Image editing (edit) + - Product packshot (packshot) All requests use the versioned format with model_name and inputs structure. @@ -602,6 +605,7 @@ def run( - Image reframing (reframe) - Image to video (image-to-video) - Image editing (edit) + - Product packshot (packshot) All requests use the versioned format with model_name and inputs structure. @@ -652,6 +656,7 @@ def run( - Image reframing (reframe) - Image to video (image-to-video) - Image editing (edit) + - Product packshot (packshot) All requests use the versioned format with model_name and inputs structure. @@ -699,6 +704,7 @@ def run( - Image reframing (reframe) - Image to video (image-to-video) - Image editing (edit) + - Product packshot (packshot) All requests use the versioned format with model_name and inputs structure. @@ -747,6 +753,7 @@ def run( - Image reframing (reframe) - Image to video (image-to-video) - Image editing (edit) + - Product packshot (packshot) All requests use the versioned format with model_name and inputs structure. @@ -794,6 +801,7 @@ def run( - Image reframing (reframe) - Image to video (image-to-video) - Image editing (edit) + - Product packshot (packshot) All requests use the versioned format with model_name and inputs structure. @@ -841,6 +849,7 @@ def run( - Image reframing (reframe) - Image to video (image-to-video) - Image editing (edit) + - Product packshot (packshot) All requests use the versioned format with model_name and inputs structure. @@ -888,6 +897,7 @@ def run( - Image reframing (reframe) - Image to video (image-to-video) - Image editing (edit) + - Product packshot (packshot) All requests use the versioned format with model_name and inputs structure. @@ -936,6 +946,7 @@ def run( - Image reframing (reframe) - Image to video (image-to-video) - Image editing (edit) + - Product packshot (packshot) All requests use the versioned format with model_name and inputs structure. @@ -955,6 +966,55 @@ def run( """ ... + @overload + def run( + self, + *, + inputs: prediction_run_params.PackshotRequestInputs, + model_name: Literal["packshot"], + webhook_url: str | Omit = omit, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> PredictionRunResponse: + """Submit a prediction request for AI-powered fashion processing. + + Supports multiple + model types including: + + - Try-on max (tryon-max) + - Virtual try-on v1.6 (tryon-v1.6) + - Model creation (model-create) + - Model swap (model-swap) + - Product to model (product-to-model) + - Face to model (face-to-model) + - Background operations (background-remove, background-change) + - Image reframing (reframe) + - Image to video (image-to-video) + - Image editing (edit) + - Product packshot (packshot) + + All requests use the versioned format with model_name and inputs structure. + + Args: + model_name: Turns a product photo into a clean commercial packshot. Optionally accepts a + style reference image to guide staging, background, and lighting. + + webhook_url: Optional webhook URL to receive completion notifications + + extra_headers: Send extra headers + + extra_query: Add additional query parameters to the request + + extra_body: Add additional JSON properties to the request + + timeout: Override the client-level default timeout for this request, in seconds + """ + ... + @required_args(["inputs", "model_name"]) def run( self, @@ -969,7 +1029,8 @@ def run( | prediction_run_params.BackgroundChangeRequestInputs | prediction_run_params.BackgroundRemoveRequestInputs | prediction_run_params.ImageToVideoRequestInputs - | prediction_run_params.EditRequestInputs, + | prediction_run_params.EditRequestInputs + | prediction_run_params.PackshotRequestInputs, model_name: Literal["tryon-max"] | Literal["tryon-v1.6"] | Literal["product-to-model"] @@ -980,7 +1041,8 @@ def run( | Literal["background-change"] | Literal["background-remove"] | Literal["image-to-video"] - | Literal["edit"], + | Literal["edit"] + | Literal["packshot"], webhook_url: str | Omit = omit, # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. # The extra values given here take precedence over values defined on the client or passed to this method. @@ -1474,6 +1536,7 @@ async def run( - Image reframing (reframe) - Image to video (image-to-video) - Image editing (edit) + - Product packshot (packshot) All requests use the versioned format with model_name and inputs structure. @@ -1523,6 +1586,7 @@ async def run( - Image reframing (reframe) - Image to video (image-to-video) - Image editing (edit) + - Product packshot (packshot) All requests use the versioned format with model_name and inputs structure. @@ -1571,6 +1635,7 @@ async def run( - Image reframing (reframe) - Image to video (image-to-video) - Image editing (edit) + - Product packshot (packshot) All requests use the versioned format with model_name and inputs structure. @@ -1620,6 +1685,7 @@ async def run( - Image reframing (reframe) - Image to video (image-to-video) - Image editing (edit) + - Product packshot (packshot) All requests use the versioned format with model_name and inputs structure. @@ -1670,6 +1736,7 @@ async def run( - Image reframing (reframe) - Image to video (image-to-video) - Image editing (edit) + - Product packshot (packshot) All requests use the versioned format with model_name and inputs structure. @@ -1717,6 +1784,7 @@ async def run( - Image reframing (reframe) - Image to video (image-to-video) - Image editing (edit) + - Product packshot (packshot) All requests use the versioned format with model_name and inputs structure. @@ -1765,6 +1833,7 @@ async def run( - Image reframing (reframe) - Image to video (image-to-video) - Image editing (edit) + - Product packshot (packshot) All requests use the versioned format with model_name and inputs structure. @@ -1812,6 +1881,7 @@ async def run( - Image reframing (reframe) - Image to video (image-to-video) - Image editing (edit) + - Product packshot (packshot) All requests use the versioned format with model_name and inputs structure. @@ -1859,6 +1929,7 @@ async def run( - Image reframing (reframe) - Image to video (image-to-video) - Image editing (edit) + - Product packshot (packshot) All requests use the versioned format with model_name and inputs structure. @@ -1906,6 +1977,7 @@ async def run( - Image reframing (reframe) - Image to video (image-to-video) - Image editing (edit) + - Product packshot (packshot) All requests use the versioned format with model_name and inputs structure. @@ -1954,6 +2026,7 @@ async def run( - Image reframing (reframe) - Image to video (image-to-video) - Image editing (edit) + - Product packshot (packshot) All requests use the versioned format with model_name and inputs structure. @@ -1973,6 +2046,55 @@ async def run( """ ... + @overload + async def run( + self, + *, + inputs: prediction_run_params.PackshotRequestInputs, + model_name: Literal["packshot"], + webhook_url: str | Omit = omit, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> PredictionRunResponse: + """Submit a prediction request for AI-powered fashion processing. + + Supports multiple + model types including: + + - Try-on max (tryon-max) + - Virtual try-on v1.6 (tryon-v1.6) + - Model creation (model-create) + - Model swap (model-swap) + - Product to model (product-to-model) + - Face to model (face-to-model) + - Background operations (background-remove, background-change) + - Image reframing (reframe) + - Image to video (image-to-video) + - Image editing (edit) + - Product packshot (packshot) + + All requests use the versioned format with model_name and inputs structure. + + Args: + model_name: Turns a product photo into a clean commercial packshot. Optionally accepts a + style reference image to guide staging, background, and lighting. + + webhook_url: Optional webhook URL to receive completion notifications + + extra_headers: Send extra headers + + extra_query: Add additional query parameters to the request + + extra_body: Add additional JSON properties to the request + + timeout: Override the client-level default timeout for this request, in seconds + """ + ... + @required_args(["inputs", "model_name"]) async def run( self, @@ -1987,7 +2109,8 @@ async def run( | prediction_run_params.BackgroundChangeRequestInputs | prediction_run_params.BackgroundRemoveRequestInputs | prediction_run_params.ImageToVideoRequestInputs - | prediction_run_params.EditRequestInputs, + | prediction_run_params.EditRequestInputs + | prediction_run_params.PackshotRequestInputs, model_name: Literal["tryon-max"] | Literal["tryon-v1.6"] | Literal["product-to-model"] @@ -1998,7 +2121,8 @@ async def run( | Literal["background-change"] | Literal["background-remove"] | Literal["image-to-video"] - | Literal["edit"], + | Literal["edit"] + | Literal["packshot"], webhook_url: str | Omit = omit, # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. # The extra values given here take precedence over values defined on the client or passed to this method. diff --git a/src/fashn/types/prediction_run_params.py b/src/fashn/types/prediction_run_params.py index f511329..ac0bb6a 100644 --- a/src/fashn/types/prediction_run_params.py +++ b/src/fashn/types/prediction_run_params.py @@ -29,6 +29,8 @@ "ImageToVideoRequestInputs", "EditRequest", "EditRequestInputs", + "PackshotRequest", + "PackshotRequestInputs", ] @@ -73,11 +75,7 @@ class TryOnMaxRequestInputs(TypedDict, total=False): """ num_images: int - """Number of images to generate in a single run. - - Image generation has a random element in it, so trying multiple images at once - increases the chances of getting a good result. - """ + """Number of images to generate per request (1-4).""" output_format: Literal["png", "jpeg"] """Specifies the desired output image format. @@ -190,11 +188,7 @@ class TryOnRequestInputs(TypedDict, total=False): """ num_samples: int - """Number of images to generate in a single run. - - Image generation has a random element in it, so trying multiple images at once - increases the chances of getting a good result. - """ + """Number of images to generate per request (1-4).""" output_format: Literal["png", "jpeg"] """Specifies the desired output image format. @@ -253,7 +247,7 @@ class ProductToModelRequestInputs(TypedDict, total=False): data:image/jpg;base64,) """ - aspect_ratio: Literal["1:1", "2:3", "3:4", "4:5", "5:4", "4:3", "3:2", "16:9", "9:16"] + aspect_ratio: Literal["21:9", "1:1", "4:3", "3:2", "2:3", "5:4", "4:5", "3:4", "16:9", "9:16"] """Desired aspect ratio for the output image. Only applies when `model_image` is not provided (standard product-to-model @@ -353,11 +347,11 @@ class FaceToModelRequestInputs(TypedDict, total=False): data:image/jpg;base64,) """ - aspect_ratio: Literal["1:1", "4:5", "3:4", "2:3", "9:16"] + aspect_ratio: Literal["21:9", "1:1", "4:3", "3:2", "2:3", "5:4", "4:5", "3:4", "16:9", "9:16"] """Desired aspect ratio for the output image. - Only vertical ratios are supported. Images will always be extended downward to - fit the aspect ratio. + Vertical ratios (e.g. `2:3`, `3:4`, `9:16`) produce the most natural upper-body + portraits. **Default:** `2:3` """ @@ -432,7 +426,7 @@ class ModelCreateRequestInputs(TypedDict, total=False): Describes the desired fashion model, clothing, pose, and scene. """ - aspect_ratio: Literal["1:1", "2:3", "3:4", "4:5", "5:4", "4:3", "3:2", "16:9", "9:16"] + aspect_ratio: Literal["21:9", "1:1", "4:3", "3:2", "2:3", "5:4", "4:5", "3:4", "16:9", "9:16"] """Defines the width-to-height ratio of the generated image. This parameter controls the canvas dimensions for text-only generation. When @@ -446,6 +440,7 @@ class ModelCreateRequestInputs(TypedDict, total=False): | Aspect Ratio | Resolution | Use Case | | ------------ | ----------- | ----------------------------- | + | 21:9 | 1568 × 672 | Ultra-wide cinematic | | 1:1 | 1024 × 1024 | Square format, social media | | 2:3 | 832 × 1248 | Portrait, fashion photography | | 3:4 | 880 × 1176 | Standard portrait | @@ -688,11 +683,7 @@ class ReframeRequestInputs(TypedDict, total=False): """ num_images: int - """Number of images to generate in a single run. - - Image generation has a random element in it, so trying multiple images at once - increases the chances of getting a good result. - """ + """Number of images to generate per request (1-4).""" output_format: Literal["png", "jpeg"] """Specifies the desired output image format. @@ -939,12 +930,86 @@ class EditRequestInputs(TypedDict, total=False): """ num_images: int - """Number of images to generate in a single run. + """Number of images to generate per request (1-4).""" - Image generation has a random element in it, so trying multiple images at once - increases the chances of getting a good result. + output_format: Literal["png", "jpeg"] + """Specifies the desired output image format. + + - `png`: Delivers the highest quality image, ideal for use cases such as content + creation where quality is paramount. + - `jpeg`: Provides a faster response with a slightly compressed image, more + suitable for real-time applications. """ + resolution: Literal["1k", "2k", "4k"] + """Resolution setting for the output image.""" + + return_base64: bool + """ + When set to `true`, the API will return the generated image as a base64-encoded + string instead of a CDN URL. The base64 string will be prefixed according to the + `output_format` (e.g., `data:image/png;base64,...` or + `data:image/jpeg;base64,...`). This option offers enhanced privacy as + user-generated outputs are not stored on our servers when `return_base64` is + enabled. + """ + + seed: int + """Sets random operations to a fixed state. + + Use the same seed to reproduce results with the same inputs, or different seed + to force different results. + """ + + +class PackshotRequest(TypedDict, total=False): + inputs: Required[PackshotRequestInputs] + + model_name: Required[Literal["packshot"]] + """Turns a product photo into a clean commercial packshot. + + Optionally accepts a style reference image to guide staging, background, and + lighting. + """ + + webhook_url: str + """Optional webhook URL to receive completion notifications""" + + +class PackshotRequestInputs(TypedDict, total=False): + product_image: Required[str] + """Source product image to convert into a commercial packshot. + + The AI generates a clean studio-style presentation while preserving product + identity and detail. + + Base64 images must include the proper prefix (e.g., + `data:image/jpg;base64,`) + """ + + aspect_ratio: Literal["21:9", "1:1", "4:3", "3:2", "2:3", "5:4", "4:5", "3:4", "16:9", "9:16"] + """Optional aspect ratio for the output image.""" + + generation_mode: Literal["fast", "balanced", "quality"] + """Sets the generation quality level. + + 'quality' produces the most detailed and realistic output but takes longer to + process and costs more credits. 'fast' prioritizes speed and lower cost. + """ + + image_context: str + """ + Optional URL or base64 of a style reference image guiding the packshot + presentation (staging, background, lighting). The reference influences styling + without overriding the product itself. + + Base64 images must include the proper prefix (e.g., + `data:image/jpg;base64,`) + """ + + num_images: int + """Number of images to generate per request (1-4).""" + output_format: Literal["png", "jpeg"] """Specifies the desired output image format. @@ -954,6 +1019,16 @@ class EditRequestInputs(TypedDict, total=False): suitable for real-time applications. """ + prompt: str + """Optional natural-language description of the desired packshot styling. + + If empty, the model picks a sensible commercial default for the detected + product. + + **Examples:** "clean white background flat-lay", "soft studio lighting on a + beige pedestal", "isolated on a marble surface" + """ + resolution: Literal["1k", "2k", "4k"] """Resolution setting for the output image.""" @@ -987,4 +1062,5 @@ class EditRequestInputs(TypedDict, total=False): BackgroundRemoveRequest, ImageToVideoRequest, EditRequest, + PackshotRequest, ] diff --git a/tests/api_resources/test_predictions.py b/tests/api_resources/test_predictions.py index dfadc3d..80ad6d7 100644 --- a/tests/api_resources/test_predictions.py +++ b/tests/api_resources/test_predictions.py @@ -167,7 +167,7 @@ def test_method_run_with_all_params_overload_3(self, client: Fashn) -> None: prediction = client.predictions.run( inputs={ "product_image": "https://example.com/product.jpg", - "aspect_ratio": "1:1", + "aspect_ratio": "21:9", "generation_mode": "fast", "image_prompt": "https://example.com/inspiration.jpg", "model_image": "https://example.com/person.jpg", @@ -225,7 +225,7 @@ def test_method_run_with_all_params_overload_4(self, client: Fashn) -> None: prediction = client.predictions.run( inputs={ "face_image": "https://example.com/headshot.jpg", - "aspect_ratio": "1:1", + "aspect_ratio": "21:9", "generation_mode": "fast", "num_images": 1, "output_format": "png", @@ -282,7 +282,7 @@ def test_method_run_with_all_params_overload_5(self, client: Fashn) -> None: prediction = client.predictions.run( inputs={ "prompt": "A professional model wearing casual clothes", - "aspect_ratio": "1:1", + "aspect_ratio": "21:9", "face_reference": "https://example.com/face.jpg", "face_reference_mode": "match_base", "generation_mode": "fast", @@ -687,6 +687,64 @@ def test_streaming_response_run_overload_11(self, client: Fashn) -> None: assert cast(Any, response.is_closed) is True + @pytest.mark.skip(reason="Mock server tests are disabled") + @parametrize + def test_method_run_overload_12(self, client: Fashn) -> None: + prediction = client.predictions.run( + inputs={"product_image": "https://example.com/product.jpg"}, + model_name="packshot", + ) + assert_matches_type(PredictionRunResponse, prediction, path=["response"]) + + @pytest.mark.skip(reason="Mock server tests are disabled") + @parametrize + def test_method_run_with_all_params_overload_12(self, client: Fashn) -> None: + prediction = client.predictions.run( + inputs={ + "product_image": "https://example.com/product.jpg", + "aspect_ratio": "21:9", + "generation_mode": "fast", + "image_context": "https://example.com/reference-packshot.jpg", + "num_images": 1, + "output_format": "png", + "prompt": "prompt", + "resolution": "1k", + "return_base64": True, + "seed": 0, + }, + model_name="packshot", + webhook_url="https://example.com/webhook", + ) + assert_matches_type(PredictionRunResponse, prediction, path=["response"]) + + @pytest.mark.skip(reason="Mock server tests are disabled") + @parametrize + def test_raw_response_run_overload_12(self, client: Fashn) -> None: + response = client.predictions.with_raw_response.run( + inputs={"product_image": "https://example.com/product.jpg"}, + model_name="packshot", + ) + + assert response.is_closed is True + assert response.http_request.headers.get("X-Stainless-Lang") == "python" + prediction = response.parse() + assert_matches_type(PredictionRunResponse, prediction, path=["response"]) + + @pytest.mark.skip(reason="Mock server tests are disabled") + @parametrize + def test_streaming_response_run_overload_12(self, client: Fashn) -> None: + with client.predictions.with_streaming_response.run( + inputs={"product_image": "https://example.com/product.jpg"}, + model_name="packshot", + ) as response: + assert not response.is_closed + assert response.http_request.headers.get("X-Stainless-Lang") == "python" + + prediction = response.parse() + assert_matches_type(PredictionRunResponse, prediction, path=["response"]) + + assert cast(Any, response.is_closed) is True + @pytest.mark.skip(reason="Mock server tests are disabled") @parametrize def test_method_status(self, client: Fashn) -> None: @@ -885,7 +943,7 @@ async def test_method_run_with_all_params_overload_3(self, async_client: AsyncFa prediction = await async_client.predictions.run( inputs={ "product_image": "https://example.com/product.jpg", - "aspect_ratio": "1:1", + "aspect_ratio": "21:9", "generation_mode": "fast", "image_prompt": "https://example.com/inspiration.jpg", "model_image": "https://example.com/person.jpg", @@ -943,7 +1001,7 @@ async def test_method_run_with_all_params_overload_4(self, async_client: AsyncFa prediction = await async_client.predictions.run( inputs={ "face_image": "https://example.com/headshot.jpg", - "aspect_ratio": "1:1", + "aspect_ratio": "21:9", "generation_mode": "fast", "num_images": 1, "output_format": "png", @@ -1000,7 +1058,7 @@ async def test_method_run_with_all_params_overload_5(self, async_client: AsyncFa prediction = await async_client.predictions.run( inputs={ "prompt": "A professional model wearing casual clothes", - "aspect_ratio": "1:1", + "aspect_ratio": "21:9", "face_reference": "https://example.com/face.jpg", "face_reference_mode": "match_base", "generation_mode": "fast", @@ -1405,6 +1463,64 @@ async def test_streaming_response_run_overload_11(self, async_client: AsyncFashn assert cast(Any, response.is_closed) is True + @pytest.mark.skip(reason="Mock server tests are disabled") + @parametrize + async def test_method_run_overload_12(self, async_client: AsyncFashn) -> None: + prediction = await async_client.predictions.run( + inputs={"product_image": "https://example.com/product.jpg"}, + model_name="packshot", + ) + assert_matches_type(PredictionRunResponse, prediction, path=["response"]) + + @pytest.mark.skip(reason="Mock server tests are disabled") + @parametrize + async def test_method_run_with_all_params_overload_12(self, async_client: AsyncFashn) -> None: + prediction = await async_client.predictions.run( + inputs={ + "product_image": "https://example.com/product.jpg", + "aspect_ratio": "21:9", + "generation_mode": "fast", + "image_context": "https://example.com/reference-packshot.jpg", + "num_images": 1, + "output_format": "png", + "prompt": "prompt", + "resolution": "1k", + "return_base64": True, + "seed": 0, + }, + model_name="packshot", + webhook_url="https://example.com/webhook", + ) + assert_matches_type(PredictionRunResponse, prediction, path=["response"]) + + @pytest.mark.skip(reason="Mock server tests are disabled") + @parametrize + async def test_raw_response_run_overload_12(self, async_client: AsyncFashn) -> None: + response = await async_client.predictions.with_raw_response.run( + inputs={"product_image": "https://example.com/product.jpg"}, + model_name="packshot", + ) + + assert response.is_closed is True + assert response.http_request.headers.get("X-Stainless-Lang") == "python" + prediction = await response.parse() + assert_matches_type(PredictionRunResponse, prediction, path=["response"]) + + @pytest.mark.skip(reason="Mock server tests are disabled") + @parametrize + async def test_streaming_response_run_overload_12(self, async_client: AsyncFashn) -> None: + async with async_client.predictions.with_streaming_response.run( + inputs={"product_image": "https://example.com/product.jpg"}, + model_name="packshot", + ) as response: + assert not response.is_closed + assert response.http_request.headers.get("X-Stainless-Lang") == "python" + + prediction = await response.parse() + assert_matches_type(PredictionRunResponse, prediction, path=["response"]) + + assert cast(Any, response.is_closed) is True + @pytest.mark.skip(reason="Mock server tests are disabled") @parametrize async def test_method_status(self, async_client: AsyncFashn) -> None: From e805195d97f3a8fce35faa9a1e98ac0073572dcc Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Mon, 25 May 2026 11:16:22 +0000 Subject: [PATCH 2/2] release: 0.8.0 --- .release-please-manifest.json | 2 +- CHANGELOG.md | 8 ++++++++ pyproject.toml | 2 +- src/fashn/_version.py | 2 +- 4 files changed, 11 insertions(+), 3 deletions(-) diff --git a/.release-please-manifest.json b/.release-please-manifest.json index 1b77f50..6538ca9 100644 --- a/.release-please-manifest.json +++ b/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "0.7.0" + ".": "0.8.0" } \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index 02697a8..1107ecf 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,13 @@ # Changelog +## 0.8.0 (2026-05-25) + +Full Changelog: [v0.7.0...v0.8.0](https://github.com/fashn-AI/fashn-python-sdk/compare/v0.7.0...v0.8.0) + +### Features + +* **api:** api update ([e8109bd](https://github.com/fashn-AI/fashn-python-sdk/commit/e8109bdf07184d1f1c66ed5cee66d6b43ac1b448)) + ## 0.7.0 (2026-05-18) Full Changelog: [v0.6.0...v0.7.0](https://github.com/fashn-AI/fashn-python-sdk/compare/v0.6.0...v0.7.0) diff --git a/pyproject.toml b/pyproject.toml index 1082184..e65d1a9 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "fashn" -version = "0.7.0" +version = "0.8.0" description = "The official Python library for the fashn API" dynamic = ["readme"] license = "Apache-2.0" diff --git a/src/fashn/_version.py b/src/fashn/_version.py index e1cb177..4850ce4 100644 --- a/src/fashn/_version.py +++ b/src/fashn/_version.py @@ -1,4 +1,4 @@ # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. __title__ = "fashn" -__version__ = "0.7.0" # x-release-please-version +__version__ = "0.8.0" # x-release-please-version