diff --git a/.claude/CLAUDE.md b/.claude/CLAUDE.md index b25de09..86c1491 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.17.2). Python 3.9+, MIT license. +Soup is a CLI-first LLM fine-tuning tool (v0.17.3). Python 3.9+, MIT license. ## Build & Development @@ -16,7 +16,7 @@ ruff check --fix soup_cli/ tests/ # Auto-fix lint issues ``` soup_cli/ cli.py # Entry point, Typer app, all command registration - __init__.py # __version__ = "0.17.1" + __init__.py # __version__ = "0.17.3" config/ schema.py # Pydantic models (SoupConfig, DataConfig, TrainingConfig, LoraConfig) loader.py # YAML -> SoupConfig, load_config_from_string() diff --git a/README.md b/README.md index e000e86..b0962a6 100644 --- a/README.md +++ b/README.md @@ -962,7 +962,7 @@ soup version # Full system info (useful for bug reports) soup version --full -# -> soup v0.14.3 | Python 3.11.5 | CUDA 12.1 | extras: serve, data +# -> soup v0.17.3 | Python 3.11.5 | CUDA 12.1 | extras: serve, data ``` ## Web UI diff --git a/pyproject.toml b/pyproject.toml index 7f15446..64b35e2 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "hatchling.build" [project] name = "soup-cli" -version = "0.17.2" +version = "0.17.3" 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 b971e2c..e112925 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.17.2" +__version__ = "0.17.3" diff --git a/soup_cli/cli.py b/soup_cli/cli.py index 2549002..df09a8e 100644 --- a/soup_cli/cli.py +++ b/soup_cli/cli.py @@ -25,6 +25,7 @@ from soup_cli.commands import ( ) from soup_cli.commands import doctor as doctor_cmd from soup_cli.commands import quickstart as quickstart_cmd +from soup_cli.utils.constants import GITHUB_URL console = Console() @@ -33,7 +34,10 @@ _verbose = False app = typer.Typer( name="soup", - help="Fine-tune LLMs in one command. No SSH, no config hell.", + help=( + "Fine-tune LLMs in one command. No SSH, no config hell.\n\n" + f"[dim]GitHub: {GITHUB_URL}[/]" + ), no_args_is_help=True, rich_markup_mode="rich", ) @@ -70,6 +74,7 @@ def version( """Show Soup CLI version.""" if not full: console.print(f"[bold green]soup[/] v{__version__}") + console.print(f"[dim]{GITHUB_URL}[/]") return import platform @@ -109,6 +114,7 @@ def version( parts.append(f"extras: {', '.join(extras)}") console.print(" | ".join(parts)) + console.print(f"[dim]GitHub: [link={GITHUB_URL}]{GITHUB_URL}[/link][/]") @app.callback(invoke_without_command=True) diff --git a/soup_cli/commands/doctor.py b/soup_cli/commands/doctor.py index 29869de..3741c6c 100644 --- a/soup_cli/commands/doctor.py +++ b/soup_cli/commands/doctor.py @@ -7,6 +7,8 @@ from rich.console import Console from rich.panel import Panel from rich.table import Table +from soup_cli.utils.constants import GITHUB_URL + console = Console() # Dependencies to check: (import_name, package_name, min_version, required) @@ -118,6 +120,8 @@ def doctor(): else: console.print("\n[bold green]All checks passed![/] Your environment is ready.") + console.print(f"\n[dim]GitHub: [link={GITHUB_URL}]{GITHUB_URL}[/link][/]") + def _check_gpu(): """Check GPU availability and display info.""" diff --git a/soup_cli/utils/constants.py b/soup_cli/utils/constants.py index a716bc9..3989b6f 100644 --- a/soup_cli/utils/constants.py +++ b/soup_cli/utils/constants.py @@ -4,6 +4,7 @@ APP_NAME = "soup" CONFIG_FILE = "soup.yaml" SOUP_DIR = ".soup" EXPERIMENTS_DB = "experiments.db" +GITHUB_URL = "https://github.com/MakazhanAlpamys/Soup" DEFAULT_CHAT_TEMPLATE = ( "{% for message in messages %}"