# Runtime dependencies for no-torch (GGUF-only) mode.
# Installed with --no-deps to prevent transitive torch resolution
# from packages like accelerate, peft, trl, sentence-transformers.
#
# Includes unsloth's own direct deps (typer, click, rich, pydantic, pyyaml,
# nest-asyncio) since unsloth is also installed with --no-deps (current PyPI
# metadata still declares torch as a hard dep).

# unsloth direct deps (from pyproject.toml [project].dependencies)
typer>=0.12.0
click>=8.0
rich>=13.0
# typer's remaining runtime dep tree, needed explicitly under --no-deps.
# Linux/Mac CI runners often cache these transitively; a fresh windows-latest
# venv does not, and `unsloth studio setup` crashes on the first missing module.
shellingham>=1.5
annotated-doc>=0.0.3
markdown-it-py>=3.0
mdurl>=0.1
pygments>=2.0
# pydantic is intentionally NOT pinned here. install.sh / install.ps1
# / install_python_stack.py run `pip install pydantic` WITH deps just
# before this --no-deps file is applied, so pip resolves pydantic-core
# to the exact version pydantic's _ensure_pydantic_core_version check
# expects. Pinning both under --no-deps used to drift them apart.
pyyaml==6.0.3
nest-asyncio==1.6.0

# HF ecosystem (from [huggingfacenotorch] extras in pyproject.toml)
wheel>=0.42.0
packaging==26.3
# numpy moves its Python floor every second minor release (2.0 >=3.9, 2.1 >=3.10,
# 2.3 >=3.11, 2.5 >=3.12), so the pin is per-interpreter.
numpy==2.5.2; python_version >= "3.12"
numpy==2.4.6; python_version >= "3.11" and python_version < "3.12"
numpy==2.2.6; python_version >= "3.10" and python_version < "3.11"
numpy==2.0.2; python_version < "3.10"
tqdm==4.70.0
psutil==7.2.2
tyro==1.0.15
# protobuf 7.x requires >=3.10.
protobuf==7.35.1; python_version >= "3.10"
protobuf==6.33.6; python_version < "3.10"
sentencepiece>=0.2.0
safetensors>=0.4.3
datasets>=3.4.1,!=4.0.*,!=4.1.0,<4.4.0
accelerate>=0.34.1
peft>=0.18.0,!=0.11.0
huggingface_hub>=1.23.0,<2.0; python_version >= "3.10"
huggingface_hub==0.36.2; python_version < "3.10"
hf_transfer==0.1.9
# diffusers: see diffusers-pin.txt, installed by its own step (this file is
# installed --no-deps, and the pin has to apply on the torch path too).

# Transitive deps required because this file is installed with --no-deps.
# Without these, `from transformers import AutoConfig` fails at import time.
# Where the newest release dropped 3.9, the pin splits on the same 3.10 marker
# the transformers pins below already use.
regex==2026.7.19; python_version >= "3.10"
regex==2026.1.15; python_version < "3.10"
typing_extensions==4.16.0
filelock==3.32.2; python_version >= "3.10"
filelock==3.19.1; python_version < "3.10"
httpx==0.28.1
httpcore==1.0.9
# certifi is the CA trust store, not an ordinary library: an exact pin freezes it,
# so distrusted roots stay trusted and newly added ones never arrive. It is pinned
# here for the same reason as everything else in this file, but treat a bump as a
# security update rather than routine churn, and refresh it on its own schedule.
# The same applies to idna, h11 and httpcore above and below: they sit on the TLS
# and HTTP request path, so they belong on that schedule too, not on churn.
certifi==2026.7.22
idna==3.18
anyio>=3.0,<4.14.0               # 4.14 asyncio cancel-scope RuntimeError on Py3.13 streaming (#6483); 4.13 unaffected
sniffio==1.3.1
h11==0.16.0

# Transformers 5.5 supports tokenizers 0.22.x through 0.23.0.
tokenizers<=0.23.0
transformers==5.5.0; python_version >= "3.10"
transformers==4.57.6; python_version < "3.10"
trl>=0.18.2,!=0.19.0,<=0.24.0
# Matches extras-no-deps.txt rather than the newest release: that file installs
# --no-deps too and runs after this one, so whatever it names wins. Pinning a
# higher version here would record a number no install ever ends up with. Bump
# both together. 5.2 requires >=3.10, so 3.9 keeps the newest release it can take,
# which is what a bare entry resolved to here before.
sentence-transformers==5.2.0; python_version >= "3.10"
sentence-transformers==5.1.2; python_version < "3.10"
cut_cross_entropy==25.1.1
pillow==12.3.0; python_version >= "3.10"
pillow==11.3.0; python_version < "3.10"

# RAG store + document parsing, mirroring studio.txt. Pinned here because
# this file installs --no-deps; without them Unsloth runs with RAG disabled.
sqlite-vec==0.1.9
pymupdf==1.27.2.3
# 0.3.x keeps pymupdf-layout (which pulls onnxruntime) an optional extra; the
# lockstep 1.27.x line makes it a hard dep we do not need for to_markdown().
pymupdf4llm==0.3.4
python-docx==1.2.0

# 6.0.2 is affected by PYSEC-2026-87, fixed in 6.1.0. Pinning the file made the
# advisory visible to the nightly pip-audit in security-audit.yml, where a bare
# entry had always resolved to whatever was current and so never reported.
lxml==6.1.1
