5.18.1
(fix): Normalize the architecture label in the structured User-Agent (emitted when
include_platform_headers is enabled) so the 64-bit x86 aliases (x64,
amd64, x86_64) all report as the canonical x86_64, keeping the value
consistent across generators.
5.18.0
(feat): Add opt-in support for a structured User-Agent header of the form
{sdkName}/{version} ({os}; {arch}) Python/{pythonVersion}, matching the
Twilio helper-library shape. This is gated behind the include_platform_headers
config option and is disabled by default. When enabled, the platform + runtime
information is consolidated into the User-Agent header, superseding the
default {package}/{version} value, and the discrete X-Fern-Runtime /
X-Fern-Platform headers are no longer emitted. The platform group and runtime
segment are dropped gracefully when they cannot be determined, and the header
remains subject to omit_fern_headers.
5.17.1
(fix): Generated code snippets (README, OAuth token override examples) now use
the custom bearer token parameter name from the API spec (e.g. api_key)
instead of always using the default token.
5.17.0
(feat): Add a timeout config option as an alias for timeout_in_seconds. Both keys
are in seconds and timeout_in_seconds continues to work, with timeout
taking precedence when both are set.
(feat): Add a timeout key to the generated SDK’s RequestOptions as an alias for the
per-request timeout_in_seconds. Both are in seconds; timeout_in_seconds keeps
working, with timeout taking precedence when both are provided.
5.16.1
(fix): Emit attribute docstrings for aliased Pydantic model fields (e.g. fields renamed
from camelCase wire names to snake_case) so IDEs surface the field description
on hover, matching the behavior of non-aliased fields.
5.16.0
(feat): Implement transparent SSE stream auto-reconnection for resumable: true
endpoints, bringing the Python SDK to parity with TypeScript and Go. When a
resumable stream ends prematurely, EventSource now re-issues the original
request with a Last-Event-ID header and resumes from the last dispatched
event id (never a parsed-but-undispatched id, avoiding silent event loss).
Reconnection is gated on a configured stream terminator, honors
stream_reconnection_enabled and max_stream_reconnection_attempts (with
reset-on-progress), backs off 1s by default (or the server retry: value,
clamped to 30s), guards against empty reconnect bodies, and remains
cancellable during the backoff delay. Supported for both sync and async
clients.
5.15.2
(fix): Fix ImportError when a type uses extends to inherit from a base type that
is part of a circular reference cycle (e.g. Acai extends Berry where
Berry → Animal → Cat → Fruit → Acai). Python inheritance requires a
top-level import of the base class, which cannot coexist with the ghost
reference imports needed for circular forward-ref resolution. The generator
now automatically falls back to inlining the base type’s properties instead
of using Python class inheritance when it detects a circular extends chain.
5.15.1
(fix): Fix pydantic-v2 generator failing to find .gitignore.Template at runtime by
copying the asIs directory into the dist bundle.
(fix): Fix pydantic-v2 WrappedAliasGenerator producing invalid Python: add missing
self parameter to getter methods, use correct return type instead of
hardcoded UUID, quote forward-reference return types in builder methods,
and add missing return statement in builder method bodies.
5.15.0
(feat): Support resumable flag in SSE streaming endpoints. When an endpoint has
x-fern-streaming.resumable: true, the generated SDK now passes resumable=True
to EventSource, plumbing the flag through to the runtime for use by
reconnection logic. Adds stream_reconnection_enabled and
max_stream_reconnection_attempts request options for runtime control of
reconnection behavior.
5.14.21
(fix): Fix pyproject.toml distribution name for github-output SDKs without a PyPI publish target
to prefer config.package_name over the organization name. Also use output_mode.version
instead of hardcoding 0.0.0.
5.14.20
(chore): Bump the Python SDK generator container’s base image from python:3.13.7-slim
to python:3.13.14-slim to pull in CPython security fixes, clearing
CVE-2025-13836, CVE-2026-3644, and CVE-2026-4224 (plus several lower-severity
CPython advisories).
5.14.19
(fix): Bump aiohttp lower bound from >=3.14.0 to >=3.14.1 to fix CVE-2026-54274.
5.14.18
(fix): Fixed the generated legacy wire test conftest.py so the test suite no longer fails when
no mock server is configured. The client fixtures now skip wire tests when TESTS_BASE_URL
is unset (instead of issuing requests to an invalid URL), and the conftest re-declares the
hook that auto-skips @pytest.mark.aiohttp tests when the optional httpx_aiohttp
dependency is not installed.
5.14.17
(fix): Fix OAuth token provider to use correct parameter names from request-properties mapping
for custom OAuth endpoints, and pass additional required parameters (scopes, custom properties)
through the client constructor to the token provider.
(fix): Enforce required additional OAuth parameters with an explicit runtime check that raises
an ApiError instead of assert, so the validation is not stripped under Python’s
optimized mode (-O).
5.14.16
(fix): Fix discriminated union snippet generation to include base properties (e.g. extra, tags)
inherited from the union’s base type. Also fix conftest generation to skip non-string
constructor parameters like headers from os.getenv() wrapping.
5.14.15
(chore): Bump bundled @fern-api/generator-cli to 0.9.39 (Replay 0.18.0) for more reliable
customization detection during regeneration.
5.14.14
(fix): Add MAX_LINE_SIZE guard (1 MiB) to SSE iter_sse/aiter_sse to prevent
unbounded memory growth from non-newline-terminated streams
(GHSA-7w2x-r9r4-7v8r).
5.14.13
(fix): Fix mypy errors in raw client for stream-condition endpoints by removing
@contextmanager decorator and correcting overload return types.
5.14.12
(chore): Bump pip from 26.1 to 26.1.2 in the container to fix CVE-2026-8643
(directory traversal via malicious wheel entry-point names).
5.14.11
(chore): Bump aiohttp lower bound from >=3.13.4 to >=3.14.0 and tighten Python
marker to >=3.10 to address CVE-2026-47265 and CVE-2026-47266.