KI_TOOLS_PROFILES.md records what each local GGUF is actually for, based on the model cards: ornith is a purpose-built agentic coding model, Carnice targets agent runtimes, Qwopus is reasoning plus vision, and the two HauhauCS models are abliterated — an axis about refusals, not literary quality. It also maps which models the local mmproj.gguf fits (the Qwen3.6-35B-A3B based ones, not ornith). Capability and benchmark claims are attributed to their authors, not asserted. EVAL_RUBRIC.md separates what a script can measure from what needs reading, and warns that a passing test suite only proves the code satisfies its own tests. CHANGELOG covers the mmproj feature, the --print-effective-config fix, and the new tooling. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
4.4 KiB
4.4 KiB
Changelog
All notable changes to this project are documented here.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
Unreleased
Added
- Per-profile chat streaming and chat-request timeouts:
stream,read_timeoutandconnect_timeoutare now resolvable in[default]/[model.<profile>](CLI--stream/--read-timeout/--connect-timeoutstill override). - Multimodal support:
mmprojandmmproj_offloadconfig keys (CLI--mmproj,--no-mmproj-offload) pass a vision projector to the server. The path resolves underhf_homelikemodel_path, and a configured-but-missing projector now fails with exit code 3 — for--changebefore the running container is removed. docs/KI_TOOLS_PROFILES.md: which local model suits which task, plus mmproj compatibility per base model.docs/EVAL_RUBRIC.mdandscripts/eval_prompt_tests.py: scoring rubric and an evaluator for the manual prompt-test archive that measures length compliance and executes the model-generated code against its own pytest suite.scripts/run_prompt_suite.sh: runs a prompt domain against a running profile and stores the outputs under the archive's naming convention.[model.qwen35base]profile: the non-abliterated Qwen3.6-35B-A3B (bartowski imatrix Q4_K_M) as a control for the abliteration comparison. Inherits sampling,ctx_sizeand cache types from[default]; only model, container, port and GPU differ, so it runs alongside the production server.
Changed
- The chat request now honors the configured
(connect, read)timeout instead of a hard-coded 30 s; the defaultread_timeoutis 600 s so slow reasoning models are no longer cut off mid-generation. - Breaking:
--print-effective-configis now an action in the mutually exclusive action group instead of a flag, and it skips thedocker_available()check.--print-effective-config --startis therefore an argparse error (exit 2) rather than a config dump followed by a real container start.
Fixed
--print-effective-configcombined with an action silently performed that action. Documented as a diagnostic command (README, installation guide, manual),--print-effective-config --config … --startprinted the resolved config and then rando_start(), replacing a running container with the[default]model.
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.cppOpenAI-compatible Docker server instances, plus--chatand--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-keyfor 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, andmypy.
Changed
- Pin the default
llama.cppDocker image by digest for reproducibility instead of the moving:server-cudatag. - Model-size profile names carry a
bsuffix (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 configuredcontainer_port, ending the false "unhealthy" status when the server runs on a different port.