Fixed broken skyssh and skycode commands

# 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 ↓↓↓↓↓↓↓↓↓↓-->
Commands were pointing to a file which no longer exists.
<!--↑↑↑↑↑↑↑↑↑↑ 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.

 -->


[docs] Start adding doctests

# 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 ↓↓↓↓↓↓↓↓↓↓-->
- Start adding doctests, to prevent documentation from getting stale
- For now adding a single page where all the tests pass

Usage:
```bash
python -m doctest docs/datasets/local_datasets.md
```

<!--↑↑↑↑↑↑↑↑↑↑ 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)
Towards OPE-604

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

## Before submitting
- [x] 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.

 -->


Create Polaris and GCP launcher configs for Llama 8B pretraining

# Description:

-- Create Polaris and GCP launcher configs for Llama 8B pre-training
-- Moved configs from `pretraining` to `pretraining/8b/` sub-dir to allow adding 70B model later

<!--
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 ↓↓↓↓↓↓↓↓↓↓-->

Towards OPE-570, OPE-413

<!--↑↑↑↑↑↑↑↑↑↑ 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?
- [ ] 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 pyproject.toml merge error

# 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 ↓↓↓↓↓↓↓↓↓↓-->

Fix an issue with the pyproject.toml, where the dependency group for Cambrian was in the wrong section

<!--↑↑↑↑↑↑↑↑↑↑ 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 llama_tune script to support 8B pretraining

# 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 ↓↓↓↓↓↓↓↓↓↓-->

-- Update lora_tune script to support 8B pretraining
-- This change depends on https://github.com/oumi-ai/oumi/pull/778

<!--↑↑↑↑↑↑↑↑↑↑ 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 OPE-570, OPE-413

<!--↑↑↑↑↑↑↑↑↑↑ 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?
- [ ] 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 polaris user regex to handle usernames with dashes

# 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 ↓↓↓↓↓↓↓↓↓↓-->
Current polaris regex fails on usernames with dashes in them (it cuts them off early). This PR modifies the regex to add an exclusion of this character to ensure we consider the port number separately.

<!--↑↑↑↑↑↑↑↑↑↑ 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.

 -->


Small fix for building docs

# 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 ↓↓↓↓↓↓↓↓↓↓-->

Look for the sphinx module instead of sphinx-build.

<!--↑↑↑↑↑↑↑↑↑↑ 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 pull_request_template.md

# Describe your change

<!--
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!
-->

Minor PR template update with more arrows.

## 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.
-->

Fixes # (issue)

## 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.

 -->


# Describe your change

- Update base SFT dataset to add support for training on assistant turns only
- No behavior change If `assistant_only=False`
- We support two methods to mask non-assistant turns:
  - [recommended] Template annotations. This is faster, much more robust, but requires changing the chat template for the model
  - [not recommend] Using turn prefixes. Very brittle, and only works for simple cases

## Related issues

Fixes # (issue)

Towards OPE-538

## 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.

 -->


Switch from writing individual conversations to all conversations

# Describe your change
VLLM inference currently waits until inference is complete, then runs a for-loop which repeatedly opens the file and writes one conversation. This is seemingly causing a massive slowdown when using a mounted drive (i.e. GCS bucket), likely due to repeatedly needing to sync?

This change switches to opening the file once and writing all conversations at once.
<!--
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!
-->

## 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.
-->

Fixes # (issue)

## 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.

 -->


Fixing 2 broken links in README.md


Add a prominent link to our docs.

# Describe your change

<!--
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!
-->

Add a prominent link to our docs.

## 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.
-->

Fixes # (issue)

## 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.

 -->


Updated default temperature from 1.0 to 0.0 for generation params

# Describe your change
Default temperature of 1.0 is too high for most models and can lead to strange behaviors or bad performance.

Generally all models are built to support 0.0 in some capacity (as greedy decoding), so proposing that we set this to the default.
<!--
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!
-->

## 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.
-->

Fixes # (issue)

## 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.

 -->


CLI documentation updates.

# Describe your change

<!--
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!
-->

Minor documentation updates.

## 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.
-->

Fixes # (issue)

## 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.

 -->


Add `oumi launch stop` subcommand

# Describe your change

This subcommand stops a cluster, shutting down the instance while preserving its disk. This is currently only relevant for the Sky clusters, by calling their `stop` method.

Tested by running `oumi launch up -c configs/examples/misc/hello_world_gcp_job.yaml --cluster test` followed by `oumi launch stop --cluster test`.

## Related issues

Fixes OPE-650

## 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?


Add sft packed dataset and tests

# Describe your change

- Add `PackedSftDataset` class that allows to pack an existing sft dataset to a constant length
- Similar to TRL's `ConstantLengthDataset`, but for map sft dataset.
- Unlike pre-training, splitting samples in SFT dataset can be problematic. Users can still do that if they want, but it's disabled by default

## 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.
-->

Fixes # (issue)
Towards OPE-74

## 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?


Switch to the regular `pip`  temporarily in the old Polaris launcher

# Describe your change

-- Switch from `uv` to regular `pip`
-- `uv` is not found for some reason . It's a temporary quick fix, let's figure it out for real as a follow-up

<!--
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!
-->

## 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.
-->

Fixes # (issue)

## 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.

 -->


Define PAD token for Llama 2B model (fineweb pretrain)

# Describe your change

PAD token is now required
https://huggingface.co/HuggingFaceFW/ablation-model-fineweb-v1/blob/main/special_tokens_map.json

<!--
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!
-->

## 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.
-->

Fixes # (issue)

## 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.

 -->


Correct layer name in Llama vision accelerate config

# Describe your change

-- Update the list of transformer layer names (replace a duplicate entry)

<!--
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!
-->

## 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.
-->

Towards OPE-552
Fixes OPE-468, OPE-632

## 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?
- [ ] 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.

 -->


Clean up configs

# Describe your change

- Rename incorrectly named inference configs
- Add Llama 3b eval config
- Rename training runs and output dirs from sft to full (fine-tuning)
- Clean up pip installs

## Related issues

Fixes OPE-548

## 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?


Pre-training HSDP configs for Llama 8B for A100-40GB

-- Only SkyPilot GCP config is initially included. Launcher configs, including for Polaris will follow shortly
-- Minor cleanups in related configs under the same dir

Towards OPE-570, OPE-413


[WIP] Llama 3.2 Vision 11B configs

-- Oumi Launcher and Skypilot configs
-- Minor tweaks in `scripts/benchmarks/minimal_multimodal_training.py` and in LLAVA/BLIP2 configs
-- Fix a typo in `configs/examples/llama3_1/sft/8b_full/sky_job.yaml`

Towards OPE-468, OPE-632, OPE-552


Add BaseInferenceEngine supported_params to keep track of inference engine parameters

# Describe your change

- This PR updates the `BaseInferenceEngine` to add an official list of support parameters
- If a user provides a config with non-supported parameters, a warning will be logged
- This hopefully will help keep track of which engine supports  what parameter.
- Added tests to check that all registered parameters are actually used, and that no non-registered parameter is used

## Related issues

Fixes # (issue)
Closes OPE-546

## 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?


Suggest using the git root directory when launching jobs via a CLI in dev-build.

# Describe your change

Running `oumi launch up` or `oumi launch run` will now check if you're running a dev version of Oumi. If you are, you'll be prompted with a Y/N confirmation to use the root of the current git repo (if one exists) as your working directory.

If no github repo exists we skip this confirmation step.

## 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.

<!-- 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.

 -->


Create 2 other Launcher configs for LLAVA and blip2 using OUMI training loop

# Describe your change

-- Adding more configs to simplify experiments
-- Will likely drop some of the extra configs variants later.

<!--
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!
-->

## 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.
-->

Towards OPE-632

## 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?
- [ ] 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 sample oumi launcher configs for LLAVA and blip2

# Describe your change

-- Sample GCP launcher configs

<!--
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!
-->

## 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.
-->

Towards OPE-632

## 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?
- [ ] 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 vllm engine to allow for continuous batching

# Describe your change

- Update vLLM engine to use all available GPUs by default
- Update to use continuous batching -- we let vLLM handle the batching
- One downside of this approach is we lose the ability to checkpoint progress.

## Related issues

Closes OPE-631, OPE-629

## 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?
- [ ] Did you add / update tests where needed?


Update LLAVA integration tests to use different test images

# Describe your change

-- Update tests to use new images

<!--
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!
-->

## 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.
-->

Towards OPE-468
Fixes OPE-401

## 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 remote inference engines to show progress, reduce native engine verbosity

# Describe your change

- Update remote engines (openai, anthropic, gcp, ...) to show a tqdm progress bar
- Update native text engine to avoid showing a progress bar when running inference on a single sample

## 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.
-->

Fixes # (issue)

## 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.

 -->


[tests] Add shared mock tokenizer mixture, requires_gpus marker

# Describe your change

- `mock_tokenizer` is defined ~6 times in the unit tests, moved to the top level conftest
- Created a markers module, and updated all tests to use it.
- Updated marker to allow for configurable number of gpus, in preparation of the full integration tests
- `tests` is now a module, so we can import utils etc defined under it

## Related issues

Towards OPE-38

## 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 base dataset class to use dataset_path

# Describe your change

- Now that we have `dataset_path`, users do not need to overload `dataset_name` to pass a filename to load
- Update BasePretrainingDataset to consume `trust_remote_code`

Fixes # (issue)

## 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.

 -->


[docs] Add script to summarize configs

# Describe your change

- Update the module summarization script to also include configs
- Update doc generation script to include configs
- Add an index file for all the recipes

Fixes # (issue)

Towards OPE-589

## 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?


# Describe your change

[docs] Enable termynal cli and add example

Fixes # (issue)

Towards OPE-589

## 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?


# Describe your change

[docs] Update apidoc rst files with latest modules
## Related issues

Fixes # (issue)
Towards OPE-589

## 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?


[docs] Update about section

# Describe your change

- Add tentative changeling, ack section

Fixes # (issue)

Towards OPE-589

## 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?


[docs] Add logo, analytics, and update sphinx config

# Describe your change

- Add logo, analytics, and update sphinx config

Fixes # (issue)

Towards OPE-589

## 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?


[docs] Add page for using skypilot

# Describe your change

- Add page for using skypilot.

Fixes # (issue)

Towards OPE-589

## 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?


[docs] Add evaluate and judge user guides

# Describe your change

- Add evaluate and judge user guides

Fixes # (issue)

Towards OPE-589

## 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?


[docs] Update inference section

# Describe your change

- Update inference user guide

Fixes # (issue)

Towards OPE-589

## 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?


Reorder IMAGE and TEXT messages in coco and Flick datasets

# Describe your change

Better if image goes first. It gives model a context for further questions.

<!--
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!
-->

## 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.
-->

Towards OPE-467, OPE-468

## 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.

 -->


[docs] Update training section

# Describe your change

- Add dataset documentation pages for sft, pertaining, local datasets

Fixes # (issue)

Towards OPE-589

## 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?


[docs] update faq section

# Describe your change

- Add FAQ and OOM sections

Fixes # (issue)

Towards OPE-589

## 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?


[docs] update datasets section


[docs] update advanced topics section

# Describe your change

- Add performance optimization page, and quantization page

Fixes # (issue)

Towards OPE-589

## 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?


[docs] Cleanup placeholder documentation pages

# Describe your change

- Clean-up placeholder documentation pages
- This is the first in a series of PRs to bring the documentation in `main` branch up to date with experimental `oelachqar/edge` used to generate the documentation

Fixes # (issue)

Towards OPE-589

## 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?


Rename base datasets modules

# Describe your change

- Move `BaseSftDataset` and `BasePretrainingDataset` into their own modules
- Rename base dataset classes for consistency:
  - `BaseLMSftDataset` -> `BaseSftDataset`
  - `BasePretrainingIterableDataset` -> `BasePretrainingDataset`
  - `BaseExperimentalDpoPreprocessor` -> `BaseExperimentalDpoDataset`
  - `oumi.core.datasets.base_dataset` ->  `oumi.core.datasets.base_map_dataset`
  - `oumi.core.datasets.iterable_dataset` ->  `oumi.core.datasets.base_iterable_dataset`

Fixes # (issue)

Towards OPE-598

## 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 engine for vertex GCP

# Describe your change

- Add inference engine for google vertex using openai api format

Fixes # (issue)
Towards OPE-457

## 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?


Add a helper function `is_image_text_llm()` to detect supported image+text LLMs

# Describe your change

<!--
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!
-->

## 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.
-->

Fixes OPE-619

## 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.

 -->


Rename LLAVA  sft_sky_job.yaml for consistency with blip2

# Describe your change

<!--
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!
-->

## 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.
-->

Towards  OPE-467

## 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 DPO base class, initial dataset, integration tests

# Describe your change

- Add experimental base class for preference tuning using DPO
  - This class is experimental for now, as we need to align on a default structure for DPO datasets
  - The current base class matches the pre-existing logic, to convert OrpoDpoMix dataset into the format consumed by TRL's DPO trainer.
- Add integration tests for preference tuning datasets

Fixes # (issue)
Closes OPE-435

## 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?


And WandB integration to eval

# Describe your change

Report eval results to WandB. Similar to training, this requires setting the WandB project env var, along with the `enable_wandb` and `run_name` config params. Also, this PR removes "default" as the default value for `run_name`, as the existing comment about it didn't seem to be true when I tested it.

## Related issues

Fixes OPE-452

## 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?


Remove deprecated preprocessing function

src/experimental/Oumi - Colab Setup Example.ipynb

# Describe your change

- Remove deprecated code paths for manually specifying a dataset preprocessing function
- Remove remaining references in code and configs (those were not used in a while)

Fixes # (issue)
Towards OPE-598

## 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?


Update `tests/builders/test_lr_schedules.py`

-- No functional changes. Just test changes to resolve obscure test failures: `initial_lr` not initialized in param_group https://discuss.pytorch.org/t/a-problem-occured-when-resuming-an-optimizer/28822
-- Test changes: Add an extra Invocation of  `build_lr_schedule()`  for epoch 0 to set `initial_lr`
-- Some `patch` imports changes (otherwise, `patch` wasn't effective)

Fixes OPE-618


Move config files to new directory structure

notebooks/Oumi - Multinode Inference on Polaris.ipynb

notebooks/Oumi - Running Jobs Remotely.ipynb

src/experimental/Oumi - Build Zephyr 7B.ipynb

# Describe your change

Exact actions taken in this PR:
- Move all files from configs/accelerate/, configs/oumi/, and configs/skypilot/ to new directory structure
- Some new files were created (ex. accelerate configs) so that each directory is self-contained
- Renamed files
- Updated important file path references
- Cleaned up some unneeded files/comments

This replaces #718 which didn't preserve file history

Future PRs:
- Finalize new directories (fix all links, add READMEs, etc.)
- Migrate sky configs to job configs
- Delete stale files in new directories

## Related issues

Towards OPE-399, OPE-275

## 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?


Update index.rst

OPE-588 (kind of) removing the space between "Oumi" and the exclamation point in the "Welcome to the documentation for Oumi!".

# Describe your change

<!--
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!
-->

## 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.
-->

Towards OPE-588

## 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.

 -->


Make sure registry is case agnostic

# Describe your change

- Update registry key to always be lowercase
- This allows us to register and retrieve objects without having to worry about the exact case the authors used

Closes OPE-576

## 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?


Update index.rst - switch expanded name Open Universal Machine Intelligence and replace with "Oumi"

OPE-588 - [Feedback] In oumi/docs switch remove the expanded name Open Universal Machine Intelligence and replace with "Oumi"

# Describe your change

<!--
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!
-->

## Related issues

Towards OPE-588

<!--
Towards OPE 588
-->

## Before submitting
- [x] 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 Llama inference configs

# Describe your change

Add Llama 3B/8B/70B inference configs. Also slightly adjust Llama 1B's inference config to be more useful.

## Related issues

Towards OPE-548

## 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?


Add github issue templates.

# Describe your change

Added templates for feature requests and bugs. Both of these templates will use the new `triage` tag so we can filter which issues we've already triaged publicly.

## Related issues

Fixes OPE-460

## 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 experimental async dataset feature

# Update experimental dataset feature
- Rename `experimental_use_async_dataset` to `use_async_dataset`.
  - We've been using it consistently for a while now, time to drop the experimental flag.
- Move `PretrainingAsyncTextDataset` to `oumi.core.datasets` instead of `oumi.datasets`, as it's not a dataset implementation

## Related issues

OPE-598

## 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?


# Add main entrypoint, update vscode launch.json to use new cli

This PR updates the vscode launch.json to use the new `oumi` cli

## Related issues

OPE-599

## 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?


Replace `logger.exception()` in `TextCollatorWithPadding` with `logger.error()`

-- Reduce noise in test logs
-- `logger.exception` looks like a false positive in test logs


Update new image CLI to support input image for VLLMs

-- Porting https://github.com/oumi-ai/oumi/pull/686 to the new CLI.

Towards OPE-401, OPE-467


Update our dev set up instructions to not conflict with the new CLI

Any devs who set up an `oumi` shortcut in their .zshrc will hit a naming collision when trying to use the new `oumi` CLI.


Add a dummy sft dataset for unit tests

**Changes**
- Add a dummy sft datasets for unit tests

Towards OPE-494,  OPE-598


[Clean-up] Remove dead code (custom eval)


Add back the polling spinner to the Launch CLI

Adds back the polling spinner functionality that was removed when migrating from threadpools -> multiprocess polling.

Fixes OPE-584


Create pull_request_template.md

# Describe your change

Add a default PR template for contributors

## Related issues

Fixes OPE-461

## Before submitting
- [x] 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.
 -->


Set `model.tokenizer_pad_token` for gpt2 in Oumi Inference example in `vsconfig`

Towards OPE-597


Move sft and preference tuning datasets to their own module

**Changes**
- Similar to `pretraining`, move the text `sft` and `preference_tuning` datasets to their own module.
- This makes it easier to find the right dataset in code and documentation

Towards OPE-598


Add basic validation for data collators

-- Currently, max 1 collator is allowed for all splits

Fixes OPE-554


Training configurations llama3.1 + ChatML-Template

Contributing independent folders containing complete information for full runs of training different llama 3.1 models.

These configurations combine elements from [torchtune](https://github.com/pytorch/torchtune/tree/main/recipes/configs), [llama-recipies](https://github.com/meta-llama/llama-recipes) and the original repo of [alpaca](https://github.com/tatsu-lab/stanford_alpaca?tab=readme-ov-file#fine-tuning) (which is the dataset used across all configs). There are comments inside the .yaml's delinating the differences.

Compared to most of [our existing configurations](https://github.com/oumi-ai/oumi/tree/main/configs/oumi), the key differences are:
1) they train *base* models
2) they use the chat_ml chat-template
3) they train for >= 1 epoch | as suggested by the above libraries

Minor addition: adds the chat-ml template in our library. This is a widely used template; and could become our default standard or at least expected to be utilized a lot.

Towards OPE-547


Small edits to Llama configs

Fixes OPE-547

- Cap Llama 3B SFT model max length to 512 to prevent OOMs, similar to Polaris config
- Set Llama 8B SFT epochs to 3 to match torchtune
- Mount GCS dir to dev GCP job


Add cff file for citations

**Changes**
- Add a citation file in cff format

You can learn more about the CFF format [here](https://docs.github.com/en/repositories/managing-your-repositorys-settings-and-features/customizing-your-repository/about-citation-files). It's supported natively by GitHub and will show up the UI

Closes OPE-593


Add Llama 3B DDP configs

Fixes OPE-547


Adds control for an explicit quantization-compute dtype

Exposes and handles a parameter that controls the precision of the computation of a quantitated model (wrapping BitsAndBytes: `bnb_4bit_compute_dtype`).

This enables finetuning with quantized models that operate with a compute type that is specified by the user **explicitly**. -- besides this being handy for speedups (e.g., when the input is high-precision but your learning is happening with low-precision parameters) -- this is also necessary when we are loading quantized models where we want to instantiate them with Oumi following their original quantization (arbitrary) configuration.


Cleanup vscode launch.json

**Changes**
- Keep a minimal set of launch config, one for each major `oumi` command.
- Remove older commands / syntax
- The selected configs need a refresh, but that will done as a follow-up PR

![image](https://github.com/user-attachments/assets/1b4d31e6-6943-41bb-afc5-c1505316ae74)

Closes OPE-274


Add image support to `llama3-instruct.jinja` chat template

-- Add support for image tokens
-- Should have no effect for data that has no images (only `message['type'] == 'text'`)

Towards OPE-468


Rename emails and website url to Oumi

Towards OPE-364


[docs] Add script to generate module summaries

**Changes**
- Add a script to generate a summary table for a module.
  - For example, to list all the inference engines, datasets, models, etc that we support and render as a markdown table
- This avoids having to manually update the documentation tables.
- Update docs to include summaries for datasets, judges, and inference engines

Towards OPE-589

Note: Merged directly to unblock. This PR has no doc content change to review and does not impact the package runtime.


[docs] Add content links and references

**Changes**
- This PR updates the sphinx index to leverage existing content from access the repo (notebooks, and readmes)
- Remove redundant files

Note: Merged directly to unblock. This PR has no doc content change to review and does not impact the package runtime.

Towards OPE-589


Add dataset submodules

**Changes**
- Subfolders for `pretraining` and `vision_language` datasets are now modules.
- The individual datasets can still be import from `oumi.datasets`, this change is mostly to have them visible in the docs page.
- Add apidoc for each module.

Towards OPE-589


[docs][tiny] fix minor doc typos

**Changes**
- Fix a typo, broken link, and citations rendering

Note: Merged directly to unblock. This PR has no doc content change to review and does not impact the package runtime.

Towards OPE-589


Update notebooks to include a descriptive title

notebooks/Oumi - Datasets Tutorial.ipynb

notebooks/Oumi - Finetuning Tutorial.ipynb

notebooks/Oumi - Launching Jobs on Custom Clusters.ipynb

notebooks/Oumi - Using vLLM Engine for Inference.ipynb

**Changes**
- Update notebooks to include a `H1` title. This is needed so that they render properly in the sphinx documentation
- Move notebooks that are meant of an internal audience to the experimental folder to avoid clutter in the public examples

Towards OPE-589


[Inference] Bug in generation config stop tokens

- In `NativeTextInferenceEngine`, we generate a `transformers.GenerationConfig` from our `generation_params`, where we pass as "stop" argument the token(s) to terminate the sequence. However, there is no `stop` argument in the `transformers.GenerationConfig`'s `__init__`; to the best of my understanding this argument should be a no-op.
- Since the generation does not have a stop token, it picks up the default one from Meta. In the model that I am currently investigating (trained from base), this defaults to `128001`; generation thinks our model is the base model.
- The right way to determine the stop token is by `stop_strings` or `eos_token_id`.
- We also need to pass in the tokenizer in `model.generate` kwargs (as `tokenizer`); this is a requirement if we are adjusting the stop tokens.
- Future work (P1): Offer users the option to pick up the generation config from the model checkpoint (i.e., `generation_config.json`) and merge it with the `generation_params` defined in our config.


Fix broken link in readme (dev_setup)


[docs] fix broken links

**Changes**
- Fix misc broken links in the docs

Towards OPE-589

**Note**: Merged directly to unblock. This PR has no doc content change to review and does not impact the package runtime.


[Docs] fix rendering issues

**Changes**
- Fix misc rendering issues
- Minor content changes

Towards OPE-589

**Note**: Merged directly to unblock. This PR has no doc content change to review and does not impact the package runtime.


[Docs] Add documentation placeholders

**Changes**
- Add placeholder sections for all doc pages
- Minor content changes, to be reviewed later

**Note**: Merged directly to unblock. This PR has no doc content change to review and does not impact the package runtime.

Towards OPE-589


[Docs] Refactor docs pipeline

**Changes**
- Update index.rst with the new outline (pages to be filled later)
- Add a script to manage documentation links.
  - Sphinx requires all documentation pages to be under the `docs/` folder, but we have many pages that are hosted elsewhere (e.g. `CONTRIBUTING.md` in root, all notebooks under `notebooks`).
  - the `_manage_doclinks` script will copy files to the right location when generating the docs
- Update inter sphinx refs to latest hf index
- Remove deprecated manual rst link files

**Note**: Merged directly to unblock. This PR has no doc content change to review and does not impact the package runtime.

Towards OPE-589


Update sphinx docs

**Changes**
- In preparation of our docs' overhaul:
  - Move everything under `docs` instead of `docs/.sphinx`
  - Update makefile to match
  - Move api reference from `apidoc` -> `api`
  - Add docs for newly introduced models (judge, etc)

Towards OPE-589


Add a description to the Launch CLI

Before:
![Screenshot 2024-10-11 at 11 30 30 AM](https://github.com/user-attachments/assets/fa9dd49d-cf8d-44da-bf63-2c4e64807b8b)

After:
![Screenshot 2024-10-11 at 11 30 17 AM](https://github.com/user-attachments/assets/ca3e415f-4819-4524-a1a3-d50483c37a1a)


Add support for `add_generation_prompt` in LLAVA chat template

-- Leads to better infer responses
-- Consistent with the original LLAVA template: https://linear.app/oumi/issue/OPE-561#comment-ddfde552

Towards OPE-401


Enable dataloaders for VLLM-s (llava and blip2)

-- offloading image data loading to workers helps a lot with GPU utilization for `TRL_SFT` (now close to 100% , previously very uneven ~50%)
-- and tune few other params

Towards OPE-467, OPE-551


Tune few training params for LLAVA and blip2 models

-- Tune batch size, steps, and few other params
-- For LLAVA using `bs=8,gas=8` to mimic this example: https://github.com/huggingface/trl/blob/b3f93f0bad85c808ea76ceb2c07706794a31e74f/examples/scripts/sft_vlm.py#L23

Towards OPE-467, OPE-551


Add popular pre-training dataset classes

**Changes**
- Add a list of 15 most popular pre-training datasets.
- All have the same structure, the created classes are just wrappers to enable having documentation and integration tests

**Note**
- Testing all the datasets takes time, and still working on it. About ~20% done

Closes OPE-434, OPE-433


Add all Llama FSDP GCP configs

Towards OPE-574

This is for all training modes (FFT/Lora/QLora) and all model sizes (3B/8B/70B). Renamed existing configs that did FSDP training (ex. Llama 70B Lora) to include FSDP in the name for clarity.

Note that the QLora configs currently don't work due to OPE-577. This will be fixed in a follow-up PR.


Add distribution mode flag to llama_tune

Towards OPE-547

- Rename `llama8b.fsdp.yaml` to `llama.fsdp.yaml` since it's also the config for llama 3B
- Rename `llama.fsdp.yaml` to `llama.fsdp.mixedprec.yaml` to make clear the only difference is mixed precision
- Add a distribution mode flag to `llama_tune.sh` so we can control whether we run ddp/fsdp

Tested existing configs on Polaris


Add config example for long context fine-tuning

**Changes**
This PR adds a config optimized to fine-tune llama8b with 32K context.

**Usage**
This was tested on `8xA100-40GB` using the latest `oumi` version.

```bash
accelerate launch \
    --config_file configs/accelerate/llama8b.fsdp.yaml \
    --use_fsdp \
    --num_processes 8 \
    --dynamo_backend inductor \
    --mixed_precision no \
    -m oumi.train \
    -c "configs/oumi/llama3.8b.sft.longctx.yaml"
```


Add `pip install -U uv;` to `make setup` for existing envs

-- Otherwise, it failed for my existing env (`uv` was not previously installed).
-- Overhead should be minimal if `uv` already xists


[tiny] Fix bug with Polaris job num

Towards OPE-413

We need to export the `OUMI_JOBNUM` env var for it to be accessible in `llama_tune.sh` since it's a child process.
Tested this works on Polaris.


[tiny] Add flops for T4 GPU

Towards OPE-547

Needed to unblock Llama 3B SFT on Colab


Use a timestamp for job directories on Polaris

Previously the Oumi Launcher used the `job.name` parameter as a directory when copying bits. I've updated this approach to use the current time stamp (including milliseconds).

Ex): `09102024_130424513094` of the form `ddMMYYYY_HHMMSSmmmmmm`

Fixes OPE-532


Add Llama 3b sft/lora/qlora configs for Polaris

Towards OPE-547

This expands the existing llama_tune.sh Polaris job. Later, we can add an FSDP/DDP option as well, along with 8B/70B QLora configs.

This also fixes the params for Llama 8B/70B Lora to be more in line with torchtune's.

Had to reduce model max length for Llama 3B to 512 to prevent OOMs.

Tested all three runs work on Polaris.


Add check if installation is successful

- Add check if installation is successful

Closes OPE-567


Update two VLLM configs.

-- Set `llava` chat template in both  (better than default) TODO: Define a better config for blip2
-- Update configs to use `HuggingFaceH4/llava-instruct-mix-vsft`  dataset

Towards OPE-467, OPE-545


Judge Notebook 2: Custom Judge

notebooks/Oumi - Custom Judge.ipynb
notebooks/Oumi - Oumi Judge.ipynb


Make sure conda env is registered

**Changes**
- Make sure conda env is registered, so that it can be used by Jupyter lab directly


Update several notebooks with the new EvaluationConfig format.

notebooks/Oumi - Colab Setup Example.ipynb

Update notebooks to reflect the recent changes to Evaluation.


Add miniconda installation target, cleanup unused make commands

**Changes**
- Add a make target to install Miniconda, as this is a common issue when onboarding users. Tested on both Mac (arm) and Linux (GCP)
- Remove unused targets: train, eval, infer, as it's simpler to use the oumi launcher/

Towards OPE-567, Closes OPE-327


[tiny] alpaca - minor reproducibility boost

Varies the system template as in the original/author's [codebase](https://github.com/tatsu-lab/stanford_alpaca/blob/main/train.py#L31). This should help (tiny) with reproducibility.


Turn off pretty-printing exceptions in our CLI

Fixes OPE-563


[tiny] add gpt2 chat template, and update tests to use it

**Changes**
- Add a dummy template for gpt2. This template ignores all the roles and just concatenates all the inputs, and is similar to what was used in `transformers <4.45.0`
- Update tests that relied on hardcoded gpt2 responses to use the template

Closes OPE-115
Towards OPE-490


[tiny] Fix .gitignore

Comments must be on their own line: https://git-scm.com/docs/gitignore#_pattern_format


Update makefile to use uv, add Jupyter target

**Changes**
- Update makefile to use uv to install dependencies (much faster than pip)
- Add a Jupyter target, to make sure it's run in the expected environment

Towards OPE-567


Add support for the Launch command suite in the new CLI

Example commands:

`oumi launch status`
`oumi launch which`
`oumi launch up --config foo`
`oumi launch run --config foo`
`oumi launch down --cluster a --cloud b`
`oumi launch stop --cluster a --cloud b --id c`

Towards OPE-500 and OPE-473


More robust make setup

**Changes**
- Checks if conda is installed and available, and if not print an error message with instructions to install
- Make sure conda is initialized for the shell the user is using
- Reduce the number of installed dependencies from `[all]` to `[train,dev]`


Fix `apply_chat_template` issue in `VisionLanguageSftDataset`

-- Update LLAVA jinja template to match the latest `Message` structure
-- Removed `image_placeholder` dict . Let' use `Message` everywhere for consistency.

This is a quick fix, a more robust longer term solution may be needed.

Towards OPE-545
Fixes OPE-561


explicitly specify the model's dtype in LMH

Update some basic parameters when utilizing LMH via Oumi:
1.  Explicitly specify the torch.dtype of the neural model that will be instantiated with LMH.
2. Enabling the loading of quantized model in 4 or 8 bits.

Towards OPE-564.

Note (future todo). We will revisit the interoperability between the two libraries. For instance, there might exist parameters in the [model_kwargs](https://github.com/oumi-ai/oumi/pull/607/files#diff-5d668620d9ee30efe51708c9716b83a3cfdf73c1760020fe689218e9a00aeacfR184
) that are not relevant for LMH but are relevant for Oumi. Also, shortly we should directly pass the PeftConfig instead of using the ``load_in_4bit``, etc.


Add Llama 3B configs

Towards OPE-547

We can run these configs directly on mac, ex. `oumi-train -c configs/oumi/llama3b.sft.yaml "training.optimizer=adamw_torch" "training.max_steps=10" "model.model_max_length=128"`


Set docstring for `NVidiaGpuRuntimeInfo` struct

-- belated PR feedback follow-up

Towards OPE-369


Add Llama train/eval/infer E2E integration test

Towards OPE-503

To run: `python scripts/llama_e2e.py`

This test confirms if train/eval/infer can successfully run, without testing quality. This is intended to be run as a script. We can make it more advanced afterwards if desired.


Update accelerate version to 1.0.0

Fixes OPE-496

1.0.0 just released today. I tested that it still solves the FSDP model saving option, but should fix the issue Jeremy encountered with AdamW: https://linear.app/oumi/issue/OPE-496#comment-6b7c2880


Add generation params to inference engines

# Add Generation Parameters to Inference Engines

This PR introduces a set of missing generation parameters, and updates all the current inference engines to support them, or if not supported by the engine, logs a warning that the parameter will be ignored.

The following parameters are added: temperature, top_p, frequency_penalty, presence_penalty, stop sequences, logit_bias, and min_p.

Towards OPE-328

## Changes

- Updated `GenerationParams` class with new parameters
- Implemented parameter support in AnthropicInferenceEngine, LlamaCppInferenceEngine, NativeTextInferenceEngine, RemoteInferenceEngine, and VLLMInferenceEngine

## Usage

### Setting Generation Parameters

```python
from oumi.core.configs.params.generation_params import GenerationParams

params = GenerationParams(
    max_new_tokens=100,
    temperature=0.7,
    top_p=0.9,
    frequency_penalty=0.1,
    presence_penalty=0.1,
    stop=["END"],
    logit_bias={50256: -100},  # Decrease likelihood of EOS token
    min_p=0.05
)
```

### Using Parameters with an Inference Engine

```python
from oumi.inference.llama_cpp_inference_engine import LlamaCppInferenceEngine

engine = LlamaCppInferenceEngine(model_params, generation_params=params)
response = engine.generate(conversation)
```


Fix cli infer test

For PR-588


Refactor Aya & Ultrachat to use oumi dataset sft classes

- Refactor Aya & Ultrachat dataset to use dataset classes instead of pre-processing functions

Closes OPE-272


Remove deprecated dataset code paths

- Remove deprecated dataset preprocessing functions for alpaca, chatqa
- All dataset loading & preprocessing is done as part of their respective dataset class

Towards OPE-272


Update handling of GPU fan speed info

-- The function `nvmlDeviceGetFanSpeed()` fails on many systems (fails on GCP, Polaris but works on my local WSL machine w/ GPU) => Downgrade this warning to `logging.debug()` to reduce logs noise
-- Update unit tests to allow `None`-s

Towards OPE-369


Add support for magpie dataset variants

- Add support for magpie dataset variants

Closes OPE-431


Judge Notebook 1: default judge

notebooks/Oumi - Judge (Oumi): filtering a dataset.ipynb


Misc updates to Polaris launcher scripts

-- Add `-t` (telemetry) option to `scripts/polaris/jobs/llama_tune.sh`
--  Move `OUMI_JOBNUM` computation to `polaris_init.sh` for reusability
-- Define `$SHARED_TRAINING_PARAMS` in `llama_tune.sh`

Towards OPE-413


Add text jsonlines dataset class

# Add TextSftJsonLinesDataset for text-based SFT data

- This PR introduces a new `TextSftJsonLinesDataset` class for handling text-based Supervised Fine-Tuning (SFT) data in JSON Lines format. This is is similar to the `VisionLanguageJsonLinesDataset`.
- They re-use the same logic, and we could consider refactoring as a mix-in. For now it was simpler to just duplicate that logic.
- Also add more robust type validation to `VisionLanguageJsonLinesDataset`

Closes OPE-427

## Usage

Here's how to use the new `TextSftJsonLinesDataset`:

```python
from oumi.datasets.sft_jsonlines import TextSftJsonLinesDataset

# Load from a JSONL file
dataset = TextSftJsonLinesDataset(dataset_path="path/to/your/data.jsonl")

# Or load from a list of dictionaries
data = [
    {
        "messages": [
            {"role": "user", "content": "Hello, how are you?"},
            {"role": "assistant", "content": "I'm doing well, thank you! How can I assist you today?"},
            {"role": "user", "content": "Can you explain what machine learning is?"},
            {"role": "assistant", "content": "Certainly! Machine learning is a branch of artificial intelligence..."},
        ]
    }
]
dataset = TextSftJsonLinesDataset(data=data)

# Access conversations
conversation = dataset.conversation(0)
print(conversation.messages[0].content)  # Output: "Hello, how are you?"
```


Set up a new version of the Oumi CLI using Typer

This PR creates a new `oumi` command that accepts 3 subcommands:
`oumi train`
`oumi infer`
`oumi evaluate`

These commands have full typer integration.

I will be adding `oumi launch` as a follow-up as it's more involved.
I will remove the old CLI when we have parity + update all references.

Towards OPE-500 and OPE-473


Add dataset class for dolly dataset

- Add dataset class for dolly dataset

Closes OPE-430


Add `@override` annotations to methods of few Dataset subclasses

-- For extra code clarity

Towards OPE-353


Update `ProfilerParams` docstrings to follow the new style

-- To simplify, and, for consistency, with all other params

Fixes OPE-136


Remove AWS as a default dep

Make AWS an optional installation.

Towards OPE-530


Define `DataCollationParams`

-- This is needed to enable `visual_language` collator for multi-modal , but may have other applications as well
-- Some collation options: https://huggingface.co/docs/transformers/en/main_classes/data_collator
-- This PR only defines configs (there are options how to define this), it's not wired up in training loop yet.

Towards OPE-353


Set accelerate version to fix FSDP model saving

Fixes OPE-496

Would recommend everyone to rerun pip-install after pulling this change to resolve the issue on their machines.

Current version is 0.34.2, which doesn't properly unwrap the FSDP model for saving (specifically the embedding and LM head). Reverting back to 0.33.0, which doesn't have this issue. 0.34.0 doesn't work because it has a different unrelated error.

The pre-release 1.0.0rc0 version fixes this, but we may not want to depend on this in our codebase. However, this likely means Accelerate fixed the issue, so we don't need to flag this to them.

Tested this on GCP with `oumi-launch -p configs/oumi/jobs/gcp/llama8b_sft.yaml -c fix`, and successfully loaded the trained model.


Disable `sdpa` for `blip2`

Error:

```
ValueError: Blip2ForConditionalGeneration does not support an attention implementation through torch.nn.functional.scaled_dot_product_attention yet. Please request the support for this architecture: https://github.com/huggingface/transformers/issues/28005. If you believe this error is a bug, please open an issue in Transformers GitHub repository and load your model with the argument `attn_implementation="eager"` meanwhile. Example: `model = AutoModel.from_pretrained("openai/whisper-tiny", attn_implementation="eager")`
```

Enabled `sdpa` at the last moment yesterday, but it doesn't actually work for this model.

 https://github.com/huggingface/transformers/issues/28005

Towards OPE-353
Fixes OPE-233


Misc cleanups in `JsonlinesDataset`

-- Switch to `pathlib`
-- Error message improvements
-- Increase unit test coverage

Towards OPE-353


Split out cloud dependencies

Make a unique build target for each cloud.


Inference Engine async writes

This PR is based on https://github.com/oumi-ai/oumi/pull/558

This PR updates how writes are done for inference.

- If all requests are successful, the final written file will have all responses in the same order as the provided input for all engines.
- During inference, all requests are written to a `/scratch` directory containing a file with the same name. There is no guarantee of order on the values written to this file (this truly only matters for the InferenceEngines that leverage parallelism).

Non-parallel engines will write to disk in-line (blocking). I've benchmarked this for medium sized files (100s of MB): appending a line of text to these files takes on average 1.788e-05 seconds


Fix issues with package build pipeline

Fix misc issues with the config

Towards OPE-455


Update model builder to use `default_chat_template` if available

-- For some models e.g.,  `Salesforce/blip2-opt-2.7b`, `tokenizer.default_chat_template` is provided while `tokenizer.chat_template` is not.

Towards OPE-353


**Changes**
- Add package build and deployment workflow to google artifact registry

Towards OPE-455


Configure freeze_layer map in `minimal_multimodal_training.py`

Towards OPE-353, OPE-505


Clean up legacy evaluate_oumi code paths

This PR comes in two parts:

1) Clean up evaluate_oumi

2) Update our evaluation config to have a section explicitly for lm_harness as we don't support evaluations on custom datasets currently.

As a followup we should:
- Add support for custom (oumi) metrics like bleu and rouge.
- When we have support for custom datasets, let users specify the dataset directly as well

Towards OPE-418


Update DEV_SETUP.md with Windows instructions

Point users to WSL for installation. Add instructions for Conda installation.


Initial Cambrian integration

*  Update pyproject and pre-commit rules to ignore many ruff/lint errors
*  Excludes Cambrian `train` and `serve` for now.
*  To facilitate future merges, all changes in Cambrian codebase are of these types:
    * Deletions (files or lines) of unused or not-needed functionality. Also, deleted extra visual Encoders and text LLMs not used in the currently published Cambrian models to keep PR size under control.
    * Edit Imports to use `oumi` package hierarchy
* Updated Cambrian files to use `oumi` logger

Based on https://github.com/cambrian-mllm/cambrian/tree/78b97086cd96d84e62f45c7cee1b87386615a9a4

This is an initial import. It allows loading of pre-trained Cambrian models (including vision towers) with weights published on HF :
* `nyu-visionx/cambrian-phi3-3b`
* `nyu-visionx/cambrian-8b`
* `nyu-visionx/cambrian-13b`
* `nyu-visionx/cambrian-34b`

More work is needed to enable tuning, and inference.

Towards OPE-374, OPE-377


Log dataset info: shape, columns, other metainfo


Update experimental pretokenize_dataset tool

-- Rename the tool  to `process_dataset`, and add a new option to skip tokenization, in which case the tool  downloads HF datasets, reshards it , it writes to GCS file system
-- Add new sharding params
-- Add new dataset params (`split`, `subset`, `trust_remote_code`)
-- Add SkyPilot example how to download and save COCO dataset

Towards OPE-102, OPE-353


Pass `split` param to `datasets.load_dataset()`

- It enables additional features like Slicing (`--split="train[:20%]"`) https://huggingface.co/docs/datasets/v1.10.1/splits.html#slicing-api
- Allows optimization e.g., not reading all splits if not needed


Use `local_rank` to query GPU temperature

-- Previously, it would default to `device_index=0`

Fixes OPE-344


Fix a bug for handling stopped sky clusters in the oumi launcher.

Previously `oumi-launch -a status` would throw an error if a cluster was suspended but not down. I've added a check to only list a cluster if it's UP and ignore it otherwise as it cannot have any jobs running while suspended.

Fixes OPE-371


[tiny] Add fp paged_adam optimizer option

- Add fp paged_adam optimizer option


[tiny] Allow conversation metadata to contain values other than str

- Allow conversation metadata to contain values other than `str`
- `str` is too restrictive, as we often need to store other types (`float`, `bool`, `dict`, ...)
- Setting the value type to `Any` for now.


[tiny] Add util to get install folder root dir

- To be used for resources that depend on the root folder (e.g. chat_templates, judge configs, etc)


[tiny] fix small typo

- fix small typo. Model max length was supposed to be a power of 2


Minor changes in `scripts/benchmarks/minimal_multimodal_training.py`

-- Use full name of Flickr dataset
-- Support configurable `split`, and change default split of `nlphuji/flickr30k` to `test` (the only split available there)
-- Update separator in `--test-fsdp` in sample commands

Towards OPE-353


Add an optional `-t` flag to scripts/polaris/jobs/llama2b_pt_worker.sh

-- Enables additional telemetry

Fixes OPE-344


Auto-format shell scripts under `scripts`


[tiny] cleanup multimodal benchmark script

- Use default dataset builder

Towards OPE-353


Create CODE_OF_CONDUCT.md

Adopt the standard github code of conduct. We can change this going forward as necessary.


Add conversation helper methods

**Changes**
This pull request introduces new helper methods for frequently used operations on the `Conversation` class, with the option to filter by role:
- `Conversation.first_message`
- `Conversation.last_message`
- `Conversation.filter_messages`

**Usage**
```python
from oumi.core.types import Conversation, Message, Role

# Create a conversation with some messages
messages = [
    Message(role=Role.USER, content="Hello"),
    Message(role=Role.ASSISTANT, content="Hi, how can I help you?"),
    Message(role=Role.USER, content="I need assistance with my account.")
]
conversation = Conversation(messages=messages)

# Get the first message in the conversation
first_msg = conversation.first_message()
print(first_msg.content)  # Output: "Hello"

# Get the last message from the user
last_user_msg = conversation.last_message(role=Role.USER)
print(last_user_msg.content)  # Output: "I need assistance with my account."

# Get the system messages
system_messages = conversation.filter_messages(role=Role.SYSTEM)
assert len(system_messages) == 0
```


Switch from Flash Attention 2 to PyTorch SDPA

Towards OPE-233, OPE-363

- Use `attn_implementation` flag in HF Trainer, allowing use of both eager and sdpa implementations
- Switch all configs to specify SDPA instead of flash attention. We could also delete this line altogether, since it defaults to SDPA, but we may eventually want to be explicit for the Oumi trainer.
- Remove `flash-attn` from `pyproject.toml`, and create a `train_gpu` target.
- Switch sky configs to use `train_gpu` target for a one-line pip install. Previously, we couldn't because `flash-attn` required a two-step install.
- Switch remaining Llama 8B Lora configs to torchrun since it's DDP

Overall, this change has no effect on runtime, except for a 10% speedup for 8B Lora: https://docs.google.com/spreadsheets/d/1EIgbdVhI2mLzxpbPGSMMixyUJSpDqUrCGMdIVzeBDQk/edit?gid=1819500808#gid=1819500808


Fix a small bug in `infer_interactive()`:  only prints the first character

-- Also remove the outdated comment


Auto-format `pyproject` and `pre-commit` configs

Formatters:

```
"[toml]": {
        "editor.defaultFormatter": "tamasfe.even-better-toml"
    },
    "[yaml]": {
        "editor.defaultFormatter": "redhat.vscode-yaml"
    },
```


Update Makefile

When reinstalling oumi from scratch, `conda activate oumi` failed for me until I ran `source ~/.zshrc`


Update name typo

Replace all instances of `Open Unified Machine Intelligence` -> `Open Universal  Machine Intelligence`


Add anthropic inference engine

# Add Anthropic Inference Engine

This PR introduces support for the Anthropic API, allowing users run remote inference with Anthropic's language models.

## Changes

1. Added `AnthropicInferenceEngine` class to handle Anthropic-specific API inputs / outputs.
2. Updated `RemoteInferenceEngine` to be decouple generating auth headers from query.
3. Modified `RemoteParams` to include an optional environment variable name for API keys.

Towards OPE-397


Rename website references to oumi.ai

OPE-346

Also lowercase notebook names. My previous attempt didn't go through; I had to run `git config core.ignorecase false` first.


[Minor] Issues arose by "newcomer" exploration [1/K]

README.md:
- Improves comments/syntax.

notebooks/OUMI - A Tour.ipynb
- Improves/adds comments.
- Updates call arguments to oumi.infer.


Freeze `lm-eval` and `torch` versions as a workaround for  OPE-390

-- Otherwise, training jobs fail to start on GCP

Towards  OPE-390


Update TOTAL_NUM_GPUS compare commands in SkyPilot configs

-- The current syntax leads to errors on GCP => switch to `test $X -lt $Y`
-- Add more warnings if FSDP is used with 1 GPU


Update final lema references

Towards OPE-364

This PR updates our README badges and our GCS bucket names. I copied over the contents of the old buckets into the new ones, and will delete the old buckets a few days after this PR is merged.

The only two lema references left after this refactor are our GCP project id `lema-dev` and our email `contact@openlema.com`.


Rename remaining lema references in `docs/ `

Towards OPE-364

This includes our Markdown guides and some references left in Sphinx.


Update conf.py

Update lema -> Oumi


Re-generate Sphinx docs

Towards OPE-364

Created by running `make docs-rebuild`