Daniel Han
0c8d407793
Rename cli/ to unsloth_cli/ to fix namespace collision with stringzilla ( #4393 )
...
* Rename cli/ to unsloth_cli/ to fix namespace collision with stringzilla
stringzilla installs a namespace package at cli/ (cli/split.py, cli/wc.py)
in site-packages without an __init__.py. When unsloth is installed as an
editable package (pip install -e .), the entry point script does
`from cli import app` which finds stringzilla's namespace cli/ first and
fails with `ImportError: cannot import name 'app' from 'cli'`.
Non-editable installs happened to work because unsloth's cli/__init__.py
overwrites the namespace directory, but this is fragile and breaks if
stringzilla is installed after unsloth.
Renaming to unsloth_cli/ avoids the collision entirely and fixes both
editable and non-editable install paths.
* [pre-commit.ci] auto fixes from pre-commit.com hooks
for more information, see https://pre-commit.ci
* Update stale cli/ references in comments and license files
---------
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
2026-03-17 20:40:21 -07:00
Daniel Han
c26aa1a1e8
Restore non-studio files from main after history recovery
2026-03-12 21:48:45 +00:00
Daniel Han
17ae3d3cba
Revert "Studio ( #4237 )"
...
This reverts commit f08aef1804 .
2026-03-12 21:48:23 +00:00
Daniel Han
f08aef1804
Studio ( #4237 )
...
* Rebuild Studio branch on top of main
* [pre-commit.ci] auto fixes from pre-commit.com hooks
for more information, see https://pre-commit.ci
* Fix security and code quality issues for Studio PR #4237
- Validate models_dir query param against allowed directory roots
to prevent path traversal in /api/models/local endpoint
- Replace string startswith() with Path.is_relative_to() for
frontend path traversal check in serve_frontend
- Sanitize SSE error messages to not leak exception details to
clients (4 locations in inference.py)
- Bind port-discovery socket to 127.0.0.1 instead of all interfaces
in llama_cpp backend
- Import datasets_root and resolve_output_dir in embedding training
function to fix NameError and use managed output directory
- Remove stale .gitignore entries for package-lock.json and test
directories so tests can be tracked in version control
- Add venv-reexecution logic to ui CLI command matching the studio
command behavior
* [pre-commit.ci] auto fixes from pre-commit.com hooks
for more information, see https://pre-commit.ci
* Move models_dir path validation before try/except block
The HTTPException(403) was inside the try/except Exception handler,
so it would be caught and re-raised as a 500. Moving the validation
before the try block ensures the 403 is returned directly and also
makes the control flow clearer for static analysis (path is validated
before any filesystem operations).
* Use os.path.realpath + startswith for models_dir validation
CodeQL py/path-injection does not recognize Path.is_relative_to() as
a sanitizer. Switched to os.path.realpath + str.startswith which is
a recognized sanitizer pattern in CodeQL's taint analysis. The
startswith check uses root_str + os.sep to prevent prefix collisions
(e.g. /app/models_evil matching /app/models).
* Never pass user input to Path constructor in models_dir validation
CodeQL traces taint through Path(resolved) even after a startswith
barrier guard. Fix: the user-supplied models_dir is only used as a
string for comparison against allowed roots. The Path object passed
to _scan_models_dir comes from the trusted allowed_roots list, not
from user input. This fully breaks the taint chain.
---------
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
2026-03-12 03:36:19 -07:00
Daniel Han
74f79684da
Auto Healing Tokenizer ( #283 )
...
* Update gemma.py
* Update gemma.py
* Update gemma.py
* Update gemma.py
* Update gemma.py
* Update gemma.py
* Update gemma.py
* Update gemma.py
* Update gemma.py
* Update gemma.py
* Update gemma.py
* Update gemma.py
* Update gemma.py
* Update gemma.py
* Update gemma.py
* Update gemma.py
* Update gemma.py
* Update gemma.py
* Update gemma.py
* Update gemma.py
* Update gemma.py
* Update gemma.py
* llama
* Update llama.py
* gemma
* Update cross_entropy_loss.py
* Update cross_entropy_loss.py
* Update cross_entropy_loss.py
* Update cross_entropy_loss.py
* Update cross_entropy_loss.py
* Update cross_entropy_loss.py
* Update cross_entropy_loss.py
* Update cross_entropy_loss.py
* Update cross_entropy_loss.py
* Update cross_entropy_loss.py
* Update cross_entropy_loss.py
* Update cross_entropy_loss.py
* Update cross_entropy_loss.py
* Update cross_entropy_loss.py
* Update cross_entropy_loss.py
* Update cross_entropy_loss.py
* Update cross_entropy_loss.py
* Update cross_entropy_loss.py
* Update cross_entropy_loss.py
* Update gemma.py
* Update gemma.py
* Update gemma.py
* Update gemma.py
* Update gemma.py
* Update gemma.py
* Update gemma.py
* Update gemma.py
* Update gemma.py
* Update gemma.py
* Update save.py
* RoPE
* Update llama.py
* Update llama.py
* Update llama.py
* Update gemma.py
* correct_dtype
* Update gemma.py
* Update cross_entropy_loss.py
* Update cross_entropy_loss.py
* Chat Templates
* Update README.md
* Update README.md
* Update llama.py
* DoRA
* Update _utils.py
* Update chat_templates.py
* Update llama.py
* Hotfix - fix DoRA, Gemma prompt template (#202 ) (#203 )
* Update save.py
* saving
* Update save.py
* Update save.py
* Update save.py
* Update save.py
* Update save.py
* Update save.py
* Update save.py
* Update save.py
* Update save.py
* Update save.py
* Update save.py
* Update save.py
* Update save.py
* Update __init__.py
* Update save.py
* Update save.py
* Update save.py
* save
* trainer
* spaces
* original
* Gemma
* Update pyproject.toml
* Update mapper.py
* Update fast_lora.py
* FastGemmaModel
* model_type
* Update llama.py
* Update llama.py
* Update gemma.py
* Update gemma.py
* Update gemma.py
* Update llama.py
* Update llama.py
* Update fast_lora.py
* Update llama.py
* Update llama.py
* Update cross_entropy_loss.py
* Update llama.py
* Update llama.py
* gemma
* Update llama.py
* Update llama.py
* Update llama.py
* Update llama.py
* Update fast_lora.py
* Update fast_lora.py
* Fast CE Loss
* Update cross_entropy_loss.py
* Update cross_entropy_loss.py
* Update cross_entropy_loss.py
* Update cross_entropy_loss.py
* Update cross_entropy_loss.py
* Update cross_entropy_loss.py
* Update cross_entropy_loss.py
* Update llama.py
* Update llama.py
* Update llama.py
* Update llama.py
* CE
* Update llama.py
* Update llama.py
* Update cross_entropy_loss.py
* Update geglu.py
* Update cross_entropy_loss.py
* revert
* Update llama.py
* Update llama.py
* norm
* Update gemma.py
* Update gemma.py
* position_ids
* Update gemma.py
* Update gemma.py
* pos
* Update llama.py
* Update gemma.py
* Update gemma.py
* Update gemma.py
* Update gemma.py
* Update gemma.py
* Update gemma.py
* Update gemma.py
* Update gemma.py
* Update cross_entropy_loss.py
* Update gemma.py
* Update gemma.py
* Update gemma.py
* Update gemma.py
* Update gemma.py
* Update gemma.py
* Update gemma.py
* Update llama.py
* Update gemma.py
* Update gemma.py
* Update gemma.py
* Update gemma.py
* Update gemma.py
* Update gemma.py
* Update gemma.py
* Update llama.py
* Update cross_entropy_loss.py
* Update cross_entropy_loss.py
* revert
* revert
* Update gemma.py
* Update gemma.py
* Update gemma.py
* Update gemma.py
* Update gemma.py
* Update gemma.py
* Update gemma.py
* Update gemma.py
* Update gemma.py
* Update gemma.py
* Update gemma.py
* Update gemma.py
* Update gemma.py
* Update gemma.py
* Update llama.py
* Update gemma.py
* Update gemma.py
* Update gemma.py
* Update gemma.py
* Update gemma.py
* Update gemma.py
* Update gemma.py
* Update gemma.py
* Update gemma.py
* Update gemma.py
* Update gemma.py
* Update cross_entropy_loss.py
* Update gemma.py
* Update gemma.py
* Update gemma.py
* Update gemma.py
* Update gemma.py
* Update llama.py
* Update llama.py
* Update llama.py
* Update llama.py
* rope
* Update gemma.py
* Update gemma.py
* Update gemma.py
* Update gemma.py
* Update gemma.py
* Update gemma.py
* Update gemma.py
* Update gemma.py
* Update gemma.py
* Update gemma.py
* Update gemma.py
* Update gemma.py
* Update gemma.py
* Update gemma.py
* Update gemma.py
* Update gemma.py
* Update gemma.py
* Update gemma.py
* Update gemma.py
* Update gemma.py
* Update gemma.py
* Update gemma.py
* Update gemma.py
* Update gemma.py
* Update gemma.py
* Update gemma.py
* Update gemma.py
* Update gemma.py
* Update gemma.py
* Update gemma.py
* Update gemma.py
* Update gemma.py
* Update gemma.py
* Update gemma.py
* Update gemma.py
* Update gemma.py
* Update gemma.py
* Update gemma.py
* Update gemma.py
* Update gemma.py
* Update gemma.py
* Update gemma.py
* Update gemma.py
* Update gemma.py
* Update gemma.py
* Update gemma.py
* Update gemma.py
* Update gemma.py
* Update gemma.py
* Update gemma.py
* Update gemma.py
* Update gemma.py
* Update gemma.py
* Update gemma.py
* Update gemma.py
* llama
* Update llama.py
* gemma
* Update cross_entropy_loss.py
* Update cross_entropy_loss.py
* Update cross_entropy_loss.py
* Update cross_entropy_loss.py
* Update cross_entropy_loss.py
* Update cross_entropy_loss.py
* Update cross_entropy_loss.py
* Update cross_entropy_loss.py
* Update cross_entropy_loss.py
* Update cross_entropy_loss.py
* Update cross_entropy_loss.py
* Update cross_entropy_loss.py
* Update cross_entropy_loss.py
* Update cross_entropy_loss.py
* Update cross_entropy_loss.py
* Update cross_entropy_loss.py
* Update cross_entropy_loss.py
* Update cross_entropy_loss.py
* Update cross_entropy_loss.py
* Update gemma.py
* Update gemma.py
* Update gemma.py
* Update gemma.py
* Update gemma.py
* Update gemma.py
* Update gemma.py
* Update gemma.py
* Update gemma.py
* Update gemma.py
* Update save.py
* RoPE
* Update llama.py
* Update llama.py
* Update llama.py
* Update gemma.py
* correct_dtype
* Update gemma.py
* Update cross_entropy_loss.py
* Update cross_entropy_loss.py
* Chat Templates
* Update README.md
* Update README.md
* Update llama.py
* DoRA
* Update _utils.py
* Update chat_templates.py
* Update pyproject.toml
* Small fixes
* Update pyproject.toml
* Approx gelu
* Update geglu.py
* Approx gelu
* Update llama.py
* Update __init__.py
* Update __init__.py
* Update _utils.py
* Update geglu.py
* Update gemma.py
* Update rms_layernorm.py
* Update rms_layernorm.py
* Update rms_layernorm.py
* Update gemma.py
* Update gemma.py
* Update gemma.py
* Update gemma.py
* Update gemma.py
* Fix Gemma merging
* Update rms_layernorm.py
* Update gemma.py
* Update pyproject.toml
* Layernorms
* Gemma precision
* Update gemma.py
* sqrt
* Update gemma.py
* Update save.py
* RoPE and Gemma precision
* Update rms_layernorm.py
* Fix warning
* Update chat_templates.py
* Update chat_templates.py
* Update save.py
* Update save.py
* Update save.py
* Update chat_templates.py
* Update llama.py
* model_name
* Update loader.py
* Tokenizer overwritten
* Update llama.py
* Update llama.py
* Update llama.py
* Update save.py
* Accuracy
* Revert
* Update save.py
* Update fast_lora.py
* Update fast_lora.py
* Update fast_lora.py
* Update fast_lora.py
* Update fast_lora.py
* Update chat_templates.py
* Update save.py
* Update save.py
* Update llama.py
* Update llama.py
* Account for DoRA
* Update llama.py
* Update save.py
* GGUF incorrect
* Update save.py
* Update pyproject.toml
* kaggle new
* Update pyproject.toml
* Update pyproject.toml
* upcasting
* Fix Colab
* Update pyproject.toml
* Update pyproject.toml
* Update pyproject.toml
* Update pyproject.toml
* Update pyproject.toml
* Update pyproject.toml
* Update pyproject.toml
* Update pyproject.toml
* Update chat_templates.py
* Update chat_templates.py
* Update chat_templates.py
* Update chat_templates.py
* Update chat_templates.py
* Update pyproject.toml
* Update pyproject.toml
* Update pyproject.toml
* Update rope_embedding.py
* Update rope_embedding.py
* Fix bugs
* Update fast_lora.py
* Update fast_lora.py
* Update README.md
* Update README.md
* GGUF
* Update save.py
* Update save.py
* Update save.py
* Update save.py
* Update README.md
* Update README.md
* Bugs
* Update fast_lora.py
* Update pyproject.toml
* Update fast_lora.py
* Update __init__.py
* Update fast_lora.py
* dtype
* Update llama.py
* Update llama.py
* Update llama.py
* dtype
* Update mistral.py
* trust_remote_code
* lm_head
* Update llama.py
* save_pretrained_settings
* Update save.py
* Update save.py
* Update save.py
* Update save.py
* Update save.py
* Update save.py
* Update save.py
* Update save.py
* Update save.py
* Update save.py
* Update save.py
* Update save.py
* state_dict
* Update save.py
* whoami
* Update llama.py
* Update save.py
* Update llama.py
* Patch tokenizer
* Update chat_templates.py
* Heal tokenizers
* Update chat_templates.py
* Update mapper.py
* Update tokenizer_utils.py
* Update tokenizer_utils.py
* Update tokenizer_utils.py
* Update tokenizer_utils.py
* Update tokenizer_utils.py
* Update chat_templates.py
* tokenizer patching
* patch_tokenizer
* Update chat_templates.py
* Update tokenizer_utils.py
* Update chat_templates.py
* Update chat_templates.py
* Update chat_templates.py
* Update tokenizer_utils.py
* Edit
2024-03-28 04:16:50 +11:00
Daniel Han
1e2ba1b1d2
Initial commit
2023-11-30 03:50:09 +11:00