Skip to content

v0.5.0

Choose a tag to compare

@github-actions github-actions released this 09 Oct 14:17
· 8 commits to main since this release

dmsh v0.5.0 — remote provider, tool calling, working clarifications

Two new capabilities and one bug fix that made multi-step requests unusable.

What's new

Providers: local model or Pollinations

dmsh could only run a local GGUF through llama.cpp. Now the inference
source is a setting:

Provider Behaviour
auto (default) local GGUF if one is found, otherwise Pollinations
local local GGUF only; fails with a hint if none is present
pollinations Pollinations API; local models are ignored
dmsh --provider auto "what's eating my disk?"      # local if present
dmsh config set provider pollinations              # always remote
dmsh --remote-model mistral "..."                  # another remote model
dmsh --search-model gemini-search "..."            # model behind websearch
dmsh --remote-base-url http://localhost:8080/v1 "..."  # any OpenAI-compatible endpoint
  • Anonymous by design. dmsh sends no tokens and adds no Authorization
    header — Pollinations works without an account.
  • No silent fallback. The provider is resolved once, at session start.
    With auto, a missing GGUF switches to Pollinations and says so; a local
    model that fails to load is never quietly replaced.
  • /model shows the active provider, model, endpoint, search model and
    whether tools are on.
  • Rate limits are explained instead of dumped raw: 429 now reads
    "anonymous access allows one request at a time", and 402/403 points at
    --remote-base-url / --remote-model instead of showing provider JSON.

Tool calling (function calling)

With a remote provider the model can call tools before answering:

Tool What it does
run_command run one shell command, return exit code, stdout and stderr
read_file read a UTF-8 text file (truncated at 8 KB)
list_dir list directory entries with size and mtime
system_info OS, arch, CPU count, shell, cwd
todo keep a checklist of the current task (add / list / done / clear)
ask ask the user one focused question and wait for the answer
websearch search the web through the provider's search model

Safety is unchanged: the loop is bounded (12 steps) and run_command goes
through exactly the same path as a normal answer — denylist → allowlist →
confirmation (unless --yes) → audit log. In --dry-run tools refuse to
execute commands and the model is told to return the command in its JSON
answer instead. ask never blocks where it cannot: in the TUI, or when
stdin went into the prompt, the model degrades to ask_clarification.

Disable everything with --no-tools or dmsh config set tools false.

Session & UX

  • /todo shows the checklist the model keeps (up to 50 items, session
    scope); /todo clear drops it.
  • Clarification answers now go back to the model together with the question
    they answer (see below).
  • /model in the TUI reports the provider as well, not just the file name.
  • The status line shows model:pollinations:openai for remote sessions.

Fixed

  • Clarification loop — the follow-up used to be sent as
    request\nanswer, so the model never saw the question it had asked and
    kept re-asking the same thing forever. Now every exchange is sent back as
    an explicit block, a repeated question ends the dialogue with an
    explanation instead of a second prompt, and two rounds is the hard limit.
  • In the TUI the clarification question is written to the transcript (it used
    to vanish as soon as the answer was typed), and the answer is echoed while
    the model receives the framing block.
  • Answers like 1. project-name reach the model as project-name, while
    versions such as 3.5 are left alone.

CI

  • Windows CUDA release builds again: MSVC via Ninja, plain clang (MSVC
    ABI) for cgo, short 8.3 paths for -L flags, -l flags for CUDA import
    libs, and lld for linking.
  • Added a fast cgo toolchain probe so a broken toolchain fails in ~1 minute
    instead of after a long build.
  • CUDA failures no longer block the CPU release.

Note: v0.4.0 was tagged but never published as a release — skip it and
upgrade straight from v0.3.7.

Full Changelog: v0.3.7...v0.5.0

Full Changelog: v0.4.0...v0.5.0