diff --git a/INSTALL_FROM_ARCHIVE.md b/INSTALL_FROM_ARCHIVE.md index 2cfc12f..fef39bd 100644 --- a/INSTALL_FROM_ARCHIVE.md +++ b/INSTALL_FROM_ARCHIVE.md @@ -88,7 +88,7 @@ Weitere Aktionen, Optionen und Fehlersuche: [`BEDIENUNGSANLEITUNG.md`](BEDIENUNG ```bash pip install -e ".[dev]" -pytest -q +python -m pytest -q ``` --- @@ -100,7 +100,7 @@ Das Archiv wird reproduzierbar von `build_archive.py` erzeugt. Es 1. prüft, ob alle erforderlichen Projektdateien vorhanden sind, 2. gleicht die deklarierten Abhängigkeiten in einer frischen venv ab, 3. lässt die komplette Test-Suite laufen, -4. baut das `.tar.gz` (nur Allowlist: `src/ tests/ docs/ man/ scripts/` + `pyproject.toml`, `README.md`, `requirements*.txt`, `llama.cpp.config.example`, `build_archive.py`, `BEDIENUNGSANLEITUNG.md`, `INSTALL_FROM_ARCHIVE.md`), +4. baut das `.tar.gz` (nur Allowlist: `src/ tests/ docs/ man/ scripts/` + `pyproject.toml`, `README.md`, `LICENSE`, `CHANGELOG.md`, `requirements*.txt`, `llama.cpp.config.example`, `build_archive.py`, `BEDIENUNGSANLEITUNG.md`, `INSTALL_FROM_ARCHIVE.md`), 5. öffnet das Archiv erneut und verifiziert die enthaltenen Dateien, 6. installiert das Paket aus dem Archiv in einer weiteren frischen venv und testet das Konsolenskript. diff --git a/README.md b/README.md index 97a9b20..6f27152 100644 --- a/README.md +++ b/README.md @@ -123,6 +123,19 @@ Parametern, nicht die Qwen-Version. Vollständige Optionsliste: `llamacppctl --help` oder die Manpage (`man/llamacppctl.1`, siehe unten). +## Migration von den Shell-Skripten + +`llamacppctl` ersetzt die einzelnen Shell-Skripte durch Actions **eines** +Werkzeugs (`--profile` ist optional; ohne greift die `[default]`-Sektion): + +| Altes Skript | Neuer Aufruf | +|---|---| +| `start-llm-server.sh` | `llamacppctl --start --config llama.cpp.config [--profile ]` | +| `status-llm-server.sh` | `llamacppctl --check --config llama.cpp.config [--profile ]` | +| Stop-Skript | `llamacppctl --stop --config llama.cpp.config [--profile ]` | +| `switch-llm.sh` (Modellwechsel) | `llamacppctl --change --config llama.cpp.config [--profile ]` | +| (neu) direkter Chat-Test | `llamacppctl --chat --config llama.cpp.config -p "..."` | + ## Sicherheitsmodell (Kurzfassung) Für Details siehe [`docs/SECURITY_AND_OPERATIONS.md`](docs/SECURITY_AND_OPERATIONS.md). diff --git a/build_archive.py b/build_archive.py index a117389..72dbacd 100644 --- a/build_archive.py +++ b/build_archive.py @@ -72,7 +72,6 @@ REQUIRED_FILES = [ "tests/test_http_ops.py", "tests/test_lock_ops.py", "tests/test_actions.py", - "docs/How_to_use.md", "scripts/smoke.sh", "BEDIENUNGSANLEITUNG.md", "INSTALL_FROM_ARCHIVE.md", diff --git a/docs/Archiv_fertig_-_Check_und_Installation.md b/docs/Archiv_fertig_-_Check_und_Installation.md deleted file mode 100644 index 38ad408..0000000 --- a/docs/Archiv_fertig_-_Check_und_Installation.md +++ /dev/null @@ -1,53 +0,0 @@ -Das Archiv ist fertig und übergeben: llamacppctl-installable.tar.gz. - -Was gebaut wurde - -Statt manuell zu tarballen, gibt es jetzt ein eigenständiges Python-Skript build_archive.py, das: - -Prüft, ob alle erforderlichen Projektdateien vorhanden sind (Quellcode, Tests, Doku, Manpage, Config-Beispiel, scripts/smoke.sh) - -pyproject.toml-Abhängigkeiten gegen requirements.txt abgleicht - -Die deklarierte Abhängigkeit (requests>=2.31,<3) in einer frischen, isolierten virtuellen Umgebung installiert, um echte Installierbarkeit zu bestätigen (nicht nur einen Trockenlauf) - -Die vollständige Test-Suite (aktuell 130 Tests, alle grün) laufen lässt - -Das .tar.gz über Pythons tarfile-Modul baut (nicht rohes Shell-tar) - -Das Archiv erneut öffnet und verifiziert, dass jede erwartete Datei tatsächlich enthalten ist - -Das Archiv in ein temporäres Verzeichnis entpackt, in einer weiteren frischen venv installiert und den llamacppctl-Befehl ausführt, um Konsolenskript und Konfigurationsauflösung Ende-zu-Ende zu bestätigen - -Da diese Sandbox keinen Docker-Daemon hat, bricht der letzte Schritt erwartungsgemäß an der Docker-Verfügbarkeitsprüfung ab — das Skript erkennt genau diesen Fall und wertet ihn nicht als Fehler, da Paketinstallation, Konsolenskript-Registrierung und Argumentparsing bereits vorher erfolgreich bestätigt wurden. - -Enthaltene Projektstruktur - -src/llamacppctl/ — die vollständige Implementierung: cli.py, config.py, prompt_io.py (SSRF-gehärtete Eingabeschicht), docker_ops.py, http_ops.py, lock_ops.py, actions.py, main.py - -tests/ — 130 Tests (Prompt-Quellen, Datei-/URL-Sicherheit mit gemockter DNS-Auflösung, Konfigurationsauflösung, CLI-Validierung, Docker-/HTTP-Operationen mit gemocktem subprocess/requests, File-Locking) - -docs/SECURITY_AND_OPERATIONS.md — vollständige Architektur-, Konfigurations- und Sicherheitsdokumentation - -man/llamacppctl.1 — klassische Unix-Manpage - -README.md, llama.cpp.config.example, requirements.txt, pyproject.toml - -Selbst verifizieren - -Nach dem Herunterladen kannst du die Integrität unabhängig prüfen, ohne mir zu vertrauen: - -bash -gzip -t llamacppctl-installable.tar.gz && echo "Archiv OK" -tar tzf llamacppctl-installable.tar.gz - -Installation: - -bash -tar xzf llamacppctl-installable.tar.gz -cd llamacppctl -python3 -m venv .venv && source .venv/bin/activate -pip install . -cp llama.cpp.config.example llama.cpp.config # anpassen -llamacppctl --print-effective-config --config llama.cpp.config --start - -Da build_archive.py selbst mit im Archiv liegt, kannst du das Archiv auf deinem eigenen Rechner jederzeit neu bauen und erneut verifizieren, ganz ohne auf mich angewiesen zu sein. diff --git a/docs/How_to_use.md b/docs/How_to_use.md deleted file mode 100644 index 53ab829..0000000 --- a/docs/How_to_use.md +++ /dev/null @@ -1,33 +0,0 @@ -### Ist das start- stop- change-Skript etc auch dabei ? - -Ja — aber als ein einziges vereinheitlichtes CLI-Tool statt separater Shell-Skripte. Das war ja genau der Punkt der Neuentwicklung: `llamacppctl` ersetzt die einzelnen Skripte (`start-llm-server.sh`, `status-llm-server.sh`, `switch-llm.sh`, …) durch **eine** Python-Anwendung mit Unterbefehlen (Actions). - -Alle Funktionen sind im Archiv enthalten, als Actions von `llamacppctl`: - -| Alte Skript-Idee | Neuer Aufruf | -|---|---| -| `start-llm-server.sh` | `llamacppctl --start --config llama.cpp.config --profile ` | -| `status-llm-server.sh` | `llamacppctl --check --config llama.cpp.config --profile ` | -| Stop-Skript | `llamacppctl --stop --config llama.cpp.config --profile ` | -| `switch-llm.sh` (Modellwechsel) | `llamacppctl --change --config llama.cpp.config --profile ` | -| (neu) direkter Chat-Test | `llamacppctl --chat --config llama.cpp.config --profile -p "..."` | - -Die Logik dahinter liegt in `src/llamacppctl/actions.py` (`do_start`, `do_check`, `do_stop`, `do_change`, `do_chat`) und `src/llamacppctl/docker_ops.py` (baut den `docker run`-Befehl, startet/stoppt/entfernt Container, liest Logs). - -Besonderheiten gegenüber den ursprünglichen Shell-Skripten: - -- `--change` nutzt eine exklusive Dateisperre (`/tmp/llamacppctl..lock`), damit zwei gleichzeitige Modellwechsel für denselben Container sich nicht in die Quere kommen. -- Die Start-Bereitschaftsprüfung (`--start`/`--change`) wartet auf eine echte Chat-Completion-Antwort, nicht nur auf einen offenen Port — das ist zuverlässiger als ein reiner Port-Check. -- `--dry-run` zeigt dir den vollständigen `docker run`-Befehl an, ohne ihn auszuführen (reine Vorschau: kein Lock, kein Container-Abriss). -- `--change` validiert den Modellpfad **vor** dem Entfernen des laufenden Containers und läuft — wie `--start` — unter Lock; `--force` umgeht einen hängenden Lock. - -Neuere Optionen (Details in Manpage/README): - -- **Antwortsteuerung:** `--max-tokens` (Reasoning-Modelle brauchen viel Budget, sonst leere Antwort), `--chat-temp`, und `--stream` für token-weise Live-Ausgabe bei `--chat`. -- **Netzwerk/Auth:** Port wird per Default nur auf `127.0.0.1` veröffentlicht; `--expose` bindet auf alle Interfaces, `--api-key` schützt die Chat-API (Bearer-Token). -- **Scriptbar:** `--check` liefert Exit-Code 0 (läuft/erreichbar) bzw. 5 — geeignet für Monitoring/Cron. -- **`hf_home`** darf Env-Variablen enthalten, z. B. `hf_home = ${HF_HOME}`. -- **End-to-End-Test:** `scripts/smoke.sh` (opt-in) gegen einen echten Server. - -Die vollständige Referenz zu allen Optionen steht in der Manpage (`man/llamacppctl.1`) und in `README.md`/`docs/SECURITY_AND_OPERATIONS.md`. -