Repository navigation
2026.9.2
Release 2026.9.2
New Features
Live context (KV-cache) usage tracking & context-aware queuing
- Poll llama.cpp's
/slotsendpoint to track per-slot context occupancy, surfaced live (via SignalR) on the dashboard and server detail pages as a "Context used" bar (turns red at ≥ 90%). - Optional context-aware queuing: when enabled, new requests are held in the queue while a server's busiest slot is at/above a configurable KV-cache threshold and it already has work in flight, so in-flight turns can finish and free context.
- New gateway settings:
ContextAwareQueuingtoggle andContextUsageQueueThresholdPercent, with Settings UI. - Added
LlamaRuntimeUsagemodel andLlamaSlotsSnapshotparser, plus unit tests for slot parsing and capacity-hold logic.
Configurable local/UTC timestamp display
- New server-rendered
Html.Timestamp(...)helper emits<time datetime="…Z">elements holding UTC values; a layout script rewrites the visible text into the viewer's chosen zone (local by default), persisted like the theme. - Added a timestamp zone selector (Local/UTC) to the settings panel.
- Handles
htmx:afterSettlesohx-boostswaps keep timestamps updated; tooltips show both UTC and local (ms precision). - Replaced inline UTC formatting across the dashboard, request log, servers, API keys, and engines changelog/releases pages.
Improvements
Request-log performance
ApiRequestLogtimestamps are now stored as round-trip UTC TEXT (lexicographically sortable), so time filters,ORDER BY, and retention cutoffs translate to SQL and rideIX_ApiRequestLogs_Timestampinstead of filtering client-side.GetRecentLogsAsync,DeleteOlderThanAsync, andGetSummaryStatsAsyncnow use indexed SQL-side filtering/aggregation.RetentionCleanupServicenow runsVACUUMafter a purge to compact freed payload pages; removed a duplicate service registration.- Added a migration and tests for the new value conversion.
Graceful backend error handling
- New
BackendErrorClassifierdetects routine, user-actionable backend failures (llama.cpp context-exceeded) and surfaces them as clean, well-formed client errors instead of unhandled exceptions that sever the connection:- OpenAI: mid-stream → in-band SSE error frame +
[DONE]; non-streaming → structured error with 400/502. - Ollama: mid-stream → NDJSON error line; non-streaming →
{ error }JSON with 400/502. - Responses: streaming →
response.failedevent; non-streaming → persists afailedrow and returns a failed response object.
- OpenAI: mid-stream → in-band SSE error frame +
LlamaCppProviderlogs context-exceeded failures at Warning (not Error), since they aren't provider malfunctions.
Fixes
- fix(api): ensure all non-assistant messages (system, user, tool, …) carry an empty
contentfield before forwarding to llama.cpp, preventing 400s when replaying stored conversations with a null-content turn.
Full Changelog: 2026.9.1...2026.9.2