Bump the all-actions group with 5 updates

Bumps the all-actions group with 5 updates:

| Package | From | To |
| --- | --- | --- |
| [docker/setup-qemu-action](https://github.com/docker/setup-qemu-action) | `3` | `4` |
| [docker/setup-buildx-action](https://github.com/docker/setup-buildx-action) | `3` | `4` |
| [docker/login-action](https://github.com/docker/login-action) | `3` | `4` |
| [docker/metadata-action](https://github.com/docker/metadata-action) | `5` | `6` |
| [docker/build-push-action](https://github.com/docker/build-push-action) | `6` | `7` |

Updates `docker/setup-qemu-action` from 3 to 4

Release notes

Sourced from docker/setup-qemu-action's releases.

v4.0.0

Node 24 as default runtime (requires Actions Runner v2.327.1 or later) by @crazy-max in docker/setup-qemu-action#245

Switch to ESM and update config/test wiring by @crazy-max in docker/setup-qemu-action#241

Bump @actions/core from 1.11.1 to 3.0.0 in docker/setup-qemu-action#244

Bump @docker/actions-toolkit from 0.67.0 to 0.77.0 in docker/setup-qemu-action#243

Bump @isaacs/brace-expansion from 5.0.0 to 5.0.1 in docker/setup-qemu-action#240

Bump js-yaml from 3.14.1 to 3.14.2 in docker/setup-qemu-action#231

Bump lodash from 4.17.21 to 4.17.23 in docker/setup-qemu-action#238

Full Changelog: https://github.com/docker/setup-qemu-action/compare/v3.7.0...v4.0.0

v3.7.0

Bump @docker/actions-toolkit from 0.56.0 to 0.67.0 in docker/setup-qemu-action#217 docker/setup-qemu-action#230

Bump brace-expansion from 1.1.11 to 1.1.12 in docker/setup-qemu-action#220

Bump form-data from 2.5.1 to 2.5.5 in docker/setup-qemu-action#218

Bump tmp from 0.2.3 to 0.2.4 in docker/setup-qemu-action#221

Bump undici from 5.28.4 to 5.29.0 in docker/setup-qemu-action#219

Full Changelog: https://github.com/docker/setup-qemu-action/compare/v3.6.0...v3.7.0

v3.6.0

Display binfmt version by @crazy-max in docker/setup-qemu-action#202

Full Changelog: https://github.com/docker/setup-qemu-action/compare/v3.5.0...v3.6.0

v3.5.0

Bump @docker/actions-toolkit from 0.54.0 to 0.56


# Description

<!--
Thank you for contributing to Oumi! Before sending your PR out for review, please take a quick read through this template.

When your PR is merged, its title will appear in our release notes. Make sure your title gives a clear description of your change!

After you've updated your title, please replace this section with a detailed description of your change. Include as much context as possible so your reviewers can easily understand *what* you're changing and *why*.
The more information you provide, the faster we can review your change!
-->
<!--↓↓↓↓↓↓↓↓↓↓ Describe your change below ↓↓↓↓↓↓↓↓↓↓-->
[infer] expose finish_reason from inference engine

<!--↑↑↑↑↑↑↑↑↑↑ Describe your change above ↑↑↑↑↑↑↑↑↑↑-->

## Related issues

<!--
Make sure to list any relevant related issues to your change. More often than not this will be the single issue fixed by your PR.
-->
<!--↓↓↓↓↓↓↓↓↓↓ List your related issues below ↓↓↓↓↓↓↓↓↓↓-->

Fixes # (issue)

<!--↑↑↑↑↑↑↑↑↑↑ List your related issues above ↑↑↑↑↑↑↑↑↑↑-->

## Before submitting

- [ ] This PR only changes documentation. (You can ignore the following checks in that case)
- [ ] Did you read the [contributor guideline](https://github.com/oumi-ai/oumi/blob/main/CONTRIBUTING.md) Pull Request guidelines?
- [ ] Did you link the issue(s) related to this PR in the section above?
- [ ] Did you add / update tests where needed?

## Reviewers

At least one review from a member of `oumi-ai/oumi-staff` is required.

<!-- Add `oumi-ai/oumi-staff` as a reviewer when your PR is ready for review.

You are also welcome to add individual members of `oumi-ai/oumi-staff` as reviewers.

If no one has reviewed your PR after several days, feel free to add a comment tagging specific reviewers.

 -->


Treat empty arrays in synthesis config as unset

## Summary
- Empty lists for list attributes in `GeneralSynthesisParams` are now normalized to `None` during validation, instead of raising `ValueError`
- This makes empty arrays (`[]`) behave identically to omitted attributes, which is the expected behavior when configs are generated programmatically or deserialized with optional fields
- Also adds missing test coverage for `multiturn_attributes` empty list handling

## Test plan
- [x] Updated unit tests to verify empty lists are normalized to `None` for all 9 list attributes
- [x] All 33 synthesis params tests pass
- [x] All 1145 config tests pass
- [x] All 191 synthesis pipeline tests pass


Adding Step To Metrics Callback

# Description

<!--
Thank you for contributing to Oumi! Before sending your PR out for review, please take a quick read through this template.

When your PR is merged, its title will appear in our release notes. Make sure your title gives a clear description of your change!

After you've updated your title, please replace this section with a detailed description of your change. Include as much context as possible so your reviewers can easily understand *what* you're changing and *why*.
The more information you provide, the faster we can review your change!
-->
<!--↓↓↓↓↓↓↓↓↓↓ Describe your change below ↓↓↓↓↓↓↓↓↓↓-->
Before we would never get the step field populated in our metrics callback. This allows us to grab the global step from the state variable.
<!--↑↑↑↑↑↑↑↑↑↑ Describe your change above ↑↑↑↑↑↑↑↑↑↑-->

## Related issues

<!--
Make sure to list any relevant related issues to your change. More often than not this will be the single issue fixed by your PR.
-->
<!--↓↓↓↓↓↓↓↓↓↓ List your related issues below ↓↓↓↓↓↓↓↓↓↓-->

Fixes # (issue)

<!--↑↑↑↑↑↑↑↑↑↑ List your related issues above ↑↑↑↑↑↑↑↑↑↑-->

## Before submitting

- [ ] This PR only changes documentation. (You can ignore the following checks in that case)
- [ ] Did you read the [contributor guideline](https://github.com/oumi-ai/oumi/blob/main/CONTRIBUTING.md) Pull Request guidelines?
- [ ] Did you link the issue(s) related to this PR in the section above?
- [ ] Did you add / update tests where needed?

## Reviewers

At least one review from a member of `oumi-ai/oumi-staff` is required.

<!-- Add `oumi-ai/oumi-staff` as a reviewer when your PR is ready for review.

You are also welcome to add individual members of `oumi-ai/oumi-staff` as reviewers.

If no one has reviewed your PR after several days, feel free to add a comment tagging specific reviewers.

 -->


[MCP Integration] Phase 1: Package scaffold and dependencies

# Description

Part of the **MCP Integration** PR chain (Phase 1 of 10) - Stage: scaffold

**What changed**: Added the `oumi.mcp` package skeleton with optional dependencies (fastmcp, httpx, huggingface-hub, mcp, pyyaml), the `oumi-mcp` console entry point, and ruff lint ignores.

**Why**: This establishes the package structure and dependency declarations needed for the MCP server integration.

## Related issues

<!-- TODO: Link tracking issue -->

## Before submitting
- [x] Did you link the issue(s) related to this PR in the section above?
- [x] Did you add / update tests where needed?


Refactored Anthropic Engine Error Check

# Description

<!--
Thank you for contributing to Oumi! Before sending your PR out for review, please take a quick read through this template.

When your PR is merged, its title will appear in our release notes. Make sure your title gives a clear description of your change!

After you've updated your title, please replace this section with a detailed description of your change. Include as much context as possible so your reviewers can easily understand *what* you're changing and *why*.
The more information you provide, the faster we can review your change!
-->
<!--↓↓↓↓↓↓↓↓↓↓ Describe your change below ↓↓↓↓↓↓↓↓↓↓-->
Anthropic will show a failure even when partial results are returned. Instead of raising we want to check for partial completion instead of failing the entire call.
<!--↑↑↑↑↑↑↑↑↑↑ Describe your change above ↑↑↑↑↑↑↑↑↑↑-->

## Related issues

<!--
Make sure to list any relevant related issues to your change. More often than not this will be the single issue fixed by your PR.
-->
<!--↓↓↓↓↓↓↓↓↓↓ List your related issues below ↓↓↓↓↓↓↓↓↓↓-->

Fixes # (issue)

<!--↑↑↑↑↑↑↑↑↑↑ List your related issues above ↑↑↑↑↑↑↑↑↑↑-->

## Before submitting

- [ ] This PR only changes documentation. (You can ignore the following checks in that case)
- [ ] Did you read the [contributor guideline](https://github.com/oumi-ai/oumi/blob/main/CONTRIBUTING.md) Pull Request guidelines?
- [ ] Did you link the issue(s) related to this PR in the section above?
- [ ] Did you add / update tests where needed?

## Reviewers

At least one review from a member of `oumi-ai/oumi-staff` is required.

<!-- Add `oumi-ai/oumi-staff` as a reviewer when your PR is ready for review.

You are also welcome to add individual members of `oumi-ai/oumi-staff` as reviewers.

If no one has reviewed your PR after several days, feel free to add a comment tagging specific reviewers.

 -->


Don't hardcode booking link

notebooks/Oumi - Build your own Custom Evaluation (Hallucination Classifier).ipynb

notebooks/Oumi - Bulk Inference of LLM APIs.ipynb

notebooks/Oumi - Distill a Large Model.ipynb

notebooks/Oumi - Evaluation with AlpacaEval 2.0.ipynb

notebooks/Oumi - Evaluation with MT Bench.ipynb

notebooks/Oumi - Evaluation with Oumi.ipynb

notebooks/Oumi - Finetuning Tutorial.ipynb

notebooks/Oumi - Launching Jobs on Custom Clusters.ipynb

notebooks/Oumi - OpenEnv GRPO with trl.ipynb

notebooks/Oumi - Quantization Tutorial.ipynb

notebooks/Oumi - Running Jobs Remotely.ipynb

notebooks/Oumi - Train a Letter Counting Model using GRPO.ipynb

notebooks/Oumi - Training CNN on Custom Dataset.ipynb

notebooks/Oumi - Using vLLM Engine for Inference.ipynb

notebooks/Oumi - Vision Language Models.ipynb

Rather than hardcoding book a meeting with us Calendarly link, use oumi.ai/book


Updated Early Access Program links

As title above


Update typer requirement from <0.23.2 to <0.24.2

Updates the requirements on [typer](https://github.com/fastapi/typer) to permit the latest version.

Release notes

Sourced from typer's releases.

0.24.1

Internal

👷 Fix CI, do not attempt to build typer-slim, nor typer-cli. PR #1569 by @tiangolo.

➖ Drop support for typer-slim and typer-cli, no more versions will be released, use only typer. PR #1568 by @tiangolo.

⬆ Bump rich from 14.3.2 to 14.3.3. PR #1565 by @dependabot[bot].

⬆ Bump pydantic-settings from 2.13.0 to 2.13.1. PR #1566 by @dependabot[bot].

⬆ Bump ruff from 0.15.1 to 0.15.2. PR #1567 by @dependabot[bot].

⬆ Bump mkdocs-material from 9.7.1 to 9.7.2. PR #1561 by @dependabot[bot].

⬆ Bump pillow from 11.3.0 to 12.1.1. PR #1550 by @dependabot[bot].

⬆ Bump pytest from 8.4.2 to 9.0.2. PR #1551 by @dependabot[bot].

⬆ Bump pydantic-settings from 2.12.0 to 2.13.0. PR #1552 by @dependabot[bot].

🎨 Upgrade types for Python 3.10. PR #1549 by @tiangolo.

🔨 Add internal scripts to migrate docs from Python 3.9 to 3.10. PR #1547 by @tiangolo.

⬆ Bump ty from 0.0.16 to 0.0.17. PR #1544 by @dependabot[bot].

Changelog

Sourced from typer's changelog.

0.24.1

Internal

👷 Fix CI, do not attempt to build typer-slim, nor typer-cli. PR #1569 by @tiangolo.

➖ Drop support for typer-slim and typer-cli, no more versions will be released, use only typer. PR #1568 by @tiangolo.

⬆ Bump rich from 14.3.2 to 14.3.3. PR #1565 by @dependabot[bot].

⬆ Bump pydantic-settings from 2.13.0 to 2.13.1. PR #1566</


Update kernels requirement from <0.12,>=0.11 to >=0.11,<0.13

Updates the requirements on kernels to permit the latest version.

Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

Dependabot commands and options

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)


Update uvicorn requirement from <0.41.0 to <0.42.0

Updates the requirements on [uvicorn](https://github.com/Kludex/uvicorn) to permit the latest version.

Release notes

Sourced from uvicorn's releases.

Version 0.41.0

Added

Add --limit-max-requests-jitter to stagger worker restarts (#2707)

Add socket path to scope["server"] (#2561)

Changed

Rename LifespanOn.error_occured to error_occurred (#2776)

Fixed

Ignore permission denied errors in watchfiles reloader (#2817)

Ensure lifespan shutdown runs when should_exit is set during startup (#2812)

Reduce the log level of 'request limit exceeded' messages (#2788)

New Contributors

@t-kawasumi made their first contribution in Kludex/uvicorn#2776

@fardyn made their first contribution in Kludex/uvicorn#2800

@ewie made their first contribution in Kludex/uvicorn#2807

@shevron made their first contribution in Kludex/uvicorn#2788

@jonashaag made their first contribution in Kludex/uvicorn#2707

Full Changelog: https://github.com/Kludex/uvicorn/compare/0.40.0...0.41.0

Changelog

Sourced from uvicorn's changelog.

0.41.0 (February 16, 2026)

Added

Add --limit-max-requests-jitter to stagger worker restarts (#2707)

Add socket path to scope["server"] (#2561)

Changed

Rename LifespanOn.error_occured to error_occurred (#2776)

Fixed

Ignore permission denied errors in watchfiles reloader (#2817)

Ensure lifespan shutdown runs when should_exit is set during startup (#2812)

Reduce the log level of 'request limit exceeded' messages (#2788)

0.40.0 (December 21, 2025)

Remove

Drop support for Python 3.9 (#2772)

0.39.0 (December 21, 2025)

Fixed

Send close frame on ASGI return for WebSockets (<


Update responses requirement from <0.26,>=0.25 to >=0.25,<0.27

Updates the requirements on [responses](https://github.com/getsentry/responses) to permit the latest version.

Release notes

Sourced from responses's releases.

0.26.0

When using assert_all_requests_are_fired=True, assertions about
unfired requests are now raised even when an exception occurs in the context manager or
decorated function. Previously, these assertions were suppressed when exceptions occurred.
This new behavior provides valuable debugging context about which mocked requests were
or weren't called.

Consider the Retry-After header when handling retries

Changelog

Sourced from responses's changelog.

0.26.0

When using assert_all_requests_are_fired=True, assertions about
unfired requests are now raised even when an exception occurs in the context manager or
decorated function. Previously, these assertions were suppressed when exceptions occurred.
This new behavior provides valuable debugging context about which mocked requests were
or weren't called.

Consider the Retry-After header when handling retries

0.25.8

Fix bug where the content type is always recorded as either text/plain or application/json. See #770

Allow asserts on add_callback() matches. See #727

0.25.7

Added support for python 3.13

0.25.6

Added py.typed to package_data

0.25.5

Fix readme issue that prevented 0.25.4 from being published to pypi.

0.25.4

Responses can now match requests that use data with file-like objects.
Files will be read as bytes and stored in the request mock. See #736

RequestsMock.matchers was added. This property is an alias to responses.matchers. See #739

Removed tests from packaged wheels. See #746

Improved recorder API to ease use in REPL environments. See #745

0.25.3

Fixed recorder not saving and loading response headers with yaml files. See #715

0.25.2

Mulligan on 0.25.1 to run release pipeline correctly.

... (truncated)

Commits

94913d0 release: 0.26.0

051b79e Make assert_all_requests_are_fired always assert on exception (#782)

0905cb8 Fix query_param_matcher not matching empty query parameter values (#787)

e0c6faa ci(release)


Adding Partial Retry For Base Engine

# Description

<!--
Thank you for contributing to Oumi! Before sending your PR out for review, please take a quick read through this template.

When your PR is merged, its title will appear in our release notes. Make sure your title gives a clear description of your change!

After you've updated your title, please replace this section with a detailed description of your change. Include as much context as possible so your reviewers can easily understand *what* you're changing and *why*.
The more information you provide, the faster we can review your change!
-->
<!--↓↓↓↓↓↓↓↓↓↓ Describe your change below ↓↓↓↓↓↓↓↓↓↓-->
Currently we don't support the case where when a batch request has partial failures we retry those failures. This is adding support for a standard one pass retry for those.

In the future we should add more support for after retry logic pass back the requests that fail so the user can be aware of which requests didn't pass. Right now we are keeping it simple so if after the retry we still have failed requests we fail the entire request. If we wanted to support this logic in the base judge would also need to change.
<!--↑↑↑↑↑↑↑↑↑↑ Describe your change above ↑↑↑↑↑↑↑↑↑↑-->

## Related issues

<!--
Make sure to list any relevant related issues to your change. More often than not this will be the single issue fixed by your PR.
-->
<!--↓↓↓↓↓↓↓↓↓↓ List your related issues below ↓↓↓↓↓↓↓↓↓↓-->

Fixes # (issue)

<!--↑↑↑↑↑↑↑↑↑↑ List your related issues above ↑↑↑↑↑↑↑↑↑↑-->

## Before submitting

- [ ] This PR only changes documentation. (You can ignore the following checks in that case)
- [ ] Did you read the [contributor guideline](https://github.com/oumi-ai/oumi/blob/main/CONTRIBUTING.md) Pull Request guidelines?
- [ ] Did you link the issue(s) related to this PR in the section above?
- [ ] Did you add / update tests where needed?

## Reviewers

At least one review from a member of `oumi-ai/oumi-staff` is required.

<!-- Add `oumi-ai/oumi-staff` as a reviewer when your PR is ready for review.

You are also welcome to add individual members of `oumi-ai/oumi-staff` as reviewers.

If no one has reviewed your PR after several days, feel free to add a comment tagging specific reviewers.

 -->


[tiny] Add kernels package

# Description

<!--
Thank you for contributing to Oumi! Before sending your PR out for review, please take a quick read through this template.

When your PR is merged, its title will appear in our release notes. Make sure your title gives a clear description of your change!

After you've updated your title, please replace this section with a detailed description of your change. Include as much context as possible so your reviewers can easily understand *what* you're changing and *why*.
The more information you provide, the faster we can review your change!
-->
<!--↓↓↓↓↓↓↓↓↓↓ Describe your change below ↓↓↓↓↓↓↓↓↓↓-->
Add kernels package for kernels-community/vllm-flash-attn3 in gold trainer
<!--↑↑↑↑↑↑↑↑↑↑ Describe your change above ↑↑↑↑↑↑↑↑↑↑-->

## Related issues

<!--
Make sure to list any relevant related issues to your change. More often than not this will be the single issue fixed by your PR.
-->
<!--↓↓↓↓↓↓↓↓↓↓ List your related issues below ↓↓↓↓↓↓↓↓↓↓-->

Fixes # (issue)

<!--↑↑↑↑↑↑↑↑↑↑ List your related issues above ↑↑↑↑↑↑↑↑↑↑-->

## Before submitting

- [ ] This PR only changes documentation. (You can ignore the following checks in that case)
- [x] Did you read the [contributor guideline](https://github.com/oumi-ai/oumi/blob/main/CONTRIBUTING.md) Pull Request guidelines?
- [x] Did you link the issue(s) related to this PR in the section above?
- [x] Did you add / update tests where needed?

## Reviewers

At least one review from a member of `oumi-ai/oumi-staff` is required.

<!-- Add `oumi-ai/oumi-staff` as a reviewer when your PR is ready for review.

You are also welcome to add individual members of `oumi-ai/oumi-staff` as reviewers.

If no one has reviewed your PR after several days, feel free to add a comment tagging specific reviewers.

 -->


fix(analyze): address post-merge review nits from #2204

## Summary

Follow-up to #2204, addressing two nits from @oelachqar that weren't implemented before merge.

- Use `conversation.first_message()` / `conversation.last_message()` instead of direct list indexing `messages[0]` / `messages[-1]` in `TurnStatsAnalyzer`
- Sort `__all__` alphabetically in `src/oumi/analyze/__init__.py`

## Before submitting
- [x] Did you link the issue(s) related to this PR in the section above?
- [x] Did you add / update tests where needed?

🤖 Generated with [Claude Code](https://claude.ai/code)


[infer] handle temperature constraints for all OpenAI reasoning models

# Description

<!--
Thank you for contributing to Oumi! Before sending your PR out for review, please take a quick read through this template.

When your PR is merged, its title will appear in our release notes. Make sure your title gives a clear description of your change!

After you've updated your title, please replace this section with a detailed description of your change. Include as much context as possible so your reviewers can easily understand *what* you're changing and *why*.
The more information you provide, the faster we can review your change!
-->
<!--↓↓↓↓↓↓↓↓↓↓ Describe your change below ↓↓↓↓↓↓↓↓↓↓-->
Expand the reasoning model check to include o-series (o1, o3, o4) and GPT-5 family models that only support temperature=1.0.

<!--↑↑↑↑↑↑↑↑↑↑ Describe your change above ↑↑↑↑↑↑↑↑↑↑-->

## Related issues

<!--
Make sure to list any relevant related issues to your change. More often than not this will be the single issue fixed by your PR.
-->
<!--↓↓↓↓↓↓↓↓↓↓ List your related issues below ↓↓↓↓↓↓↓↓↓↓-->

Towards LOU-772

<!--↑↑↑↑↑↑↑↑↑↑ List your related issues above ↑↑↑↑↑↑↑↑↑↑-->

## Before submitting

- [ ] This PR only changes documentation. (You can ignore the following checks in that case)
- [x] Did you read the [contributor guideline](https://github.com/oumi-ai/oumi/blob/main/CONTRIBUTING.md) Pull Request guidelines?
- [x] Did you link the issue(s) related to this PR in the section above?
- [x] Did you add / update tests where needed?

## Reviewers

At least one review from a member of `oumi-ai/oumi-staff` is required.

<!-- Add `oumi-ai/oumi-staff` as a reviewer when your PR is ready for review.

You are also welcome to add individual members of `oumi-ai/oumi-staff` as reviewers.

If no one has reviewed your PR after several days, feel free to add a comment tagging specific reviewers.

 -->


Add MoE model training configurations for Qwen3 variants

# Description

<!--
Thank you for contributing to Oumi! Before sending your PR out for review, please take a quick read through this template.

When your PR is merged, its title will appear in our release notes. Make sure your title gives a clear description of your change!

After you've updated your title, please replace this section with a detailed description of your change. Include as much context as possible so your reviewers can easily understand *what* you're changing and *why*.
The more information you provide, the faster we can review your change!
-->
<!--↓↓↓↓↓↓↓↓↓↓ Describe your change below ↓↓↓↓↓↓↓↓↓↓-->

- Add Qwen3-Next 80B A3B Instruct LoRA SFT recipe config
- Add Qwen3-235B LoRA configuration
- Add Qwen3-30B A3B Instruct training configuration

<!--↑↑↑↑↑↑↑↑↑↑ Describe your change above ↑↑↑↑↑↑↑↑↑↑-->

## Related issues

<!--
Make sure to list any relevant related issues to your change. More often than not this will be the single issue fixed by your PR.
-->
<!--↓↓↓↓↓↓↓↓↓↓ List your related issues below ↓↓↓↓↓↓↓↓↓↓-->

Fixes # (issue)

<!--↑↑↑↑↑↑↑↑↑↑ List your related issues above ↑↑↑↑↑↑↑↑↑↑-->

## Before submitting

- [ ] This PR only changes documentation. (You can ignore the following checks in that case)
- [ ] Did you read the [contributor guideline](https://github.com/oumi-ai/oumi/blob/main/CONTRIBUTING.md) Pull Request guidelines?
- [ ] Did you link the issue(s) related to this PR in the section above?
- [ ] Did you add / update tests where needed?

## Reviewers

At least one review from a member of `oumi-ai/oumi-staff` is required.

<!-- Add `oumi-ai/oumi-staff` as a reviewer when your PR is ready for review.

You are also welcome to add individual members of `oumi-ai/oumi-staff` as reviewers.

If no one has reviewed your PR after several days, feel free to add a comment tagging specific reviewers.

 -->


Update liger-kernel requirement from <0.7,>=0.6 to >=0.6,<0.8

Updates the requirements on [liger-kernel](https://github.com/linkedin/Liger-Kernel) to permit the latest version.

Release notes

Sourced from liger-kernel's releases.

v0.7.0

🚀 Liger-Kernel Now Fully Supports Transformers v5

We’ve added full support for Transformers v5!

🔗 linkedin/Liger-Kernel#994

Liger now supports all 🤗 Transformers versions ≥ 4.52.0, including the latest v5 release.

Broader compatibility. Seamless upgrades. No version headaches.

Thanks to all the contributors!

What's Changed

Add CISPO loss type support for LigerFusedLinearGRPOLoss by @yukiu00 in linkedin/Liger-Kernel#1054

Update checkstyle and fix the format issue by @xuedinge233 in linkedin/Liger-Kernel#1071

Add SAPO loss type support for LigerFusedLinearGRPOLoss by @yukiu00 in linkedin/Liger-Kernel#1073

[NPU]: Adaptive modification of NPU by @TianHao324 in linkedin/Liger-Kernel#1055

[NPU] Frequencies fusion for Llama4_rope on NPU by @lowdy1 in linkedin/Liger-Kernel#1053

Add CISPO and SAPO loss type support for Triton GRPO loss kernel by @yukiu00 in linkedin/Liger-Kernel#1074

Add vLLM importance sampling ratio support for GRPO loss by @yukiu00 in linkedin/Liger-Kernel#1088

Relaxing logp relative tolerances for mini-llama4 to fix flaky test. by @kolehma8 in linkedin/Liger-Kernel#1089

Moving unit testing to a merge queue. by @kolehma8 in linkedin/Liger-Kernel#1069

Fixing unit tests. by @kolehma8 in linkedin/Liger-Kernel#1092

Merge queue test. by @kolehma8 in linkedin/Liger-Kernel#1095

Changes to the nvidia tests in merge queue. by @kolehma8 in linkedin/Liger-Kernel#1097

Support transfomers v5 by @Tcc0403 in linkedin/Liger-Kernel#994

Remove latest v4 test to reduce cost by @Mecoli1219 in linkedin/Liger-Kernel#1098

[Model] Pixtral Support by <a href="https://gi


Update typer requirement from <0.21.2 to <0.23.2

Updates the requirements on [typer](https://github.com/fastapi/typer) to permit the latest version.

Release notes

Sourced from typer's releases.

0.23.1

Fixes

🐛 Fix TYPER_USE_RICH parsing to allow disabling Rich completely. PR #1539 by @bckohan.

Docs

📝 Remove documentation pages that reference using Click directly. PR #1538 by @svlandeg.

Internal

⬆ Bump ty from 0.0.15 to 0.0.16. PR #1533 by @dependabot[bot].

Changelog

Sourced from typer's changelog.

0.23.1

Fixes

🐛 Fix TYPER_USE_RICH parsing to allow disabling Rich completely. PR #1539 by @bckohan.

Docs

📝 Remove documentation pages that reference using Click directly. PR #1538 by @svlandeg.

Internal

⬆ Bump ty from 0.0.15 to 0.0.16. PR #1533 by @dependabot[bot].

0.23.0

Breaking Changes

♻ When printing error tracebacks with Rich, default to not showing locals, which are sometimes verbose. PR #1072 by @tiangolo.

Docs

📝 Add more explicit deprecation note in shell packages. PR #1534 by @tiangolo.

Internal

⬆ Bump cryptography from 46.0.4 to 46.0.5. PR #1532 by @dependabot[bot].

🔨 Tweak PDM hook script, remove unnecessary default. PR #1536 by @tiangolo.

♻ Simplify build setup scripts and configs for deprecated wrapper packages. PR #1535 by @tiangolo.

0.22.0

Breaking Changes

💥 Make typer-slim a shallow wrapper around typer, always requiring rich and shellingham. PR #1522 by @svlandeg.

0.21.2

Fixes

🐛 Fix highlighting of optional variadic argument metavars. PR #1508 by @BenjyWiener.

🐛 Fix --help text alignment when using typer.style() in option descriptions. PR #1356 by <a href="https://github.com/


Update wandb requirement from <0.25,>=0.21 to >=0.21,<0.26

Updates the requirements on [wandb](https://github.com/wandb/wandb) to permit the latest version.

Release notes

Sourced from wandb's releases.

v0.25.0

What's Changed

Notable Changes

This version drops support for Python 3.8.

Added

Multi-run workspace experience in W&B LEET TUI (wandb beta leet command). (@dmitryduev in wandb/wandb#11299)

Config editor for W&B LEET TUI (wandb beta leet config command). (@dmitryduev in wandb/wandb#11327)

owner property on wandb.apis.public.Project to access the project owner's user information. (@jacobromero in wandb/wandb#11278)

Changed

Python 3.8 is no longer supported (@tonyyli-wandb in wandb/wandb#11198, wandb/wandb#11290, wandb/wandb#11164)

Fixed

Sweep agents now exit gracefully when the sweep is deleted, instead of running indefinitely with repeated 404 errors (@domphan-wandb in wandb/wandb#11226)

wandb-core crashes no longer produce extremely long, repetitive tracebacks in older Python versions (@timoffex in wandb/wandb#11284)

TensorBoard sync no longer stops after 1 MB of data (@timoffex in wandb/wandb#11334)

Regression introduced in 0.24.0

Changelog

Sourced from wandb's changelog.

[0.25.0] - 2026-02-12

Notable Changes

This version drops support for Python 3.8.

Added

Multi-run workspace experience in W&B LEET TUI (wandb beta leet command). (@dmitryduev in wandb/wandb#11299)

Config editor for W&B LEET TUI (wandb beta leet config command). (@dmitryduev in wandb/wandb#11327)

owner property on wandb.apis.public.Project to access the project owner's user information. (@jacobromero in wandb/wandb#11278)

Changed

Python 3.8 is no longer supported (@tonyyli-wandb in wandb/wandb#11198, wandb/wandb#11290, wandb/wandb#11164)

Fixed


Adding Progress Tracking For Together Batch

# Description

<!--
Thank you for contributing to Oumi! Before sending your PR out for review, please take a quick read through this template.

When your PR is merged, its title will appear in our release notes. Make sure your title gives a clear description of your change!

After you've updated your title, please replace this section with a detailed description of your change. Include as much context as possible so your reviewers can easily understand *what* you're changing and *why*.
The more information you provide, the faster we can review your change!
-->
<!--↓↓↓↓↓↓↓↓↓↓ Describe your change below ↓↓↓↓↓↓↓↓↓↓-->

<!--↑↑↑↑↑↑↑↑↑↑ Describe your change above ↑↑↑↑↑↑↑↑↑↑-->

## Related issues

<!--
Make sure to list any relevant related issues to your change. More often than not this will be the single issue fixed by your PR.
-->
<!--↓↓↓↓↓↓↓↓↓↓ List your related issues below ↓↓↓↓↓↓↓↓↓↓-->

Fixes # (issue)

<!--↑↑↑↑↑↑↑↑↑↑ List your related issues above ↑↑↑↑↑↑↑↑↑↑-->

## Before submitting

- [ ] This PR only changes documentation. (You can ignore the following checks in that case)
- [ ] Did you read the [contributor guideline](https://github.com/oumi-ai/oumi/blob/main/CONTRIBUTING.md) Pull Request guidelines?
- [ ] Did you link the issue(s) related to this PR in the section above?
- [ ] Did you add / update tests where needed?

## Reviewers

At least one review from a member of `oumi-ai/oumi-staff` is required.

<!-- Add `oumi-ai/oumi-staff` as a reviewer when your PR is ready for review.

You are also welcome to add individual members of `oumi-ai/oumi-staff` as reviewers.

If no one has reviewed your PR after several days, feel free to add a comment tagging specific reviewers.

 -->


feat(analyze): config schema, HuggingFace tokenizer, and code cleanup

## Summary

Enhances the analyzer framework with config schema support and HuggingFace tokenizer integration, while removing introspection-based metadata, pipeline tokenizer injection, dead code, and verbose AI-generated comments/docstrings.

## Changes

### Config Schema & Tokenizer Support
- Add abstract `get_config_schema()` classmethod to analyzers for JSON schema generation from configuration parameters
- Add `huggingface_tokenizer()` factory for loading HF tokenizers with chat template support
- Enable `rendered_tokens` metric when using HF tokenizers (counts tokens after applying chat template)
- Add `_check_supports_disallowed_special()` to handle tokenizers that choke on special tokens like `<|endoftext|>`

### Instance-Aware Metrics
- Add `get_available_metric_names()` instance method to analyzers
- Enables per-instance metric filtering (e.g., tiktoken excludes `rendered_tokens`)
- Add `get_instance_metrics()` in `discovery.py` for API/CLI/UI usage

### Introspection Removal
- Remove `_require_result_type()`, `_get_result_type()`, and all `__orig_bases__` / `get_args` / `get_origin` introspection from `BaseAnalyzer`
- `get_result_schema()`, `get_metric_names()`, `get_metric_descriptions()` are now abstract — subclasses implement them explicitly

### Pipeline: Remove Tokenizer Injection
- Remove `_inject_tokenizer()`, `_TOKENIZER_ATTR`, `tokenizer` and `tiktoken_encoding` constructor params, and `tiktoken` dependency from the pipeline
- Analyzers are now fully responsible for their own tokenizer (passed via constructor factory methods)
- This also fixes a bug where `_supports_disallowed_special` was stale after post-init injection

### Pipeline: Analyzer Name Deduplication
- Add `_assigned_names` set to auto-generate unique suffixed names (`LengthAnalyzer_2`, etc.) when multiple unnamed analyzers of the same type are added
- Inline `_get_analyzer_scope()` helper

### Config Refactoring
- Remove dead `AnalyzerType` enum
- Remove unused `get_test_configs()` method
- Refactor `from_dict()` into `_parse_analyzers()`, `_parse_custom_metrics()`, `_parse_tests()`
- Fix `to_dict()` / `from_dict()` asymmetry — `to_dict()` now serializes `eval_name`, `parent_eval_id`, `output_schema`, and `depends_on`
- Fix `_parse_custom_metrics()` mutating its input dict via `.pop()`
- Remove deprecated `tokenizer_config` field and migration logic from core config
- Move `import yaml` to top-level

### Test Engine Improvements
- Threshold test semantics: matching samples are "flagged", test passes when none match
- Better failure reasons: `"{value} satisfies {op} {threshold}"`
- Replace magic numbers with `MAX_SAMPLE_INDICES` and `MAX_FAILURE_REASONS` constants
- Remove unreachable `bool` type handling in `_get_actual_value()` (bool is a subclass of int)
- Inline `_calculate_percentage()` at call sites

### Discovery Cleanup
- Remove dead `get_metric_path()` and `generate_test_template()` functions
- Remove redundant deduplication pass in `print_analyzer_metrics()`
- Move registry imports to top-level
- Type `console` parameter as `Console` instead of `Any`

### Code Quality
- Trim verbose docstrings on private methods and trivial properties throughout
- Remove restating inline comments (e.g., `# Dataset source`, `# Type aliases for consistency`)
- Remove section divider comments
- Move lazy stdlib/required-dep imports to top-level (`json`, `graphlib`, `yaml`, `copy`, `transformers`)
- Add type-safe `cast()` calls in pipeline analyzer dispatch
- Remove duplicate `@register_sample_analyzer` from `core.analyze.length_analyzer`

## Test Plan

- [x] All analyze unit tests pass
- [x] Test fixtures updated with explicit abstract method implementations
- [x] Pipeline tokenizer injection tests removed (feature removed)
- [x] Test engine key convention updated from class names to instance IDs
- [x] New test for multi-instance metric resolution

## Related Issues

Builds on #2192 (testing framework)


Batch Support For Judge

# Description

<!--
Thank you for contributing to Oumi! Before sending your PR out for review, please take a quick read through this template.

When your PR is merged, its title will appear in our release notes. Make sure your title gives a clear description of your change!

After you've updated your title, please replace this section with a detailed description of your change. Include as much context as possible so your reviewers can easily understand *what* you're changing and *why*.
The more information you provide, the faster we can review your change!
-->
<!--↓↓↓↓↓↓↓↓↓↓ Describe your change below ↓↓↓↓↓↓↓↓↓↓-->
This PR provides new methods in the Judge to support batch inference.
<!--↑↑↑↑↑↑↑↑↑↑ Describe your change above ↑↑↑↑↑↑↑↑↑↑-->

## Related issues

<!--
Make sure to list any relevant related issues to your change. More often than not this will be the single issue fixed by your PR.
-->
<!--↓↓↓↓↓↓↓↓↓↓ List your related issues below ↓↓↓↓↓↓↓↓↓↓-->

Fixes # (issue)

<!--↑↑↑↑↑↑↑↑↑↑ List your related issues above ↑↑↑↑↑↑↑↑↑↑-->

## Before submitting

- [ ] This PR only changes documentation. (You can ignore the following checks in that case)
- [ ] Did you read the [contributor guideline](https://github.com/oumi-ai/oumi/blob/main/CONTRIBUTING.md) Pull Request guidelines?
- [ ] Did you link the issue(s) related to this PR in the section above?
- [ ] Did you add / update tests where needed?

## Reviewers

At least one review from a member of `oumi-ai/oumi-staff` is required.

<!-- Add `oumi-ai/oumi-staff` as a reviewer when your PR is ready for review.

You are also welcome to add individual members of `oumi-ai/oumi-staff` as reviewers.

If no one has reviewed your PR after several days, feel free to add a comment tagging specific reviewers.

 -->


fix: format lambda expressions in test_params validation config

# Description

<!--
Thank you for contributing to Oumi! Before sending your PR out for review, please take a quick read through this template.

When your PR is merged, its title will appear in our release notes. Make sure your title gives a clear description of your change!

After you've updated your title, please replace this section with a detailed description of your change. Include as much context as possible so your reviewers can easily understand *what* you're changing and *why*.
The more information you provide, the faster we can review your change!
-->
<!--↓↓↓↓↓↓↓↓↓↓ Describe your change below ↓↓↓↓↓↓↓↓↓↓-->

Run `pre-commit run --all` to address CI failures in the pre-commit hooks

<!--↑↑↑↑↑↑↑↑↑↑ Describe your change above ↑↑↑↑↑↑↑↑↑↑-->

## Related issues

<!--
Make sure to list any relevant related issues to your change. More often than not this will be the single issue fixed by your PR.
-->
<!--↓↓↓↓↓↓↓↓↓↓ List your related issues below ↓↓↓↓↓↓↓↓↓↓-->

Fixes # (issue)

<!--↑↑↑↑↑↑↑↑↑↑ List your related issues above ↑↑↑↑↑↑↑↑↑↑-->

## Before submitting

- [ ] This PR only changes documentation. (You can ignore the following checks in that case)
- [ ] Did you read the [contributor guideline](https://github.com/oumi-ai/oumi/blob/main/CONTRIBUTING.md) Pull Request guidelines?
- [ ] Did you link the issue(s) related to this PR in the section above?
- [ ] Did you add / update tests where needed?

## Reviewers

At least one review from a member of `oumi-ai/oumi-staff` is required.

<!-- Add `oumi-ai/oumi-staff` as a reviewer when your PR is ready for review.

You are also welcome to add individual members of `oumi-ai/oumi-staff` as reviewers.

If no one has reviewed your PR after several days, feel free to add a comment tagging specific reviewers.

 -->


Add token usage accumulation to AttributeSynthesizer

# Description

<!--
Thank you for contributing to Oumi! Before sending your PR out for review, please take a quick read through this template.

When your PR is merged, its title will appear in our release notes. Make sure your title gives a clear description of your change!

After you've updated your title, please replace this section with a detailed description of your change. Include as much context as possible so your reviewers can easily understand *what* you're changing and *why*.
The more information you provide, the faster we can review your change!
-->
<!--↓↓↓↓↓↓↓↓↓↓ Describe your change below ↓↓↓↓↓↓↓↓↓↓-->

- Add `_total_input_tokens` and `_total_output_tokens` tracking to `AttributeSynthesizer`
- Accumulate token counts from inference response metadata after `synthesize()` and `get_batch_results()` calls
- Expose via `total_input_tokens` and `total_output_tokens` properties

Follows the same pattern as #2199 for token tracking.

<!--↑↑↑↑↑↑↑↑↑↑ Describe your change above ↑↑↑↑↑↑↑↑↑↑-->

## Related issues

<!--
Make sure to list any relevant related issues to your change. More often than not this will be the single issue fixed by your PR.
-->
<!--↓↓↓↓↓↓↓↓↓↓ List your related issues below ↓↓↓↓↓↓↓↓↓↓-->

Towards LOU-528

<!--↑↑↑↑↑↑↑↑↑↑ List your related issues above ↑↑↑↑↑↑↑↑↑↑-->

## Before submitting

- [ ] This PR only changes documentation. (You can ignore the following checks in that case)
- [x] Did you read the [contributor guideline](https://github.com/oumi-ai/oumi/blob/main/CONTRIBUTING.md) Pull Request guidelines?
- [x] Did you link the issue(s) related to this PR in the section above?
- [x] Did you add / update tests where needed?

## Reviewers

At least one review from a member of `oumi-ai/oumi-staff` is required.

<!-- Add `oumi-ai/oumi-staff` as a reviewer when your PR is ready for review.

You are also welcome to add individual members of `oumi-ai/oumi-staff` as reviewers.

If no one has reviewed your PR after several days, feel free to add a comment tagging specific reviewers.

 -->


Add token usage accumulators to BaseJudge

# Description

<!--
Thank you for contributing to Oumi! Before sending your PR out for review, please take a quick read through this template.

When your PR is merged, its title will appear in our release notes. Make sure your title gives a clear description of your change!

After you've updated your title, please replace this section with a detailed description of your change. Include as much context as possible so your reviewers can easily understand *what* you're changing and *why*.
The more information you provide, the faster we can review your change!
-->
<!--↓↓↓↓↓↓↓↓↓↓ Describe your change below ↓↓↓↓↓↓↓↓↓↓-->

- Add `_total_input_tokens` and `_total_output_tokens` accumulators to `BaseJudge`
- Accumulate token counts from `conversation.metadata["usage"]` in `_infer()` after each inference batch
- Expose via `total_input_tokens` and `total_output_tokens` read-only properties

Builds on #2198 which stores usage metadata in conversations. This enables downstream consumers (e.g., the judge workflow in the API repo) to read token counts.

<!--↑↑↑↑↑↑↑↑↑↑ Describe your change above ↑↑↑↑↑↑↑↑↑↑-->

## Related issues

<!--
Make sure to list any relevant related issues to your change. More often than not this will be the single issue fixed by your PR.
-->
<!--↓↓↓↓↓↓↓↓↓↓ List your related issues below ↓↓↓↓↓↓↓↓↓↓-->

Towards LOU-571

<!--↑↑↑↑↑↑↑↑↑↑ List your related issues above ↑↑↑↑↑↑↑↑↑↑-->

## Before submitting

- [ ] This PR only changes documentation. (You can ignore the following checks in that case)
- [x] Did you read the [contributor guideline](https://github.com/oumi-ai/oumi/blob/main/CONTRIBUTING.md) Pull Request guidelines?
- [x] Did you link the issue(s) related to this PR in the section above?
- [x] Did you add / update tests where needed?

## Reviewers

At least one review from a member of `oumi-ai/oumi-staff` is required.

<!-- Add `oumi-ai/oumi-staff` as a reviewer when your PR is ready for review.

You are also welcome to add individual members of `oumi-ai/oumi-staff` as reviewers.

If no one has reviewed your PR after several days, feel free to add a comment tagging specific reviewers.

 -->


Add inference usage metadata for RemoteInferenceEngine

# Description

<!--
Thank you for contributing to Oumi! Before sending your PR out for review, please take a quick read through this template.

When your PR is merged, its title will appear in our release notes. Make sure your title gives a clear description of your change!

After you've updated your title, please replace this section with a detailed description of your change. Include as much context as possible so your reviewers can easily understand *what* you're changing and *why*.
The more information you provide, the faster we can review your change!
-->
<!--↓↓↓↓↓↓↓↓↓↓ Describe your change below ↓↓↓↓↓↓↓↓↓↓-->

Extract the token usage metadata from the API response. Tested with a handful of inference providers.
```
  OpenAI:
    usage    : {'prompt_tokens': 14, 'completion_tokens': 6, 'total_tokens': 20}

  Anthropic:
    usage    : {'prompt_tokens': 14, 'completion_tokens': 8, 'total_tokens': 22}

  Together:
    usage    : {'prompt_tokens': 42, 'completion_tokens': 5, 'total_tokens': 47}

  Fireworks:
    usage    : {'prompt_tokens': 42, 'completion_tokens': 5, 'total_tokens': 47}
```

<!--↑↑↑↑↑↑↑↑↑↑ Describe your change above ↑↑↑↑↑↑↑↑↑↑-->

## Related issues

<!--
Make sure to list any relevant related issues to your change. More often than not this will be the single issue fixed by your PR.
-->
<!--↓↓↓↓↓↓↓↓↓↓ List your related issues below ↓↓↓↓↓↓↓↓↓↓-->

Fixes LOU-517

<!--↑↑↑↑↑↑↑↑↑↑ List your related issues above ↑↑↑↑↑↑↑↑↑↑-->

## Before submitting

- [ ] This PR only changes documentation. (You can ignore the following checks in that case)
- [x] Did you read the [contributor guideline](https://github.com/oumi-ai/oumi/blob/main/CONTRIBUTING.md) Pull Request guidelines?
- [x] Did you link the issue(s) related to this PR in the section above?
- [x] Did you add / update tests where needed?

## Reviewers

At least one review from a member of `oumi-ai/oumi-staff` is required.

<!-- Add `oumi-ai/oumi-staff` as a reviewer when your PR is ready for review.

You are also welcome to add individual members of `oumi-ai/oumi-staff` as reviewers.

If no one has reviewed your PR after several days, feel free to add a comment tagging specific reviewers.

 -->


Add news items for February 2026 updates

Oumi + Lambda announcement blog and demo video


# Description

<!--
Thank you for contributing to Oumi! Before sending your PR out for review, please take a quick read through this template.

When your PR is merged, its title will appear in our release notes. Make sure your title gives a clear description of your change!

After you've updated your title, please replace this section with a detailed description of your change. Include as much context as possible so your reviewers can easily understand *what* you're changing and *why*.
The more information you provide, the faster we can review your change!
-->
<!--↓↓↓↓↓↓↓↓↓↓ Describe your change below ↓↓↓↓↓↓↓↓↓↓-->
- [infer] Add batch api support to anthropic,  fireworks, together engines
- Add e2e test

<!--↑↑↑↑↑↑↑↑↑↑ Describe your change above ↑↑↑↑↑↑↑↑↑↑-->

## Related issues

<!--
Make sure to list any relevant related issues to your change. More often than not this will be the single issue fixed by your PR.
-->
<!--↓↓↓↓↓↓↓↓↓↓ List your related issues below ↓↓↓↓↓↓↓↓↓↓-->

Fixes # (issue)

<!--↑↑↑↑↑↑↑↑↑↑ List your related issues above ↑↑↑↑↑↑↑↑↑↑-->

## Before submitting

- [ ] This PR only changes documentation. (You can ignore the following checks in that case)
- [x] Did you read the [contributor guideline](https://github.com/oumi-ai/oumi/blob/main/CONTRIBUTING.md) Pull Request guidelines?
- [x] Did you link the issue(s) related to this PR in the section above?
- [x] Did you add / update tests where needed?

## Reviewers

At least one review from a member of `oumi-ai/oumi-staff` is required.

<!-- Add `oumi-ai/oumi-staff` as a reviewer when your PR is ready for review.

You are also welcome to add individual members of `oumi-ai/oumi-staff` as reviewers.

If no one has reviewed your PR after several days, feel free to add a comment tagging specific reviewers.

 -->


add testing framework to analyze

# Description
Adding the testing framework and engine

<!--
Thank you for contributing to Oumi! Before sending your PR out for review, please take a quick read through this template.

When your PR is merged, its title will appear in our release notes. Make sure your title gives a clear description of your change!

After you've updated your title, please replace this section with a detailed description of your change. Include as much context as possible so your reviewers can easily understand *what* you're changing and *why*.
The more information you provide, the faster we can review your change!
-->
<!--↓↓↓↓↓↓↓↓↓↓ Describe your change below ↓↓↓↓↓↓↓↓↓↓-->

<!--↑↑↑↑↑↑↑↑↑↑ Describe your change above ↑↑↑↑↑↑↑↑↑↑-->

## Related issues

<!--
Make sure to list any relevant related issues to your change. More often than not this will be the single issue fixed by your PR.
-->
<!--↓↓↓↓↓↓↓↓↓↓ List your related issues below ↓↓↓↓↓↓↓↓↓↓-->

Fixes # (issue)

<!--↑↑↑↑↑↑↑↑↑↑ List your related issues above ↑↑↑↑↑↑↑↑↑↑-->

## Before submitting

- [ ] This PR only changes documentation. (You can ignore the following checks in that case)
- [x] Did you read the [contributor guideline](https://github.com/oumi-ai/oumi/blob/main/CONTRIBUTING.md) Pull Request guidelines?
- [ ] Did you link the issue(s) related to this PR in the section above?
- [x] Did you add / update tests where needed?

## Reviewers

At least one review from a member of `oumi-ai/oumi-staff` is required.

<!-- Add `oumi-ai/oumi-staff` as a reviewer when your PR is ready for review.

You are also welcome to add individual members of `oumi-ai/oumi-staff` as reviewers.

If no one has reviewed your PR after several days, feel free to add a comment tagging specific reviewers.

 -->


add upper bound for skypilot


upgrade skypilot version to latest

# Description

<!--
Thank you for contributing to Oumi! Before sending your PR out for review, please take a quick read through this template.

When your PR is merged, its title will appear in our release notes. Make sure your title gives a clear description of your change!

After you've updated your title, please replace this section with a detailed description of your change. Include as much context as possible so your reviewers can easily understand *what* you're changing and *why*.
The more information you provide, the faster we can review your change!
-->
<!--↓↓↓↓↓↓↓↓↓↓ Describe your change below ↓↓↓↓↓↓↓↓↓↓-->

<!--↑↑↑↑↑↑↑↑↑↑ Describe your change above ↑↑↑↑↑↑↑↑↑↑-->

## Related issues

<!--
Make sure to list any relevant related issues to your change. More often than not this will be the single issue fixed by your PR.
-->
<!--↓↓↓↓↓↓↓↓↓↓ List your related issues below ↓↓↓↓↓↓↓↓↓↓-->

Fixes LOU-534

<!--↑↑↑↑↑↑↑↑↑↑ List your related issues above ↑↑↑↑↑↑↑↑↑↑-->

## Before submitting

- [ ] This PR only changes documentation. (You can ignore the following checks in that case)
- [ ] Did you read the [contributor guideline](https://github.com/oumi-ai/oumi/blob/main/CONTRIBUTING.md) Pull Request guidelines?
- [ ] Did you link the issue(s) related to this PR in the section above?
- [ ] Did you add / update tests where needed?

## Reviewers

At least one review from a member of `oumi-ai/oumi-staff` is required.

<!-- Add `oumi-ai/oumi-staff` as a reviewer when your PR is ready for review.

You are also welcome to add individual members of `oumi-ai/oumi-staff` as reviewers.

If no one has reviewed your PR after several days, feel free to add a comment tagging specific reviewers.

 -->


fix pyright failure by removing warning

# Description
PyRight gets 0 erros but 124 warnings but still fails. By removing the warning, the test passes
0 errors, 124 warnings, 0 informations

<!--
Thank you for contributing to Oumi! Before sending your PR out for review, please take a quick read through this template.

When your PR is merged, its title will appear in our release notes. Make sure your title gives a clear description of your change!

After you've updated your title, please replace this section with a detailed description of your change. Include as much context as possible so your reviewers can easily understand *what* you're changing and *why*.
The more information you provide, the faster we can review your change!
-->
<!--↓↓↓↓↓↓↓↓↓↓ Describe your change below ↓↓↓↓↓↓↓↓↓↓-->

<!--↑↑↑↑↑↑↑↑↑↑ Describe your change above ↑↑↑↑↑↑↑↑↑↑-->

## Related issues

<!--
Make sure to list any relevant related issues to your change. More often than not this will be the single issue fixed by your PR.
-->
<!--↓↓↓↓↓↓↓↓↓↓ List your related issues below ↓↓↓↓↓↓↓↓↓↓-->

Fixes # (issue)

<!--↑↑↑↑↑↑↑↑↑↑ List your related issues above ↑↑↑↑↑↑↑↑↑↑-->

## Before submitting

- [ ] This PR only changes documentation. (You can ignore the following checks in that case)
- [x] Did you read the [contributor guideline](https://github.com/oumi-ai/oumi/blob/main/CONTRIBUTING.md) Pull Request guidelines?
- [ ] Did you link the issue(s) related to this PR in the section above?
- [ ] Did you add / update tests where needed?

## Reviewers

At least one review from a member of `oumi-ai/oumi-staff` is required.

<!-- Add `oumi-ai/oumi-staff` as a reviewer when your PR is ready for review.

You are also welcome to add individual members of `oumi-ai/oumi-staff` as reviewers.

If no one has reviewed your PR after several days, feel free to add a comment tagging specific reviewers.

 -->


Address Llama4Scout LoRA training config

# Description

<!--
Thank you for contributing to Oumi! Before sending your PR out for review, please take a quick read through this template.

When your PR is merged, its title will appear in our release notes. Make sure your title gives a clear description of your change!

After you've updated your title, please replace this section with a detailed description of your change. Include as much context as possible so your reviewers can easily understand *what* you're changing and *why*.
The more information you provide, the faster we can review your change!
-->
<!--↓↓↓↓↓↓↓↓↓↓ Describe your change below ↓↓↓↓↓↓↓↓↓↓-->

1. Disable torch.compile to avoid Dynamo pin_memory issue in transformers library

2. Fix OOM host memory issues in Llama4 Scout LoRA training config

  -- Reduce data loading parallelism (num_workers=0, prefetch_factor=2)
     to lower memory footprint.
  -- Disable FSDP CPU offload to prevent host OOM errors by keeping all data on GPU.

<!--↑↑↑↑↑↑↑↑↑↑ Describe your change above ↑↑↑↑↑↑↑↑↑↑-->

## Related issues

<!--
Make sure to list any relevant related issues to your change. More often than not this will be the single issue fixed by your PR.
-->
<!--↓↓↓↓↓↓↓↓↓↓ List your related issues below ↓↓↓↓↓↓↓↓↓↓-->

Fixes # (issue)

<!--↑↑↑↑↑↑↑↑↑↑ List your related issues above ↑↑↑↑↑↑↑↑↑↑-->

## Before submitting

- [ ] This PR only changes documentation. (You can ignore the following checks in that case)
- [x] Did you read the [contributor guideline](https://github.com/oumi-ai/oumi/blob/main/CONTRIBUTING.md) Pull Request guidelines?
- [ ] Did you link the issue(s) related to this PR in the section above?
- [ ] Did you add / update tests where needed?

## Reviewers

At least one review from a member of `oumi-ai/oumi-staff` is required.

<!-- Add `oumi-ai/oumi-staff` as a reviewer when your PR is ready for review.

You are also welcome to add individual members of `oumi-ai/oumi-staff` as reviewers.

If no one has reviewed your PR after several days, feel free to add a comment tagging specific reviewers.

 -->


feat: add typed analyzer core framework

# Description

Adds a typed analyzer core framework with the following components:

- **Base Analyzer Classes**: Defines base classes for different analyzer scopes:
  - `MessageAnalyzer`: Analyzes individual messages
  - `ConversationAnalyzer`: Analyzes complete conversations
  - `DatasetAnalyzer`: Analyzes entire datasets (cross-sample operations)
  - `PreferenceAnalyzer`: Analyzes preference pairs (for DPO data)

- **Configuration System**: Type-safe configuration classes for analyzers
- **Plugin Discovery**: Auto-discovery mechanism for analyzer plugins
- **Pipeline System**: Orchestrates multiple analyzers
- **Registry**: Central registry for managing analyzer instances
- **Results Framework**: Strongly-typed Pydantic models for analyzer results
- **DataFrame Utilities**: Helper functions for dataframe operations

## Files Added

- `src/oumi/analyze/base.py` (381 lines) - Base analyzer classes
- `src/oumi/analyze/config.py` (414 lines) - Configuration system
- `src/oumi/analyze/discovery.py` (426 lines) - Plugin discovery
- `src/oumi/analyze/pipeline.py` (361 lines) - Pipeline orchestration
- `src/oumi/analyze/registry.py` (83 lines) - Analyzer registry
- `src/oumi/analyze/results/__init__.py` (32 lines) - Results framework
- `src/oumi/analyze/utils/dataframe.py` (209 lines) - DataFrame utilities
- Supporting `__init__.py` files

<!--
Thank you for contributing to Oumi! Before sending your PR out for review, please take a quick read through this template.

When your PR is merged, its title will appear in our release notes. Make sure your title gives a clear description of your change!

After you've updated your title, please replace this section with a detailed description of your change. Include as much context as possible so your reviewers can easily understand *what* you're changing and *why*.
The more information you provide, the faster we can review your change!
-->
<!--↓↓↓↓↓↓↓↓↓↓ Describe your change below ↓↓↓↓↓↓↓↓↓↓-->

<!--↑↑↑↑↑↑↑↑↑↑ Describe your change above ↑↑↑↑↑↑↑↑↑↑-->

## Related issues

<!--
Make sure to list any relevant related issues to your change. More often than not this will be the single issue fixed by your PR.
-->
<!--↓↓↓↓↓↓↓↓↓↓ List your related issues below ↓↓↓↓↓↓↓↓↓↓-->

Fixes # (issue)

<!--↑↑↑↑↑↑↑↑↑↑ List your related issues above ↑↑↑↑↑↑↑↑↑↑-->

## Before submitting

- [ ] This PR only changes documentation. (You can ignore the following checks in that case)
- [x] Did you read the [contributor guideline](https://github.com/oumi-ai/oumi/blob/main/CONTRIBUTING.md) Pull Request guidelines?
- [ ] Did you link the issue(s) related to this PR in the section above?
- [x] Did you add / update tests where needed?

## Reviewers

At least one review from a member of `oumi-ai/oumi-staff` is required.

<!-- Add `oumi-ai/oumi-staff` as a reviewer when your PR is ready for review.

You are also welcome to add individual members of `oumi-ai/oumi-staff` as reviewers.

If no one has reviewed your PR after several days, feel free to add a comment tagging specific reviewers.

 -->


[Evaluations] Fixing Typecheker errors

# Description

<!--
Thank you for contributing to Oumi! Before sending your PR out for review, please take a quick read through this template.

When your PR is merged, its title will appear in our release notes. Make sure your title gives a clear description of your change!

After you've updated your title, please replace this section with a detailed description of your change. Include as much context as possible so your reviewers can easily understand *what* you're changing and *why*.
The more information you provide, the faster we can review your change!
-->
<!--↓↓↓↓↓↓↓↓↓↓ Describe your change below ↓↓↓↓↓↓↓↓↓↓-->
*********** Main fix: Typechecker errors (not actual bugs) ***********

1) /home/runner/work/oumi/oumi/src/oumi/core/evaluation/backends/lm_harness.py:325:9 - error: Argument of type "dict[str | ConfigurableGroup, Task | dict[Unknown, Unknown]]" cannot be assigned to parameter "model_args" of type "str | dict[str, str | int | float] | None" in function "simple_evaluate"
  - What was the problem: Type checker confused evaluate() with simple_evaluate() which have different signatures  => Added # type: ignore[arg-type]

2) /home/runner/work/oumi/oumi/src/oumi/core/evaluation/backends/lm_harness.py:377:49 - error: Cannot access attribute "get_model_info" for class "LM" Attribute "get_model_info" is unknown (reportAttributeAccessIssue)
  - What was the problem: Type checker complained about get_model_info() method that exists on some LM classes but not in base type stubs => Added # type: ignore[attr-defined] (note that: code already safely handles this corner case with hasattr())

*********** Testing ***********

I wasn't able to kick off E2E tests, but a toy use case works, meaning we call the API the right way:

```
from oumi import evaluate
from oumi.core.configs import EvaluationConfig

config_str = """
model:
  model_name: "Qwen/Qwen2.5-0.5B-Instruct"
  trust_remote_code: True

tasks:
  - evaluation_backend: lm_harness
    task_name: mmlu_abstract_algebra
    num_samples: 30

generation:
  batch_size: 16
  max_new_tokens: 512
  temperature: 0.0

inference_engine: NATIVE
"""

eval_config = EvaluationConfig.from_str(config_str)
result = evaluate(config=eval_config)
```

Result:
```
[{'results': {'mmlu_abstract_algebra': {'alias': 'abstract_algebra', 'acc,none': 0.3, 'acc_stderr,none': 0.0850962943396763}}}]
```

<!--↑↑↑↑↑↑↑↑↑↑ Describe your change above ↑↑↑↑↑↑↑↑↑↑-->

## Related issues

<!--
Make sure to list any relevant related issues to your change. More often than not this will be the single issue fixed by your PR.
-->
<!--↓↓↓↓↓↓↓↓↓↓ List your related issues below ↓↓↓↓↓↓↓↓↓↓-->

Fixes # (issue)

<!--↑↑↑↑↑↑↑↑↑↑ List your related issues above ↑↑↑↑↑↑↑↑↑↑-->

## Before submitting

- [ ] This PR only changes documentation. (You can ignore the following checks in that case)
- [x] Did you read the [contributor guideline](https://github.com/oumi-ai/oumi/blob/main/CONTRIBUTING.md) Pull Request guidelines?
- [ ] Did you link the issue(s) related to this PR in the section above?
- [x] Did you add / update tests where needed?

## Reviewers

At least one review from a member of `oumi-ai/oumi-staff` is required.

<!-- Add `oumi-ai/oumi-staff` as a reviewer when your PR is ready for review.

You are also welcome to add individual members of `oumi-ai/oumi-staff` as reviewers.

If no one has reviewed your PR after several days, feel free to add a comment tagging specific reviewers.

 -->


Return INIT skypilot clusters in get clusters by class

# Description

<!--
Thank you for contributing to Oumi! Before sending your PR out for review, please take a quick read through this template.

When your PR is merged, its title will appear in our release notes. Make sure your title gives a clear description of your change!

After you've updated your title, please replace this section with a detailed description of your change. Include as much context as possible so your reviewers can easily understand *what* you're changing and *why*.
The more information you provide, the faster we can review your change!
-->
<!--↓↓↓↓↓↓↓↓↓↓ Describe your change below ↓↓↓↓↓↓↓↓↓↓-->
Check for and return both INIT and UP skypilot clusters in the skycloud get clusters by class method.
<!--↑↑↑↑↑↑↑↑↑↑ Describe your change above ↑↑↑↑↑↑↑↑↑↑-->

## Related issues

<!--
Make sure to list any relevant related issues to your change. More often than not this will be the single issue fixed by your PR.
-->
<!--↓↓↓↓↓↓↓↓↓↓ List your related issues below ↓↓↓↓↓↓↓↓↓↓-->

Fixes # (issue)

<!--↑↑↑↑↑↑↑↑↑↑ List your related issues above ↑↑↑↑↑↑↑↑↑↑-->

## Before submitting

- [ ] This PR only changes documentation. (You can ignore the following checks in that case)
- [x] Did you read the [contributor guideline](https://github.com/oumi-ai/oumi/blob/main/CONTRIBUTING.md) Pull Request guidelines?
- [x] Did you link the issue(s) related to this PR in the section above?
- [x] Did you add / update tests where needed?

## Reviewers

At least one review from a member of `oumi-ai/oumi-staff` is required.

<!-- Add `oumi-ai/oumi-staff` as a reviewer when your PR is ready for review.

You are also welcome to add individual members of `oumi-ai/oumi-staff` as reviewers.

If no one has reviewed your PR after several days, feel free to add a comment tagging specific reviewers.

 -->


Update torch requirement from <2.10.0,>=2.6 to >=2.6,<2.11.0

Updates the requirements on [torch](https://github.com/pytorch/pytorch) to permit the latest version.

Release notes

Sourced from torch's releases.

PyTorch 2.10.0 Release Notes

Highlights

Backwards Incompatible Changes

Deprecations

New Features

Improvements

Bug fixes

Performance

Documentation

Developers

Security

Highlights

For more details about these highlighted features, you can look at the release blogpost. Below are the full release notes for this release.

Backwards Incompatible Changes

Dataloader Frontend

Removed unused data_source argument from Sampler (#163134). This is a no-op, unless you have a custom sampler that uses this argument. Please update your custom sampler accordingly.

Removed deprecated imports for torch.utils.data.datapipes.iter.grouping (#163438). from torch.utils.data.datapipes.iter.grouping import SHARDING_PRIORITIES, ShardingFilterIterDataPipe is no longer supported. Please import from torch.utils.data.datapipes.iter.sharding instead.

torch.nn

Remove Nested Jagged Tensor support from nn.attention.flex_attention (#161734)

... (truncated)

Changelog

Sourced from torch's changelog.

Releasing PyTorch

Release Compatibility Matrix

PyTorch CUDA Support Matrix

Release Cadence

General Overview

Frequently Asked Questions

Cutting a release branch preparations

Cutting release branches

pytorch/pytorch

PyTorch ecosystem libraries

Making rele


Update skypilot requirement from <0.11,>=0.10.2 to >=0.10.2,<0.12

[//]: # (dependabot-start)
⚠  **Dependabot is rebasing this PR** ⚠

Rebasing might not happen immediately, so don't worry if this takes some time.

Note: if you make any changes to this PR yourself, they will take precedence over the rebase.

---

[//]: # (dependabot-end)

Updates the requirements on [skypilot](https://github.com/skypilot-org/skypilot) to permit the latest version.

Release notes

Sourced from skypilot's releases.

SkyPilot v0.11.1

This patch release is a minor bump from v0.11.0 to to get you the latest fixes:

#8285: Fix an issue where the API server request database is incorrectly locked causing an irresponsive API server with an error:

sqlite3.OperationalError: database is locked

See the full v0.11 release notes for everything new in SkyPilot v0.11!

Commits

a7380a5 Release 0.11.1 (#8310)

4584c34 Cherry-pick: more logs about request operations #8270 #8271 (#8309)

6c979ce Fixed stall txn block write operation (#8285)

b2f3519 Release 0.11.0 (#8255)

59ff48f Release 0.11.0rc2 (#8236)

078dad7 [core] restore cluster_name_on_cloud from cluster yaml (#8233)

0207108 Fixed incorrect user info in handlers (#8199 #8209) (#8234)

4546cbc [Core] Put Daemonize Call Back to Make Sky Cancel Reliable (#8203) (#8208)

2f0b272 Fix ephemeral volume creation (#8179) (#8194)

<a href="https://github.com/skypilot-org


Update torchvision requirement from <0.25,>=0.21 to >=0.21,<0.26

[//]: # (dependabot-start)
⚠  **Dependabot is rebasing this PR** ⚠

Rebasing might not happen immediately, so don't worry if this takes some time.

Note: if you make any changes to this PR yourself, they will take precedence over the rebase.

---

[//]: # (dependabot-end)

Updates the requirements on [torchvision](https://github.com/pytorch/vision) to permit the latest version.

Release notes

Sourced from torchvision's releases.

TorchVision 0.25 Release

TorchVision 0.25 is out! It is compatible with torch 2.10. It's a small release that comes with the following improvements:

Enhancement

[transforms] KeyPoints aren't clamped by default anymore after a transform. This is a bug-fix that comes with a change of behavior. We also added the SanitizeKeyPoints transform to remove keypoints outside of the image area (#9236, #9235)
[utils] draw_bounding_boxes now supports a label_background_colors parameter (#9204)
[io] Fixed an issue in the GIF decoder (decode_gif, decode_image) which affected some (not all) animated GIFs. (#9241)
[misc] Various code-quality and docs improvements (#9218, #9270, #9250, #9247)

Contributors

🎉 We're grateful for our community, which helps us improve Torchvision by submitting issues and PRs, and providing feedback and suggestions. The following persons have contributed patches for this release:

Andrei Moraru, Andrey Talman, Antoine Simoulin , Arun Prakash A, Björn Barz, Huy Do, Nicolas Hug, Sean Gilligan, Wes Castro, Zhitao Yu

Commits

8ac84ee [Cherry-pick for release/0.25] Fix the dataset test failures (#9327) (#9329)

82df5f5 [Release 0.25] Update test-infra refs (#9312)

8886375 [Release 0.25] Remove CVCUDA stuff - it'll be released in 0.26 (#9313)

5e40fe8 [Release 0.25] Remove prototype stuff (#9310)

85b9027 [Release 0.25] update version number (#9311)

96e7797 Remove r2 upload for wheels  (#9303)

6b56de1</co


# Description

<!--
Thank you for contributing to Oumi! Before sending your PR out for review, please take a quick read through this template.

When your PR is merged, its title will appear in our release notes. Make sure your title gives a clear description of your change!

After you've updated your title, please replace this section with a detailed description of your change. Include as much context as possible so your reviewers can easily understand *what* you're changing and *why*.
The more information you provide, the faster we can review your change!
-->
<!--↓↓↓↓↓↓↓↓↓↓ Describe your change below ↓↓↓↓↓↓↓↓↓↓-->
- [infer] Add docs for engines support infer_batch, + raise explicit error if not supported

<!--↑↑↑↑↑↑↑↑↑↑ Describe your change above ↑↑↑↑↑↑↑↑↑↑-->

## Related issues

<!--
Make sure to list any relevant related issues to your change. More often than not this will be the single issue fixed by your PR.
-->
<!--↓↓↓↓↓↓↓↓↓↓ List your related issues below ↓↓↓↓↓↓↓↓↓↓-->

Fixes # (issue)

<!--↑↑↑↑↑↑↑↑↑↑ List your related issues above ↑↑↑↑↑↑↑↑↑↑-->

## Before submitting

- [x] This PR only changes documentation. (You can ignore the following checks in that case)
- [ ] Did you read the [contributor guideline](https://github.com/oumi-ai/oumi/blob/main/CONTRIBUTING.md) Pull Request guidelines?
- [ ] Did you link the issue(s) related to this PR in the section above?
- [ ] Did you add / update tests where needed?

## Reviewers

At least one review from a member of `oumi-ai/oumi-staff` is required.

<!-- Add `oumi-ai/oumi-staff` as a reviewer when your PR is ready for review.

You are also welcome to add individual members of `oumi-ai/oumi-staff` as reviewers.

If no one has reviewed your PR after several days, feel free to add a comment tagging specific reviewers.

 -->


[docs] update installation instructions

# Description

<!--
Thank you for contributing to Oumi! Before sending your PR out for review, please take a quick read through this template.

When your PR is merged, its title will appear in our release notes. Make sure your title gives a clear description of your change!

After you've updated your title, please replace this section with a detailed description of your change. Include as much context as possible so your reviewers can easily understand *what* you're changing and *why*.
The more information you provide, the faster we can review your change!
-->
<!--↓↓↓↓↓↓↓↓↓↓ Describe your change below ↓↓↓↓↓↓↓↓↓↓-->

<!--↑↑↑↑↑↑↑↑↑↑ Describe your change above ↑↑↑↑↑↑↑↑↑↑-->

## Related issues

<!--
Make sure to list any relevant related issues to your change. More often than not this will be the single issue fixed by your PR.
-->
<!--↓↓↓↓↓↓↓↓↓↓ List your related issues below ↓↓↓↓↓↓↓↓↓↓-->

Fixes # (issue)

<!--↑↑↑↑↑↑↑↑↑↑ List your related issues above ↑↑↑↑↑↑↑↑↑↑-->

## Before submitting

- [x] This PR only changes documentation. (You can ignore the following checks in that case)
- [ ] Did you read the [contributor guideline](https://github.com/oumi-ai/oumi/blob/main/CONTRIBUTING.md) Pull Request guidelines?
- [ ] Did you link the issue(s) related to this PR in the section above?
- [ ] Did you add / update tests where needed?

## Reviewers

At least one review from a member of `oumi-ai/oumi-staff` is required.

<!-- Add `oumi-ai/oumi-staff` as a reviewer when your PR is ready for review.

You are also welcome to add individual members of `oumi-ai/oumi-staff` as reviewers.

If no one has reviewed your PR after several days, feel free to add a comment tagging specific reviewers.

 -->


[docs] finish docs clean-up & refresh

# Description

<!--
Thank you for contributing to Oumi! Before sending your PR out for review, please take a quick read through this template.

When your PR is merged, its title will appear in our release notes. Make sure your title gives a clear description of your change!

After you've updated your title, please replace this section with a detailed description of your change. Include as much context as possible so your reviewers can easily understand *what* you're changing and *why*.
The more information you provide, the faster we can review your change!
-->
<!--↓↓↓↓↓↓↓↓↓↓ Describe your change below ↓↓↓↓↓↓↓↓↓↓-->
- [docs] finish docs clean-up & refresh

<!--↑↑↑↑↑↑↑↑↑↑ Describe your change above ↑↑↑↑↑↑↑↑↑↑-->

## Related issues

<!--
Make sure to list any relevant related issues to your change. More often than not this will be the single issue fixed by your PR.
-->
<!--↓↓↓↓↓↓↓↓↓↓ List your related issues below ↓↓↓↓↓↓↓↓↓↓-->

Fixes # (issue)

<!--↑↑↑↑↑↑↑↑↑↑ List your related issues above ↑↑↑↑↑↑↑↑↑↑-->

## Before submitting

- [x] This PR only changes documentation. (You can ignore the following checks in that case)
- [ ] Did you read the [contributor guideline](https://github.com/oumi-ai/oumi/blob/main/CONTRIBUTING.md) Pull Request guidelines?
- [ ] Did you link the issue(s) related to this PR in the section above?
- [ ] Did you add / update tests where needed?

## Reviewers

At least one review from a member of `oumi-ai/oumi-staff` is required.

<!-- Add `oumi-ai/oumi-staff` as a reviewer when your PR is ready for review.

You are also welcome to add individual members of `oumi-ai/oumi-staff` as reviewers.

If no one has reviewed your PR after several days, feel free to add a comment tagging specific reviewers.

 -->


[bug] revert trl version update & make sure tests run on pyproject.toml changes

# Description

<!--
Thank you for contributing to Oumi! Before sending your PR out for review, please take a quick read through this template.

When your PR is merged, its title will appear in our release notes. Make sure your title gives a clear description of your change!

After you've updated your title, please replace this section with a detailed description of your change. Include as much context as possible so your reviewers can easily understand *what* you're changing and *why*.
The more information you provide, the faster we can review your change!
-->
<!--↓↓↓↓↓↓↓↓↓↓ Describe your change below ↓↓↓↓↓↓↓↓↓↓-->
- Revert trl 0.27 upgrade as it contains several breaking changes
- Update gpu tests to run on any version change to prevent this in the future

<!--↑↑↑↑↑↑↑↑↑↑ Describe your change above ↑↑↑↑↑↑↑↑↑↑-->

## Related issues

<!--
Make sure to list any relevant related issues to your change. More often than not this will be the single issue fixed by your PR.
-->
<!--↓↓↓↓↓↓↓↓↓↓ List your related issues below ↓↓↓↓↓↓↓↓↓↓-->

Fixes # (issue)

<!--↑↑↑↑↑↑↑↑↑↑ List your related issues above ↑↑↑↑↑↑↑↑↑↑-->

## Before submitting

- [ ] This PR only changes documentation. (You can ignore the following checks in that case)
- [x] Did you read the [contributor guideline](https://github.com/oumi-ai/oumi/blob/main/CONTRIBUTING.md) Pull Request guidelines?
- [x] Did you link the issue(s) related to this PR in the section above?
- [x] Did you add / update tests where needed?

## Reviewers

At least one review from a member of `oumi-ai/oumi-staff` is required.

<!-- Add `oumi-ai/oumi-staff` as a reviewer when your PR is ready for review.

You are also welcome to add individual members of `oumi-ai/oumi-staff` as reviewers.

If no one has reviewed your PR after several days, feel free to add a comment tagging specific reviewers.

 -->


Update trl requirement from <0.27,>=0.24 to >=0.24,<0.28

Updates the requirements on [trl](https://github.com/huggingface/trl) to permit the latest version.

Release notes

Sourced from trl's releases.

v0.27.0

Features

Add vllm_group_port argument to GRPO, RLOO and OnlineDPO configuration by @pointerhacker in huggingface/trl#4545

Preserve truncated tokens in BFD packing by @qgallouedec in huggingface/trl#4632

Support async reward functions and parallelize call to reward functions. by @pramodith in huggingface/trl#4567

RLOO supports async rewards. by @pramodith in huggingface/trl#4718

Support vLLM 0.12.0 by @jiqing-feng in huggingface/trl#4117

feat: DeepSeek V3.2 Off-policy sequence masking by @casinca in huggingface/trl#4689

🎭 Up to 50% less VRAM during forward with forward_masked_logits function by @qgallouedec in huggingface/trl#4729

[GRPO] Add a config to limit the number of tool calling iterations by @pramodith in huggingface/trl#4761

Switch gradient checkpointing default to use_reentrant=False (PyTorch recommended) by @qgallouedec in huggingface/trl#4811

Add support for GDPO: Group reward-Decoupled Normalization Policy Optimization for Multi-reward RL Optimization by @nbasyl in huggingface/trl#4785

Experimental

Move AutoModelForCausalLMWithValueHead and AutoModelForSeq2SeqLMWithValueHead to experimental by @qgallouedec in huggingface/trl#4654

Move DPODataCollatorWithPadding to experimental.utils  by @qgallouedec in huggingface/trl#4667

Move DataCollatorForChatML to experimental.utils by @qgallouedec in huggingface/trl#4668

Move add_bos_token_if_needed and add_eos_token_if_needed to experimental.utils by @qgallouedec in huggingface/trl#4674

Move truncate_right and SIMPLE_CHAT_TEMPLATE to experimental.utils by @qgallouedec in <a href="https://r


Update wandb requirement from <0.24,>=0.21 to >=0.21,<0.25

Updates the requirements on [wandb](https://github.com/wandb/wandb) to permit the latest version.

Release notes

Sourced from wandb's releases.

v0.24.0

What's Changed

Notable Changes

This version removes the legacy, deprecated wandb.beta.workflows module, including its log_model()/use_model()/link_model() functions. This is formally a breaking change.

Added

wandb agent and wandb.agent() now accept a forward_signals flag (CLI: --forward-signals/-f) to relay SIGINT/SIGTERM and other catchable signals from the agent to its sweep child runs, enabling cleaner shutdowns when you interrupt an agent process (@kylegoyette, @domphan-wandb in wandb/wandb#9651)

wandb beta sync now supports a --live option for syncing a run while it's being logged (@timoffex in wandb/wandb#11079)

Removed

Removed the deprecated wandb.beta.workflows module, including its log_model(), use_model(), and link_model() functions, and whose modern successors are the Run.log_artifact, Run.use_artifact, and Run.link_artifact methods, respectively (@tonyyli-wandb in [TODO: PR link])

Fixed

Fixed Run.__exit__ type annotations to accept None values, which are passed when no exception is raised (@moldhouse in wandb/wandb#11100)

Fixed Invalid Client ID digest error when creating artifacts after calling random.seed(). Client IDs could collide when random state was seeded deterministically. (@pingleiwandb in wandb/wandb#11039)

Fixed CLI error when listing empty artifacts (@ruhiparvatam in wandb/wandb#11157)

Fixed regression for calling api.run() on a Sweeps run (@willtryagain in wandb/wandb#11088 and @kelu-wandb in wandb/wandb#11097)

Fixed the "View run at" message printed at the end of a run which sometimes did not include a URL (@timoffex in wandb/wandb#11113)

Runs queried from wandb.Api() now display a string representation in VSCode notebooks instead of a broken HTML window (@jacobromero in wandb/wandb#11040)

Changelog

Sourced from wandb's changelog.

[0.24.0] - 2026-01-13

Notable Changes

This version removes the legacy, depr


[tiny] explicitly set wandb as 3rd party to avoid isort issues

# Description

<!--
Thank you for contributing to Oumi! Before sending your PR out for review, please take a quick read through this template.

When your PR is merged, its title will appear in our release notes. Make sure your title gives a clear description of your change!

After you've updated your title, please replace this section with a detailed description of your change. Include as much context as possible so your reviewers can easily understand *what* you're changing and *why*.
The more information you provide, the faster we can review your change!
-->
<!--↓↓↓↓↓↓↓↓↓↓ Describe your change below ↓↓↓↓↓↓↓↓↓↓-->
- explicitly set wandb as 3rd party to avoid isort issues

<!--↑↑↑↑↑↑↑↑↑↑ Describe your change above ↑↑↑↑↑↑↑↑↑↑-->

## Related issues

<!--
Make sure to list any relevant related issues to your change. More often than not this will be the single issue fixed by your PR.
-->
<!--↓↓↓↓↓↓↓↓↓↓ List your related issues below ↓↓↓↓↓↓↓↓↓↓-->

Fixes # (issue)

<!--↑↑↑↑↑↑↑↑↑↑ List your related issues above ↑↑↑↑↑↑↑↑↑↑-->

## Before submitting

- [ ] This PR only changes documentation. (You can ignore the following checks in that case)
- [x] Did you read the [contributor guideline](https://github.com/oumi-ai/oumi/blob/main/CONTRIBUTING.md) Pull Request guidelines?
- [x] Did you link the issue(s) related to this PR in the section above?
- [x] Did you add / update tests where needed?

## Reviewers

At least one review from a member of `oumi-ai/oumi-staff` is required.

<!-- Add `oumi-ai/oumi-staff` as a reviewer when your PR is ready for review.

You are also welcome to add individual members of `oumi-ai/oumi-staff` as reviewers.

If no one has reviewed your PR after several days, feel free to add a comment tagging specific reviewers.

 -->


[tiny] tweaks to main cli

# Description

<!--
Thank you for contributing to Oumi! Before sending your PR out for review, please take a quick read through this template.

When your PR is merged, its title will appear in our release notes. Make sure your title gives a clear description of your change!

After you've updated your title, please replace this section with a detailed description of your change. Include as much context as possible so your reviewers can easily understand *what* you're changing and *why*.
The more information you provide, the faster we can review your change!
-->
<!--↓↓↓↓↓↓↓↓↓↓ Describe your change below ↓↓↓↓↓↓↓↓↓↓-->
- [tiny] tweaks to main cli
- enable completions install, disable telemetry for simple -h queries

<!--↑↑↑↑↑↑↑↑↑↑ Describe your change above ↑↑↑↑↑↑↑↑↑↑-->

## Related issues

<!--
Make sure to list any relevant related issues to your change. More often than not this will be the single issue fixed by your PR.
-->
<!--↓↓↓↓↓↓↓↓↓↓ List your related issues below ↓↓↓↓↓↓↓↓↓↓-->

Fixes # (issue)

<!--↑↑↑↑↑↑↑↑↑↑ List your related issues above ↑↑↑↑↑↑↑↑↑↑-->

## Before submitting

- [ ] This PR only changes documentation. (You can ignore the following checks in that case)
- [x] Did you read the [contributor guideline](https://github.com/oumi-ai/oumi/blob/main/CONTRIBUTING.md) Pull Request guidelines?
- [x] Did you link the issue(s) related to this PR in the section above?
- [x] Did you add / update tests where needed?

## Reviewers

At least one review from a member of `oumi-ai/oumi-staff` is required.

<!-- Add `oumi-ai/oumi-staff` as a reviewer when your PR is ready for review.

You are also welcome to add individual members of `oumi-ai/oumi-staff` as reviewers.

If no one has reviewed your PR after several days, feel free to add a comment tagging specific reviewers.

 -->


Fix generic print output in the Oumi Tour notebook

# Description

This change prints the contents of the log directory instead of the iterator object.

Before:

After:

## Related issues

N/A

## Before submitting

- [ ] This PR only changes documentation. (You can ignore the following checks in that case)
- [x] Did you read the [contributor guideline](https://github.com/oumi-ai/oumi/blob/main/CONTRIBUTING.md) Pull Request guidelines?
- [x] Did you link the issue(s) related to this PR in the section above?
- [x] Did you add / update tests where needed?

## Reviewers

At least one review from a member of `oumi-ai/oumi-staff` is required.


Update gemma3-4b-it SFT training config after offline tuning

# Description

Update the gemma3-4b-it training config with improved defaults for full-rank SFT training.

Through offline experiments, we found that this training config is effective at improving target task performance without catastrophic regression on general capabilities for both an open-ended data analysis task (tat-qa, train n=13k) and a ternary classification task (pubmedqa, train n=800). Training with a lower LR (e.g. 1e-5) and additional steps produces similar performance on these tasks. Experiment workflows documented in branch [`lefft/ent-train-expts`](https://github.com/oumi-ai/oumi/tree/lefft/ent-train-expts).

Further iterations of config optimization are likely to produce benefits, depending on the relevant downstream task(s).

## Related issues

Related to OPE-542

## Before submitting

- [x] Did you read the [contributor guideline](https://github.com/oumi-ai/oumi/blob/main/CONTRIBUTING.md) Pull Request guidelines?
- [x] Did you link the issue(s) related to this PR in the section above?
- [x] Did you add / update tests where needed? [N/A]


[ops] Add install.sh script

# Description

<!--
Thank you for contributing to Oumi! Before sending your PR out for review, please take a quick read through this template.

When your PR is merged, its title will appear in our release notes. Make sure your title gives a clear description of your change!

After you've updated your title, please replace this section with a detailed description of your change. Include as much context as possible so your reviewers can easily understand *what* you're changing and *why*.
The more information you provide, the faster we can review your change!
-->
<!--↓↓↓↓↓↓↓↓↓↓ Describe your change below ↓↓↓↓↓↓↓↓↓↓-->
- [ops] Add install.sh script

<!--↑↑↑↑↑↑↑↑↑↑ Describe your change above ↑↑↑↑↑↑↑↑↑↑-->

## Related issues

<!--
Make sure to list any relevant related issues to your change. More often than not this will be the single issue fixed by your PR.
-->
<!--↓↓↓↓↓↓↓↓↓↓ List your related issues below ↓↓↓↓↓↓↓↓↓↓-->

Fixes # (issue)

<!--↑↑↑↑↑↑↑↑↑↑ List your related issues above ↑↑↑↑↑↑↑↑↑↑-->

## Before submitting

- [ ] This PR only changes documentation. (You can ignore the following checks in that case)
- [ ] Did you read the [contributor guideline](https://github.com/oumi-ai/oumi/blob/main/CONTRIBUTING.md) Pull Request guidelines?
- [ ] Did you link the issue(s) related to this PR in the section above?
- [ ] Did you add / update tests where needed?

## Reviewers

At least one review from a member of `oumi-ai/oumi-staff` is required.

<!-- Add `oumi-ai/oumi-staff` as a reviewer when your PR is ready for review.

You are also welcome to add individual members of `oumi-ai/oumi-staff` as reviewers.

If no one has reviewed your PR after several days, feel free to add a comment tagging specific reviewers.

 -->


# Description

<!--
Thank you for contributing to Oumi! Before sending your PR out for review, please take a quick read through this template.

When your PR is merged, its title will appear in our release notes. Make sure your title gives a clear description of your change!

After you've updated your title, please replace this section with a detailed description of your change. Include as much context as possible so your reviewers can easily understand *what* you're changing and *why*.
The more information you provide, the faster we can review your change!
-->
<!--↓↓↓↓↓↓↓↓↓↓ Describe your change below ↓↓↓↓↓↓↓↓↓↓-->
- [docs] cleanup css style for python reference page, remove reading progress indicator

<!--↑↑↑↑↑↑↑↑↑↑ Describe your change above ↑↑↑↑↑↑↑↑↑↑-->

## Related issues

<!--
Make sure to list any relevant related issues to your change. More often than not this will be the single issue fixed by your PR.
-->
<!--↓↓↓↓↓↓↓↓↓↓ List your related issues below ↓↓↓↓↓↓↓↓↓↓-->

Fixes # (issue)

<!--↑↑↑↑↑↑↑↑↑↑ List your related issues above ↑↑↑↑↑↑↑↑↑↑-->

## Before submitting

- [ ] This PR only changes documentation. (You can ignore the following checks in that case)
- [ ] Did you read the [contributor guideline](https://github.com/oumi-ai/oumi/blob/main/CONTRIBUTING.md) Pull Request guidelines?
- [ ] Did you link the issue(s) related to this PR in the section above?
- [ ] Did you add / update tests where needed?

## Reviewers

At least one review from a member of `oumi-ai/oumi-staff` is required.

<!-- Add `oumi-ai/oumi-staff` as a reviewer when your PR is ready for review.

You are also welcome to add individual members of `oumi-ai/oumi-staff` as reviewers.

If no one has reviewed your PR after several days, feel free to add a comment tagging specific reviewers.

 -->


Update typer requirement from <0.21.1 to <0.21.2

Updates the requirements on [typer](https://github.com/fastapi/typer) to permit the latest version.

Release notes

Sourced from typer's releases.

0.21.1

Fixes

🐛 Fix escaping in help text when rich is installed but not used. PR #1089 by @svlandeg.

Internal

⬆  Migrate to uv. PR #1472 by @DoctorJohn.

⬆ Bump mypy from 1.18.2 to 1.19.1. PR #1469 by @dependabot[bot].

⬆ Bump actions/checkout from 5 to 6. PR #1456 by @dependabot[bot].

⬆ Bump actions/download-artifact from 6 to 7. PR #1444 by @dependabot[bot].

⬆ Bump ruff from 0.14.8 to 0.14.10. PR #1449 by @dependabot[bot].

⬆ Bump mkdocs-material from 9.7.0 to 9.7.1. PR #1446 by @dependabot[bot].

⬆ Bump actions/upload-artifact from 5 to 6. PR #1443 by @dependabot[bot].

⬆ Bump actions/cache from 4 to 5. PR #1441 by @dependabot[bot].

👷 Update secrets check. PR #1471 by @YuriiMotov.

✅ Add missing tests for code examples. PR #1465 by @YuriiMotov.

🔧 Update pre-commit to use local Ruff instead of hook, unpin prek. PR #1466 by @YuriiMotov.

⬆ Bump mypy from 1.14.1 to 1.18.2. PR #1382 by @dependabot[bot].

Changelog

Sourced from typer's changelog.

0.21.1

Fixes

🐛 Fix escaping in help text when rich is installed but not used. PR #1089 by @svlandeg.

Internal

⬆  Migrate to uv. PR #1472 by @DoctorJohn.

⬆ Bump mypy from 1.18.2 to 1.19.1. PR #1469 by @dependabot[bot].

⬆ Bump actions/checkout from 5 to 6. PR


[docker] Add tmux to docker image

# Description

<!--
Thank you for contributing to Oumi! Before sending your PR out for review, please take a quick read through this template.

When your PR is merged, its title will appear in our release notes. Make sure your title gives a clear description of your change!

After you've updated your title, please replace this section with a detailed description of your change. Include as much context as possible so your reviewers can easily understand *what* you're changing and *why*.
The more information you provide, the faster we can review your change!
-->
<!--↓↓↓↓↓↓↓↓↓↓ Describe your change below ↓↓↓↓↓↓↓↓↓↓-->
[docker] Add tmux to docker image
<!--↑↑↑↑↑↑↑↑↑↑ Describe your change above ↑↑↑↑↑↑↑↑↑↑-->

## Related issues

<!--
Make sure to list any relevant related issues to your change. More often than not this will be the single issue fixed by your PR.
-->
<!--↓↓↓↓↓↓↓↓↓↓ List your related issues below ↓↓↓↓↓↓↓↓↓↓-->

Fixes # (issue)

<!--↑↑↑↑↑↑↑↑↑↑ List your related issues above ↑↑↑↑↑↑↑↑↑↑-->

## Before submitting

- [ ] This PR only changes documentation. (You can ignore the following checks in that case)
- [x] Did you read the [contributor guideline](https://github.com/oumi-ai/oumi/blob/main/CONTRIBUTING.md) Pull Request guidelines?
- [x] Did you link the issue(s) related to this PR in the section above?
- [x] Did you add / update tests where needed?

## Reviewers

At least one review from a member of `oumi-ai/oumi-staff` is required.

<!-- Add `oumi-ai/oumi-staff` as a reviewer when your PR is ready for review.

You are also welcome to add individual members of `oumi-ai/oumi-staff` as reviewers.

If no one has reviewed your PR after several days, feel free to add a comment tagging specific reviewers.

 -->


Update pillow requirement from <12.1,>=11.3 to >=11.3,<12.2

Updates the requirements on [pillow](https://github.com/python-pillow/Pillow) to permit the latest version.

Release notes

Sourced from pillow's releases.

12.1.0

https://pillow.readthedocs.io/en/stable/releasenotes/12.1.0.html

Deprecations

Deprecate getdata(), in favour of new get_flattened_data() #9292 [@radarhere]

Documentation

Specify APNG duration type when opening #9368 [@radarhere]

Added release notes for #9350 #9366 [@radarhere]

Update ImageMorph documentation #9349 [@radarhere]

Docs: update major bump cadence #9334 [@hugovk]

Add release notes for #9070 #9320 [@radarhere]

Updated Ubuntu version #9306 [@radarhere]

Update macOS tested Pillow versions #9265 [@radarhere]

Dependencies

Update harfbuzz to 12.3.0 #9355 [@radarhere]

Update xz to 5.8.2 #9343 [@radarhere]

Updated libjpeg-turbo to 3.1.3 #9333 [@radarhere]

Updated zlib-ng to 2.3.2 #9324 [@radarhere]

Updated libpng to 1.6.53 #9325 [@radarhere]

Update actions/checkout action to v6 #9323 [@renovate[bot]]

Update dependency mypy to v1.19.0 #9322 [@renovate[bot]]

Updated libpng to 1.6.51 #9305 [@radarhere]

Updated brotli to 1.2.0 #9284 [@radarhere]

Update libimagequant to 4.4.1 <a href="https://redirect.github.com/python-pillow/P


# Description

<!--
Thank you for contributing to Oumi! Before sending your PR out for review, please take a quick read through this template.

When your PR is merged, its title will appear in our release notes. Make sure your title gives a clear description of your change!

After you've updated your title, please replace this section with a detailed description of your change. Include as much context as possible so your reviewers can easily understand *what* you're changing and *why*.
The more information you provide, the faster we can review your change!
-->
<!--↓↓↓↓↓↓↓↓↓↓ Describe your change below ↓↓↓↓↓↓↓↓↓↓-->
- [ops] disable telemetry during CI, update variables

<!--↑↑↑↑↑↑↑↑↑↑ Describe your change above ↑↑↑↑↑↑↑↑↑↑-->

## Related issues

<!--
Make sure to list any relevant related issues to your change. More often than not this will be the single issue fixed by your PR.
-->
<!--↓↓↓↓↓↓↓↓↓↓ List your related issues below ↓↓↓↓↓↓↓↓↓↓-->

Fixes # (issue)

<!--↑↑↑↑↑↑↑↑↑↑ List your related issues above ↑↑↑↑↑↑↑↑↑↑-->

## Before submitting

- [ ] This PR only changes documentation. (You can ignore the following checks in that case)
- [x] Did you read the [contributor guideline](https://github.com/oumi-ai/oumi/blob/main/CONTRIBUTING.md) Pull Request guidelines?
- [x] Did you link the issue(s) related to this PR in the section above?
- [x] Did you add / update tests where needed?

## Reviewers

At least one review from a member of `oumi-ai/oumi-staff` is required.

<!-- Add `oumi-ai/oumi-staff` as a reviewer when your PR is ready for review.

You are also welcome to add individual members of `oumi-ai/oumi-staff` as reviewers.

If no one has reviewed your PR after several days, feel free to add a comment tagging specific reviewers.

 -->


# Description

<!--
Thank you for contributing to Oumi! Before sending your PR out for review, please take a quick read through this template.

When your PR is merged, its title will appear in our release notes. Make sure your title gives a clear description of your change!

After you've updated your title, please replace this section with a detailed description of your change. Include as much context as possible so your reviewers can easily understand *what* you're changing and *why*.
The more information you provide, the faster we can review your change!
-->
<!--↓↓↓↓↓↓↓↓↓↓ Describe your change below ↓↓↓↓↓↓↓↓↓↓-->
- [datasets] add RaR datasets and base rubric dataset classes
- these datasets can be used with the GRPO `rubric_reward` reward function

<!--↑↑↑↑↑↑↑↑↑↑ Describe your change above ↑↑↑↑↑↑↑↑↑↑-->

## Related issues

<!--
Make sure to list any relevant related issues to your change. More often than not this will be the single issue fixed by your PR.
-->
<!--↓↓↓↓↓↓↓↓↓↓ List your related issues below ↓↓↓↓↓↓↓↓↓↓-->

Fixes # (issue)

<!--↑↑↑↑↑↑↑↑↑↑ List your related issues above ↑↑↑↑↑↑↑↑↑↑-->

## Before submitting

- [ ] This PR only changes documentation. (You can ignore the following checks in that case)
- [x] Did you read the [contributor guideline](https://github.com/oumi-ai/oumi/blob/main/CONTRIBUTING.md) Pull Request guidelines?
- [x] Did you link the issue(s) related to this PR in the section above?
- [x] Did you add / update tests where needed?

## Reviewers

At least one review from a member of `oumi-ai/oumi-staff` is required.

<!-- Add `oumi-ai/oumi-staff` as a reviewer when your PR is ready for review.

You are also welcome to add individual members of `oumi-ai/oumi-staff` as reviewers.

If no one has reviewed your PR after several days, feel free to add a comment tagging specific reviewers.

 -->


[docker] add useful utils, enable arm

# Description

<!--
Thank you for contributing to Oumi! Before sending your PR out for review, please take a quick read through this template.

When your PR is merged, its title will appear in our release notes. Make sure your title gives a clear description of your change!

After you've updated your title, please replace this section with a detailed description of your change. Include as much context as possible so your reviewers can easily understand *what* you're changing and *why*.
The more information you provide, the faster we can review your change!
-->
<!--↓↓↓↓↓↓↓↓↓↓ Describe your change below ↓↓↓↓↓↓↓↓↓↓-->
- [docker] add useful utils, enable arm

<!--↑↑↑↑↑↑↑↑↑↑ Describe your change above ↑↑↑↑↑↑↑↑↑↑-->

## Related issues

<!--
Make sure to list any relevant related issues to your change. More often than not this will be the single issue fixed by your PR.
-->
<!--↓↓↓↓↓↓↓↓↓↓ List your related issues below ↓↓↓↓↓↓↓↓↓↓-->

Fixes # (issue)

<!--↑↑↑↑↑↑↑↑↑↑ List your related issues above ↑↑↑↑↑↑↑↑↑↑-->

## Before submitting

- [ ] This PR only changes documentation. (You can ignore the following checks in that case)
- [x] Did you read the [contributor guideline](https://github.com/oumi-ai/oumi/blob/main/CONTRIBUTING.md) Pull Request guidelines?
- [x] Did you link the issue(s) related to this PR in the section above?
- [x] Did you add / update tests where needed?

## Reviewers

At least one review from a member of `oumi-ai/oumi-staff` is required.

<!-- Add `oumi-ai/oumi-staff` as a reviewer when your PR is ready for review.

You are also welcome to add individual members of `oumi-ai/oumi-staff` as reviewers.

If no one has reviewed your PR after several days, feel free to add a comment tagging specific reviewers.

 -->