5.29.1

(fix): Fixed generated WireMock stubs for OAuth client credentials APIs whose token endpoint is itself marked as authenticated: the token (and refresh) endpoint stub no longer requires an Authorization header, since the token request is made to obtain the token and cannot carry one yet.

5.29.0

(feat): Add stream_abstraction. With it enabled, streaming endpoints return a Stream[T] (AsyncStream[T] for async clients) rather than a plain iterator, mirroring the TypeScript SDK’s core.Stream. Iterating the stream still yields the parsed payloads, while with_metadata() yields them wrapped in a StreamEvent that also exposes the server-sent event id, event and retry fields — for event in client.completions.stream(...).with_metadata() — so reading an event id no longer requires dropping down to with_raw_response. The request is still only issued once the stream is iterated, the stream owns the underlying response and releases it when exhausted, closed or exited as a (asynchronous) context manager, and the raw client’s data is the same stream. AsyncStream is awaitable, so await client.completions.stream(...) and async for chunk in client.completions.stream(...) both work. Defaults to false, so signatures and snippets are unchanged until you opt in.

(fix): Server-sent events carrying no data, such as comment-only and retry-only frames, are skipped instead of being parsed as a payload, which previously failed model construction and logged a warning.

(feat): HttpResponse and AsyncHttpResponse expose the underlying httpx.Response through a public response property.

(fix): Fix the generated async examples for streaming endpoints, which awaited the method call — response = await client.completions.stream(...) — even though it returns an async generator and raises TypeError: 'async_generator' object can't be awaited.