NOTE: This currently needs a patched ds4 to make a shared library and route logging and aborts; we also embed the .metal files. See https://github.com/NimbleMarkets/ds4/tree/nm-shared
- Add
ds4go install catalogcommand - Add AMD ROCm support
- Add
ds4SSD streaming support - Add session cancellation with
session.SetCancel - Tool loops now replay assistant reasoning across turns (preserving KV-cache reuse) and recover tool calls the model starts inside an
unclosed
<think>block.
- BREAKING We changed how logging works in our
nm-sharedbranch ofds4, so there is nowSetStderrFdrather thanSetLogFunc. - Add
lsppackage for Language Server Protocol (LSP) support - Add
webtoolpackage for searching and querying web pages using Google Chrome. - Add
ds4go web searchandds4go web visitCLI tools - Add
ds4.DetectDefaultBackend - Add
ds4.CaptureStderr(io.Writer)helper
- Quick install script:
curl -fsSL https://nimblemarkets.github.io/ds4go/install.sh | shlands the CLI in/usr/local/binwith checksum verification - Added
ds4go install --pinto use customds4dynamic libraries. - Rearraged CLI with
ds4go validateandds4go status - libds4 power throttling: bind
ds4_engine_power,ds4_engine_set_power,ds4_session_power,ds4_session_set_power, plus the newEngineOptions.PowerPercentfield, for runtime GPU duty-cycle control (libds4 >= upstream commit 444afce / f398aa3) - libds4 display progress: bind
ds4_session_set_display_progressasSession.SetDisplayProgressfor UI-only fine-grained prefill progress (libds4 >= upstream commit fc1450d); distinct fromSetProgress, must not be treated as a durable KV checkpoint boundary - libds4 vocab and logits: bind
ds4_engine_vocab_sizeasEngine.VocabSizeandds4_session_copy_logitsasSession.CopyLogits, both present inds4.hsince earlier releases but not previously bound - libds4 model identity & inspect: bind
ds4_engine_model_name/ds4_engine_model_idasEngine.ModelName/Engine.ModelID, and add theEngineOptions.InspectOnlyfield (libds4 upstream commit 04f151d, DeepSeek V4 PRO support).ds4_context_memory_estimatenow uses the active model shape, so anEngine.ContextMemoryEstimatemethod is provided alongside the package-level function ds4go prompt --inspectnow prints aModel: <name> (id=<id>)line after the libds4 summary, and passesInspectOnly=trueso the engine open skips full generation-path prepds4go-steerstatus bar shows the active model name and id; startup also writes aLoaded model: …entry to the steer log file- PRO model catalog: add
pro-imatrix,pro, andq2-q4-imatrixentries to the curated installer catalog, SHA256s pinned from Hugging FaceX-Linked-Etag - fix: model downloads were returning HTTP 400 from HF's Xet CDN (
cas-bridge.xethub.hf.co, which serves PRO and now all files in the repo). The CDN rejects open-ended (Range: bytes=N-or missingRange) GETs on large objects, and refuses any single Range that spans more than roughly 200 GiB. The downloader now always sends a closed Range and chunks fetches at 16 GiB so the 432 GiB PRO file streams successfully; resume from a.partfile still works at any byte offset - fix:
cEngineOptionswas missing thepower_percentfield added in libds4 upstream commit 444afce; loading any libds4 built at or after that commit could silently corrupt theWarmWeightsandQualityflags. The struct now matchesds4.hexactly - test: add gated (
-tags ds4_integration)TestRealLibraryPowerRoundTripthat loads a real libds4 and round-trips aPowerPercentvalue — catchescEngineOptionsABI drift that mock-based tests cannot detect
- DSML tool calling: end-to-end DSML encoder/decoder/dispatch, with an
incremental
StreamDecoderfor live tool-call streaming and access to the final stream tool arguments - Install lifecycle:
ds4go installnow writesds4go-install.jsonmetadata, detects upgrades/replacements, and supports a newvalidatesubcommand that checks permissions, SHA256, and dynamicdlopen - Uninstall command:
ds4go uninstallcleanly removes the library,.sha256sidecar, and metadata; reuses a new shared TUI confirm dialog - Engine logging: root logging helpers plus a libds4 log callback
exposed through
ds4api, withSetAbortFuncfor fatal-invariant callbacks ds4apiserializes libds4 calls to avoid concurrent-entry hazards- CI now runs the full test suite under
-race
- feat: add Context for cancelation
- feat: Access to Engine calls are syncronized by mutex, making access thread-safe
- Developer ergonomic, module and package renaming!
- Securty hardening
- TUI love
- GoReleaser-based releases with Homebrew tap (
brew install nimblemarkets/tap/ds4go)
- Initial release.