From a94eab3d2bfe26798dd5c2062e69136dd8dd40f6 Mon Sep 17 00:00:00 2001 From: Renan Ferreira Date: Mon, 18 May 2026 08:45:21 -0300 Subject: [PATCH] fix(predictions): sync subscribe() overloads with all supported models - Add tryon-max, image-to-video, and edit overloads to subscribe() (sync and async) - Remove model-variation, which no longer exists in the API --- src/fashn/resources/predictions.py | 144 ++++++++++++++++++++++------- 1 file changed, 112 insertions(+), 32 deletions(-) diff --git a/src/fashn/resources/predictions.py b/src/fashn/resources/predictions.py index f8ca2bb..fd837ee 100644 --- a/src/fashn/resources/predictions.py +++ b/src/fashn/resources/predictions.py @@ -46,8 +46,8 @@ class PredictionsResource(SyncAPIResource): def subscribe( self, *, - inputs: prediction_run_params.TryOnRequestInputs, - model_name: Literal["tryon-v1.6"], + inputs: prediction_run_params.TryOnMaxRequestInputs, + model_name: Literal["tryon-max"], webhook_url: str | Omit = omit, poll_interval: int | None = None, timeout: int | None = None, @@ -64,8 +64,8 @@ def subscribe( def subscribe( self, *, - inputs: prediction_run_params.ProductToModelRequestInputs, - model_name: Literal["product-to-model"], + inputs: prediction_run_params.TryOnRequestInputs, + model_name: Literal["tryon-v1.6"], webhook_url: str | Omit = omit, poll_interval: int | None = None, timeout: int | None = None, @@ -82,8 +82,8 @@ def subscribe( def subscribe( self, *, - inputs: prediction_run_params.FaceToModelRequestInputs, - model_name: Literal["face-to-model"], + inputs: prediction_run_params.ProductToModelRequestInputs, + model_name: Literal["product-to-model"], webhook_url: str | Omit = omit, poll_interval: int | None = None, timeout: int | None = None, @@ -100,8 +100,8 @@ def subscribe( def subscribe( self, *, - inputs: prediction_run_params.ModelCreateRequestInputs, - model_name: Literal["model-create"], + inputs: prediction_run_params.FaceToModelRequestInputs, + model_name: Literal["face-to-model"], webhook_url: str | Omit = omit, poll_interval: int | None = None, timeout: int | None = None, @@ -118,8 +118,8 @@ def subscribe( def subscribe( self, *, - inputs: prediction_run_params.ModelVariationRequestInputs, - model_name: Literal["model-variation"], + inputs: prediction_run_params.ModelCreateRequestInputs, + model_name: Literal["model-create"], webhook_url: str | Omit = omit, poll_interval: int | None = None, timeout: int | None = None, @@ -204,27 +204,67 @@ def subscribe( request_timeout: float | httpx.Timeout | None | NotGiven = not_given, ) -> PredictionSubscribeResponse: ... + @overload + def subscribe( + self, + *, + inputs: prediction_run_params.ImageToVideoRequestInputs, + model_name: Literal["image-to-video"], + webhook_url: str | Omit = omit, + poll_interval: int | None = None, + timeout: int | None = None, + max_retries: int | None = None, + on_enqueued: EnqueuedCallback | None = None, + on_queue_update: QueueUpdateCallback | None = None, + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + request_timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> PredictionSubscribeResponse: ... + + @overload + def subscribe( + self, + *, + inputs: prediction_run_params.EditRequestInputs, + model_name: Literal["edit"], + webhook_url: str | Omit = omit, + poll_interval: int | None = None, + timeout: int | None = None, + max_retries: int | None = None, + on_enqueued: EnqueuedCallback | None = None, + on_queue_update: QueueUpdateCallback | None = None, + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + request_timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> PredictionSubscribeResponse: ... + def subscribe( self, *, - inputs: prediction_run_params.TryOnRequestInputs + inputs: prediction_run_params.TryOnMaxRequestInputs + | prediction_run_params.TryOnRequestInputs | prediction_run_params.ProductToModelRequestInputs | prediction_run_params.FaceToModelRequestInputs | prediction_run_params.ModelCreateRequestInputs - | prediction_run_params.ModelVariationRequestInputs | prediction_run_params.ModelSwapRequestInputs | prediction_run_params.ReframeRequestInputs | prediction_run_params.BackgroundChangeRequestInputs - | prediction_run_params.BackgroundRemoveRequestInputs, - model_name: Literal["tryon-v1.6"] + | prediction_run_params.BackgroundRemoveRequestInputs + | prediction_run_params.ImageToVideoRequestInputs + | prediction_run_params.EditRequestInputs, + model_name: Literal["tryon-max"] + | Literal["tryon-v1.6"] | Literal["product-to-model"] | Literal["face-to-model"] | Literal["model-create"] - | Literal["model-variation"] | Literal["model-swap"] | Literal["reframe"] | Literal["background-change"] - | Literal["background-remove"], + | Literal["background-remove"] + | Literal["image-to-video"] + | Literal["edit"], webhook_url: str | Omit = omit, poll_interval: int | None = None, timeout: int | None = None, @@ -1025,8 +1065,8 @@ class AsyncPredictionsResource(AsyncAPIResource): async def subscribe( self, *, - inputs: prediction_run_params.TryOnRequestInputs, - model_name: Literal["tryon-v1.6"], + inputs: prediction_run_params.TryOnMaxRequestInputs, + model_name: Literal["tryon-max"], webhook_url: str | Omit = omit, poll_interval: int | None = None, timeout: int | None = None, @@ -1043,8 +1083,8 @@ async def subscribe( async def subscribe( self, *, - inputs: prediction_run_params.ProductToModelRequestInputs, - model_name: Literal["product-to-model"], + inputs: prediction_run_params.TryOnRequestInputs, + model_name: Literal["tryon-v1.6"], webhook_url: str | Omit = omit, poll_interval: int | None = None, timeout: int | None = None, @@ -1061,8 +1101,8 @@ async def subscribe( async def subscribe( self, *, - inputs: prediction_run_params.FaceToModelRequestInputs, - model_name: Literal["face-to-model"], + inputs: prediction_run_params.ProductToModelRequestInputs, + model_name: Literal["product-to-model"], webhook_url: str | Omit = omit, poll_interval: int | None = None, timeout: int | None = None, @@ -1079,8 +1119,8 @@ async def subscribe( async def subscribe( self, *, - inputs: prediction_run_params.ModelCreateRequestInputs, - model_name: Literal["model-create"], + inputs: prediction_run_params.FaceToModelRequestInputs, + model_name: Literal["face-to-model"], webhook_url: str | Omit = omit, poll_interval: int | None = None, timeout: int | None = None, @@ -1097,8 +1137,8 @@ async def subscribe( async def subscribe( self, *, - inputs: prediction_run_params.ModelVariationRequestInputs, - model_name: Literal["model-variation"], + inputs: prediction_run_params.ModelCreateRequestInputs, + model_name: Literal["model-create"], webhook_url: str | Omit = omit, poll_interval: int | None = None, timeout: int | None = None, @@ -1183,27 +1223,67 @@ async def subscribe( request_timeout: float | httpx.Timeout | None | NotGiven = not_given, ) -> PredictionSubscribeResponse: ... + @overload + async def subscribe( + self, + *, + inputs: prediction_run_params.ImageToVideoRequestInputs, + model_name: Literal["image-to-video"], + webhook_url: str | Omit = omit, + poll_interval: int | None = None, + timeout: int | None = None, + max_retries: int | None = None, + on_enqueued: EnqueuedCallback | None = None, + on_queue_update: QueueUpdateCallback | None = None, + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + request_timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> PredictionSubscribeResponse: ... + + @overload + async def subscribe( + self, + *, + inputs: prediction_run_params.EditRequestInputs, + model_name: Literal["edit"], + webhook_url: str | Omit = omit, + poll_interval: int | None = None, + timeout: int | None = None, + max_retries: int | None = None, + on_enqueued: EnqueuedCallback | None = None, + on_queue_update: QueueUpdateCallback | None = None, + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + request_timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> PredictionSubscribeResponse: ... + async def subscribe( self, *, - inputs: prediction_run_params.TryOnRequestInputs + inputs: prediction_run_params.TryOnMaxRequestInputs + | prediction_run_params.TryOnRequestInputs | prediction_run_params.ProductToModelRequestInputs | prediction_run_params.FaceToModelRequestInputs | prediction_run_params.ModelCreateRequestInputs - | prediction_run_params.ModelVariationRequestInputs | prediction_run_params.ModelSwapRequestInputs | prediction_run_params.ReframeRequestInputs | prediction_run_params.BackgroundChangeRequestInputs - | prediction_run_params.BackgroundRemoveRequestInputs, - model_name: Literal["tryon-v1.6"] + | prediction_run_params.BackgroundRemoveRequestInputs + | prediction_run_params.ImageToVideoRequestInputs + | prediction_run_params.EditRequestInputs, + model_name: Literal["tryon-max"] + | Literal["tryon-v1.6"] | Literal["product-to-model"] | Literal["face-to-model"] | Literal["model-create"] - | Literal["model-variation"] | Literal["model-swap"] | Literal["reframe"] | Literal["background-change"] - | Literal["background-remove"], + | Literal["background-remove"] + | Literal["image-to-video"] + | Literal["edit"], webhook_url: str | Omit = omit, poll_interval: int | None = None, timeout: int | None = None,