unsloth/tests
Daniel Han 6ec6ca39ef ci: add cross-version compat canary for vLLM, TRL, PEFT, ST, bnb
Catches upstream API drift early — before a PyPI release breaks user
workloads. For each tracked package + version, fetch the relevant
source files from raw.githubusercontent.com and grep for the symbols
unsloth + unsloth-zoo monkey-patch, subclass, or eval-import. No pip
install required, CPU-only, runs PR-time + daily cron.

Files:
- tests/vllm_compat/test_vllm_pinned_symbols.py
    extend VLLM_TAGS from {0.9.0..0.15.0} to include
    {0.16.0, 0.17.1, 0.18.1, 0.19.1, 0.20.1, main}.
- tests/version_compat/_fetch.py
    shared fetch + grep helpers (fetch_text / has_def / first_match).
- tests/version_compat/test_trl_grpo_pinned_symbols.py
    12 TRL tags (0.18.2 -> v1.3.0 + main) covering the supported
    window (pyproject pin trl>=0.18.2,!=0.19.0,<=0.24.0) plus
    above-cap canaries. Asserts:
      * top-level GRPOTrainer / GRPOConfig / SFTTrainer / SFTConfig
        re-exports (used by `from trl import X`)
      * trl.trainer.grpo_trainer.GRPOTrainer class
      * trl.trainer.grpo_config.GRPOConfig (or grpo_trainer.py fallback)
      * DataCollatorForPreference reachable from EITHER dpo_trainer or
        utils (rl_replacements.py:318 string-emits the dpo_trainer path)
      * trl.trainer.utils.pad (rl_replacements.py:326)
      * unwrap_model_for_generation in any known submodule
        (rl.py:152-155 try/except handles both)
      * trl.experimental.openenv (gated; rl_replacements.py:1765-1770)
      * trl.generation.vllm_generation (gated; rl_replacements.py:1846)
      * trl.__version__ exported via literal / submodule / metadata
- tests/version_compat/test_peft_pinned_symbols.py
    5 PEFT tags (0.18.0 -> 0.19.1 + main). Asserts:
      * top-level LoraConfig / get_peft_model / PeftModel
      * peft.tuners.lora.LoraConfig at canonical path
      * get_peft_model in mapping.py / mapping_func.py
        (peft 0.18 split this out)
      * peft.tuners.lora.LoraLayer
      * peft.tuners.lora.bnb (Linear4bit / Linear8bitLt)
- tests/version_compat/test_sentence_transformers_pinned_symbols.py
    6 ST tags (5.0.0 -> 5.4.1 + main). Handles BOTH layouts:
      legacy (< 5.4): sentence_transformers/models[.py|/__init__.py]
      modular (>= 5.4): classes under
        sentence_transformers/base/modules/*
        sentence_transformers/sentence_transformer/modules/*
      Plus verifies the deprecated-import shim
      (`setup_deprecated_module_imports`) is wired in __init__.py
      so `from sentence_transformers.models import Pooling` keeps
      working for unsloth/models/sentence_transformer.py.
- tests/version_compat/test_bitsandbytes_pinned_symbols.py
    4 bnb tags (0.45.5 -> 0.49.2 + main; skip the broken 0.46.0 /
    0.48.0 listed in pyproject !=). Asserts:
      * bnb.functional.{dequantize_4bit, quantize_4bit}
      * bnb.nn.{Linear4bit, Params4bit}
- .github/workflows/version-compat-ci.yml
    7 jobs:
      * vllm-pinned-symbols  (existing tests/vllm_compat/, now wired)
      * trl-grpo-pinned-symbols
      * peft-pinned-symbols
      * st-pinned-symbols
      * bitsandbytes-pinned-symbols
      * zoo-imports-under-spoof  (real pip install + CUDA spoof,
        unsloth_zoo.{rl_replacements, empty_model, vllm_utils,
        vllm_lora_*} import smoke)
      * daily-fresh-fetch (cron-only superset)
    Triggers: pull_request (paths), daily 06:43 UTC, workflow_dispatch.
    Authenticated GitHub raw fetches (GITHUB_TOKEN) for the 5000 req/h
    quota.

Smoke-tested locally: 226 pass, 15 skipped (gated optional features).
2026-05-08 11:58:24 +00:00
..
notebooks CI(notebooks): cross-repo validator for unslothai/notebooks 2026-05-07 11:42:57 +00:00
python Add Studio PR-time CI: pin enforcement, frontend, backend, wheel smoke (#5298) 2026-05-06 04:41:57 -07:00
qlora Revert "[pre-commit.ci] auto fixes from pre-commit.com hooks" 2025-12-01 07:24:58 -08:00
saving chore: fix typo cleanup across tests and backend strings (#5152) 2026-04-24 12:51:27 +01:00
sh Default Studio host to 127.0.0.1 and prompt before auto-start (#5267) 2026-05-04 13:03:16 +04:00
studio [pre-commit.ci] auto fixes from pre-commit.com hooks 2026-05-08 11:40:26 +00:00
utils feat: Add cactus QAT scheme support (#4679) 2026-04-15 07:40:03 -07:00
version_compat ci: add cross-version compat canary for vLLM, TRL, PEFT, ST, bnb 2026-05-08 11:58:24 +00:00
vllm_compat ci: add cross-version compat canary for vLLM, TRL, PEFT, ST, bnb 2026-05-08 11:58:24 +00:00
__init__.py Qwen 3, Bug Fixes (#2445) 2025-04-30 22:38:39 -07:00
_zoo_aggressive_cuda_spoof.py [pre-commit.ci] auto fixes from pre-commit.com hooks 2026-05-07 05:43:09 +00:00
conftest.py Add Studio PR-time CI: pin enforcement, frontend, backend, wheel smoke (#5298) 2026-05-06 04:41:57 -07:00
run_all.sh fix: add tokenizers to no-torch deps and TORCH_CONSTRAINT for arm64 macOS py313+ (#4748) 2026-04-01 06:12:17 -07:00
test_cli_export_unpacking.py studio: stream export worker output into the export dialog (#4897) 2026-04-14 08:55:43 -07:00
test_gemma4_chat_template.py update gema4 chat templates (#5116) 2026-04-22 09:04:08 -07:00
test_get_model_name.py feat: Add support for OLMo-3 model (#4678) 2026-04-15 07:39:11 -07:00
test_loader_glob_skip.py Add unit tests for HfFileSystem glob skip guard (#4854) 2026-04-06 08:54:36 -07:00
test_model_registry.py Revert "[FIX] Vllm guided decoding params (#3662)" 2025-12-01 05:43:45 -08:00
test_peft_weight_converter_compat.py Patch checkpoint reload init functions to strip unsupported args (#5167) 2026-04-29 02:50:49 -07:00
test_raw_text.py Add Studio PR-time CI: pin enforcement, frontend, backend, wheel smoke (#5298) 2026-05-06 04:41:57 -07:00
test_resolve_model_class.py fix: guard resolve_model_class fallback against unresolvable transformers AutoModel entries (#5155) 2026-04-24 05:59:17 -07:00
test_studio_install_workspace_guard.py install: support STUDIO_HOME / UNSLOTH_STUDIO_HOME for custom install paths (#5190) 2026-05-05 23:17:40 -07:00
test_studio_root_resilience.py install: support STUDIO_HOME / UNSLOTH_STUDIO_HOME for custom install paths (#5190) 2026-05-05 23:17:40 -07:00