5.2.0
(feat): Add maxRetries custom config option. When set in generators.yml,
the generated SDK uses the specified value as the default retry count instead of
the hardcoded default of 2. Set to 0 to disable retries by default, which is
useful for APIs with non-idempotent endpoints. SDK users can still override this
per-request via request_options.
5.1.3
(fix): Add transport-level connection error retries to the HTTP client. The retry logic now
catches httpx.ConnectError and httpx.RemoteProtocolError (e.g., “Remote end closed
connection without response”) and retries with exponential backoff, matching the existing
status-code-based retry behavior. Also fixes the existing status-code retry path to
forward the data and force_multipart parameters on retry.
5.1.2
(chore): Pretty-print generated wiremock-mappings.json with 2-space indentation
to reduce diff sizes on subsequent SDK generations.
5.1.1
(fix): Ensure async_token is accepted and forwarded in generated async client constructors
for bearer token auth. Previously, AsyncClientWrapper supported async_token but
the top-level async client only exposed it for OAuth client credentials flows, causing
sync token callables to block the event loop in async contexts.
5.1.0
(feat): Add Environments section to generated README showing how to select
different environments (production/sandbox) when initializing the client.
5.0.8
(fix): Eliminate Pydantic v2 deprecation warnings in UniversalBaseModel. Under Pydantic v2,
the class-based Config pattern with smart_union and allow_population_by_field_name
emits deprecation warnings. UniversalBaseModel now uses model_config: ConfigDict with
populate_by_name=True, validate_by_name=True, and validate_by_alias=True (for v2.11+
support) for v2, and a custom @model_serializer for datetime serialization instead of
the deprecated json_encoders. Pydantic v1 continues to use the original class-based Config.
5.0.7
(fix): Thread endpoint ID through dynamic snippet generator to differentiate
generated snippets by endpoint.
5.0.6
(fix): Fix construct_type to resolve ForwardRef annotations in nested model fields
and use strict Literal discriminant matching for undiscriminated unions.
Under Pydantic v2 with from __future__ import annotations, field annotations
like List["Block"] remain as list[ForwardRef('Block')] even after
model_rebuild. construct_type now resolves these ForwardRefs via the host
model’s module, ensuring nested data is recursively constructed into proper model
instances instead of staying as raw dicts.
Additionally, undiscriminated union resolution now requires Literal-typed
discriminant fields to be present AND matching before accepting a candidate type.
This prevents models with all-optional fields (e.g. FigureDetails) from greedily
matching inputs that belong to a different variant or to a plain-dict fallback.
5.0.5
(fix): Add enum handling to construct_type() to prevent Pydantic serialization warnings
when enum values pass through untyped model construction paths.
5.0.4
(fix): Fix optional complex-type parameters in multipart file upload requests being
sent as "null" instead of being omitted. When an optional body property
(e.g., Optional[List[str]], Optional[Any]) defaults to OMIT,
json.dumps(jsonable_encoder(OMIT)) was evaluating to the string "null",
destroying the OMIT sentinel before remove_omit_from_dict could strip it.
Optional non-primitive body properties now emit a ternary guard
(json.dumps(...) if prop is not OMIT else OMIT) so that the OMIT sentinel
is preserved and correctly removed from the request data.
5.0.3
(fix): Skip Docker container management in generated tests/conftest.py when the
WIREMOCK_URL environment variable is already set. This allows wire tests to
run in CI/CD pipelines that provide an external WireMock sidecar container
without requiring Docker-in-Docker support.
5.0.2
(fix): Add docstring emission for unknown/any type alias definitions. When a type alias
resolves to typing.Any and has a description in the API definition, the generated
Python code now includes the docstring below the type alias declaration.
5.0.1
(chore): Upgrade pytest-asyncio dev dependency from ^0.23.5 to ^1.0.0 in generated
pyproject.toml. This eliminates deprecation warnings about asyncio.iscoroutinefunction,
asyncio.get_event_loop_policy, and asyncio.set_event_loop_policy when running tests
on Python 3.14+.
5.0.0
(feat): Raise the default minimum Python version from ^3.8 to ^3.10 in generated
pyproject.toml. This allows the dependency resolver to pick Pydantic 2.11+ and
pydantic-core 2.33+, which ship pre-built wheels for Python 3.14, fixing
installation failures on Python 3.14.
4.64.1
(fix): Wrap python-version in quotes in generated GitHub CI workflow so versions like
^3.10 are not misinterpreted as 3.1 by the YAML parser.
4.64.0
(feat): Add omit_fern_headers configuration option. When enabled, Fern platform headers
(X-Fern-Language, X-Fern-SDK-Name, X-Fern-SDK-Version, X-Fern-Runtime,
X-Fern-Platform, User-Agent) are omitted from generated SDK requests.
4.63.6
(fix): Fix wire test generation for types with required fields missing from examples.
When an OpenAPI example omits required fields on a nested object type, the generated
test code now synthesizes reasonable default values (e.g., "" for strings, 1 for
integers, [] for lists) instead of emitting empty constructors like ClassName()
that cause Pydantic ValidationError at runtime.
4.63.5
(fix): Fix Python 3.14 compatibility by fully eliminating all pydantic.v1 imports from the
Pydantic V2 code path. The previous fix (4.55.4) replaced pydantic.v1.datetime_parse
but left other pydantic.v1 imports (typing utilities, json encoders, fields) that still
trigger the “Core Pydantic V1 functionality isn’t compatible with Python 3.14” warning.
All pydantic.v1 usages are now replaced with standard library equivalents
(typing.get_args, typing.get_origin, typing_extensions.Literal), Pydantic V2 APIs
(pydantic.fields.FieldInfo), and an inlined encoders_by_type dictionary.
4.63.4
(chore): Add concurrency configuration to generated CI workflow with cancel-in-progress: false
to prevent stacked runs from being cancelled when a newer run starts.
4.63.3
(fix): Make wire test datetime normalization type-aware. String-typed query parameters
that look like datetimes (e.g., created_after: str) are no longer incorrectly
normalized with .000 milliseconds. Only DATE_TIME-typed parameters are affected
by the datetime_milliseconds config.