From d8fecc71d2e6b940f06553a0ffa45b0372d7f8cf Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Thu, 26 Mar 2026 19:25:12 +0000 Subject: [PATCH 1/5] feat(internal): implement indices array format for query and form serialization --- scripts/mock | 4 ++-- scripts/test | 2 +- src/runwayml/_qs.py | 5 ++++- 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/scripts/mock b/scripts/mock index 09eb49f..290e21b 100755 --- a/scripts/mock +++ b/scripts/mock @@ -24,7 +24,7 @@ if [ "$1" == "--daemon" ]; then # Pre-install the package so the download doesn't eat into the startup timeout npm exec --package=@stdy/cli@0.19.7 -- steady --version - npm exec --package=@stdy/cli@0.19.7 -- steady --host 127.0.0.1 -p 4010 --validator-form-array-format=comma --validator-query-array-format=comma --validator-form-object-format=brackets --validator-query-object-format=brackets "$URL" &> .stdy.log & + npm exec --package=@stdy/cli@0.19.7 -- steady --host 127.0.0.1 -p 4010 --validator-query-array-format=comma --validator-form-array-format=comma --validator-query-object-format=brackets --validator-form-object-format=brackets "$URL" &> .stdy.log & # Wait for server to come online via health endpoint (max 30s) echo -n "Waiting for server" @@ -48,5 +48,5 @@ if [ "$1" == "--daemon" ]; then echo else - npm exec --package=@stdy/cli@0.19.7 -- steady --host 127.0.0.1 -p 4010 --validator-form-array-format=comma --validator-query-array-format=comma --validator-form-object-format=brackets --validator-query-object-format=brackets "$URL" + npm exec --package=@stdy/cli@0.19.7 -- steady --host 127.0.0.1 -p 4010 --validator-query-array-format=comma --validator-form-array-format=comma --validator-query-object-format=brackets --validator-form-object-format=brackets "$URL" fi diff --git a/scripts/test b/scripts/test index e46b9b5..661f9bf 100755 --- a/scripts/test +++ b/scripts/test @@ -43,7 +43,7 @@ elif ! steady_is_running ; then echo -e "To run the server, pass in the path or url of your OpenAPI" echo -e "spec to the steady command:" echo - echo -e " \$ ${YELLOW}npm exec --package=@stdy/cli@0.19.7 -- steady path/to/your.openapi.yml --host 127.0.0.1 -p 4010 --validator-form-array-format=comma --validator-query-array-format=comma --validator-form-object-format=brackets --validator-query-object-format=brackets${NC}" + echo -e " \$ ${YELLOW}npm exec --package=@stdy/cli@0.19.7 -- steady path/to/your.openapi.yml --host 127.0.0.1 -p 4010 --validator-query-array-format=comma --validator-form-array-format=comma --validator-query-object-format=brackets --validator-form-object-format=brackets${NC}" echo exit 1 diff --git a/src/runwayml/_qs.py b/src/runwayml/_qs.py index ada6fd3..de8c99b 100644 --- a/src/runwayml/_qs.py +++ b/src/runwayml/_qs.py @@ -101,7 +101,10 @@ def _stringify_item( items.extend(self._stringify_item(key, item, opts)) return items elif array_format == "indices": - raise NotImplementedError("The array indices format is not supported yet") + items = [] + for i, item in enumerate(value): + items.extend(self._stringify_item(f"{key}[{i}]", item, opts)) + return items elif array_format == "brackets": items = [] key = key + "[]" From ad8481558aa386843875d631910ecce54e4009ba Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Tue, 31 Mar 2026 13:27:12 +0000 Subject: [PATCH 2/5] chore(tests): bump steady to v0.20.1 --- scripts/mock | 6 +++--- scripts/test | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/scripts/mock b/scripts/mock index 290e21b..15c2994 100755 --- a/scripts/mock +++ b/scripts/mock @@ -22,9 +22,9 @@ echo "==> Starting mock server with URL ${URL}" # Run steady mock on the given spec if [ "$1" == "--daemon" ]; then # Pre-install the package so the download doesn't eat into the startup timeout - npm exec --package=@stdy/cli@0.19.7 -- steady --version + npm exec --package=@stdy/cli@0.20.1 -- steady --version - npm exec --package=@stdy/cli@0.19.7 -- steady --host 127.0.0.1 -p 4010 --validator-query-array-format=comma --validator-form-array-format=comma --validator-query-object-format=brackets --validator-form-object-format=brackets "$URL" &> .stdy.log & + npm exec --package=@stdy/cli@0.20.1 -- steady --host 127.0.0.1 -p 4010 --validator-query-array-format=comma --validator-form-array-format=comma --validator-query-object-format=brackets --validator-form-object-format=brackets "$URL" &> .stdy.log & # Wait for server to come online via health endpoint (max 30s) echo -n "Waiting for server" @@ -48,5 +48,5 @@ if [ "$1" == "--daemon" ]; then echo else - npm exec --package=@stdy/cli@0.19.7 -- steady --host 127.0.0.1 -p 4010 --validator-query-array-format=comma --validator-form-array-format=comma --validator-query-object-format=brackets --validator-form-object-format=brackets "$URL" + npm exec --package=@stdy/cli@0.20.1 -- steady --host 127.0.0.1 -p 4010 --validator-query-array-format=comma --validator-form-array-format=comma --validator-query-object-format=brackets --validator-form-object-format=brackets "$URL" fi diff --git a/scripts/test b/scripts/test index 661f9bf..c8e2e9d 100755 --- a/scripts/test +++ b/scripts/test @@ -43,7 +43,7 @@ elif ! steady_is_running ; then echo -e "To run the server, pass in the path or url of your OpenAPI" echo -e "spec to the steady command:" echo - echo -e " \$ ${YELLOW}npm exec --package=@stdy/cli@0.19.7 -- steady path/to/your.openapi.yml --host 127.0.0.1 -p 4010 --validator-query-array-format=comma --validator-form-array-format=comma --validator-query-object-format=brackets --validator-form-object-format=brackets${NC}" + echo -e " \$ ${YELLOW}npm exec --package=@stdy/cli@0.20.1 -- steady path/to/your.openapi.yml --host 127.0.0.1 -p 4010 --validator-query-array-format=comma --validator-form-array-format=comma --validator-query-object-format=brackets --validator-form-object-format=brackets${NC}" echo exit 1 From 7c63591ad506c7f83ba85039c05fcaf94707d0f9 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Tue, 31 Mar 2026 19:18:50 +0000 Subject: [PATCH 3/5] chore(tests): bump steady to v0.20.2 --- scripts/mock | 6 +++--- scripts/test | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/scripts/mock b/scripts/mock index 15c2994..5cd7c15 100755 --- a/scripts/mock +++ b/scripts/mock @@ -22,9 +22,9 @@ echo "==> Starting mock server with URL ${URL}" # Run steady mock on the given spec if [ "$1" == "--daemon" ]; then # Pre-install the package so the download doesn't eat into the startup timeout - npm exec --package=@stdy/cli@0.20.1 -- steady --version + npm exec --package=@stdy/cli@0.20.2 -- steady --version - npm exec --package=@stdy/cli@0.20.1 -- steady --host 127.0.0.1 -p 4010 --validator-query-array-format=comma --validator-form-array-format=comma --validator-query-object-format=brackets --validator-form-object-format=brackets "$URL" &> .stdy.log & + npm exec --package=@stdy/cli@0.20.2 -- steady --host 127.0.0.1 -p 4010 --validator-query-array-format=comma --validator-form-array-format=comma --validator-query-object-format=brackets --validator-form-object-format=brackets "$URL" &> .stdy.log & # Wait for server to come online via health endpoint (max 30s) echo -n "Waiting for server" @@ -48,5 +48,5 @@ if [ "$1" == "--daemon" ]; then echo else - npm exec --package=@stdy/cli@0.20.1 -- steady --host 127.0.0.1 -p 4010 --validator-query-array-format=comma --validator-form-array-format=comma --validator-query-object-format=brackets --validator-form-object-format=brackets "$URL" + npm exec --package=@stdy/cli@0.20.2 -- steady --host 127.0.0.1 -p 4010 --validator-query-array-format=comma --validator-form-array-format=comma --validator-query-object-format=brackets --validator-form-object-format=brackets "$URL" fi diff --git a/scripts/test b/scripts/test index c8e2e9d..b8143aa 100755 --- a/scripts/test +++ b/scripts/test @@ -43,7 +43,7 @@ elif ! steady_is_running ; then echo -e "To run the server, pass in the path or url of your OpenAPI" echo -e "spec to the steady command:" echo - echo -e " \$ ${YELLOW}npm exec --package=@stdy/cli@0.20.1 -- steady path/to/your.openapi.yml --host 127.0.0.1 -p 4010 --validator-query-array-format=comma --validator-form-array-format=comma --validator-query-object-format=brackets --validator-form-object-format=brackets${NC}" + echo -e " \$ ${YELLOW}npm exec --package=@stdy/cli@0.20.2 -- steady path/to/your.openapi.yml --host 127.0.0.1 -p 4010 --validator-query-array-format=comma --validator-form-array-format=comma --validator-query-object-format=brackets --validator-form-object-format=brackets${NC}" echo exit 1 From c06a7f0ac1df58a820b7bfd288c60efce163f743 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Wed, 1 Apr 2026 12:12:59 +0000 Subject: [PATCH 4/5] feat(api): add tools parameter to realtime sessions --- .stats.yml | 4 +- src/runwayml/resources/realtime_sessions.py | 10 +- .../types/realtime_session_create_params.py | 292 +++++++++++++++++- tests/api_resources/test_realtime_sessions.py | 32 ++ 4 files changed, 333 insertions(+), 5 deletions(-) diff --git a/.stats.yml b/.stats.yml index 257316b..e1f2c3e 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 36 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/runwayml%2Frunwayml-80f24c85d40f5f07c19ce2f7bda8e87218a30efaf6611262d490d431b1efcfbb.yml -openapi_spec_hash: 8aa96c2e29a8dece4f244069ebbcea76 +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/runwayml%2Frunwayml-8efb262fec205b8ab10f02929369aa1eb1ae72fba3cc8037552f439ab63c1f2d.yml +openapi_spec_hash: 265ec44f88060288ab3dc2142eb29585 config_hash: 8e05a8613b4c0e602d485566da4e5264 diff --git a/src/runwayml/resources/realtime_sessions.py b/src/runwayml/resources/realtime_sessions.py index 23dbfbf..5921881 100644 --- a/src/runwayml/resources/realtime_sessions.py +++ b/src/runwayml/resources/realtime_sessions.py @@ -2,7 +2,7 @@ from __future__ import annotations -from typing import Any, cast +from typing import Any, Iterable, cast from typing_extensions import Literal import httpx @@ -53,6 +53,7 @@ def create( max_duration: int | Omit = omit, personality: str | Omit = omit, start_script: str | Omit = omit, + tools: Iterable[realtime_session_create_params.Tool] | 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, @@ -76,6 +77,8 @@ def create( start_script: Override the avatar start script for this session. If not provided, uses the avatar default. + tools: Tools available to the avatar during the session. + extra_headers: Send extra headers extra_query: Add additional query parameters to the request @@ -93,6 +96,7 @@ def create( "max_duration": max_duration, "personality": personality, "start_script": start_script, + "tools": tools, }, realtime_session_create_params.RealtimeSessionCreateParams, ), @@ -203,6 +207,7 @@ async def create( max_duration: int | Omit = omit, personality: str | Omit = omit, start_script: str | Omit = omit, + tools: Iterable[realtime_session_create_params.Tool] | 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, @@ -226,6 +231,8 @@ async def create( start_script: Override the avatar start script for this session. If not provided, uses the avatar default. + tools: Tools available to the avatar during the session. + extra_headers: Send extra headers extra_query: Add additional query parameters to the request @@ -243,6 +250,7 @@ async def create( "max_duration": max_duration, "personality": personality, "start_script": start_script, + "tools": tools, }, realtime_session_create_params.RealtimeSessionCreateParams, ), diff --git a/src/runwayml/types/realtime_session_create_params.py b/src/runwayml/types/realtime_session_create_params.py index 8a4ba19..668775f 100644 --- a/src/runwayml/types/realtime_session_create_params.py +++ b/src/runwayml/types/realtime_session_create_params.py @@ -2,12 +2,37 @@ from __future__ import annotations -from typing import Union +from typing import Union, Iterable from typing_extensions import Literal, Required, Annotated, TypeAlias, TypedDict +from .._types import SequenceNotStr from .._utils import PropertyInfo -__all__ = ["RealtimeSessionCreateParams", "Avatar", "AvatarRunwayPreset", "AvatarCustom"] +__all__ = [ + "RealtimeSessionCreateParams", + "Avatar", + "AvatarRunwayPreset", + "AvatarCustom", + "Tool", + "ToolClientEvent", + "ToolClientEventParameter", + "ToolClientEventParameterString", + "ToolClientEventParameterInteger", + "ToolClientEventParameterNumber", + "ToolClientEventParameterBoolean", + "ToolClientEventParameterArray", + "ToolClientEventParameterArrayItems", + "ToolClientEventParameterObject", + "ToolBackendRpc", + "ToolBackendRpcParameter", + "ToolBackendRpcParameterString", + "ToolBackendRpcParameterInteger", + "ToolBackendRpcParameterNumber", + "ToolBackendRpcParameterBoolean", + "ToolBackendRpcParameterArray", + "ToolBackendRpcParameterArrayItems", + "ToolBackendRpcParameterObject", +] class RealtimeSessionCreateParams(TypedDict, total=False): @@ -32,6 +57,9 @@ class RealtimeSessionCreateParams(TypedDict, total=False): If not provided, uses the avatar default. """ + tools: Iterable[Tool] + """Tools available to the avatar during the session.""" + class AvatarRunwayPreset(TypedDict, total=False): """A preset avatar from Runway.""" @@ -67,3 +95,263 @@ class AvatarCustom(TypedDict, total=False): Avatar: TypeAlias = Union[AvatarRunwayPreset, AvatarCustom] + + +class ToolClientEventParameterString(TypedDict, total=False): + description: Required[str] + """A description of the parameter.""" + + name: Required[str] + """The parameter name.""" + + type: Required[Literal["string"]] + + enum: SequenceNotStr[str] + """Allowed values for the parameter.""" + + required: bool + """Whether the parameter is required.""" + + +class ToolClientEventParameterInteger(TypedDict, total=False): + description: Required[str] + """A description of the parameter.""" + + name: Required[str] + """The parameter name.""" + + type: Required[Literal["integer"]] + + required: bool + """Whether the parameter is required.""" + + +class ToolClientEventParameterNumber(TypedDict, total=False): + description: Required[str] + """A description of the parameter.""" + + name: Required[str] + """The parameter name.""" + + type: Required[Literal["number"]] + + required: bool + """Whether the parameter is required.""" + + +class ToolClientEventParameterBoolean(TypedDict, total=False): + description: Required[str] + """A description of the parameter.""" + + name: Required[str] + """The parameter name.""" + + type: Required[Literal["boolean"]] + + required: bool + """Whether the parameter is required.""" + + +class ToolClientEventParameterArrayItems(TypedDict, total=False): + """Item schema for array elements.""" + + type: Required[Literal["string", "integer", "number", "boolean"]] + """The type of each element in the array.""" + + +class ToolClientEventParameterArray(TypedDict, total=False): + description: Required[str] + """A description of the parameter.""" + + items: Required[ToolClientEventParameterArrayItems] + """Item schema for array elements.""" + + name: Required[str] + """The parameter name.""" + + type: Required[Literal["array"]] + + required: bool + """Whether the parameter is required.""" + + +class ToolClientEventParameterObject(TypedDict, total=False): + description: Required[str] + """A description of the parameter.""" + + name: Required[str] + """The parameter name.""" + + properties: Required[Iterable[object]] + """The properties of the object.""" + + type: Required[Literal["object"]] + + required: bool + """Whether the parameter is required.""" + + +ToolClientEventParameter: TypeAlias = Union[ + ToolClientEventParameterString, + ToolClientEventParameterInteger, + ToolClientEventParameterNumber, + ToolClientEventParameterBoolean, + ToolClientEventParameterArray, + ToolClientEventParameterObject, +] + + +class ToolClientEvent(TypedDict, total=False): + """ + A fire-and-forget tool that sends arguments to the frontend client of the realtime session. + """ + + description: Required[str] + """A description of when and how the tool should be used. + + Be specific so the avatar understands the right context to invoke it. + """ + + name: Required[str] + """The tool name. + + Must start with a letter or underscore, followed by alphanumeric characters or + underscores. + """ + + type: Required[Literal["client_event"]] + + parameters: Iterable[ToolClientEventParameter] + + +class ToolBackendRpcParameterString(TypedDict, total=False): + description: Required[str] + """A description of the parameter.""" + + name: Required[str] + """The parameter name.""" + + type: Required[Literal["string"]] + + enum: SequenceNotStr[str] + """Allowed values for the parameter.""" + + required: bool + """Whether the parameter is required.""" + + +class ToolBackendRpcParameterInteger(TypedDict, total=False): + description: Required[str] + """A description of the parameter.""" + + name: Required[str] + """The parameter name.""" + + type: Required[Literal["integer"]] + + required: bool + """Whether the parameter is required.""" + + +class ToolBackendRpcParameterNumber(TypedDict, total=False): + description: Required[str] + """A description of the parameter.""" + + name: Required[str] + """The parameter name.""" + + type: Required[Literal["number"]] + + required: bool + """Whether the parameter is required.""" + + +class ToolBackendRpcParameterBoolean(TypedDict, total=False): + description: Required[str] + """A description of the parameter.""" + + name: Required[str] + """The parameter name.""" + + type: Required[Literal["boolean"]] + + required: bool + """Whether the parameter is required.""" + + +class ToolBackendRpcParameterArrayItems(TypedDict, total=False): + """Item schema for array elements.""" + + type: Required[Literal["string", "integer", "number", "boolean"]] + """The type of each element in the array.""" + + +class ToolBackendRpcParameterArray(TypedDict, total=False): + description: Required[str] + """A description of the parameter.""" + + items: Required[ToolBackendRpcParameterArrayItems] + """Item schema for array elements.""" + + name: Required[str] + """The parameter name.""" + + type: Required[Literal["array"]] + + required: bool + """Whether the parameter is required.""" + + +class ToolBackendRpcParameterObject(TypedDict, total=False): + description: Required[str] + """A description of the parameter.""" + + name: Required[str] + """The parameter name.""" + + properties: Required[Iterable[object]] + """The properties of the object.""" + + type: Required[Literal["object"]] + + required: bool + """Whether the parameter is required.""" + + +ToolBackendRpcParameter: TypeAlias = Union[ + ToolBackendRpcParameterString, + ToolBackendRpcParameterInteger, + ToolBackendRpcParameterNumber, + ToolBackendRpcParameterBoolean, + ToolBackendRpcParameterArray, + ToolBackendRpcParameterObject, +] + + +class ToolBackendRpc(TypedDict, total=False): + """ + A tool that makes a round-trip RPC call to your backend server during the session. + """ + + description: Required[str] + """A description of when and how the tool should be used. + + Be specific so the avatar understands the right context to invoke it. + """ + + name: Required[str] + """The tool name. + + Must start with a letter or underscore, followed by alphanumeric characters or + underscores. + """ + + type: Required[Literal["backend_rpc"]] + + parameters: Iterable[ToolBackendRpcParameter] + + timeout_seconds: Annotated[float, PropertyInfo(alias="timeoutSeconds")] + """Maximum time to wait for the backend to respond.""" + + +Tool: TypeAlias = Union[ToolClientEvent, ToolBackendRpc] diff --git a/tests/api_resources/test_realtime_sessions.py b/tests/api_resources/test_realtime_sessions.py index 992a5ab..2dc4294 100644 --- a/tests/api_resources/test_realtime_sessions.py +++ b/tests/api_resources/test_realtime_sessions.py @@ -42,6 +42,22 @@ def test_method_create_with_all_params(self, client: RunwayML) -> None: max_duration=10, personality="x", start_script="x", + tools=[ + { + "description": "x", + "name": "name", + "type": "client_event", + "parameters": [ + { + "description": "x", + "name": "name", + "type": "string", + "enum": ["string"], + "required": True, + } + ], + } + ], ) assert_matches_type(RealtimeSessionCreateResponse, realtime_session, path=["response"]) @@ -181,6 +197,22 @@ async def test_method_create_with_all_params(self, async_client: AsyncRunwayML) max_duration=10, personality="x", start_script="x", + tools=[ + { + "description": "x", + "name": "name", + "type": "client_event", + "parameters": [ + { + "description": "x", + "name": "name", + "type": "string", + "enum": ["string"], + "required": True, + } + ], + } + ], ) assert_matches_type(RealtimeSessionCreateResponse, realtime_session, path=["response"]) From 6f90001c6ab6f901ef2c6c8e96194250b0b72096 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Wed, 1 Apr 2026 12:13:21 +0000 Subject: [PATCH 5/5] release: 4.10.0 --- .release-please-manifest.json | 2 +- CHANGELOG.md | 15 +++++++++++++++ pyproject.toml | 2 +- src/runwayml/_version.py | 2 +- 4 files changed, 18 insertions(+), 3 deletions(-) diff --git a/.release-please-manifest.json b/.release-please-manifest.json index 6b46767..ad56a78 100644 --- a/.release-please-manifest.json +++ b/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "4.9.0" + ".": "4.10.0" } \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index 3cf6528..a8084fe 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,20 @@ # Changelog +## 4.10.0 (2026-04-01) + +Full Changelog: [v4.9.0...v4.10.0](https://github.com/runwayml/sdk-python/compare/v4.9.0...v4.10.0) + +### Features + +* **api:** add tools parameter to realtime sessions ([c06a7f0](https://github.com/runwayml/sdk-python/commit/c06a7f0ac1df58a820b7bfd288c60efce163f743)) +* **internal:** implement indices array format for query and form serialization ([d8fecc7](https://github.com/runwayml/sdk-python/commit/d8fecc71d2e6b940f06553a0ffa45b0372d7f8cf)) + + +### Chores + +* **tests:** bump steady to v0.20.1 ([ad84815](https://github.com/runwayml/sdk-python/commit/ad8481558aa386843875d631910ecce54e4009ba)) +* **tests:** bump steady to v0.20.2 ([7c63591](https://github.com/runwayml/sdk-python/commit/7c63591ad506c7f83ba85039c05fcaf94707d0f9)) + ## 4.9.0 (2026-03-25) Full Changelog: [v4.8.0...v4.9.0](https://github.com/runwayml/sdk-python/compare/v4.8.0...v4.9.0) diff --git a/pyproject.toml b/pyproject.toml index 249574e..dcbf477 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "runwayml" -version = "4.9.0" +version = "4.10.0" description = "The official Python library for the runwayml API" dynamic = ["readme"] license = "Apache-2.0" diff --git a/src/runwayml/_version.py b/src/runwayml/_version.py index 4e4cfdc..1f2d85c 100644 --- a/src/runwayml/_version.py +++ b/src/runwayml/_version.py @@ -1,4 +1,4 @@ # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. __title__ = "runwayml" -__version__ = "4.9.0" # x-release-please-version +__version__ = "4.10.0" # x-release-please-version