Compare commits
No commits in common. "49a7756a01d81b185d0f01c5acc2b18a1f7e3f17" and "9d47424fc1280028ea8b76977294bcc7a22ef1b1" have entirely different histories.
49a7756a01
...
9d47424fc1
5 changed files with 12 additions and 62 deletions
47
CHANGELOG.md
47
CHANGELOG.md
|
|
@ -1,47 +0,0 @@
|
||||||
# Changelog
|
|
||||||
|
|
||||||
All notable changes to this project are documented here.
|
|
||||||
|
|
||||||
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
|
||||||
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
||||||
|
|
||||||
## [Unreleased]
|
|
||||||
|
|
||||||
## [0.1.0] - 2026-07-07
|
|
||||||
|
|
||||||
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, and switch (`--change`) `llama.cpp` OpenAI-compatible
|
|
||||||
Docker server instances, plus `--chat` and `--dry-run`.
|
|
||||||
- Layered configuration (builtin defaults → `[default]` → `[model.<profile>]` →
|
|
||||||
CLI overrides) with `[prompt.<profile>]` fallback system prompts and
|
|
||||||
`${ENV}`/`~` expansion.
|
|
||||||
- Security-hardened prompt input layer for `--system-*`/`--prompt-*`: 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 and 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) and an
|
|
||||||
exclusive non-blocking file lock for `--change`.
|
|
||||||
- MIT `LICENSE`, man page, and an opt-in end-to-end smoke test (`scripts/smoke.sh`).
|
|
||||||
- Continuous integration 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; documentation examples run against
|
|
||||||
the `[default]` section 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.
|
|
||||||
|
|
||||||
[Unreleased]: https://kitux.de/forgejo/dschlueter/llamacppctl/compare/v0.1.0...HEAD
|
|
||||||
[0.1.0]: https://kitux.de/forgejo/dschlueter/llamacppctl/releases/tag/v0.1.0
|
|
||||||
|
|
@ -177,6 +177,4 @@ SMOKE_GPU=1 scripts/smoke.sh
|
||||||
|
|
||||||
## Lizenz
|
## Lizenz
|
||||||
|
|
||||||
MIT License
|
MIT
|
||||||
Copyright (c) 2026 Dieter Schlueter
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -44,8 +44,6 @@ from pathlib import Path
|
||||||
REQUIRED_FILES = [
|
REQUIRED_FILES = [
|
||||||
"pyproject.toml",
|
"pyproject.toml",
|
||||||
"README.md",
|
"README.md",
|
||||||
"LICENSE",
|
|
||||||
"CHANGELOG.md",
|
|
||||||
"requirements.txt",
|
"requirements.txt",
|
||||||
"requirements-dev.txt",
|
"requirements-dev.txt",
|
||||||
"llama.cpp.config.example",
|
"llama.cpp.config.example",
|
||||||
|
|
@ -85,8 +83,6 @@ INCLUDE_DIRS = ["src", "tests", "docs", "man", "scripts"]
|
||||||
INCLUDE_FILES = [
|
INCLUDE_FILES = [
|
||||||
"pyproject.toml",
|
"pyproject.toml",
|
||||||
"README.md",
|
"README.md",
|
||||||
"LICENSE",
|
|
||||||
"CHANGELOG.md",
|
|
||||||
"requirements.txt",
|
"requirements.txt",
|
||||||
"requirements-dev.txt",
|
"requirements-dev.txt",
|
||||||
"llama.cpp.config.example",
|
"llama.cpp.config.example",
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,7 @@
|
||||||
# Development install. Editable package plus the [dev] extra (pytest, ruff,
|
# Development/test dependencies (mirrors [project.optional-dependencies].dev
|
||||||
# mypy, ...). pyproject.toml remains the single source of truth; there is no
|
# in pyproject.toml).
|
||||||
# manual dependency mirror to keep in sync.
|
-r requirements.txt
|
||||||
-e .[dev]
|
pytest>=7.4
|
||||||
|
ruff>=0.6
|
||||||
|
mypy>=1.11
|
||||||
|
types-requests
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
# Runtime install. pyproject.toml is the single source of truth for
|
# Runtime dependencies (mirrors [project.dependencies] in pyproject.toml).
|
||||||
# dependencies; this file just installs the package (and thus its declared
|
# Provided for users who want to verify/install dependencies without pip's
|
||||||
# runtime dependencies) so `pip install -r requirements.txt` keeps working.
|
# PEP 517 build isolation, e.g. `pip install -r requirements.txt`.
|
||||||
.
|
requests>=2.31,<3
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue