diff --git a/.claude/CLAUDE.md b/.claude/CLAUDE.md index 92aa676..4f4bc6b 100644 --- a/.claude/CLAUDE.md +++ b/.claude/CLAUDE.md @@ -1,6 +1,6 @@ # Soup CLI — Project CLAUDE.md -Soup is a CLI-first LLM fine-tuning tool (v0.21.0). Python 3.9+, MIT license. +Soup is a CLI-first LLM fine-tuning tool (v0.21.1). Python 3.9+, MIT license. ## Build & Development @@ -66,7 +66,7 @@ soup_cli/ axolotl.py # Axolotl YAML → SoupConfig migration unsloth.py # Unsloth .ipynb → SoupConfig migration (AST-only, no exec) recipes/ - catalog.py # 30 ready-made RecipeMeta configs for popular models + catalog.py # 29 ready-made RecipeMeta configs for popular models commands/ train.py # soup train (routes to SFT/DPO/GRPO/PPO/Reward/KTO/ORPO/SimPO/IPO) deploy.py # soup deploy ollama (deploy GGUF to Ollama) @@ -173,7 +173,7 @@ soup version # Show version (--full for details) - **LoraConfig**: r, alpha, dropout, target_modules, use_dora, use_rslora 15 built-in templates: chat, code, medical, reasoning, vision, audio, kto, orpo, simpo, ipo, embedding, rlhf, pretrain, moe, longcontext. -30 ready-made recipes via `soup recipes` (Llama 3.1/3.2, Qwen 2.5/3, Mistral, Gemma 3, Phi-4, DeepSeek R1). +29 ready-made recipes via `soup recipes` (Llama 3.1/3.2, Qwen 2.5/3, Mistral, Gemma 3, Phi-4, DeepSeek R1). ## Training Tasks diff --git a/README.md b/README.md index 07412c6..2e337a5 100644 --- a/README.md +++ b/README.md @@ -972,7 +972,7 @@ Automatically maps model, LoRA, training params, quantization, and task type. Wa ## Ready-Made Recipes -30 pre-built configs for popular models — no guessing hyperparameters: +29 pre-built configs for popular models — no guessing hyperparameters: ```bash # List all recipes @@ -1353,7 +1353,7 @@ soup migrate --from llamafactory config.yaml Import config from LLaMA-Factory soup migrate --from axolotl config.yml Import config from Axolotl soup migrate --from unsloth notebook.ipynb Import config from Unsloth notebook soup migrate --from llamafactory c.yaml --dry-run Preview without writing -soup recipes list List all 30 ready-made recipes +soup recipes list List all 29 ready-made recipes soup recipes show llama3.1-8b-sft Print recipe YAML soup recipes use llama3.1-8b-sft Copy recipe to soup.yaml soup recipes search "reasoning" Search by keyword/task/size diff --git a/pyproject.toml b/pyproject.toml index a2c4dea..b9d37a0 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "hatchling.build" [project] name = "soup-cli" -version = "0.21.0" +version = "0.21.1" description = "Fine-tune LLMs in one command. No SSH, no config hell." readme = "README.md" license = "MIT" diff --git a/soup_cli/__init__.py b/soup_cli/__init__.py index 46b6f22..961451e 100644 --- a/soup_cli/__init__.py +++ b/soup_cli/__init__.py @@ -1,3 +1,3 @@ """Soup CLI — Fine-tune LLMs in one command.""" -__version__ = "0.21.0" +__version__ = "0.21.1" diff --git a/soup_cli/commands/migrate.py b/soup_cli/commands/migrate.py index 4a51b62..bf67265 100644 --- a/soup_cli/commands/migrate.py +++ b/soup_cli/commands/migrate.py @@ -91,7 +91,7 @@ def migrate( migration_warnings = result.get("_warnings", []) if migration_warnings: from rich.markup import escape - warning_text = "\n".join(f" \u26a0 {escape(w)}" for w in migration_warnings) + warning_text = "\n".join(f" [yellow]![/] {escape(w)}" for w in migration_warnings) console.print(Panel( warning_text, title="[yellow]Migration Warnings[/]", diff --git a/soup_cli/config/loader.py b/soup_cli/config/loader.py index c6fa537..32567be 100644 --- a/soup_cli/config/loader.py +++ b/soup_cli/config/loader.py @@ -11,8 +11,9 @@ from soup_cli.config.schema import SoupConfig console = Console() -def load_config(path: Path) -> SoupConfig: +def load_config(path: "Path | str") -> SoupConfig: """Load a soup.yaml file and return validated SoupConfig.""" + path = Path(path) raw = yaml.safe_load(path.read_text(encoding="utf-8")) if raw is None: