Skip to content

Releases

version 3.3.0

Choose a tag to compare

@aginies aginies released this 02 Oct 09:13

Full Changelog: v3.1.0...V3.3.0

version 3.1.0

Choose a tag to compare

@aginies aginies released this 07 Sep 18:39

Performance Improvements

  • Blazing Fast GGUF Parsing: Skip parsing, allocating, and UTF-8 validating unnecessary massive tokenizer metadata (such as merges, tokens, token types) that can be up to 11MB per GGUF file. Rewrote the parsing using a seekable, 1MB-buffered Reader to seek past these unused blocks directly without performing raw I/O or memsets. Tensor names are now skipped without any String allocation. GGUF header parsing on real models dropped from ~21ms to ~3.1ms (6.8x faster).
  • Process-Wide GPU Detection Caching: Cached system GPU detection results with a 30-second TTL to avoid costly subprocess spawning overheads on every call in supported platforms.
  • Shared Connection Pools & HTTP Clients: Consolidated reqwest client instantiation into shared static LazyLock clients (HTTP_CLIENT with a 30s timeout for API/health checks and DOWNLOAD_CLIENT with connect-only timeouts for long-running streaming downloads), reusing connection pools and TLS contexts.
  • Windowed Table Rendering: Refactored the Models, Search, and Files tab tables to build and allocate rows only for the active, visible viewport window anchored around the selection, rather than rendering and allocating all rows. Removed persistent TableState fields as navigation is already cleanly index-driven.
  • Settings Hash Elimination: Replaced expensive ModelSettings struct hashing with a simple u64 settings cache version counter, completely eliminating the need to hash ~50 settings fields on every single render frame.
  • Optimized Searches & Regex Caching: Cached compiled search regexes inside SearchState (only recompiling when the query actually changes) and sorted search results by model_id length for substantially faster prefix matching.
  • Minor Allocations Refactoring: Wrapped physical_cores() detection in a LazyLock (parsing /proc/cpuinfo exactly once) and pre-allocated vectors/strings inside the download panel rendering loop.

Refactoring & Architectural Changes

  • Simplified Bench-Tune Engine: Removed non-effective sampling parameters (temperature, top_p, top_k, repeat_penalty) from the bench-tune interface since they do not impact system throughput. Removed the redundant RuntimeOnly mode (which ran benchmarks sequentially under the same server) to always clean-spawn servers for unique parameter configurations. Removed associated enums, configuration fields, keys, views, shortcuts (Alt+M), and tests.
  • Flexible Linker Configuration: Switched to a generic clang linker configuration instead of hardcoding clang-22 to ease compilation across various platforms and generic CI environments.

Bug Fixes

  • TUI Panic Prevention:
    • Clamped Files table offsets to total_files (via .min(total_files)) to prevent out-of-bounds slice panics (files[1..0] ) when navigating tiny terminals where total_files and visible_height are 0.
    • Used saturating_sub in offset calculations for Models, Search, and Files modes to prevent usize underflows.
  • Unified Active Model Card Rules: Unified card display logic across all server modes (Normal/Router/Bench/BenchTune). The card now correctly shows active loaded model statistics, details of the selected model in transitional states (Loading/Benchmarking/Failed), and displays "No active model" accurately, avoiding stale failed states or incorrect "NOT LOADED" tags.
  • Security Hardening (Fail-Closed XSS Protection): In the web-chat interface (chat.html), if DOMPurify is missing or fails, rendering falls back to safe textContent instead of injecting raw HTML, mitigating potential XSS vectors.
  • Robust Error & Poisoned-Lock Recovery: Safely recover poisoned Mutex and RwLock guards using .into_inner() across 40 distinct sites instead of unwrapping and causing TUI crashes.
  • Input & Border Guarding:
    • Automatically regenerate TLS certs if non-UTF-8 characters are detected in paths.
    • Robustly fall back to the main branch if HuggingFace repository queries fail or find invalid branch patterns.
    • Added safe parsing checks for CORS origins.
  • Rope Scaling Context Correction: Ensured rope_scale is only applied to context size calculations when rope_yarn_enabled is explicitly active and rope_scale > 1.0, aligning CLI arguments, metrics polling, VRAM estimates, and dialog displays.
  • Internationalization (i18n): Expanded translations coverage (English, French, German, Italian) for loading labels, about panels, and bench-tune statuses.

Full Changelog: v3.0.0...v3.1.0

version 3.0.0

Choose a tag to compare

@aginies aginies released this 01 Sep 18:42

llm-manager 3.0.0

Features

  • Web-based chat UI — integrated web chat interface with enhanced web search triggers
  • URL fetch with SSRF protection — extract bare URLs from chat messages, fetch content concurrently alongside web search. Blocks private/loopback/link-local/metadata IPs to prevent SSRF
  • Recursive GGUF discovery — recursive=true on HF tree API to find GGUF files in subdirectories

Performance

  • Batch stream DOM updates via requestAnimationFrame
  • Prefer gen_tps for live latency display
  • Optimized TUI rendering loops and log streaming memory footprint

UI

  • Polished chat layout
  • Creation date in sidebar
  • Stop reorder on click

Fixes

  • Status bar file count
  • Branch mismatch, pagination, and size fallback in list_gguf_files
  • Repo created date in model info

Full Changelog: v2.1.1...v3.0.0

v2.1.1

Choose a tag to compare

@aginies aginies released this 21 Aug 13:22

[2.1.1] — 2026-08-21

Fixed

  • Hybrid GPU mapping — --main-gpu now maps the global GPU index (from detect_all_gpus) to a backend-specific index bef
    ore passing it to llama-server. CUDA only sees NVIDIA devices, ROCm only sees AMD devices, so multi-vendor setups (e.g. hybrid
    models) picked the wrong GPU. New map_main_gpu_to_backend() in src/backend/hardware.rs plus Backend::is_cuda() / Backe nd::is_rocm() helpers.
  • Windows script export — command-line export overlay now writes test_llamaserver.bat to the OS temp dir on Windows inst
    ead of hardcoded /tmp/test_llamaserver.sh (which failed on Windows).
  • Windows lib sentinel — backend install detection now accepts both llama.dll and libllama.dll (new is_lib_sentinel_p resent()), so releases shipping either name are recognized as installed.
  • Serve mode exit status — cross-platform failed_exit_status() helper uses cmd /c exit 1 on Windows instead of sh -c exit 1 (which does not exist there).
  • Windows build — unsafe extern block (Rust 2024 requirement) and as_os_str() for Path→wide conversion in get_free_sp ace_bytes.

Full Changelog: v2.1.0...v2.1.1

version 2.1.0

Choose a tag to compare

@aginies aginies released this 21 Aug 07:16

[2.1.0] — 2026-08-21

Added

  • Built-in GGUF parser — replaced gguf-rs with minimal header parser (src/gguf.rs). Tensor GGML types kept as raw u32 , so new quantizations (NVFP4, etc.) never break parsing.
  • Hybrid/SSM/MTP model metadata — GgufMetadata now exposes full_attention_interval, attention.key_length, ssm.*, nextn_predict_layers.
  • Cross-platform disk space check — get_free_space_bytes now works on macOS (statfs) and Windows (GetDiskFreeSpaceExW ), not just Linux. Downloads no longer blocked on non-Linux platforms.
  • Download stall detection — 30s connect timeout, 60s stalled-stream detection, empty-file check even when Content-Length is missing.
  • Backend::from_slug — lossless inverse of slug() for all 13 backend variants.
  • ROCm flexible asset matching — match any ubuntu-rocm asset name, resolved per release.
  • Graceful server shutdown — wait for llama-server exit to prevent orphaned processes.
  • i18n improvements — interned missing-key fallback, single-pass t_fmt! substitution.
  • Test suite additions — config_tests.rs, gguf_tests.rs, models_tests.rs (600+ new tests).

Fixed

  • Partial config defaults — DefaultParams fields now use real default functions instead of serde zero, so a partial def ault: block no longer zeros all settings.
  • --backend CLI flag — only overrides config when explicitly passed on CLI (was always overriding).
  • GGUF quantization labels — corrected llama_ftype display names and quality ranks.
  • API proxy startup errors — propagate instead of hanging.
  • Windows build — unsafe extern block (Rust 2024 requirement), as_os_str() for Path→wide conversion, cross-platform ex
    it status helper in serve mode.
  • Picker modals — improved overlay rendering and log follow re-arm.
  • Hardware detection — improved GPU vendor/model detection on Windows (wmic) and macOS (system_profiler).

Changed

  • get_free_space_bytes now returns Option<u64> — callers skip space check when None instead of assuming zero.
  • Cargo.toml — bumped to edition 2024, cleaned up dependencies.
  • Documentation — updated server settings, router mode, API reference, usage guides.

Full Changelog: v2.0.0...v2.1.0

version 2.0.0

version 2.0.0 Pre-release
Pre-release

Choose a tag to compare

@aginies aginies released this 19 Aug 16:11

What's new

Picker dialogs unified and scrollable

All 13 picker dialogs (host, model, profile, backend, prompt, etc.) now share a single rendering helper with consistent width,
padding, and description indentation.

  • Fixed-width popup (60 cols), content-based height clamped to 80% of the terminal
  • Scrolling added to host, prompt, and profile pickers (PageUp/PageDown, mouse wheel, auto-follow); backend picker reuses the
    same windowing logic
  • Picker dialog titles cleaned up across en/fr/it/de locales

Log panel follow fixes

  • Auto re-arm follow mode when scrolling back to the bottom
  • Stale scroll offsets clamped when log content shrinks
  • add_log now reliably triggers a redraw

Active model card: proper load-failure handling

The active model card no longer gets stuck in the Loading state when a model fails to load.

  • Server exit during load now transitions Loading -> Failed and resets metrics/VRAM cache
  • API load failures report the real error (model name + error) via a dedicated channel instead of parsing log lines
  • Failed state carries the actual error message, not generic toast text
  • Spawn-panic branch and pending-kill path both reset loading state (router multi-model safe)
  • New i18n strings: async.load_failed_generic, async.load_failed_oom, async.server_exited_load (en/fr/it/de)

Changelog

  • 84e27dd fix(tui): unify picker spacing, padding and scroll
  • 3d4c862 fix(log): auto re-arm follow at bottom, clamp stale scroll offset, set redraw in add_log
  • 3c738a3 fix(active_model): reset card content on load failure
  • 862e0bd bump version to 2.0.0

Full Changelog: v1.11.1...v2.0.0

version 1.11.1

Choose a tag to compare

@aginies aginies released this 18 Aug 08:09

Fix build

version 1.11.0

Choose a tag to compare

@aginies aginies released this 18 Aug 06:46

Highlights

  • Improved the Qwen-MoE profile by removing the max_tokens / --n-predict cap and updating generation defaults.
  • Fixed multiple issues in search, dialogs, downloads, and web search.
  • Improved GNOME extension build/packaging and API proxy reliability.

What’s Changed

Features / Enhancements

  • Qwen-MoE: disabled max_tokens / --n-predict cap.
  • Qwen-MoE: updated profile defaults to:
    • temp 0.6
    • MTP draft-mtp with 2 tokens
    • repeat_last_n 0

Bug Fixes

  • Search: fixed pagination state, README display in files mode, and i18n handling.
  • Dialogs: unified confirm shortcut to y/n and allowed up/down toggle.
  • Downloads: fixed concurrent download freezes, fake pause behavior, and cancel race conditions.
  • Web search: fixed source URL extraction by stripping all leading # characters.
  • Increased API proxy client timeout to 10 minutes.
  • Aborted metrics polling on server exit and prevented the API from being disabled on port failure.
  • Fixed benchmark report HTML generation to use safe UTF-8 byte slicing.
  • Fixed an issue with missing files.
  • Corrected AMD GPU name assertion in lspci parsing test.

GNOME Extension / Build

  • Added correct extension code and fixed the build.
  • Switched build.sh GNOME extension installation from cp to gnome-extensions pack/install.
  • Synced GNOME extension version to 10100 to match Cargo.toml 1.10.0.

Full Changelog: v1.10.0...v1.11.0

v1.10.0

Choose a tag to compare

@aginies aginies released this 16 Jul 12:24

Added

  • GPU device names in Main GPU setting — show full GPU model names on Linux using lspci (7a44226)
  • Toast warning for insufficient disk space — displays warning when download target has low free space (f90594d)

Fixed

  • llama.cpp backend symlink extraction — preserve symlinks during tar extraction and library copy, fixing file too short
    errors with versioned .so libraries (8efe10f)
  • Backend picker scroll — correct visible entries calculation and add scroll to show all available backends (3faefd7, 3 ce4fba)
  • API endpoint not disabled on transient port bind after server exit (41f1946)
  • Config file — 5 bug fixes in config loading/parsing (8286a52)
  • top_k clamping to 0 in WsMetrics conversion (ccb5af1)

Changed

  • Log level default changed to trace, added warning level (67718d2)
  • Refactored RPC worker edit state to picker, simplified metrics model name (67718d2)

Server

  • WebUI toggle added to LLaMA server options picker, persisted to config (2c8b7e6, 12122c8, 797a2fc)

Full Changelog: v1.9.0...v1.10.0

version 1.9.0

Choose a tag to compare

@aginies aginies released this 01 Jul 14:01

Features

  • LLaMA Server Options Picker — configure port, threads, mode, and log level from the UI
  • Log level config — new log_level setting for llama-server output verbosity (default: trace)
  • Accurate download progress bar — uses llama.cpp's "loading model: X/Y" for real progress
  • Expert field highlighting — colored expert fields + chat template docs
  • GGUF decode failure message — improved error display and color layout

Fixes

  • Dashboard auth — replaced script injection with safe meta tag
  • WebSocket auth (M2) — migrated from URL query param to subprotocol
  • CORS (M1) — dynamic origin validation
  • SSRF (M4) — scheme validation + constant-time WebSocket auth comparison
  • L1-L8 security hardening — 8 LOW severity fixes
  • Backend picker — stays open after delete confirmation
  • Server spawn failure — properly clears server_handle
  • Download control keys — restored in search/files modes
  • API endpoint save — fixed
  • Packaging — inlined metrics.js into extension.js and prefs.js
  • Missing i18n key — added panel.server.api_endpoint
  • Log level flag — -lv now accepts numeric values (0-4)

Refactoring

  • RPC worker edit state — moved from settings/edit to picker namespace
  • Metrics model name — simplified router-mode logic, increased throttle interval
  • Overlays rendering — DRY extracted helpers, consistent formatting
  • Picker navigation — unified j/k vim keys, wrap_field_picker helper
  • LLaMA Server panel — renamed from "LLaMA Server Options" across all locales
  • ratatui — bumped 0.29 → 0.30.2

i18n

  • Added dialog.llama_server.log_level_warning to all locales (de, en, fr, it)

Full Changelog: v1.8.0...v1.9.0