* unsloth start/run: tool-call flags, positional model, grouped help Expose the existing tool-call controls as first-class CLI flags on both unsloth run and unsloth start, add positional model detection with a GGUF quant default, and group --help into rich panels. Flags (unsloth run): --enable-tool-call-healing/--disable-tool-call-healing (default on), --enable-tool-call-nudging/--disable-tool-call-nudging (default on). Resolved before any re-exec and written to the existing env controls (UNSLOTH_DISABLE_TOOL_CALL_HEALING, UNSLOTH_TOOL_CALL_NUDGE) so the in-venv server reads them at import; an omitted flag respects a value the parent already set. Flags (unsloth start): --enable-tools/--disable-tools (default off, passthrough), plus the same healing/nudging flags (default on). start conveys them to the auto-started run via the child env and the tools flag, so it stays correct even if run re-execs into an older Studio venv. Positional model: a leading org/name(:variant) token routes to --model when --model is absent, without stealing an option value or an agent passthrough arg. A bare GGUF repo with no variant defaults to UD-Q4_K_XL for the unsloth namespace and Q4_K_M elsewhere, applied only on the fresh auto-serve path so attaching to a loaded model never reloads. Help is grouped into rich panels (Model / Server / Session for start; Model / Server and network / Tool calls / Advanced for run) so --help reads cleanly. Adds unit coverage for the helpers, the start command-and-env forwarding, the positional/quant defaulting, and the run env resolution. * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * Positional model: reuse _is_hub_model_id so local dirs and paths are not stolen Route a bare org/name positional to --model only when it resolves as a hub id (via the existing _is_hub_model_id, which rejects local paths and existing dirs), so an OpenCode project dir like owner/repo is left for the agent. Apply the same guard to the auto-serve GGUF quant default so a local -GGUF path is not forced to a quant it may not contain. * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * unsloth start: typer floor, drop redundant GGUF quant default, respect inherited tool-call env - Require typer>=0.12.0. The rich_help_panel options added here crash at import on typer<0.6, and the dependency was previously unbounded. - Stop forcing a default GGUF quant for a bare org/name-GGUF on auto-serve. The server's own quant preference already picks UD-Q4_K_XL for Unsloth uploads and Q4_K_M otherwise, and falls back when that exact quant is missing, so forcing a fixed variant broke external repos that only publish Q5_K_M/Q8_0. - Make the healing/nudging start flags tri-state so an omitted flag keeps an operator's inherited UNSLOTH_DISABLE_TOOL_CALL_HEALING / UNSLOTH_TOOL_CALL_NUDGE instead of overwriting it with the start defaults. * Fix start passthrough and inherited tool settings --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: oobabooga <112222186+oobabooga@users.noreply.github.com>
81 lines
2.7 KiB
Text
81 lines
2.7 KiB
Text
# 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, 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
|
|
# typer's full runtime dep tree. Required explicitly because this
|
|
# file is installed with --no-deps. On Linux/Mac CI runners these
|
|
# are often cached transitively; on a fresh windows-latest venv they
|
|
# are not, and `unsloth studio setup` crashes with
|
|
# `ModuleNotFoundError: No module named 'click'`, then 'annotated_doc',
|
|
# then 'rich', etc. as each is hit. Pin the full chain so the
|
|
# no-torch path works cleanly on every fresh venv.
|
|
click>=8.0
|
|
shellingham>=1.5
|
|
annotated-doc>=0.0.3
|
|
rich>=13.0
|
|
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
|
|
nest-asyncio
|
|
|
|
# HF ecosystem (from [huggingfacenotorch] extras in pyproject.toml)
|
|
wheel>=0.42.0
|
|
packaging
|
|
numpy
|
|
tqdm
|
|
psutil
|
|
tyro
|
|
protobuf
|
|
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>=0.34.0
|
|
hf_transfer
|
|
diffusers
|
|
|
|
# Transitive deps required because this file is installed with --no-deps.
|
|
# Without these, `from transformers import AutoConfig` fails at import time.
|
|
regex
|
|
typing_extensions
|
|
filelock
|
|
httpx
|
|
httpcore
|
|
certifi
|
|
idna
|
|
anyio>=3.0,<4.14.0 # 4.14 asyncio cancel-scope RuntimeError on Py3.13 streaming (#6483); 4.13 unaffected
|
|
sniffio
|
|
h11
|
|
|
|
# Unpinned resolves to 0.23.1+ which breaks `from transformers import
|
|
# AutoConfig`; transformers 4.56..5.3 declares tokenizers<=0.23.0.
|
|
tokenizers<=0.23.0
|
|
transformers>=4.51.3,!=4.52.0,!=4.52.1,!=4.52.2,!=4.52.3,!=4.53.0,!=4.54.0,!=4.55.0,!=4.55.1,!=4.57.0,!=4.57.4,!=4.57.5,!=5.0.0,!=5.1.0,<=5.3.0
|
|
trl>=0.18.2,!=0.19.0,<=0.24.0
|
|
sentence-transformers
|
|
cut_cross_entropy
|
|
pillow
|
|
|
|
# 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
|
|
|
|
lxml==6.0.2
|