7.21. dasllama-cli — dasLLAMA from the shell
dasllama-cli (utils/dasllama-server/cli.das) is the shell front end of
dasLLAMA: the same engine, the same
public facade and the same backend pick as dasllama-server, without the HTTP layer. One model, one conversation,
one process - a script or a cron job asks a model, hears a clip or speaks a
line with no server running. It ships beside the server in every bundle
(dasllama-cli.exe on Linux and Windows,
dasllama-server.app/Contents/MacOS/dasllama-cli on a Mac) and runs from
the source tree under the JIT:
bin/daslang -jit utils/dasllama-server/cli.das -- chat --model <model.gguf>
7.21.1. Commands
Command |
What it does |
|---|---|
|
Complete a prompt, streamed to stdout; the prompt is |
|
A conversation from the terminal, or from |
|
An audio file (wav, mp3, flac, ogg) to text through |
|
Text to a 16-bit WAV through |
|
The chain: |
|
A text’s embedding vector, one float per line, or |
|
A text’s token ids and pieces, one |
|
The llama-bench rows on a model: |
Every example runs as written on a box whose models directory carries the named
files; utils/dasllama-server/test_cli.das runs each one:
dasllama-cli complete -m SmolLM2-135M-Instruct-Q8_0.gguf --quiet "The capital of France is"
dasllama-cli speak --tts kitten-nano.gguf -o hello.wav "Hello from the command line."
dasllama-cli transcribe --asr Qwen3-ASR-0.6B-Q8_0.gguf --mmproj mmproj-Qwen3-ASR-0.6B-bf16.gguf question.wav
dasllama-cli talk --asr Qwen3-ASR-0.6B-Q8_0.gguf --mmproj mmproj-Qwen3-ASR-0.6B-bf16.gguf --model Qwen3.5-0.8B-Q8_0.gguf --tts kokoro-82m.gguf --in question.wav --out answer.wav
dasllama-cli chat -m gemma-4-E2B-it-Q4_K_M.gguf --image-mmproj mmproj-gemma-4-E2B-it-bf16.gguf --audio-mmproj mmproj-gemma-4-E2B-it-bf16.gguf
dasllama-cli bench -m SmolLM2-135M-Instruct-Q8_0.gguf --npl 2 -o md
7.21.2. Flags
<command> --help prints the command’s own flags, then the groups it takes
(from the source tree -? or --show-help, since the daslang host takes
--help for itself). The shared flags are the server’s knobs under the
server’s names; the config file fills whatever they leave empty (below).
Flag |
Meaning |
|---|---|
|
TOML config file (default: |
|
The LLM GGUF: a path, or a file name under |
|
Weight serving mode: |
|
KV cache codec: |
|
GPU backend: |
|
Metal serving mode when |
|
vulkan: resident MoE expert-stack layers, offloaded from the end (default auto under |
|
vulkan: streamed prefill MoE layers below the resident set (default auto under |
|
vulkan: deltanet (recurrent) layers through the device chain (default on under |
|
vulkan: full-attention layers through the device chain (default on under |
|
vulkan: dense attention-side planes resident (default off) |
|
vulkan: resident-weight VRAM cap override in MB (default: query the device) |
|
Context length in tokens, served whole: the whole-model GPU driver holds it or declines to the per-op rails, and the load log names the room. Default: the model’s trained |
|
RoPE scaling override: |
|
RoPE scaling factor for the override (default: the file’s |
|
YaRN: the original training context the factor extends (default: the file’s |
|
Worker-lane cap for the matmul dispatch (default 16; |
|
Where a bare model name resolves (default |
|
Re-tune this box’s dasLLAMA kernels, then relaunch (a fat build carries no tuner and ignores it) |
|
Echo the engine’s log records ( |
|
The command’s help ( |
Flag |
Meaning |
|---|---|
|
Sampling temperature; |
|
Top-k cutoff (unset: 20 on the sampled default, off under greedy) |
|
Nucleus cutoff (unset: 0.95 on the sampled default) |
|
Drop tokens below this fraction of the top probability (default off) |
|
Multiplicative repetition penalty over the recent window (default 1 = none) |
|
Subtracted from every token already in the window (default 0) |
|
Subtracted per occurrence in the window (default 0) |
|
The sampler’s seed for a reproducible run (default: the session’s fixed seed) |
|
Reply token budget (default 256 for |
Flag |
Meaning |
|---|---|
|
Also play each spoken reply through the speaker once its WAV has landed; the run blocks until the clip ends. A box with no audio device says so once and keeps writing the files |
|
With |
Flag |
Meaning |
|---|---|
|
The prompt (or |
|
Read the prompt from this file |
|
A picture to ask about (needs |
|
The vision mmproj GGUF for |
|
Print the completion only - no token counts or rates after it |
Flag |
Meaning |
|---|---|
|
The system prompt |
|
Read the turns from this file instead of the terminal, one message per line (slash commands work); the reply follows each |
|
The vision mmproj GGUF: arms |
|
The audio mmproj GGUF: arms |
|
A TTS model GGUF: |
|
Voice name for |
|
Speech speed multiplier for |
|
Where the spoken replies land, |
|
Hide a thinking model’s reasoning (default: it streams before the answer, a blank line between) |
|
Answer directly on a hybrid thinking model (default: the model’s own default) |
|
Print the reply only - no token counts or rates after it |
Flag |
Meaning |
|---|---|
|
The ASR model (GGUF or |
|
mmproj for a GGUF ASR model (paired with |
|
The audio file to transcribe (wav / mp3 / flac / ogg; or the first bare argument) |
|
Write the transcript here instead of stdout |
|
Language hint (default: auto for a model that detects it, else |
Flag |
Meaning |
|---|---|
|
The TTS model GGUF: a path, or a file name under |
|
The text to speak (or |
|
Read the text from this file |
|
The WAV file to write (16-bit PCM, the model’s rate; default |
|
Voice name or alias (default: the model’s first voice); a voice the model does not carry is refused with the voices it does |
|
Speech speed multiplier (default 1.0); a speed on a model that takes none is refused |
|
TTS weight lane: |
|
Print the generator’s per-op profile |
Flag |
Meaning |
|---|---|
|
The ASR model (GGUF or |
|
mmproj for a GGUF ASR model (paired with |
|
The audio file to answer (wav / mp3 / flac / ogg; or the first bare argument) |
|
A text prompt to answer instead of |
|
The system prompt |
|
Language hint for the ASR model (default: auto for a model that detects it, else |
|
The TTS model GGUF that speaks the reply |
|
Voice name for |
|
Speech speed multiplier for |
|
The WAV file the reply lands in (default |
|
Answer directly on a hybrid thinking model (default: the model’s own default) |
|
Print the reply only - no transcript, stage times or token counts |
Flag |
Meaning |
|---|---|
|
The text to embed (or |
|
Read the text from this file |
|
Print the vector as a JSON array (default: one float per line) |
Flag |
Meaning |
|---|---|
|
The text to tokenize (or |
|
Read the text from this file |
|
Print the ids only, space-separated (default: one |
|
Do not add the model’s BOS / leading specials |
Flag |
Meaning |
|---|---|
|
Prompt tokens per pp rep (default 512, llama-bench |
|
Generated tokens per tg rep (default 128, llama-bench |
|
Timed repetitions per row after an untimed warmup (default 5, llama-bench |
|
Streams of the batched tg row, |
|
|
7.21.3. The config file
A bare model name resolves under --models-dir (~/.dasllama/models,
where the server’s catalog downloads land; DASLLAMA_MODELS_DIR overrides).
The dasllama-server.toml in the current directory, else in
~/.dasllama (where the server’s control page saves it), else beside the
program - the server’s own lookup - fills whatever the flags leave empty: the model (a [[models]]
roster’s default entry included), its image_mmproj and audio_mmproj, the asr and
mmproj pair, the tts model and its lane (an [[asr]] / [[tts]]
roster’s first table), gpu and the Vulkan detail
keys, threads, ctx, models_dir. On a box the server’s setup page
configured, dasllama-cli chat with no flags talks to the served model on
the served backend. Explicit flags win; --config names another file.
Output goes three ways: the answer - the completion, the reply, the transcript,
the vector, the ids - on stdout alone, so it pipes; the CLI’s progress lines and
the token counters (prompt and generated tokens, time to first token, prefill and
decode rates) on stderr, --quiet dropping the counters; and the engine’s own
notices - a missing Metal profile, a GPU decline - in dasllama-cli.log
(~/.dasllama/logs from an installed build, the das root’s logs/ from the
source tree), where the server’s land too, echoed to stderr as they land
under --verbose (from the source tree the tune policy guard still prints its
one status line first). A refusal - no
model, a file that does not exist, a flag value that does not parse - names
what is missing and exits non-zero.
7.21.4. Tuning
The CLI shares the box’s tune winners with the server: requiring dasLLAMA pulls
in its [tune_scope], and the policy is auto - the first run from the
source tree on an untuned box tunes and relaunches, every later run is instant,
--tune forces a re-tune. A fat bundle carries no tuner: its kernels are the
class clones, and its first dasllama-cli run on a Mac races the Metal crowns
once into ~/.dasllama/tune/dasllama-cli.tune.json, as the server’s first
run does into its own. See Kernel tuning.
7.21.5. Testing
utils/dasllama-server/test_cli_args.das is the model-free half, run
everywhere: the plan a command line parses to, the help surfaces, the config
file’s keys and roster, the model-path resolution, and the chat loop’s line
logic. utils/dasllama-server/test_cli.das runs every command end to end,
one child process per cell, on the small models a stocked box carries - the
talk chain on two model columns and the picture and the clip through the
gemma-4-E2B towers - and skips by name where a model is absent.
See also
dasllama-server — an OpenAI-compatible server over dasLLAMA - the OpenAI-compatible server the CLI sits beside
dasLLAMA-08 — Audio Chat - the audio turn the /audio command and talk are built on