• v0.1.0 49a7756a01

    dschlueter released this 2026-07-07 10:36:24 +02:00 | 18 commits to main since this release

    Initial release. Replaces the previous collection of shell scripts (start-llm-server.sh, status-llm-server.sh, switch-llm.sh, …) with a single Python package.

    Added

    • CLI to start / check / stop / change llama.cpp OpenAI-compatible Docker servers, plus --chat and --dry-run.
    • Layered configuration (builtin defaults → [default][model.<profile>] → CLI overrides), [prompt.<profile>] fallback prompts, ${ENV}/~ expansion.
    • Security-hardened prompt input layer: file reads limited to regular UTF-8 files with a size cap and symlink rejection; URL reads are HTTPS-only with SSRF defenses (IP-literal / private / loopback / link-local / metadata blocking, DNS pinning against rebinding, no-credentials URLs, redirect re-validation, content-type allowlist, streaming size limit).
    • Loopback-only port publishing by default; --expose + --api-key for LAN use.
    • Readiness check via a real chat completion (not just an open port); exclusive non-blocking file lock for --change.
    • MIT LICENSE, man page, opt-in end-to-end smoke test (scripts/smoke.sh).
    • CI on Forgejo: pytest (Python 3.10 and 3.12), ruff, and mypy.

    Changed

    • Pin the default llama.cpp Docker image by digest for reproducibility instead of the moving :server-cuda tag.
    • Model-size profile names carry a b suffix (qwen35b, qwen27b) so the digits read as parameter count, not Qwen version; doc examples run against [default] so they work by copy & paste.

    Fixed

    • Override the image's baked-in Docker HEALTHCHECK (hardcoded to port 8080) so it targets the configured container_port — ending the false "unhealthy" status when the server runs on a different port.

    See CHANGELOG.md for the full list.

    Downloads