Skip to content

release: 1.13.0#90

Open
stainless-app[bot] wants to merge 12 commits into
mainfrom
release-please--branches--main--changes--next
Open

release: 1.13.0#90
stainless-app[bot] wants to merge 12 commits into
mainfrom
release-please--branches--main--changes--next

Conversation

@stainless-app

@stainless-app stainless-app Bot commented Apr 23, 2026

Copy link
Copy Markdown
Contributor

Automated Release PR

1.13.0 (2026-07-18)

Full Changelog: v1.12.0...v1.13.0

Features

  • api: api update (c9846e3)
  • api: api update (3216770)
  • internal/types: support eagerly validating pydantic iterators (92a4a3a)
  • smart save_to with full path support and bug fix (#85) (7576d1f)
  • stlc: configurable CI runner and private-production-repo support in workflow templates (d5da739)
  • support setting headers via env (a3a857d)

Bug Fixes

  • client: add missing f-string prefix in file type error message (3dde871)
  • use correct field name format for multipart file arrays (8344ac4)

Chores

  • internal: reformat pyproject.toml (ecfd5e2)

Documentation


This pull request is managed by Stainless's GitHub App.

The semver version number is based on included commit messages. Alternatively, you can manually set the version number in the title of this pull request.

For a better experience, it is recommended to use either rebase-merge or squash-merge when merging this pull request.

🔗 Stainless website
📚 Read the docs
🙋 Reach out for help or questions

@stainless-app

stainless-app Bot commented Apr 23, 2026

Copy link
Copy Markdown
Contributor Author

🧪 Testing

To try out this version of the SDK:

pip install 'https://pkg.stainless.com/s/ade-python/d5da739ce3ae09b42deb7a7d8d2bdddf421bfe96/landingai_ade-1.12.0-py3-none-any.whl'

Expires at: Mon, 17 Aug 2026 02:01:40 GMT
Updated at: Sat, 18 Jul 2026 02:01:40 GMT

@stainless-app
stainless-app Bot force-pushed the release-please--branches--main--changes--next branch from fb971ec to e889513 Compare April 28, 2026 02:11
@stainless-app stainless-app Bot changed the title release: 1.12.1 release: 1.13.0 Apr 28, 2026
@stainless-app
stainless-app Bot force-pushed the release-please--branches--main--changes--next branch 2 times, most recently from 90b3bef to db10a21 Compare April 28, 2026 02:18
@stainless-app
stainless-app Bot force-pushed the release-please--branches--main--changes--next branch from db10a21 to 6d49353 Compare April 28, 2026 22:53
@stainless-app
stainless-app Bot force-pushed the release-please--branches--main--changes--next branch from 6d49353 to d268a9a Compare April 30, 2026 02:37
@stainless-app
stainless-app Bot force-pushed the release-please--branches--main--changes--next branch from d268a9a to 5f516f5 Compare May 1, 2026 02:11
@stainless-app
stainless-app Bot force-pushed the release-please--branches--main--changes--next branch from 5f516f5 to 7f7ddc2 Compare May 9, 2026 02:06
@stainless-app
stainless-app Bot force-pushed the release-please--branches--main--changes--next branch from 7f7ddc2 to 40b6b4e Compare May 12, 2026 02:05
Pin all GitHub Actions referenced in generated workflows (both
first-party `actions/*` and third-party) to immutable commit SHAs.
Updating pinned actions is now a deliberate codegen-side bump rather
than implicit on every workflow run.
@stainless-app
stainless-app Bot force-pushed the release-please--branches--main--changes--next branch from 40b6b4e to 7a76d3d Compare May 13, 2026 02:03
@stainless-app
stainless-app Bot force-pushed the release-please--branches--main--changes--next branch from 4e52788 to 0990b2d Compare July 7, 2026 20:13
Copilot AI review requested due to automatic review settings July 18, 2026 02:01
@stainless-app
stainless-app Bot force-pushed the release-please--branches--main--changes--next branch from 0990b2d to ac8db1b Compare July 18, 2026 02:01

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Note

Copilot could not run the full agentic suite for this review because it was automatically requested on a bot-authored pull request. Request a review from Copilot under Reviewers to retry with the full agentic suite. Improved support for bot-authored pull requests is coming soon.

Updates the SDK for the 1.13.0 release by extending response models, improving multipart file extraction flexibility, and adding internal robustness improvements (Pydantic iterable validation, env-driven headers), plus release/versioning and CI hardening.

Changes:

  • Add created_at to job response types and bump version to 1.13.0 (including changelog/manifest updates).
  • Add configurable array_format for multipart file array field naming and expand related tests.
  • Introduce EagerIterable to eagerly validate/serialize iterables under Pydantic v2 and add regression tests; pin GitHub Actions to SHAs.

Reviewed changes

Copilot reviewed 19 out of 19 changed files in this pull request and generated 9 comments.

Show a summary per file
File Description
tests/test_models.py Adds tests for new EagerIterable behavior across iterable inputs.
tests/test_files.py Adjusts assertions around extracted multipart file entries.
tests/test_extract_files.py Adds coverage for array_format controlling multipart field names.
src/landingai_ade/types/parse_job_list_response.py Adds optional created_at field to job list model.
src/landingai_ade/types/parse_job_get_response.py Adds optional created_at field to job get model.
src/landingai_ade/_version.py Bumps package version constant to 1.13.0.
src/landingai_ade/_utils/_utils.py Adds array_format support to extract_files and array key emission logic.
src/landingai_ade/_types.py Centralizes ArrayFormat/NestedFormat literals.
src/landingai_ade/_qs.py Uses centralized ArrayFormat/NestedFormat types from _types.
src/landingai_ade/_models.py Adds EagerIterable implementation for Pydantic v2 schema/serialization.
src/landingai_ade/_files.py Fixes missing f-string in a TypeError message.
src/landingai_ade/_client.py Adds support for default headers via LANDINGAI_ADE_CUSTOM_HEADERS env var.
pyproject.toml Bumps version and normalizes mypy exclude formatting.
CHANGELOG.md Adds 1.13.0 release notes.
.stats.yml Updates OpenAPI spec URL/hash metadata.
.release-please-manifest.json Updates release-please manifest version to 1.13.0.
.github/workflows/release-doctor.yml Pins actions/checkout to a specific commit SHA.
.github/workflows/publish-pypi.yml Pins actions/checkout to a specific commit SHA.
.github/workflows/ci.yml Pins actions to SHAs and updates runner selection logic for Stainless repos.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread tests/test_models.py
Comment on lines +974 to +982
([1, 2, 3], [1, 2, 3]),
((1, 2, 3), (1, 2, 3)),
(set([1, 2, 3]), set([1, 2, 3])),
(iter([1, 2, 3]), [1, 2, 3]),
([], []),
((x for x in [1, 2, 3]), [1, 2, 3]),
(map(lambda x: x, [1, 2, 3]), [1, 2, 3]),
(frozenset([1, 2, 3]), frozenset([1, 2, 3])),
(deque([1, 2, 3]), deque([1, 2, 3])),
Comment thread tests/test_models.py
Comment on lines +998 to +999
assert m.model_dump()["data"]["items"] == list(expected_validated)
assert m.model_dump()["data"]["items"] == list(expected_validated)
Comment thread tests/test_files.py
extracted = extract_files(copied, paths=[["items", "<array>", "file"]])

assert extracted == [("items[][file]", file1), ("items[][file]", file2)]
assert [entry for _, entry in extracted] == [file1, file2]
Comment on lines +70 to +72
raise NotImplementedError(
f"Unknown array_format value: {array_format}, choose from {', '.join(get_args(ArrayFormat))}"
)
Comment on lines +223 to +230
custom_headers_env = os.environ.get("LANDINGAI_ADE_CUSTOM_HEADERS")
if custom_headers_env is not None:
parsed: dict[str, str] = {}
for line in custom_headers_env.split("\n"):
colon = line.find(":")
if colon >= 0:
parsed[line[:colon].strip()] = line[colon + 1 :].strip()
default_headers = {**parsed, **(default_headers if is_mapping_t(default_headers) else {})}
Comment on lines +223 to +230
custom_headers_env = os.environ.get("LANDINGAI_ADE_CUSTOM_HEADERS")
if custom_headers_env is not None:
parsed: dict[str, str] = {}
for line in custom_headers_env.split("\n"):
colon = line.find(":")
if colon >= 0:
parsed[line[:colon].strip()] = line[colon + 1 :].strip()
default_headers = {**parsed, **(default_headers if is_mapping_t(default_headers) else {})}
Comment on lines +922 to +929
custom_headers_env = os.environ.get("LANDINGAI_ADE_CUSTOM_HEADERS")
if custom_headers_env is not None:
parsed: dict[str, str] = {}
for line in custom_headers_env.split("\n"):
colon = line.find(":")
if colon >= 0:
parsed[line[:colon].strip()] = line[colon + 1 :].strip()
default_headers = {**parsed, **(default_headers if is_mapping_t(default_headers) else {})}
Comment on lines +22 to +26
created_at: Optional[int] = None
"""Unix timestamp (seconds) for when the job was created.

Mirrors received_at; exposed so clients have an explicit creation time.
"""
Comment on lines +223 to +230
custom_headers_env = os.environ.get("LANDINGAI_ADE_CUSTOM_HEADERS")
if custom_headers_env is not None:
parsed: dict[str, str] = {}
for line in custom_headers_env.split("\n"):
colon = line.find(":")
if colon >= 0:
parsed[line[:colon].strip()] = line[colon + 1 :].strip()
default_headers = {**parsed, **(default_headers if is_mapping_t(default_headers) else {})}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant