Model inference
geniex pull
Download a model and store it locally.
Pulling from a local path:
pull copies files into the GenieX cache. After a successful pull you can safely delete the source to avoid keeping two copies.geniex infer — LLM
Launch an interactive chat session with a language model.
--compute) — pick which compute unit runs the model (default: npu):
Set
GGML_HEXAGON_DEVICES to match the number of device IDs in --compute. qairt models coerce a device list to NPU with a warning. See Spreading across multiple HTP cores for MTP performance numbers.For VLMs on
--compute npu, the vision encoder shares the language model’s HTP session by default, which can abort on some devices. Run it on a second session with GGML_HEXAGON_DEVICES=2 geniex infer <vlm> --compute HTP0 --vit-compute HTP1. See Troubleshooting.geniex infer — VLM
Run vision-language inference with text-only, image, or audio input:
.jpg, .jpeg, .png, .webp) and audio (.wav, .mp3) paths are auto-detected, and a single prompt can carry both. google/gemma-4-E2B-it-qat-q4_0-gguf ships an audio-capable mmproj (~4.0 GiB total: Q4_0 weights + conformer mmproj, pulled together):
--compute npu, Snapdragon X Elite):
/mic records a clip instead of loading one from disk — Ctrl-C stops the recording and transcribes it. This needs SoX on your PATH (sudo apt install sox, or winget install --id=ChrisBagwell.SoX -e on Windows); without it GenieX warns SoX is not installed at startup. See the audio input tutorial for the full walkthrough.
geniex decide
Make a local structured decision with a llama_cpp LLM or VLM. Select predicate, choice, or score with --kind. Models with a systemone template use the matching OpenJEV, LEV, or Nimble decision path and model-specific temperature; if decision.type is missing, they are treated as OpenJEV. Models without systemone fall back to a generic choice prompt using their regular chat template and temperature 1.0. LEV choices average both option orders and LEV predicates use a nine-rating readout; all paths use logits and return probabilities and confidence. Add --image or --audio (repeatable) to send local media to a compatible VLM.
--choice VALUE for each candidate. In --choice 'retry=Try again', retry is the value returned in JSON and Try again is optional context for the model; it is not a key-value map. Quote the argument if the description has spaces. --level similarly accepts LABEL=DESCRIPTION. --image and --audio accept existing local regular files and may each be repeated up to 8 times. --compute, --ngl, --nctx, and --power-mode control local model loading, as with geniex infer. Both LLM and VLM decisions use logits, with model-specific temperature and candidate encoding. --vit-compute selects the VLM vision encoder’s compute unit. geniex decide --help groups these flags under Model Loading, LLM/VLM Decision, and VLM Specific.
By default, geniex decide uses the CLI theme to display both predicate probabilities (true and false), the selected choice and every candidate probability, or the zero-based expected score and every level probability, plus confidence when available. Pass --json to print the original full single-line JSON result for scripts. The /v1/decisions response remains JSON.
geniex model
Inspect and reconfigure cached models.
geniex model set-type
Override the model type recorded in a cached model’s manifest. Omit the type to pick it interactively.
geniex infer takes: vlm loads the mmproj projector alongside the weights and accepts image / audio input, while llm loads the language weights only. Forcing a multimodal GGUF to llm is how you run its text path on a board where weights + projector don’t fit in memory.
geniex pull --model-type llm <model> writes the same field at download time, so a fresh pull needs no set-type afterwards.geniex model list
List Qualcomm AI Hub Models that have a qairt (NPU) build. Only models compatible with the detected chipset are listed unless you pass --all.
geniex serve
Start the OpenAI-compatible local server. See Local server for the API.
message.reasoning_content by default. Set the per-request reasoning_format field to none to keep it inline in message.content — see Separating reasoning.
Chat requests think by default. Start the server with --think=false (or GENIEX_THINK=false) to turn thinking off for requests that omit enable_think; the request field always takes precedence.
Logging
--log is a global flag controlling the CLI’s log output. It is equivalent to the GENIEX_LOG environment variable and takes precedence over it when both are set.
Configuration flags
These flags can be passed togeniex infer to control model loading and generation.
Sampler flags
Control how the model selects tokens during generation.Model flags
Control model loading, context, and generation limits.Increasing the context length
The context window (--nctx) is how much the model can hold at once. When a conversation grows past it you get a context length exceeded error. How to raise it depends on the runtime:
-
llama.cpp (GGUF):
--nctx <N>raises the window at runtime, up to the model’s trained maximum. A larger window uses more KV-cache memory. -
Qualcomm AI Engine Direct (NPU): the context length is baked into the compiled bundle and cannot be raised at runtime —
--nctxhas no effect. Instead:- Add
--sliding-windowto keep chatting past the limit: the oldest context above a small anchored prefix is evicted instead of erroring. - For a genuinely larger window, pull a bundle compiled for a longer context from Qualcomm AI Hub. See Qualcomm AI Engine Direct runtime constraints.
- Add
geniex-bench
geniex-bench is a standalone benchmark binary — separate from the geniex CLI — that measures TTFT, prefill speed, and decode speed directly against the GenieX C API. It ships as a pre-built archive for Windows ARM64 and Linux ARM64.
See the Benchmarking tutorial for download instructions and a full walkthrough. Quick reference:
Utility commands
Was this page helpful?