From 6c82145f77a9b461a5d2e36492d995d23114eed3 Mon Sep 17 00:00:00 2001
From: "stainless-app[bot]"
<142633134+stainless-app[bot]@users.noreply.github.com>
Date: Wed, 1 Apr 2026 21:39:30 +0000
Subject: [PATCH 1/7] refactor: remove deprecated register/unregister model
endpoints
---
.stats.yml | 8 +-
api.md | 3 -
.../resources/models/models.py | 248 +-----------------
src/llama_stack_client/types/__init__.py | 2 -
.../types/model_register_params.py | 38 ---
.../types/model_register_response.py | 44 ----
tests/api_resources/test_models.py | 192 +-------------
7 files changed, 8 insertions(+), 527 deletions(-)
delete mode 100644 src/llama_stack_client/types/model_register_params.py
delete mode 100644 src/llama_stack_client/types/model_register_response.py
diff --git a/.stats.yml b/.stats.yml
index 5f85bdab..dc0bd21e 100644
--- a/.stats.yml
+++ b/.stats.yml
@@ -1,4 +1,4 @@
-configured_endpoints: 94
-openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/llamastack%2Fllama-stack-client-7b856674124b79094ac28a6ac451d7a67b5ddd74aebecd5e468a1f8ccfd13bd1.yml
-openapi_spec_hash: a5ca7c4dac274c534338a9b3f5d388c0
-config_hash: 7d5765272a641656f8231509937663a7
+configured_endpoints: 92
+openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/llamastack%2Fllama-stack-client-9ffc2353ad5334811c1ac49ab4eefba22a1d05975308004eb2e97e0206a69767.yml
+openapi_spec_hash: df104dbea7b0c50ba74f0908174aa4a9
+config_hash: d8a05907bd87286473cdf868da7d2ede
diff --git a/api.md b/api.md
index 7d117845..5e0426aa 100644
--- a/api.md
+++ b/api.md
@@ -249,7 +249,6 @@ from llama_stack_client.types import (
Model,
ModelRetrieveResponse,
ModelListResponse,
- ModelRegisterResponse,
)
```
@@ -257,8 +256,6 @@ Methods:
- client.models.retrieve(model_id) -> ModelRetrieveResponse
- client.models.list() -> ModelListResponse
-- client.models.register(\*\*params) -> ModelRegisterResponse
-- client.models.unregister(model_id) -> None
## OpenAI
diff --git a/src/llama_stack_client/resources/models/models.py b/src/llama_stack_client/resources/models/models.py
index 3fd88948..4b2a3cb2 100644
--- a/src/llama_stack_client/resources/models/models.py
+++ b/src/llama_stack_client/resources/models/models.py
@@ -8,9 +8,7 @@
from __future__ import annotations
-import typing_extensions
-from typing import Dict, Type, Optional, cast
-from typing_extensions import Literal
+from typing import Type, cast
import httpx
@@ -22,9 +20,8 @@
OpenAIResourceWithStreamingResponse,
AsyncOpenAIResourceWithStreamingResponse,
)
-from ...types import model_register_params
-from ..._types import Body, Omit, Query, Headers, NoneType, NotGiven, omit, not_given
-from ..._utils import path_template, maybe_transform, async_maybe_transform
+from ..._types import Body, Query, Headers, NotGiven, not_given
+from ..._utils import path_template
from ..._compat import cached_property
from ..._resource import SyncAPIResource, AsyncAPIResource
from ..._response import (
@@ -36,7 +33,6 @@
from ..._wrappers import DataWrapper
from ..._base_client import make_request_options
from ...types.model_list_response import ModelListResponse
-from ...types.model_register_response import ModelRegisterResponse
from ...types.model_retrieve_response import ModelRetrieveResponse
__all__ = ["ModelsResource", "AsyncModelsResource"]
@@ -124,105 +120,6 @@ def list(
cast_to=cast(Type[ModelListResponse], DataWrapper[ModelListResponse]),
)
- @typing_extensions.deprecated("deprecated")
- def register(
- self,
- *,
- model_id: str,
- metadata: Optional[Dict[str, object]] | Omit = omit,
- model_type: Optional[Literal["llm", "embedding", "rerank"]] | Omit = omit,
- model_validation: Optional[bool] | Omit = omit,
- provider_id: Optional[str] | Omit = omit,
- provider_model_id: Optional[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,
- ) -> ModelRegisterResponse:
- """
- Register a model.
-
- Args:
- model_id: The identifier of the model to register.
-
- metadata: Any additional metadata for this model.
-
- model_type: Enumeration of supported model types in Llama Stack.
-
- model_validation: Enable model availability check during registration. When false (default),
- validation is deferred to runtime and model is preserved during provider
- refresh.
-
- provider_id: The identifier of the provider.
-
- provider_model_id: The identifier of the model in the provider.
-
- 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
- """
- return self._post(
- "/v1/models",
- body=maybe_transform(
- {
- "model_id": model_id,
- "metadata": metadata,
- "model_type": model_type,
- "model_validation": model_validation,
- "provider_id": provider_id,
- "provider_model_id": provider_model_id,
- },
- model_register_params.ModelRegisterParams,
- ),
- options=make_request_options(
- extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
- ),
- cast_to=ModelRegisterResponse,
- )
-
- @typing_extensions.deprecated("deprecated")
- def unregister(
- self,
- model_id: str,
- *,
- # 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,
- ) -> None:
- """
- Unregister a model.
-
- Args:
- model_id: The ID of the model to unregister.
-
- 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
- """
- if not model_id:
- raise ValueError(f"Expected a non-empty value for `model_id` but received {model_id!r}")
- extra_headers = {"Accept": "*/*", **(extra_headers or {})}
- return self._delete(
- path_template("/v1/models/{model_id}", model_id=model_id),
- options=make_request_options(
- extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
- ),
- cast_to=NoneType,
- )
-
class AsyncModelsResource(AsyncAPIResource):
@cached_property
@@ -306,105 +203,6 @@ async def list(
cast_to=cast(Type[ModelListResponse], DataWrapper[ModelListResponse]),
)
- @typing_extensions.deprecated("deprecated")
- async def register(
- self,
- *,
- model_id: str,
- metadata: Optional[Dict[str, object]] | Omit = omit,
- model_type: Optional[Literal["llm", "embedding", "rerank"]] | Omit = omit,
- model_validation: Optional[bool] | Omit = omit,
- provider_id: Optional[str] | Omit = omit,
- provider_model_id: Optional[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,
- ) -> ModelRegisterResponse:
- """
- Register a model.
-
- Args:
- model_id: The identifier of the model to register.
-
- metadata: Any additional metadata for this model.
-
- model_type: Enumeration of supported model types in Llama Stack.
-
- model_validation: Enable model availability check during registration. When false (default),
- validation is deferred to runtime and model is preserved during provider
- refresh.
-
- provider_id: The identifier of the provider.
-
- provider_model_id: The identifier of the model in the provider.
-
- 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
- """
- return await self._post(
- "/v1/models",
- body=await async_maybe_transform(
- {
- "model_id": model_id,
- "metadata": metadata,
- "model_type": model_type,
- "model_validation": model_validation,
- "provider_id": provider_id,
- "provider_model_id": provider_model_id,
- },
- model_register_params.ModelRegisterParams,
- ),
- options=make_request_options(
- extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
- ),
- cast_to=ModelRegisterResponse,
- )
-
- @typing_extensions.deprecated("deprecated")
- async def unregister(
- self,
- model_id: str,
- *,
- # 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,
- ) -> None:
- """
- Unregister a model.
-
- Args:
- model_id: The ID of the model to unregister.
-
- 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
- """
- if not model_id:
- raise ValueError(f"Expected a non-empty value for `model_id` but received {model_id!r}")
- extra_headers = {"Accept": "*/*", **(extra_headers or {})}
- return await self._delete(
- path_template("/v1/models/{model_id}", model_id=model_id),
- options=make_request_options(
- extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
- ),
- cast_to=NoneType,
- )
-
class ModelsResourceWithRawResponse:
def __init__(self, models: ModelsResource) -> None:
@@ -416,16 +214,6 @@ def __init__(self, models: ModelsResource) -> None:
self.list = to_raw_response_wrapper(
models.list,
)
- self.register = ( # pyright: ignore[reportDeprecated]
- to_raw_response_wrapper(
- models.register, # pyright: ignore[reportDeprecated],
- )
- )
- self.unregister = ( # pyright: ignore[reportDeprecated]
- to_raw_response_wrapper(
- models.unregister, # pyright: ignore[reportDeprecated],
- )
- )
@cached_property
def openai(self) -> OpenAIResourceWithRawResponse:
@@ -442,16 +230,6 @@ def __init__(self, models: AsyncModelsResource) -> None:
self.list = async_to_raw_response_wrapper(
models.list,
)
- self.register = ( # pyright: ignore[reportDeprecated]
- async_to_raw_response_wrapper(
- models.register, # pyright: ignore[reportDeprecated],
- )
- )
- self.unregister = ( # pyright: ignore[reportDeprecated]
- async_to_raw_response_wrapper(
- models.unregister, # pyright: ignore[reportDeprecated],
- )
- )
@cached_property
def openai(self) -> AsyncOpenAIResourceWithRawResponse:
@@ -468,16 +246,6 @@ def __init__(self, models: ModelsResource) -> None:
self.list = to_streamed_response_wrapper(
models.list,
)
- self.register = ( # pyright: ignore[reportDeprecated]
- to_streamed_response_wrapper(
- models.register, # pyright: ignore[reportDeprecated],
- )
- )
- self.unregister = ( # pyright: ignore[reportDeprecated]
- to_streamed_response_wrapper(
- models.unregister, # pyright: ignore[reportDeprecated],
- )
- )
@cached_property
def openai(self) -> OpenAIResourceWithStreamingResponse:
@@ -494,16 +262,6 @@ def __init__(self, models: AsyncModelsResource) -> None:
self.list = async_to_streamed_response_wrapper(
models.list,
)
- self.register = ( # pyright: ignore[reportDeprecated]
- async_to_streamed_response_wrapper(
- models.register, # pyright: ignore[reportDeprecated],
- )
- )
- self.unregister = ( # pyright: ignore[reportDeprecated]
- async_to_streamed_response_wrapper(
- models.unregister, # pyright: ignore[reportDeprecated],
- )
- )
@cached_property
def openai(self) -> AsyncOpenAIResourceWithStreamingResponse:
diff --git a/src/llama_stack_client/types/__init__.py b/src/llama_stack_client/types/__init__.py
index b40e8110..b6abf68b 100644
--- a/src/llama_stack_client/types/__init__.py
+++ b/src/llama_stack_client/types/__init__.py
@@ -56,7 +56,6 @@
from .file_content_response import FileContentResponse as FileContentResponse
from .list_prompts_response import ListPromptsResponse as ListPromptsResponse
from .list_shields_response import ListShieldsResponse as ListShieldsResponse
-from .model_register_params import ModelRegisterParams as ModelRegisterParams
from .query_chunks_response import QueryChunksResponse as QueryChunksResponse
from .prompt_retrieve_params import PromptRetrieveParams as PromptRetrieveParams
from .provider_list_response import ProviderListResponse as ProviderListResponse
@@ -68,7 +67,6 @@
from .vector_io_query_params import VectorIoQueryParams as VectorIoQueryParams
from .batch_retrieve_response import BatchRetrieveResponse as BatchRetrieveResponse
from .embedding_create_params import EmbeddingCreateParams as EmbeddingCreateParams
-from .model_register_response import ModelRegisterResponse as ModelRegisterResponse
from .model_retrieve_response import ModelRetrieveResponse as ModelRetrieveResponse
from .vector_io_insert_params import VectorIoInsertParams as VectorIoInsertParams
from .completion_create_params import CompletionCreateParams as CompletionCreateParams
diff --git a/src/llama_stack_client/types/model_register_params.py b/src/llama_stack_client/types/model_register_params.py
deleted file mode 100644
index 0100748a..00000000
--- a/src/llama_stack_client/types/model_register_params.py
+++ /dev/null
@@ -1,38 +0,0 @@
-# Copyright (c) Meta Platforms, Inc. and affiliates.
-# All rights reserved.
-#
-# This source code is licensed under the terms described in the LICENSE file in
-# the root directory of this source tree.
-
-# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
-
-from __future__ import annotations
-
-from typing import Dict, Optional
-from typing_extensions import Literal, Required, TypedDict
-
-__all__ = ["ModelRegisterParams"]
-
-
-class ModelRegisterParams(TypedDict, total=False):
- model_id: Required[str]
- """The identifier of the model to register."""
-
- metadata: Optional[Dict[str, object]]
- """Any additional metadata for this model."""
-
- model_type: Optional[Literal["llm", "embedding", "rerank"]]
- """Enumeration of supported model types in Llama Stack."""
-
- model_validation: Optional[bool]
- """Enable model availability check during registration.
-
- When false (default), validation is deferred to runtime and model is preserved
- during provider refresh.
- """
-
- provider_id: Optional[str]
- """The identifier of the provider."""
-
- provider_model_id: Optional[str]
- """The identifier of the model in the provider."""
diff --git a/src/llama_stack_client/types/model_register_response.py b/src/llama_stack_client/types/model_register_response.py
deleted file mode 100644
index d91da869..00000000
--- a/src/llama_stack_client/types/model_register_response.py
+++ /dev/null
@@ -1,44 +0,0 @@
-# Copyright (c) Meta Platforms, Inc. and affiliates.
-# All rights reserved.
-#
-# This source code is licensed under the terms described in the LICENSE file in
-# the root directory of this source tree.
-
-# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
-
-from typing import Dict, Optional
-from typing_extensions import Literal
-
-from pydantic import Field as FieldInfo
-
-from .._models import BaseModel
-
-__all__ = ["ModelRegisterResponse"]
-
-
-class ModelRegisterResponse(BaseModel):
- """A model resource representing an AI model registered in Llama Stack."""
-
- identifier: str
- """Unique identifier for this resource in llama stack"""
-
- provider_id: str
- """ID of the provider that owns this resource"""
-
- metadata: Optional[Dict[str, object]] = None
- """Any additional metadata for this model"""
-
- api_model_type: Optional[Literal["llm", "embedding", "rerank"]] = FieldInfo(alias="model_type", default=None)
- """Enumeration of supported model types in Llama Stack."""
-
- api_model_validation: Optional[bool] = FieldInfo(alias="model_validation", default=None)
- """Enable model availability check during registration.
-
- When false (default), validation is deferred to runtime and model is preserved
- during provider refresh.
- """
-
- provider_resource_id: Optional[str] = None
- """Unique identifier for this resource in the provider"""
-
- type: Optional[Literal["model"]] = None
diff --git a/tests/api_resources/test_models.py b/tests/api_resources/test_models.py
index b2ca5fdd..a50d3905 100644
--- a/tests/api_resources/test_models.py
+++ b/tests/api_resources/test_models.py
@@ -15,13 +15,7 @@
from tests.utils import assert_matches_type
from llama_stack_client import LlamaStackClient, AsyncLlamaStackClient
-from llama_stack_client.types import (
- ModelListResponse,
- ModelRegisterResponse,
- ModelRetrieveResponse,
-)
-
-# pyright: reportDeprecated=false
+from llama_stack_client.types import ModelListResponse, ModelRetrieveResponse
base_url = os.environ.get("TEST_API_BASE_URL", "http://127.0.0.1:4010")
@@ -92,98 +86,6 @@ def test_streaming_response_list(self, client: LlamaStackClient) -> None:
assert cast(Any, response.is_closed) is True
- @parametrize
- def test_method_register(self, client: LlamaStackClient) -> None:
- with pytest.warns(DeprecationWarning):
- model = client.models.register(
- model_id="model_id",
- )
-
- assert_matches_type(ModelRegisterResponse, model, path=["response"])
-
- @parametrize
- def test_method_register_with_all_params(self, client: LlamaStackClient) -> None:
- with pytest.warns(DeprecationWarning):
- model = client.models.register(
- model_id="model_id",
- metadata={"foo": "bar"},
- model_type="llm",
- model_validation=True,
- provider_id="provider_id",
- provider_model_id="provider_model_id",
- )
-
- assert_matches_type(ModelRegisterResponse, model, path=["response"])
-
- @parametrize
- def test_raw_response_register(self, client: LlamaStackClient) -> None:
- with pytest.warns(DeprecationWarning):
- response = client.models.with_raw_response.register(
- model_id="model_id",
- )
-
- assert response.is_closed is True
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
- model = response.parse()
- assert_matches_type(ModelRegisterResponse, model, path=["response"])
-
- @parametrize
- def test_streaming_response_register(self, client: LlamaStackClient) -> None:
- with pytest.warns(DeprecationWarning):
- with client.models.with_streaming_response.register(
- model_id="model_id",
- ) as response:
- assert not response.is_closed
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
-
- model = response.parse()
- assert_matches_type(ModelRegisterResponse, model, path=["response"])
-
- assert cast(Any, response.is_closed) is True
-
- @parametrize
- def test_method_unregister(self, client: LlamaStackClient) -> None:
- with pytest.warns(DeprecationWarning):
- model = client.models.unregister(
- "model_id",
- )
-
- assert model is None
-
- @parametrize
- def test_raw_response_unregister(self, client: LlamaStackClient) -> None:
- with pytest.warns(DeprecationWarning):
- response = client.models.with_raw_response.unregister(
- "model_id",
- )
-
- assert response.is_closed is True
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
- model = response.parse()
- assert model is None
-
- @parametrize
- def test_streaming_response_unregister(self, client: LlamaStackClient) -> None:
- with pytest.warns(DeprecationWarning):
- with client.models.with_streaming_response.unregister(
- "model_id",
- ) as response:
- assert not response.is_closed
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
-
- model = response.parse()
- assert model is None
-
- assert cast(Any, response.is_closed) is True
-
- @parametrize
- def test_path_params_unregister(self, client: LlamaStackClient) -> None:
- with pytest.warns(DeprecationWarning):
- with pytest.raises(ValueError, match=r"Expected a non-empty value for `model_id` but received ''"):
- client.models.with_raw_response.unregister(
- "",
- )
-
class TestAsyncModels:
parametrize = pytest.mark.parametrize(
@@ -252,95 +154,3 @@ async def test_streaming_response_list(self, async_client: AsyncLlamaStackClient
assert_matches_type(ModelListResponse, model, path=["response"])
assert cast(Any, response.is_closed) is True
-
- @parametrize
- async def test_method_register(self, async_client: AsyncLlamaStackClient) -> None:
- with pytest.warns(DeprecationWarning):
- model = await async_client.models.register(
- model_id="model_id",
- )
-
- assert_matches_type(ModelRegisterResponse, model, path=["response"])
-
- @parametrize
- async def test_method_register_with_all_params(self, async_client: AsyncLlamaStackClient) -> None:
- with pytest.warns(DeprecationWarning):
- model = await async_client.models.register(
- model_id="model_id",
- metadata={"foo": "bar"},
- model_type="llm",
- model_validation=True,
- provider_id="provider_id",
- provider_model_id="provider_model_id",
- )
-
- assert_matches_type(ModelRegisterResponse, model, path=["response"])
-
- @parametrize
- async def test_raw_response_register(self, async_client: AsyncLlamaStackClient) -> None:
- with pytest.warns(DeprecationWarning):
- response = await async_client.models.with_raw_response.register(
- model_id="model_id",
- )
-
- assert response.is_closed is True
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
- model = await response.parse()
- assert_matches_type(ModelRegisterResponse, model, path=["response"])
-
- @parametrize
- async def test_streaming_response_register(self, async_client: AsyncLlamaStackClient) -> None:
- with pytest.warns(DeprecationWarning):
- async with async_client.models.with_streaming_response.register(
- model_id="model_id",
- ) as response:
- assert not response.is_closed
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
-
- model = await response.parse()
- assert_matches_type(ModelRegisterResponse, model, path=["response"])
-
- assert cast(Any, response.is_closed) is True
-
- @parametrize
- async def test_method_unregister(self, async_client: AsyncLlamaStackClient) -> None:
- with pytest.warns(DeprecationWarning):
- model = await async_client.models.unregister(
- "model_id",
- )
-
- assert model is None
-
- @parametrize
- async def test_raw_response_unregister(self, async_client: AsyncLlamaStackClient) -> None:
- with pytest.warns(DeprecationWarning):
- response = await async_client.models.with_raw_response.unregister(
- "model_id",
- )
-
- assert response.is_closed is True
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
- model = await response.parse()
- assert model is None
-
- @parametrize
- async def test_streaming_response_unregister(self, async_client: AsyncLlamaStackClient) -> None:
- with pytest.warns(DeprecationWarning):
- async with async_client.models.with_streaming_response.unregister(
- "model_id",
- ) as response:
- assert not response.is_closed
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
-
- model = await response.parse()
- assert model is None
-
- assert cast(Any, response.is_closed) is True
-
- @parametrize
- async def test_path_params_unregister(self, async_client: AsyncLlamaStackClient) -> None:
- with pytest.warns(DeprecationWarning):
- with pytest.raises(ValueError, match=r"Expected a non-empty value for `model_id` but received ''"):
- await async_client.models.with_raw_response.unregister(
- "",
- )
From 3bb043e2859ae601cd69c380e1749a1ff18a2a00 Mon Sep 17 00:00:00 2001
From: "stainless-app[bot]"
<142633134+stainless-app[bot]@users.noreply.github.com>
Date: Tue, 31 Mar 2026 09:17:15 +0000
Subject: [PATCH 2/7] feat: add reasoning output types to OpenAI Responses API
spec
---
.stats.yml | 4 +-
.../types/response_create_params.py | 60 +++++++++++++
.../types/response_list_response.py | 89 ++++++++++++++++++
.../types/response_object.py | 46 ++++++++++
.../types/response_object_stream.py | 90 +++++++++++++++++++
.../responses/input_item_list_response.py | 43 +++++++++
tests/api_resources/test_responses.py | 20 ++++-
7 files changed, 346 insertions(+), 6 deletions(-)
diff --git a/.stats.yml b/.stats.yml
index dc0bd21e..6a7f094b 100644
--- a/.stats.yml
+++ b/.stats.yml
@@ -1,4 +1,4 @@
configured_endpoints: 92
-openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/llamastack%2Fllama-stack-client-9ffc2353ad5334811c1ac49ab4eefba22a1d05975308004eb2e97e0206a69767.yml
-openapi_spec_hash: df104dbea7b0c50ba74f0908174aa4a9
+openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/llamastack%2Fllama-stack-client-678bab2f0d5095518aacc2b2c249484390e94d6799c75cb0ee07dd0f1955e270.yml
+openapi_spec_hash: 1159551b99441246a96a9e21a49456ab
config_hash: d8a05907bd87286473cdf868da7d2ede
diff --git a/src/llama_stack_client/types/response_create_params.py b/src/llama_stack_client/types/response_create_params.py
index 59886a69..5ce3f825 100644
--- a/src/llama_stack_client/types/response_create_params.py
+++ b/src/llama_stack_client/types/response_create_params.py
@@ -39,6 +39,9 @@
"InputListOpenAIResponseMessageUnionOpenAIResponseInputFunctionToolCallOutputOpenAIResponseMcpApprovalResponseOpenAIResponseOutputMessageMcpListTools",
"InputListOpenAIResponseMessageUnionOpenAIResponseInputFunctionToolCallOutputOpenAIResponseMcpApprovalResponseOpenAIResponseOutputMessageMcpListToolsTool",
"InputListOpenAIResponseMessageUnionOpenAIResponseInputFunctionToolCallOutputOpenAIResponseMcpApprovalResponseOpenAIResponseMcpApprovalRequest",
+ "InputListOpenAIResponseMessageUnionOpenAIResponseInputFunctionToolCallOutputOpenAIResponseMcpApprovalResponseOpenAIResponseOutputMessageReasoningItem",
+ "InputListOpenAIResponseMessageUnionOpenAIResponseInputFunctionToolCallOutputOpenAIResponseMcpApprovalResponseOpenAIResponseOutputMessageReasoningItemSummary",
+ "InputListOpenAIResponseMessageUnionOpenAIResponseInputFunctionToolCallOutputOpenAIResponseMcpApprovalResponseOpenAIResponseOutputMessageReasoningItemContent",
"InputListOpenAIResponseMessageUnionOpenAIResponseInputFunctionToolCallOutputOpenAIResponseMcpApprovalResponseOpenAIResponseInputFunctionToolCallOutput",
"InputListOpenAIResponseMessageUnionOpenAIResponseInputFunctionToolCallOutputOpenAIResponseMcpApprovalResponseOpenAIResponseInputFunctionToolCallOutputOutputListOpenAIResponseInputMessageContentTextOpenAIResponseInputMessageContentImageOpenAIResponseInputMessageContentFile",
"InputListOpenAIResponseMessageUnionOpenAIResponseInputFunctionToolCallOutputOpenAIResponseMcpApprovalResponseOpenAIResponseInputFunctionToolCallOutputOutputListOpenAIResponseInputMessageContentTextOpenAIResponseInputMessageContentImageOpenAIResponseInputMessageContentFileOpenAIResponseInputMessageContentText",
@@ -558,6 +561,59 @@ class InputListOpenAIResponseMessageUnionOpenAIResponseInputFunctionToolCallOutp
type: Literal["mcp_approval_request"]
+class InputListOpenAIResponseMessageUnionOpenAIResponseInputFunctionToolCallOutputOpenAIResponseMcpApprovalResponseOpenAIResponseOutputMessageReasoningItemSummary(
+ TypedDict, total=False
+):
+ """A summary of reasoning output from the model."""
+
+ text: Required[str]
+ """The summary text of the reasoning output."""
+
+ type: Literal["summary_text"]
+ """The type identifier, always 'summary_text'."""
+
+
+class InputListOpenAIResponseMessageUnionOpenAIResponseInputFunctionToolCallOutputOpenAIResponseMcpApprovalResponseOpenAIResponseOutputMessageReasoningItemContent(
+ TypedDict, total=False
+):
+ """Reasoning text from the model."""
+
+ text: Required[str]
+ """The reasoning text content from the model."""
+
+ type: Literal["reasoning_text"]
+ """The type identifier, always 'reasoning_text'."""
+
+
+class InputListOpenAIResponseMessageUnionOpenAIResponseInputFunctionToolCallOutputOpenAIResponseMcpApprovalResponseOpenAIResponseOutputMessageReasoningItem(
+ TypedDict, total=False
+):
+ """Reasoning output from the model, representing the model's thinking process."""
+
+ id: Required[str]
+ """Unique identifier for the reasoning output item."""
+
+ summary: Required[
+ Iterable[
+ InputListOpenAIResponseMessageUnionOpenAIResponseInputFunctionToolCallOutputOpenAIResponseMcpApprovalResponseOpenAIResponseOutputMessageReasoningItemSummary
+ ]
+ ]
+ """Summary of the reasoning output."""
+
+ content: Optional[
+ Iterable[
+ InputListOpenAIResponseMessageUnionOpenAIResponseInputFunctionToolCallOutputOpenAIResponseMcpApprovalResponseOpenAIResponseOutputMessageReasoningItemContent
+ ]
+ ]
+ """The reasoning content from the model."""
+
+ status: Optional[Literal["in_progress", "completed", "incomplete"]]
+ """The status of the reasoning output."""
+
+ type: Literal["reasoning"]
+ """The type identifier, always 'reasoning'."""
+
+
class InputListOpenAIResponseMessageUnionOpenAIResponseInputFunctionToolCallOutputOpenAIResponseMcpApprovalResponseOpenAIResponseInputFunctionToolCallOutputOutputListOpenAIResponseInputMessageContentTextOpenAIResponseInputMessageContentImageOpenAIResponseInputMessageContentFileOpenAIResponseInputMessageContentText(
TypedDict, total=False
):
@@ -654,6 +710,7 @@ class InputListOpenAIResponseMessageUnionOpenAIResponseInputFunctionToolCallOutp
InputListOpenAIResponseMessageUnionOpenAIResponseInputFunctionToolCallOutputOpenAIResponseMcpApprovalResponseOpenAIResponseOutputMessageMcpCall,
InputListOpenAIResponseMessageUnionOpenAIResponseInputFunctionToolCallOutputOpenAIResponseMcpApprovalResponseOpenAIResponseOutputMessageMcpListTools,
InputListOpenAIResponseMessageUnionOpenAIResponseInputFunctionToolCallOutputOpenAIResponseMcpApprovalResponseOpenAIResponseMcpApprovalRequest,
+ InputListOpenAIResponseMessageUnionOpenAIResponseInputFunctionToolCallOutputOpenAIResponseMcpApprovalResponseOpenAIResponseOutputMessageReasoningItem,
InputListOpenAIResponseMessageUnionOpenAIResponseInputFunctionToolCallOutputOpenAIResponseMcpApprovalResponseOpenAIResponseInputFunctionToolCallOutput,
InputListOpenAIResponseMessageUnionOpenAIResponseInputFunctionToolCallOutputOpenAIResponseMcpApprovalResponseOpenAIResponseMcpApprovalResponse,
]
@@ -727,6 +784,9 @@ class Reasoning(TypedDict, total=False):
effort: Optional[Literal["none", "minimal", "low", "medium", "high", "xhigh"]]
+ summary: Optional[Literal["auto", "concise", "detailed"]]
+ """Summary mode for reasoning output. One of 'auto', 'concise', or 'detailed'."""
+
class StreamOptions(TypedDict, total=False):
"""Options that control streamed response behavior."""
diff --git a/src/llama_stack_client/types/response_list_response.py b/src/llama_stack_client/types/response_list_response.py
index d09d7110..16b7778b 100644
--- a/src/llama_stack_client/types/response_list_response.py
+++ b/src/llama_stack_client/types/response_list_response.py
@@ -40,6 +40,9 @@
"InputOpenAIResponseOutputMessageMcpListTools",
"InputOpenAIResponseOutputMessageMcpListToolsTool",
"InputOpenAIResponseMcpApprovalRequest",
+ "InputOpenAIResponseOutputMessageReasoningItem",
+ "InputOpenAIResponseOutputMessageReasoningItemSummary",
+ "InputOpenAIResponseOutputMessageReasoningItemContent",
"InputOpenAIResponseInputFunctionToolCallOutput",
"InputOpenAIResponseInputFunctionToolCallOutputOutputListOpenAIResponseInputMessageContentTextOpenAIResponseInputMessageContentImageOpenAIResponseInputMessageContentFile",
"InputOpenAIResponseInputFunctionToolCallOutputOutputListOpenAIResponseInputMessageContentTextOpenAIResponseInputMessageContentImageOpenAIResponseInputMessageContentFileOpenAIResponseInputMessageContentText",
@@ -70,6 +73,9 @@
"OutputOpenAIResponseOutputMessageMcpListTools",
"OutputOpenAIResponseOutputMessageMcpListToolsTool",
"OutputOpenAIResponseMcpApprovalRequest",
+ "OutputOpenAIResponseOutputMessageReasoningItem",
+ "OutputOpenAIResponseOutputMessageReasoningItemSummary",
+ "OutputOpenAIResponseOutputMessageReasoningItemContent",
"Error",
"IncompleteDetails",
"Prompt",
@@ -439,6 +445,45 @@ class InputOpenAIResponseMcpApprovalRequest(BaseModel):
type: Optional[Literal["mcp_approval_request"]] = None
+class InputOpenAIResponseOutputMessageReasoningItemSummary(BaseModel):
+ """A summary of reasoning output from the model."""
+
+ text: str
+ """The summary text of the reasoning output."""
+
+ type: Optional[Literal["summary_text"]] = None
+ """The type identifier, always 'summary_text'."""
+
+
+class InputOpenAIResponseOutputMessageReasoningItemContent(BaseModel):
+ """Reasoning text from the model."""
+
+ text: str
+ """The reasoning text content from the model."""
+
+ type: Optional[Literal["reasoning_text"]] = None
+ """The type identifier, always 'reasoning_text'."""
+
+
+class InputOpenAIResponseOutputMessageReasoningItem(BaseModel):
+ """Reasoning output from the model, representing the model's thinking process."""
+
+ id: str
+ """Unique identifier for the reasoning output item."""
+
+ summary: List[InputOpenAIResponseOutputMessageReasoningItemSummary]
+ """Summary of the reasoning output."""
+
+ content: Optional[List[InputOpenAIResponseOutputMessageReasoningItemContent]] = None
+ """The reasoning content from the model."""
+
+ status: Optional[Literal["in_progress", "completed", "incomplete"]] = None
+ """The status of the reasoning output."""
+
+ type: Optional[Literal["reasoning"]] = None
+ """The type identifier, always 'reasoning'."""
+
+
class InputOpenAIResponseInputFunctionToolCallOutputOutputListOpenAIResponseInputMessageContentTextOpenAIResponseInputMessageContentImageOpenAIResponseInputMessageContentFileOpenAIResponseInputMessageContentText(
BaseModel
):
@@ -532,6 +577,7 @@ class InputOpenAIResponseMcpApprovalResponse(BaseModel):
InputOpenAIResponseOutputMessageMcpCall,
InputOpenAIResponseOutputMessageMcpListTools,
InputOpenAIResponseMcpApprovalRequest,
+ InputOpenAIResponseOutputMessageReasoningItem,
InputOpenAIResponseInputFunctionToolCallOutput,
InputOpenAIResponseMcpApprovalResponse,
InputOpenAIResponseMessageOutput,
@@ -876,6 +922,45 @@ class OutputOpenAIResponseMcpApprovalRequest(BaseModel):
type: Optional[Literal["mcp_approval_request"]] = None
+class OutputOpenAIResponseOutputMessageReasoningItemSummary(BaseModel):
+ """A summary of reasoning output from the model."""
+
+ text: str
+ """The summary text of the reasoning output."""
+
+ type: Optional[Literal["summary_text"]] = None
+ """The type identifier, always 'summary_text'."""
+
+
+class OutputOpenAIResponseOutputMessageReasoningItemContent(BaseModel):
+ """Reasoning text from the model."""
+
+ text: str
+ """The reasoning text content from the model."""
+
+ type: Optional[Literal["reasoning_text"]] = None
+ """The type identifier, always 'reasoning_text'."""
+
+
+class OutputOpenAIResponseOutputMessageReasoningItem(BaseModel):
+ """Reasoning output from the model, representing the model's thinking process."""
+
+ id: str
+ """Unique identifier for the reasoning output item."""
+
+ summary: List[OutputOpenAIResponseOutputMessageReasoningItemSummary]
+ """Summary of the reasoning output."""
+
+ content: Optional[List[OutputOpenAIResponseOutputMessageReasoningItemContent]] = None
+ """The reasoning content from the model."""
+
+ status: Optional[Literal["in_progress", "completed", "incomplete"]] = None
+ """The status of the reasoning output."""
+
+ type: Optional[Literal["reasoning"]] = None
+ """The type identifier, always 'reasoning'."""
+
+
Output: TypeAlias = Annotated[
Union[
OutputOpenAIResponseMessageOutput,
@@ -885,6 +970,7 @@ class OutputOpenAIResponseMcpApprovalRequest(BaseModel):
OutputOpenAIResponseOutputMessageMcpCall,
OutputOpenAIResponseOutputMessageMcpListTools,
OutputOpenAIResponseMcpApprovalRequest,
+ OutputOpenAIResponseOutputMessageReasoningItem,
],
PropertyInfo(discriminator="type"),
]
@@ -966,6 +1052,9 @@ class Reasoning(BaseModel):
effort: Optional[Literal["none", "minimal", "low", "medium", "high", "xhigh"]] = None
+ summary: Optional[Literal["auto", "concise", "detailed"]] = None
+ """Summary mode for reasoning output. One of 'auto', 'concise', or 'detailed'."""
+
class TextFormat(BaseModel):
"""Configuration for Responses API text format."""
diff --git a/src/llama_stack_client/types/response_object.py b/src/llama_stack_client/types/response_object.py
index 3cc8e89e..d582225e 100644
--- a/src/llama_stack_client/types/response_object.py
+++ b/src/llama_stack_client/types/response_object.py
@@ -40,6 +40,9 @@
"OutputOpenAIResponseOutputMessageMcpListTools",
"OutputOpenAIResponseOutputMessageMcpListToolsTool",
"OutputOpenAIResponseMcpApprovalRequest",
+ "OutputOpenAIResponseOutputMessageReasoningItem",
+ "OutputOpenAIResponseOutputMessageReasoningItemSummary",
+ "OutputOpenAIResponseOutputMessageReasoningItemContent",
"Error",
"IncompleteDetails",
"Prompt",
@@ -409,6 +412,45 @@ class OutputOpenAIResponseMcpApprovalRequest(BaseModel):
type: Optional[Literal["mcp_approval_request"]] = None
+class OutputOpenAIResponseOutputMessageReasoningItemSummary(BaseModel):
+ """A summary of reasoning output from the model."""
+
+ text: str
+ """The summary text of the reasoning output."""
+
+ type: Optional[Literal["summary_text"]] = None
+ """The type identifier, always 'summary_text'."""
+
+
+class OutputOpenAIResponseOutputMessageReasoningItemContent(BaseModel):
+ """Reasoning text from the model."""
+
+ text: str
+ """The reasoning text content from the model."""
+
+ type: Optional[Literal["reasoning_text"]] = None
+ """The type identifier, always 'reasoning_text'."""
+
+
+class OutputOpenAIResponseOutputMessageReasoningItem(BaseModel):
+ """Reasoning output from the model, representing the model's thinking process."""
+
+ id: str
+ """Unique identifier for the reasoning output item."""
+
+ summary: List[OutputOpenAIResponseOutputMessageReasoningItemSummary]
+ """Summary of the reasoning output."""
+
+ content: Optional[List[OutputOpenAIResponseOutputMessageReasoningItemContent]] = None
+ """The reasoning content from the model."""
+
+ status: Optional[Literal["in_progress", "completed", "incomplete"]] = None
+ """The status of the reasoning output."""
+
+ type: Optional[Literal["reasoning"]] = None
+ """The type identifier, always 'reasoning'."""
+
+
Output: TypeAlias = Annotated[
Union[
OutputOpenAIResponseMessageOutput,
@@ -418,6 +460,7 @@ class OutputOpenAIResponseMcpApprovalRequest(BaseModel):
OutputOpenAIResponseOutputMessageMcpCall,
OutputOpenAIResponseOutputMessageMcpListTools,
OutputOpenAIResponseMcpApprovalRequest,
+ OutputOpenAIResponseOutputMessageReasoningItem,
],
PropertyInfo(discriminator="type"),
]
@@ -499,6 +542,9 @@ class Reasoning(BaseModel):
effort: Optional[Literal["none", "minimal", "low", "medium", "high", "xhigh"]] = None
+ summary: Optional[Literal["auto", "concise", "detailed"]] = None
+ """Summary mode for reasoning output. One of 'auto', 'concise', or 'detailed'."""
+
class TextFormat(BaseModel):
"""Configuration for Responses API text format."""
diff --git a/src/llama_stack_client/types/response_object_stream.py b/src/llama_stack_client/types/response_object_stream.py
index ed4a021a..6e84d189 100644
--- a/src/llama_stack_client/types/response_object_stream.py
+++ b/src/llama_stack_client/types/response_object_stream.py
@@ -42,6 +42,9 @@
"OpenAIResponseObjectStreamResponseOutputItemAddedItemOpenAIResponseOutputMessageMcpListTools",
"OpenAIResponseObjectStreamResponseOutputItemAddedItemOpenAIResponseOutputMessageMcpListToolsTool",
"OpenAIResponseObjectStreamResponseOutputItemAddedItemOpenAIResponseMcpApprovalRequest",
+ "OpenAIResponseObjectStreamResponseOutputItemAddedItemOpenAIResponseOutputMessageReasoningItem",
+ "OpenAIResponseObjectStreamResponseOutputItemAddedItemOpenAIResponseOutputMessageReasoningItemSummary",
+ "OpenAIResponseObjectStreamResponseOutputItemAddedItemOpenAIResponseOutputMessageReasoningItemContent",
"OpenAIResponseObjectStreamResponseOutputItemDone",
"OpenAIResponseObjectStreamResponseOutputItemDoneItem",
"OpenAIResponseObjectStreamResponseOutputItemDoneItemOpenAIResponseMessage",
@@ -67,6 +70,9 @@
"OpenAIResponseObjectStreamResponseOutputItemDoneItemOpenAIResponseOutputMessageMcpListTools",
"OpenAIResponseObjectStreamResponseOutputItemDoneItemOpenAIResponseOutputMessageMcpListToolsTool",
"OpenAIResponseObjectStreamResponseOutputItemDoneItemOpenAIResponseMcpApprovalRequest",
+ "OpenAIResponseObjectStreamResponseOutputItemDoneItemOpenAIResponseOutputMessageReasoningItem",
+ "OpenAIResponseObjectStreamResponseOutputItemDoneItemOpenAIResponseOutputMessageReasoningItemSummary",
+ "OpenAIResponseObjectStreamResponseOutputItemDoneItemOpenAIResponseOutputMessageReasoningItemContent",
"OpenAIResponseObjectStreamResponseOutputTextDelta",
"OpenAIResponseObjectStreamResponseOutputTextDeltaLogprob",
"OpenAIResponseObjectStreamResponseOutputTextDeltaLogprobTopLogprob",
@@ -497,6 +503,47 @@ class OpenAIResponseObjectStreamResponseOutputItemAddedItemOpenAIResponseMcpAppr
type: Optional[Literal["mcp_approval_request"]] = None
+class OpenAIResponseObjectStreamResponseOutputItemAddedItemOpenAIResponseOutputMessageReasoningItemSummary(BaseModel):
+ """A summary of reasoning output from the model."""
+
+ text: str
+ """The summary text of the reasoning output."""
+
+ type: Optional[Literal["summary_text"]] = None
+ """The type identifier, always 'summary_text'."""
+
+
+class OpenAIResponseObjectStreamResponseOutputItemAddedItemOpenAIResponseOutputMessageReasoningItemContent(BaseModel):
+ """Reasoning text from the model."""
+
+ text: str
+ """The reasoning text content from the model."""
+
+ type: Optional[Literal["reasoning_text"]] = None
+ """The type identifier, always 'reasoning_text'."""
+
+
+class OpenAIResponseObjectStreamResponseOutputItemAddedItemOpenAIResponseOutputMessageReasoningItem(BaseModel):
+ """Reasoning output from the model, representing the model's thinking process."""
+
+ id: str
+ """Unique identifier for the reasoning output item."""
+
+ summary: List[OpenAIResponseObjectStreamResponseOutputItemAddedItemOpenAIResponseOutputMessageReasoningItemSummary]
+ """Summary of the reasoning output."""
+
+ content: Optional[
+ List[OpenAIResponseObjectStreamResponseOutputItemAddedItemOpenAIResponseOutputMessageReasoningItemContent]
+ ] = None
+ """The reasoning content from the model."""
+
+ status: Optional[Literal["in_progress", "completed", "incomplete"]] = None
+ """The status of the reasoning output."""
+
+ type: Optional[Literal["reasoning"]] = None
+ """The type identifier, always 'reasoning'."""
+
+
OpenAIResponseObjectStreamResponseOutputItemAddedItem: TypeAlias = Annotated[
Union[
OpenAIResponseObjectStreamResponseOutputItemAddedItemOpenAIResponseMessage,
@@ -506,6 +553,7 @@ class OpenAIResponseObjectStreamResponseOutputItemAddedItemOpenAIResponseMcpAppr
OpenAIResponseObjectStreamResponseOutputItemAddedItemOpenAIResponseOutputMessageMcpCall,
OpenAIResponseObjectStreamResponseOutputItemAddedItemOpenAIResponseOutputMessageMcpListTools,
OpenAIResponseObjectStreamResponseOutputItemAddedItemOpenAIResponseMcpApprovalRequest,
+ OpenAIResponseObjectStreamResponseOutputItemAddedItemOpenAIResponseOutputMessageReasoningItem,
],
PropertyInfo(discriminator="type"),
]
@@ -872,6 +920,47 @@ class OpenAIResponseObjectStreamResponseOutputItemDoneItemOpenAIResponseMcpAppro
type: Optional[Literal["mcp_approval_request"]] = None
+class OpenAIResponseObjectStreamResponseOutputItemDoneItemOpenAIResponseOutputMessageReasoningItemSummary(BaseModel):
+ """A summary of reasoning output from the model."""
+
+ text: str
+ """The summary text of the reasoning output."""
+
+ type: Optional[Literal["summary_text"]] = None
+ """The type identifier, always 'summary_text'."""
+
+
+class OpenAIResponseObjectStreamResponseOutputItemDoneItemOpenAIResponseOutputMessageReasoningItemContent(BaseModel):
+ """Reasoning text from the model."""
+
+ text: str
+ """The reasoning text content from the model."""
+
+ type: Optional[Literal["reasoning_text"]] = None
+ """The type identifier, always 'reasoning_text'."""
+
+
+class OpenAIResponseObjectStreamResponseOutputItemDoneItemOpenAIResponseOutputMessageReasoningItem(BaseModel):
+ """Reasoning output from the model, representing the model's thinking process."""
+
+ id: str
+ """Unique identifier for the reasoning output item."""
+
+ summary: List[OpenAIResponseObjectStreamResponseOutputItemDoneItemOpenAIResponseOutputMessageReasoningItemSummary]
+ """Summary of the reasoning output."""
+
+ content: Optional[
+ List[OpenAIResponseObjectStreamResponseOutputItemDoneItemOpenAIResponseOutputMessageReasoningItemContent]
+ ] = None
+ """The reasoning content from the model."""
+
+ status: Optional[Literal["in_progress", "completed", "incomplete"]] = None
+ """The status of the reasoning output."""
+
+ type: Optional[Literal["reasoning"]] = None
+ """The type identifier, always 'reasoning'."""
+
+
OpenAIResponseObjectStreamResponseOutputItemDoneItem: TypeAlias = Annotated[
Union[
OpenAIResponseObjectStreamResponseOutputItemDoneItemOpenAIResponseMessage,
@@ -881,6 +970,7 @@ class OpenAIResponseObjectStreamResponseOutputItemDoneItemOpenAIResponseMcpAppro
OpenAIResponseObjectStreamResponseOutputItemDoneItemOpenAIResponseOutputMessageMcpCall,
OpenAIResponseObjectStreamResponseOutputItemDoneItemOpenAIResponseOutputMessageMcpListTools,
OpenAIResponseObjectStreamResponseOutputItemDoneItemOpenAIResponseMcpApprovalRequest,
+ OpenAIResponseObjectStreamResponseOutputItemDoneItemOpenAIResponseOutputMessageReasoningItem,
],
PropertyInfo(discriminator="type"),
]
diff --git a/src/llama_stack_client/types/responses/input_item_list_response.py b/src/llama_stack_client/types/responses/input_item_list_response.py
index 242962a7..9591b758 100644
--- a/src/llama_stack_client/types/responses/input_item_list_response.py
+++ b/src/llama_stack_client/types/responses/input_item_list_response.py
@@ -38,6 +38,9 @@
"DataOpenAIResponseOutputMessageMcpListTools",
"DataOpenAIResponseOutputMessageMcpListToolsTool",
"DataOpenAIResponseMcpApprovalRequest",
+ "DataOpenAIResponseOutputMessageReasoningItem",
+ "DataOpenAIResponseOutputMessageReasoningItemSummary",
+ "DataOpenAIResponseOutputMessageReasoningItemContent",
"DataOpenAIResponseInputFunctionToolCallOutput",
"DataOpenAIResponseInputFunctionToolCallOutputOutputListOpenAIResponseInputMessageContentTextOpenAIResponseInputMessageContentImageOpenAIResponseInputMessageContentFile",
"DataOpenAIResponseInputFunctionToolCallOutputOutputListOpenAIResponseInputMessageContentTextOpenAIResponseInputMessageContentImageOpenAIResponseInputMessageContentFileOpenAIResponseInputMessageContentText",
@@ -385,6 +388,45 @@ class DataOpenAIResponseMcpApprovalRequest(BaseModel):
type: Optional[Literal["mcp_approval_request"]] = None
+class DataOpenAIResponseOutputMessageReasoningItemSummary(BaseModel):
+ """A summary of reasoning output from the model."""
+
+ text: str
+ """The summary text of the reasoning output."""
+
+ type: Optional[Literal["summary_text"]] = None
+ """The type identifier, always 'summary_text'."""
+
+
+class DataOpenAIResponseOutputMessageReasoningItemContent(BaseModel):
+ """Reasoning text from the model."""
+
+ text: str
+ """The reasoning text content from the model."""
+
+ type: Optional[Literal["reasoning_text"]] = None
+ """The type identifier, always 'reasoning_text'."""
+
+
+class DataOpenAIResponseOutputMessageReasoningItem(BaseModel):
+ """Reasoning output from the model, representing the model's thinking process."""
+
+ id: str
+ """Unique identifier for the reasoning output item."""
+
+ summary: List[DataOpenAIResponseOutputMessageReasoningItemSummary]
+ """Summary of the reasoning output."""
+
+ content: Optional[List[DataOpenAIResponseOutputMessageReasoningItemContent]] = None
+ """The reasoning content from the model."""
+
+ status: Optional[Literal["in_progress", "completed", "incomplete"]] = None
+ """The status of the reasoning output."""
+
+ type: Optional[Literal["reasoning"]] = None
+ """The type identifier, always 'reasoning'."""
+
+
class DataOpenAIResponseInputFunctionToolCallOutputOutputListOpenAIResponseInputMessageContentTextOpenAIResponseInputMessageContentImageOpenAIResponseInputMessageContentFileOpenAIResponseInputMessageContentText(
BaseModel
):
@@ -478,6 +520,7 @@ class DataOpenAIResponseMcpApprovalResponse(BaseModel):
DataOpenAIResponseOutputMessageMcpCall,
DataOpenAIResponseOutputMessageMcpListTools,
DataOpenAIResponseMcpApprovalRequest,
+ DataOpenAIResponseOutputMessageReasoningItem,
DataOpenAIResponseInputFunctionToolCallOutput,
DataOpenAIResponseMcpApprovalResponse,
DataOpenAIResponseMessageOutput,
diff --git a/tests/api_resources/test_responses.py b/tests/api_resources/test_responses.py
index 2b85ceb0..97e3084d 100644
--- a/tests/api_resources/test_responses.py
+++ b/tests/api_resources/test_responses.py
@@ -65,7 +65,10 @@ def test_method_create_with_all_params_overload_1(self, client: LlamaStackClient
"version": "version",
},
prompt_cache_key="prompt_cache_key",
- reasoning={"effort": "none"},
+ reasoning={
+ "effort": "none",
+ "summary": "auto",
+ },
safety_identifier="safety_identifier",
service_tier="auto",
store=True,
@@ -159,7 +162,10 @@ def test_method_create_with_all_params_overload_2(self, client: LlamaStackClient
"version": "version",
},
prompt_cache_key="prompt_cache_key",
- reasoning={"effort": "none"},
+ reasoning={
+ "effort": "none",
+ "summary": "auto",
+ },
safety_identifier="safety_identifier",
service_tier="auto",
store=True,
@@ -368,7 +374,10 @@ async def test_method_create_with_all_params_overload_1(self, async_client: Asyn
"version": "version",
},
prompt_cache_key="prompt_cache_key",
- reasoning={"effort": "none"},
+ reasoning={
+ "effort": "none",
+ "summary": "auto",
+ },
safety_identifier="safety_identifier",
service_tier="auto",
store=True,
@@ -462,7 +471,10 @@ async def test_method_create_with_all_params_overload_2(self, async_client: Asyn
"version": "version",
},
prompt_cache_key="prompt_cache_key",
- reasoning={"effort": "none"},
+ reasoning={
+ "effort": "none",
+ "summary": "auto",
+ },
safety_identifier="safety_identifier",
service_tier="auto",
store=True,
From 82edffaebfa5d36d9494bee945a64b64d4453414 Mon Sep 17 00:00:00 2001
From: "stainless-app[bot]"
<142633134+stainless-app[bot]@users.noreply.github.com>
Date: Wed, 1 Apr 2026 21:41:02 +0000
Subject: [PATCH 3/7] chore(tests): bump steady to v0.20.1
---
scripts/mock | 13 ++++++++-----
scripts/test | 2 +-
2 files changed, 9 insertions(+), 6 deletions(-)
diff --git a/scripts/mock b/scripts/mock
index e1256ee6..93cbfea0 100755
--- a/scripts/mock
+++ b/scripts/mock
@@ -28,21 +28,24 @@ echo "==> Starting mock server with file ${SPEC_PATH}"
# Run steady mock on the given spec
if [ "$1" == "--daemon" ]; then
- npm exec --package=@mockoon/cli@9.3.0 -- mockoon-cli start --data "$SPEC_PATH" --port 4010 &>.mockoon.log &
+ # 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.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"
- while ! grep -q "Error: \|Server started on port 4010" ".mockoon.log"; do
+ while ! grep -q "Error: \|Server started on port 4010" ".stdy.log"; do
echo -n "."
sleep 0.1
done
- if grep -q "Error: " ".mockoon.log"; then
- cat .mockoon.log
+ if grep -q "Error: " ".stdy.log"; then
+ cat .stdy.log
exit 1
fi
echo
else
- npm exec --package=@mockoon/cli@9.3.0 -- mockoon-cli start --data "$SPEC_PATH" --port 4010
+ 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 7772d870..49662c06 100755
--- a/scripts/test
+++ b/scripts/test
@@ -47,7 +47,7 @@ elif ! prism_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 029da3fb41d13b6419e7d49b5b04f525818cf731 Mon Sep 17 00:00:00 2001
From: "stainless-app[bot]"
<142633134+stainless-app[bot]@users.noreply.github.com>
Date: Tue, 31 Mar 2026 14:14:56 +0000
Subject: [PATCH 4/7] feat: add reasoning as valid conversation item
---
.stats.yml | 4 +-
.../types/conversation_create_params.py | 43 +++++++++++++++++++
.../types/conversations/item_create_params.py | 43 +++++++++++++++++++
.../conversations/item_create_response.py | 43 +++++++++++++++++++
.../types/conversations/item_get_response.py | 43 +++++++++++++++++++
.../types/conversations/item_list_response.py | 43 +++++++++++++++++++
6 files changed, 217 insertions(+), 2 deletions(-)
diff --git a/.stats.yml b/.stats.yml
index 6a7f094b..29e9d3a7 100644
--- a/.stats.yml
+++ b/.stats.yml
@@ -1,4 +1,4 @@
configured_endpoints: 92
-openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/llamastack%2Fllama-stack-client-678bab2f0d5095518aacc2b2c249484390e94d6799c75cb0ee07dd0f1955e270.yml
-openapi_spec_hash: 1159551b99441246a96a9e21a49456ab
+openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/llamastack%2Fllama-stack-client-2aa092601bf8f391294f803507a7d2d04292d2aaa16769a3514fd1354061032e.yml
+openapi_spec_hash: 71228b84ed828c47f5e49902fa8f16e8
config_hash: d8a05907bd87286473cdf868da7d2ede
diff --git a/src/llama_stack_client/types/conversation_create_params.py b/src/llama_stack_client/types/conversation_create_params.py
index dfaae93e..40b0876b 100644
--- a/src/llama_stack_client/types/conversation_create_params.py
+++ b/src/llama_stack_client/types/conversation_create_params.py
@@ -45,6 +45,9 @@
"ItemOpenAIResponseOutputMessageMcpCall",
"ItemOpenAIResponseOutputMessageMcpListTools",
"ItemOpenAIResponseOutputMessageMcpListToolsTool",
+ "ItemOpenAIResponseOutputMessageReasoningItem",
+ "ItemOpenAIResponseOutputMessageReasoningItemSummary",
+ "ItemOpenAIResponseOutputMessageReasoningItemContent",
]
@@ -469,6 +472,45 @@ class ItemOpenAIResponseOutputMessageMcpListTools(TypedDict, total=False):
type: Literal["mcp_list_tools"]
+class ItemOpenAIResponseOutputMessageReasoningItemSummary(TypedDict, total=False):
+ """A summary of reasoning output from the model."""
+
+ text: Required[str]
+ """The summary text of the reasoning output."""
+
+ type: Literal["summary_text"]
+ """The type identifier, always 'summary_text'."""
+
+
+class ItemOpenAIResponseOutputMessageReasoningItemContent(TypedDict, total=False):
+ """Reasoning text from the model."""
+
+ text: Required[str]
+ """The reasoning text content from the model."""
+
+ type: Literal["reasoning_text"]
+ """The type identifier, always 'reasoning_text'."""
+
+
+class ItemOpenAIResponseOutputMessageReasoningItem(TypedDict, total=False):
+ """Reasoning output from the model, representing the model's thinking process."""
+
+ id: Required[str]
+ """Unique identifier for the reasoning output item."""
+
+ summary: Required[Iterable[ItemOpenAIResponseOutputMessageReasoningItemSummary]]
+ """Summary of the reasoning output."""
+
+ content: Optional[Iterable[ItemOpenAIResponseOutputMessageReasoningItemContent]]
+ """The reasoning content from the model."""
+
+ status: Optional[Literal["in_progress", "completed", "incomplete"]]
+ """The status of the reasoning output."""
+
+ type: Literal["reasoning"]
+ """The type identifier, always 'reasoning'."""
+
+
Item: TypeAlias = Union[
ItemOpenAIResponseMessageInput,
ItemOpenAIResponseOutputMessageWebSearchToolCall,
@@ -479,4 +521,5 @@ class ItemOpenAIResponseOutputMessageMcpListTools(TypedDict, total=False):
ItemOpenAIResponseMcpApprovalResponse,
ItemOpenAIResponseOutputMessageMcpCall,
ItemOpenAIResponseOutputMessageMcpListTools,
+ ItemOpenAIResponseOutputMessageReasoningItem,
]
diff --git a/src/llama_stack_client/types/conversations/item_create_params.py b/src/llama_stack_client/types/conversations/item_create_params.py
index 22d49519..f081316a 100644
--- a/src/llama_stack_client/types/conversations/item_create_params.py
+++ b/src/llama_stack_client/types/conversations/item_create_params.py
@@ -45,6 +45,9 @@
"ItemOpenAIResponseOutputMessageMcpCall",
"ItemOpenAIResponseOutputMessageMcpListTools",
"ItemOpenAIResponseOutputMessageMcpListToolsTool",
+ "ItemOpenAIResponseOutputMessageReasoningItem",
+ "ItemOpenAIResponseOutputMessageReasoningItemSummary",
+ "ItemOpenAIResponseOutputMessageReasoningItemContent",
]
@@ -469,6 +472,45 @@ class ItemOpenAIResponseOutputMessageMcpListTools(TypedDict, total=False):
type: Literal["mcp_list_tools"]
+class ItemOpenAIResponseOutputMessageReasoningItemSummary(TypedDict, total=False):
+ """A summary of reasoning output from the model."""
+
+ text: Required[str]
+ """The summary text of the reasoning output."""
+
+ type: Literal["summary_text"]
+ """The type identifier, always 'summary_text'."""
+
+
+class ItemOpenAIResponseOutputMessageReasoningItemContent(TypedDict, total=False):
+ """Reasoning text from the model."""
+
+ text: Required[str]
+ """The reasoning text content from the model."""
+
+ type: Literal["reasoning_text"]
+ """The type identifier, always 'reasoning_text'."""
+
+
+class ItemOpenAIResponseOutputMessageReasoningItem(TypedDict, total=False):
+ """Reasoning output from the model, representing the model's thinking process."""
+
+ id: Required[str]
+ """Unique identifier for the reasoning output item."""
+
+ summary: Required[Iterable[ItemOpenAIResponseOutputMessageReasoningItemSummary]]
+ """Summary of the reasoning output."""
+
+ content: Optional[Iterable[ItemOpenAIResponseOutputMessageReasoningItemContent]]
+ """The reasoning content from the model."""
+
+ status: Optional[Literal["in_progress", "completed", "incomplete"]]
+ """The status of the reasoning output."""
+
+ type: Literal["reasoning"]
+ """The type identifier, always 'reasoning'."""
+
+
Item: TypeAlias = Union[
ItemOpenAIResponseMessageInput,
ItemOpenAIResponseOutputMessageWebSearchToolCall,
@@ -479,4 +521,5 @@ class ItemOpenAIResponseOutputMessageMcpListTools(TypedDict, total=False):
ItemOpenAIResponseMcpApprovalResponse,
ItemOpenAIResponseOutputMessageMcpCall,
ItemOpenAIResponseOutputMessageMcpListTools,
+ ItemOpenAIResponseOutputMessageReasoningItem,
]
diff --git a/src/llama_stack_client/types/conversations/item_create_response.py b/src/llama_stack_client/types/conversations/item_create_response.py
index c40c4d60..9da908ba 100644
--- a/src/llama_stack_client/types/conversations/item_create_response.py
+++ b/src/llama_stack_client/types/conversations/item_create_response.py
@@ -44,6 +44,9 @@
"DataOpenAIResponseOutputMessageMcpCall",
"DataOpenAIResponseOutputMessageMcpListTools",
"DataOpenAIResponseOutputMessageMcpListToolsTool",
+ "DataOpenAIResponseOutputMessageReasoningItem",
+ "DataOpenAIResponseOutputMessageReasoningItemSummary",
+ "DataOpenAIResponseOutputMessageReasoningItemContent",
]
@@ -470,6 +473,45 @@ class DataOpenAIResponseOutputMessageMcpListTools(BaseModel):
type: Optional[Literal["mcp_list_tools"]] = None
+class DataOpenAIResponseOutputMessageReasoningItemSummary(BaseModel):
+ """A summary of reasoning output from the model."""
+
+ text: str
+ """The summary text of the reasoning output."""
+
+ type: Optional[Literal["summary_text"]] = None
+ """The type identifier, always 'summary_text'."""
+
+
+class DataOpenAIResponseOutputMessageReasoningItemContent(BaseModel):
+ """Reasoning text from the model."""
+
+ text: str
+ """The reasoning text content from the model."""
+
+ type: Optional[Literal["reasoning_text"]] = None
+ """The type identifier, always 'reasoning_text'."""
+
+
+class DataOpenAIResponseOutputMessageReasoningItem(BaseModel):
+ """Reasoning output from the model, representing the model's thinking process."""
+
+ id: str
+ """Unique identifier for the reasoning output item."""
+
+ summary: List[DataOpenAIResponseOutputMessageReasoningItemSummary]
+ """Summary of the reasoning output."""
+
+ content: Optional[List[DataOpenAIResponseOutputMessageReasoningItemContent]] = None
+ """The reasoning content from the model."""
+
+ status: Optional[Literal["in_progress", "completed", "incomplete"]] = None
+ """The status of the reasoning output."""
+
+ type: Optional[Literal["reasoning"]] = None
+ """The type identifier, always 'reasoning'."""
+
+
Data: TypeAlias = Annotated[
Union[
DataOpenAIResponseMessageOutput,
@@ -481,6 +523,7 @@ class DataOpenAIResponseOutputMessageMcpListTools(BaseModel):
DataOpenAIResponseMcpApprovalResponse,
DataOpenAIResponseOutputMessageMcpCall,
DataOpenAIResponseOutputMessageMcpListTools,
+ DataOpenAIResponseOutputMessageReasoningItem,
],
PropertyInfo(discriminator="type"),
]
diff --git a/src/llama_stack_client/types/conversations/item_get_response.py b/src/llama_stack_client/types/conversations/item_get_response.py
index 069f1d05..531d03f6 100644
--- a/src/llama_stack_client/types/conversations/item_get_response.py
+++ b/src/llama_stack_client/types/conversations/item_get_response.py
@@ -43,6 +43,9 @@
"OpenAIResponseOutputMessageMcpCall",
"OpenAIResponseOutputMessageMcpListTools",
"OpenAIResponseOutputMessageMcpListToolsTool",
+ "OpenAIResponseOutputMessageReasoningItem",
+ "OpenAIResponseOutputMessageReasoningItemSummary",
+ "OpenAIResponseOutputMessageReasoningItemContent",
]
@@ -469,6 +472,45 @@ class OpenAIResponseOutputMessageMcpListTools(BaseModel):
type: Optional[Literal["mcp_list_tools"]] = None
+class OpenAIResponseOutputMessageReasoningItemSummary(BaseModel):
+ """A summary of reasoning output from the model."""
+
+ text: str
+ """The summary text of the reasoning output."""
+
+ type: Optional[Literal["summary_text"]] = None
+ """The type identifier, always 'summary_text'."""
+
+
+class OpenAIResponseOutputMessageReasoningItemContent(BaseModel):
+ """Reasoning text from the model."""
+
+ text: str
+ """The reasoning text content from the model."""
+
+ type: Optional[Literal["reasoning_text"]] = None
+ """The type identifier, always 'reasoning_text'."""
+
+
+class OpenAIResponseOutputMessageReasoningItem(BaseModel):
+ """Reasoning output from the model, representing the model's thinking process."""
+
+ id: str
+ """Unique identifier for the reasoning output item."""
+
+ summary: List[OpenAIResponseOutputMessageReasoningItemSummary]
+ """Summary of the reasoning output."""
+
+ content: Optional[List[OpenAIResponseOutputMessageReasoningItemContent]] = None
+ """The reasoning content from the model."""
+
+ status: Optional[Literal["in_progress", "completed", "incomplete"]] = None
+ """The status of the reasoning output."""
+
+ type: Optional[Literal["reasoning"]] = None
+ """The type identifier, always 'reasoning'."""
+
+
ItemGetResponse: TypeAlias = Annotated[
Union[
OpenAIResponseMessageOutput,
@@ -480,6 +522,7 @@ class OpenAIResponseOutputMessageMcpListTools(BaseModel):
OpenAIResponseMcpApprovalResponse,
OpenAIResponseOutputMessageMcpCall,
OpenAIResponseOutputMessageMcpListTools,
+ OpenAIResponseOutputMessageReasoningItem,
],
PropertyInfo(discriminator="type"),
]
diff --git a/src/llama_stack_client/types/conversations/item_list_response.py b/src/llama_stack_client/types/conversations/item_list_response.py
index c87d3e9c..1f642528 100644
--- a/src/llama_stack_client/types/conversations/item_list_response.py
+++ b/src/llama_stack_client/types/conversations/item_list_response.py
@@ -43,6 +43,9 @@
"OpenAIResponseOutputMessageMcpCall",
"OpenAIResponseOutputMessageMcpListTools",
"OpenAIResponseOutputMessageMcpListToolsTool",
+ "OpenAIResponseOutputMessageReasoningItem",
+ "OpenAIResponseOutputMessageReasoningItemSummary",
+ "OpenAIResponseOutputMessageReasoningItemContent",
]
@@ -469,6 +472,45 @@ class OpenAIResponseOutputMessageMcpListTools(BaseModel):
type: Optional[Literal["mcp_list_tools"]] = None
+class OpenAIResponseOutputMessageReasoningItemSummary(BaseModel):
+ """A summary of reasoning output from the model."""
+
+ text: str
+ """The summary text of the reasoning output."""
+
+ type: Optional[Literal["summary_text"]] = None
+ """The type identifier, always 'summary_text'."""
+
+
+class OpenAIResponseOutputMessageReasoningItemContent(BaseModel):
+ """Reasoning text from the model."""
+
+ text: str
+ """The reasoning text content from the model."""
+
+ type: Optional[Literal["reasoning_text"]] = None
+ """The type identifier, always 'reasoning_text'."""
+
+
+class OpenAIResponseOutputMessageReasoningItem(BaseModel):
+ """Reasoning output from the model, representing the model's thinking process."""
+
+ id: str
+ """Unique identifier for the reasoning output item."""
+
+ summary: List[OpenAIResponseOutputMessageReasoningItemSummary]
+ """Summary of the reasoning output."""
+
+ content: Optional[List[OpenAIResponseOutputMessageReasoningItemContent]] = None
+ """The reasoning content from the model."""
+
+ status: Optional[Literal["in_progress", "completed", "incomplete"]] = None
+ """The status of the reasoning output."""
+
+ type: Optional[Literal["reasoning"]] = None
+ """The type identifier, always 'reasoning'."""
+
+
ItemListResponse: TypeAlias = Annotated[
Union[
OpenAIResponseMessageOutput,
@@ -480,6 +522,7 @@ class OpenAIResponseOutputMessageMcpListTools(BaseModel):
OpenAIResponseMcpApprovalResponse,
OpenAIResponseOutputMessageMcpCall,
OpenAIResponseOutputMessageMcpListTools,
+ OpenAIResponseOutputMessageReasoningItem,
],
PropertyInfo(discriminator="type"),
]
From 8aab6875d8eac1a9aea91b80ab29d2cfe596d4e0 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:25:45 +0000
Subject: [PATCH 5/7] 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 93cbfea0..65afdeb8 100755
--- a/scripts/mock
+++ b/scripts/mock
@@ -29,9 +29,9 @@ echo "==> Starting mock server with file ${SPEC_PATH}"
# 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"
@@ -47,5 +47,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 49662c06..4fa15f98 100755
--- a/scripts/test
+++ b/scripts/test
@@ -47,7 +47,7 @@ elif ! prism_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 e92a0fd906776651c5b8cf58ac4d7a7793e7dd7a Mon Sep 17 00:00:00 2001
From: "stainless-app[bot]"
<142633134+stainless-app[bot]@users.noreply.github.com>
Date: Wed, 1 Apr 2026 20:31:01 +0000
Subject: [PATCH 6/7] codegen metadata
---
.stats.yml | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/.stats.yml b/.stats.yml
index 29e9d3a7..ea981732 100644
--- a/.stats.yml
+++ b/.stats.yml
@@ -1,4 +1,4 @@
configured_endpoints: 92
-openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/llamastack%2Fllama-stack-client-2aa092601bf8f391294f803507a7d2d04292d2aaa16769a3514fd1354061032e.yml
-openapi_spec_hash: 71228b84ed828c47f5e49902fa8f16e8
+openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/llamastack%2Fllama-stack-client-a6b10a7f923a8cf216108cd794ccbac5d4114193ba888fea0c1288548b28f37e.yml
+openapi_spec_hash: ed2df655e1a9041bf71adfb37ed651fe
config_hash: d8a05907bd87286473cdf868da7d2ede
From 9a577fd67903d25d981a0913c41c53d4120a9f5a Mon Sep 17 00:00:00 2001
From: "stainless-app[bot]"
<142633134+stainless-app[bot]@users.noreply.github.com>
Date: Wed, 1 Apr 2026 21:41:52 +0000
Subject: [PATCH 7/7] release: 0.7.0-alpha.2
---
.release-please-manifest.json | 2 +-
CHANGELOG.md | 20 ++++++++++++++++++++
pyproject.toml | 2 +-
src/llama_stack_client/_version.py | 2 +-
4 files changed, 23 insertions(+), 3 deletions(-)
diff --git a/.release-please-manifest.json b/.release-please-manifest.json
index cd920613..daf1b197 100644
--- a/.release-please-manifest.json
+++ b/.release-please-manifest.json
@@ -1,3 +1,3 @@
{
- ".": "0.7.0-alpha.1"
+ ".": "0.7.0-alpha.2"
}
diff --git a/CHANGELOG.md b/CHANGELOG.md
index a7365909..93aacac1 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,25 @@
# Changelog
+## 0.7.0-alpha.2 (2026-04-01)
+
+Full Changelog: [v0.7.0-alpha.1...v0.7.0-alpha.2](https://github.com/llamastack/llama-stack-client-python/compare/v0.7.0-alpha.1...v0.7.0-alpha.2)
+
+### Features
+
+* add reasoning as valid conversation item ([029da3f](https://github.com/llamastack/llama-stack-client-python/commit/029da3fb41d13b6419e7d49b5b04f525818cf731))
+* add reasoning output types to OpenAI Responses API spec ([3bb043e](https://github.com/llamastack/llama-stack-client-python/commit/3bb043e2859ae601cd69c380e1749a1ff18a2a00))
+
+
+### Chores
+
+* **tests:** bump steady to v0.20.1 ([82edffa](https://github.com/llamastack/llama-stack-client-python/commit/82edffaebfa5d36d9494bee945a64b64d4453414))
+* **tests:** bump steady to v0.20.2 ([8aab687](https://github.com/llamastack/llama-stack-client-python/commit/8aab6875d8eac1a9aea91b80ab29d2cfe596d4e0))
+
+
+### Refactors
+
+* remove deprecated register/unregister model endpoints ([6c82145](https://github.com/llamastack/llama-stack-client-python/commit/6c82145f77a9b461a5d2e36492d995d23114eed3))
+
## 0.7.0-alpha.1 (2026-03-28)
Full Changelog: [v0.6.1-alpha.1...v0.7.0-alpha.1](https://github.com/llamastack/llama-stack-client-python/compare/v0.6.1-alpha.1...v0.7.0-alpha.1)
diff --git a/pyproject.toml b/pyproject.toml
index 7036b973..221b9140 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -1,6 +1,6 @@
[project]
name = "llama_stack_client"
-version = "0.7.0-alpha.1"
+version = "0.7.0-alpha.2"
description = "The official Python library for the llama-stack-client API"
dynamic = ["readme"]
license = "MIT"
diff --git a/src/llama_stack_client/_version.py b/src/llama_stack_client/_version.py
index eba92666..8aa63c0f 100644
--- a/src/llama_stack_client/_version.py
+++ b/src/llama_stack_client/_version.py
@@ -7,4 +7,4 @@
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
__title__ = "llama_stack_client"
-__version__ = "0.7.0-alpha.1" # x-release-please-version
+__version__ = "0.7.0-alpha.2" # x-release-please-version