From caa4bb744fd6030a1563ecc862c31132d0f28db3 Mon Sep 17 00:00:00 2001 From: Rick Staa Date: Fri, 13 Sep 2024 17:36:56 +0200 Subject: [PATCH] feat: enable speakeasy retries (#201) This commit enables the [speakeasy retries](https://www.speakeasy.com/docs/customize-sdks/retries#global-retries) feature for the SDKs. --- runner/app/routes/audio_to_text.py | 8 +- runner/app/routes/image_to_image.py | 8 +- runner/app/routes/image_to_video.py | 8 +- runner/app/routes/segment_anything_2.py | 8 +- runner/app/routes/text_to_image.py | 8 +- runner/app/routes/upscale.py | 8 +- runner/gateway.openapi.yaml | 26 +++++- runner/openapi.yaml | 26 +++++- worker/runner.gen.go | 105 ++++++++++++------------ 9 files changed, 145 insertions(+), 60 deletions(-) diff --git a/runner/app/routes/audio_to_text.py b/runner/app/routes/audio_to_text.py index 6bcc928d..10d3c139 100644 --- a/runner/app/routes/audio_to_text.py +++ b/runner/app/routes/audio_to_text.py @@ -64,7 +64,13 @@ def handle_pipeline_error(e: Exception) -> JSONResponse: operation_id="genAudioToText", summary="Audio To Text", tags=["generate"], - openapi_extra={"x-speakeasy-name-override": "audioToText"}, + openapi_extra={ + "x-speakeasy-name-override": "audioToText", + "x-speakeasy-retries": { + "strategy": "backoff", + "statusCodes": ["503"], + }, + }, ) @router.post( "/audio-to-text/", diff --git a/runner/app/routes/image_to_image.py b/runner/app/routes/image_to_image.py index c8152414..8a49eeed 100644 --- a/runner/app/routes/image_to_image.py +++ b/runner/app/routes/image_to_image.py @@ -44,7 +44,13 @@ operation_id="genImageToImage", summary="Image To Image", tags=["generate"], - openapi_extra={"x-speakeasy-name-override": "imageToImage"}, + openapi_extra={ + "x-speakeasy-name-override": "imageToImage", + "x-speakeasy-retries": { + "strategy": "backoff", + "statusCodes": ["503"], + }, + }, ) @router.post( "/image-to-image/", diff --git a/runner/app/routes/image_to_video.py b/runner/app/routes/image_to_video.py index cd560f06..fc133b4e 100644 --- a/runner/app/routes/image_to_video.py +++ b/runner/app/routes/image_to_video.py @@ -43,7 +43,13 @@ operation_id="genImageToVideo", summary="Image To Video", tags=["generate"], - openapi_extra={"x-speakeasy-name-override": "imageToVideo"}, + openapi_extra={ + "x-speakeasy-name-override": "imageToVideo", + "x-speakeasy-retries": { + "strategy": "backoff", + "statusCodes": ["503"], + }, + }, ) @router.post( "/image-to-video/", diff --git a/runner/app/routes/segment_anything_2.py b/runner/app/routes/segment_anything_2.py index d617ee37..d783122c 100644 --- a/runner/app/routes/segment_anything_2.py +++ b/runner/app/routes/segment_anything_2.py @@ -49,7 +49,13 @@ operation_id="genSegmentAnything2", summary="Segment Anything 2", tags=["generate"], - openapi_extra={"x-speakeasy-name-override": "segmentAnything2"}, + openapi_extra={ + "x-speakeasy-name-override": "segmentAnything2", + "x-speakeasy-retries": { + "strategy": "backoff", + "statusCodes": ["503"], + }, + }, ) @router.post( "/segment-anything-2/", diff --git a/runner/app/routes/text_to_image.py b/runner/app/routes/text_to_image.py index 82a61f6b..a538d7e8 100644 --- a/runner/app/routes/text_to_image.py +++ b/runner/app/routes/text_to_image.py @@ -115,7 +115,13 @@ class TextToImageParams(BaseModel): operation_id="genTextToImage", summary="Text To Image", tags=["generate"], - openapi_extra={"x-speakeasy-name-override": "textToImage"}, + openapi_extra={ + "x-speakeasy-name-override": "textToImage", + "x-speakeasy-retries": { + "strategy": "backoff", + "statusCodes": ["503"], + } + } ) @router.post( "/text-to-image/", diff --git a/runner/app/routes/upscale.py b/runner/app/routes/upscale.py index ebd238e9..f74bbe91 100644 --- a/runner/app/routes/upscale.py +++ b/runner/app/routes/upscale.py @@ -44,7 +44,13 @@ operation_id="genUpscale", summary="Upscale", tags=["generate"], - openapi_extra={"x-speakeasy-name-override": "upscale"}, + openapi_extra={ + "x-speakeasy-name-override": "upscale", + "x-speakeasy-retries": { + "strategy": "backoff", + "statusCodes": ["503"], + }, + }, ) @router.post( "/upscale/", diff --git a/runner/gateway.openapi.yaml b/runner/gateway.openapi.yaml index 39e1c07a..adc15743 100644 --- a/runner/gateway.openapi.yaml +++ b/runner/gateway.openapi.yaml @@ -2,7 +2,7 @@ openapi: 3.1.0 info: title: Livepeer AI Runner description: An application to run AI pipelines - version: v0.2.0 + version: v0.3.0 servers: - url: https://dream-gateway.livepeer.cloud description: Livepeer Cloud Community Gateway @@ -57,6 +57,10 @@ paths: security: - HTTPBearer: [] x-speakeasy-name-override: textToImage + x-speakeasy-retries: + strategy: backoff + statusCodes: + - '503' /image-to-image: post: tags: @@ -105,6 +109,10 @@ paths: security: - HTTPBearer: [] x-speakeasy-name-override: imageToImage + x-speakeasy-retries: + strategy: backoff + statusCodes: + - '503' /image-to-video: post: tags: @@ -153,6 +161,10 @@ paths: security: - HTTPBearer: [] x-speakeasy-name-override: imageToVideo + x-speakeasy-retries: + strategy: backoff + statusCodes: + - '503' /upscale: post: tags: @@ -201,6 +213,10 @@ paths: security: - HTTPBearer: [] x-speakeasy-name-override: upscale + x-speakeasy-retries: + strategy: backoff + statusCodes: + - '503' /audio-to-text: post: tags: @@ -255,6 +271,10 @@ paths: security: - HTTPBearer: [] x-speakeasy-name-override: audioToText + x-speakeasy-retries: + strategy: backoff + statusCodes: + - '503' /segment-anything-2: post: tags: @@ -303,6 +323,10 @@ paths: security: - HTTPBearer: [] x-speakeasy-name-override: segmentAnything2 + x-speakeasy-retries: + strategy: backoff + statusCodes: + - '503' components: schemas: APIError: diff --git a/runner/openapi.yaml b/runner/openapi.yaml index 287c3939..3745aec2 100644 --- a/runner/openapi.yaml +++ b/runner/openapi.yaml @@ -2,7 +2,7 @@ openapi: 3.1.0 info: title: Livepeer AI Runner description: An application to run AI pipelines - version: v0.2.0 + version: v0.3.0 servers: - url: https://dream-gateway.livepeer.cloud description: Livepeer Cloud Community Gateway @@ -68,6 +68,10 @@ paths: security: - HTTPBearer: [] x-speakeasy-name-override: textToImage + x-speakeasy-retries: + strategy: backoff + statusCodes: + - '503' /image-to-image: post: tags: @@ -116,6 +120,10 @@ paths: security: - HTTPBearer: [] x-speakeasy-name-override: imageToImage + x-speakeasy-retries: + strategy: backoff + statusCodes: + - '503' /image-to-video: post: tags: @@ -164,6 +172,10 @@ paths: security: - HTTPBearer: [] x-speakeasy-name-override: imageToVideo + x-speakeasy-retries: + strategy: backoff + statusCodes: + - '503' /upscale: post: tags: @@ -212,6 +224,10 @@ paths: security: - HTTPBearer: [] x-speakeasy-name-override: upscale + x-speakeasy-retries: + strategy: backoff + statusCodes: + - '503' /audio-to-text: post: tags: @@ -266,6 +282,10 @@ paths: security: - HTTPBearer: [] x-speakeasy-name-override: audioToText + x-speakeasy-retries: + strategy: backoff + statusCodes: + - '503' /segment-anything-2: post: tags: @@ -314,6 +334,10 @@ paths: security: - HTTPBearer: [] x-speakeasy-name-override: segmentAnything2 + x-speakeasy-retries: + strategy: backoff + statusCodes: + - '503' components: schemas: APIError: diff --git a/worker/runner.gen.go b/worker/runner.gen.go index e304cb33..bbfa4418 100644 --- a/worker/runner.gen.go +++ b/worker/runner.gen.go @@ -1779,58 +1779,59 @@ func HandlerWithOptions(si ServerInterface, options ChiServerOptions) http.Handl // Base64 encoded, gzipped, json marshaled Swagger object var swaggerSpec = []string{ - "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", + "9n8BAAD//xO58U9ESAAA", } // GetSwagger returns the content of the embedded swagger specification file