Skip to content

release: 2.2.0#258

Merged
stainless-app[bot] merged 20 commits intomainfrom
release-please--branches--main--changes--next
Feb 19, 2026
Merged

release: 2.2.0#258
stainless-app[bot] merged 20 commits intomainfrom
release-please--branches--main--changes--next

Conversation

@stainless-app
Copy link
Contributor

@stainless-app stainless-app bot commented Feb 12, 2026

Automated Release PR

2.2.0 (2026-02-19)

Full Changelog: v2.1.1...v2.2.0

Features

  • cli: Add json mode to fine-tuning list --json (#269) (13d3551)
  • Improve file uploads and FT create flows with checksums (#253) (3095b9a)
  • Update descriptions for endpoints (70900c6)

Bug Fixes

Chores

  • Add documentation and changelog to project.urls (#264) (7b9e574)
  • Better jig deployment progress (#242) (ba9c50a)
  • cli: Improve messaging when attempting to cancel finetune that is not cancellable (#268) (6502acc)
  • configure new SDK language (b312b50)
  • Fix various docstrings (2e1bd13)
  • format all api.md files (c16f892)
  • format files (#266) (2a452df)
  • Refactor argument options with CLI file downloads (#267) (642adbd)
  • Remove broken field LineCount from FileResponse (778a7d9)
  • Remove line_count field from files sdks/clis (#265) (62c9da6)
  • Revert adding mcp code. Code additions were unexpected. (7a322f7)
  • update mock server docs (5bcfbdf)

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


Note

Medium Risk
Touches core file upload and CLI deployment flows (checksum/idempotent upload behavior and jig deploy progress polling), which could affect user workflows and error handling despite being largely additive.

Overview
Bumps the SDK to v2.2.0 (manifest, pyproject.toml, _version.py, changelog) and refreshes the OpenAPI-derived surface area, mostly updating docstrings/types (e.g., stricter Literal object fields, cluster regions typed as str, evals list no longer takes user_id).

Improves file handling end-to-end: uploads now compute and send a checksum, treat server 409 as already exists (returning the existing file via retrieve), and remove the broken line_count/LineCount field from FileResponse and CLI output.

Enhances CLI workflows: fine-tuning list gains --json, fine-tuning cancel avoids attempting cancellation in non-cancellable states, fine-tuning create can accept local paths and uploads them automatically, files content now requires --output or --stdout with better path handling, and jig deploy/status gets richer status output plus optional deploy progress tracking with a --detach escape hatch.

CI now also enforces ruff format --check, and formatting scripts/docs generation were updated to run across all api.md files.

Written by Cursor Bugbot for commit aee8e31. This will update automatically on new commits. Configure here.

@stainless-app stainless-app bot force-pushed the release-please--branches--main--changes--next branch 2 times, most recently from 2d822fe to 823bf43 Compare February 12, 2026 20:16
@stainless-app stainless-app bot changed the title release: 2.1.2 release: 2.2.0 Feb 12, 2026
@stainless-app stainless-app bot force-pushed the release-please--branches--main--changes--next branch 3 times, most recently from 4780a8a to 2cd3113 Compare February 17, 2026 13:06
@stainless-app stainless-app bot force-pushed the release-please--branches--main--changes--next branch from 2cd3113 to 331fb64 Compare February 17, 2026 17:23
stainless-app bot and others added 6 commits February 17, 2026 20:36
* Update README.md (#245)

* Add from_checkpoint parameter to price estimation for FT Job creation (#247)

* codegen metadata

* codegen metadata

* codegen metadata

* jig papercuts (#238)

* feat(jig): show a unique name tip when deployment create fails

* feat(jig): factor out config_path option and add short flag

* feat: jig support for multi deployment

* codegen metadata

* chore: Update descriptions for jig queue methods and properties

* chore(internal): bump dependencies

* Allow tool calls through together-py and remove alternating roles check (#244)

* Update README.md (#245)

* Add from_checkpoint parameter to price estimation for FT Job creation (#247)

* codegen metadata

* codegen metadata

* codegen metadata

* Allow tool calls through together-py and remove outdated checks

* Remove outdated tests

* lint

* Enforce that either content or tool calls exists

* Skip for empty content

* Condition field checks on role

---------

Co-authored-by: Blaine Kasten <blainekasten@gmail.com>
Co-authored-by: Artem Chumachenko <artek.chumak@gmail.com>
Co-authored-by: stainless-app[bot] <142633134+stainless-app[bot]@users.noreply.github.com>

* make submit --watch signal status through exit code

* fix(cli): fine-tuning retrieve now renders data instead of schema (#250)

* fix(jig): lint errors

* fix(jig): migrate old state files properly and be even more defensive about parsing deploy errors

* fix(jig): pyright does not handle isinstance type narrowing in ternary expressions. also fix migration logic

* format code

* Feat: Allow uploading local file during fine tuning create call in the CLI

* cleanup

* Add support for validation_file

* fix lint

---------

Co-authored-by: Artem Chumachenko <artek.chumak@gmail.com>
Co-authored-by: stainless-app[bot] <142633134+stainless-app[bot]@users.noreply.github.com>
Co-authored-by: technillogue <technillogue@gmail.com>
Co-authored-by: Mohamad Rostami <mbrostami@proton.me>
Co-authored-by: Conner Manuel <57027354+connermanuel@users.noreply.github.com>
@stainless-app stainless-app bot force-pushed the release-please--branches--main--changes--next branch from 331fb64 to 716bae1 Compare February 17, 2026 20:37
[[package]]
name = "together"
version = "2.0.0"
version = "2.1.1"
Copy link

Choose a reason for hiding this comment

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

Lock file version doesn't match project version

Low Severity

The uv.lock file records version = "2.1.1" for the together package, but pyproject.toml declares version = "2.2.0". The lock file version was bumped from "2.0.0" to "2.1.1" instead of to "2.2.0", leaving it out of sync with the actual release version.

Fix in Cursor Fix in Web

* feat(jig): Format jig status

- chore(jig): typing fix
- chore(jig): minor improvements to status
- fix(jig): status formatter use Typed models
- fix(jig): reformat app status
- fix(jig): wip: reformat config status
- fix(jig): add env to config status
- fix(jig): replica event status
- fix(jig): remove unused age func
- fix(jig): simplify and condense status message
- fix(jig): only show 'ready since' for running replicas
- fix: fixed replica event grouping and image tag split
- fix: Fix minor status errors
- fix(jig): show replica_id instead of revision_id for replica events in jig status

* minor mypy type error

* chore: format_deployment_status(deployment) -> format_deployment_status(d)

* fix(jig): profile -> metric, targetValue -> target

---------

Co-authored-by: technillogue <technillogue@gmail.com>
@stainless-app stainless-app bot force-pushed the release-please--branches--main--changes--next branch from 716bae1 to aab3182 Compare February 17, 2026 21:27
@stainless-app stainless-app bot force-pushed the release-please--branches--main--changes--next branch from aab3182 to 759f909 Compare February 18, 2026 17:16
@stainless-app stainless-app bot force-pushed the release-please--branches--main--changes--next branch from 759f909 to 9eb76df Compare February 18, 2026 17:46
@stainless-app stainless-app bot force-pushed the release-please--branches--main--changes--next branch from 9eb76df to 44cbee9 Compare February 18, 2026 17:57
@stainless-app stainless-app bot force-pushed the release-please--branches--main--changes--next branch from 44cbee9 to a7ed7fb Compare February 19, 2026 03:08
@stainless-app stainless-app bot force-pushed the release-please--branches--main--changes--next branch from a7ed7fb to 49d6665 Compare February 19, 2026 13:16
@stainless-app stainless-app bot force-pushed the release-please--branches--main--changes--next branch 2 times, most recently from 6477638 to 2c62dea Compare February 19, 2026 13:17
@stainless-app stainless-app bot force-pushed the release-please--branches--main--changes--next branch from 2c62dea to 467cb3f Compare February 19, 2026 13:21
* chore: format files

* check format in CI

* run lint
@stainless-app stainless-app bot force-pushed the release-please--branches--main--changes--next branch from 467cb3f to 08af9be Compare February 19, 2026 15:10
if result == ReplicaTrackingResult.SUCCESS:
return None
if result == ReplicaTrackingResult.FAILURE:
raise SystemExit(1)
Copy link

Choose a reason for hiding this comment

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

Multi-replica deployment tracking order-dependent failure

Medium Severity

In _track_deployment_progress, when iterating relevant_replicas, the loop raises SystemExit(1) on the very first FAILURE result without inspecting any remaining replicas. If a CrashLoopBackOff replica happens to be iterated before a Running+ready replica (dict order depends on API response ordering), the deployment is falsely reported as failed even though a healthy replica already exists. The stated success condition is "at least one replica has replica_ready_since set", but the current short-circuit can prevent that condition from ever being evaluated.

Additional Locations (1)

Fix in Cursor Fix in Web

@stainless-app stainless-app bot force-pushed the release-please--branches--main--changes--next branch from 08af9be to 7a63c60 Compare February 19, 2026 16:23
@stainless-app stainless-app bot force-pushed the release-please--branches--main--changes--next branch from 7a63c60 to aee8e31 Compare February 19, 2026 16:32
Copy link

@cursor cursor bot left a comment

Choose a reason for hiding this comment

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

Cursor Bugbot has reviewed your changes and found 1 potential issue.

Bugbot Autofix is OFF. To automatically fix reported issues with Cloud Agents, enable Autofix in the Cursor dashboard.

@click.pass_context
@click.argument("id", type=str, required=True)
@click.option("--output", type=str, default=None, help="Output filename")
@click.option("--output", type=click.Path(file_okay=False, writable=True, dir_okay=True), help="Output filename")
Copy link

Choose a reason for hiding this comment

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

Output option rejects existing files due to file_okay=False

Medium Severity

The --output option uses click.Path(file_okay=False, ...) which prevents users from passing a path to an existing file. Since Click validates file_okay only on existing paths, this means --output existing_file.jsonl is rejected while --output new_file.jsonl is accepted. The code at line 31 explicitly handles file paths (checking for extension), so the intent is to accept both files and directories. file_okay needs to be True to allow overwriting existing files.

Fix in Cursor Fix in Web

@stainless-app stainless-app bot merged commit bfb1918 into main Feb 19, 2026
11 checks passed
@stainless-app
Copy link
Contributor Author

stainless-app bot commented Feb 19, 2026

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.

3 participants

Comments