Skip to main content

Install / pip

Common on networks with TLS inspection — including Qualcomm Developer Cloud (QDC). Pre-download the SDK and point pip at the local file. See the full PowerShell snippet in Python install.
The .exe is not yet code-signed. Click More info → Run anyway in the SmartScreen dialog.

CLI

The installer doesn’t add itself to PATH. Run:
Qualcomm AI Engine Direct is NPU-only. Use --compute npu (or omit the flag — npu is the default for qairt). To run on CPU/GPU, switch to a GGUF model on the llama.cpp runtime.
The conversation outgrew the context window (--nctx, default 4096).
  • llama.cpp (GGUF): raise it at runtime, e.g. geniex infer <model> --nctx 8192, up to the model’s trained maximum. A larger window uses more memory.
  • Qualcomm AI Engine Direct (NPU): the window is fixed in the compiled bundle and --nctx has no effect. Add --sliding-window to keep chatting (evicts the oldest context), or pull a bundle built for a longer context.
See Increasing the context length.

Server

The server doesn’t auto-download. Pull the model first:
Then restart geniex serve.
The --privileged flag is required for NPU access. Make sure your docker run includes it, plus the volume mounts for /usr/lib. See CLI install (Docker).

Linux

Two separate things have to be right:
  1. Registry. Pull from Docker Hub (docker.io/qualcomm/geniex), which is public and needs no login. If you see unauthorized, check the image name and tag against CLI install (Docker).
  2. Docker group membership. If docker pull returns permission denied while trying to connect to the docker API at unix:///var/run/docker.sock, your user isn’t in the docker group:
    bash
    Then retry the pull.
The container can’t reach the NPU. Make sure your docker run includes --privileged and the /usr/lib mount, and that the host’s Qualcomm driver packages (qcom-adreno1, qcom-fastrpc1) are installed — see Linux install → Install host dependencies.
By default the vision encoder (mmproj) shares the single HTP session with the language model, and on some devices (e.g. QCS9075) the two don’t fit together. Give the vision encoder its own HTP session:
bash
Use --vit-compute CPU instead if you’d rather keep the vision encoder off the NPU. GGML_HEXAGON_DEVICES=2 is the non-deprecated spelling of the variable; it must be set in the shell that launches geniex (or geniex serve).
The llama.cpp Hexagon backend dlopens the unversioned libcdsprpc.so, but qcom-fastrpc1 only ships libcdsprpc.so.1. On bare metal install.sh creates the symlink; if you deployed the release tarball directly (no install.sh), create it yourself:
bash
If the Hexagon driver can’t load (see the entry above), hybrid still produces correct output — it just runs entirely on CPU, so the failure is silent. Confirm the NPU is actually engaged by running with GGML_HEX_VERBOSE=1; you should see Hexagon Arch version vNN and a libggml-htp-vNN.so session. No such lines means it fell back to CPU.
The aarch64 Linux build is compiled for armv8.2-a with the fp16, dotprod, lse (atomics), and rdm extensions. Baseline armv8.0 boards — some Dragonwing IoT SoCs with no NPU — don’t implement these, so geniex stops at startup with a clear error rather than crashing with a raw SIGILL: illegal instruction partway through a run.This check is global: every backend needs those instructions, so switching --compute to cpu, gpu, or npu won’t help on such a device. Check what your CPU reports:
bash
If those features are absent, install the CPU-only build instead. It is compiled for plain armv8.0-a with no ISA extensions, ships CPU inference only (no QAIRT/NPU, no OpenCL/GPU, no Hexagon), and is correspondingly slower — ggml falls back to its fp32 quant kernels without dotprod/fp16. Every channel asks for it explicitly; nothing is auto-detected:
bash
geniex-qairt has no CPU-only build at all: QAIRT needs an NPU, and these boards have none. Use geniex-llama-cpp (or the geniex meta package, which drops the QAIRT backend automatically on such a board).If the CPU-only build still fails, report it in GitHub Issues or Slack with the output above.
As a VLM the model needs ~4.94 GB — 3.04 GB of Q4_0 weights plus a 1.9 GB F32 mmproj projector — against the ~4.7 GB this board has available, so the kernel kills the process while the projector loads:
Record the model as an llm to run its text path only — that skips the projector and fits. Image and audio input are unavailable in this mode.
bash
See geniex model set-type.

Android

The demo (or your code) is passing the raw user text into generateStreamFlow instead of the chat-templated prompt. Qualcomm AI Engine Direct pipelines treat their input as already-templated — pass applyChatTemplate().formattedText, not the raw user message.
Android needs an explicit chipset for Qualcomm AI Hub pulls — auto-detect only runs on Windows on Snapdragon. Set ModelPullInput.chipset to "SM8750" (Snapdragon 8 Elite) or "SM8850" (Snapdragon 8 Elite Gen 5). See Android API reference → ModelPullInput.
The model id returned by Qualcomm AI Hub must match an entry in the Qualcomm AI Engine Direct runtime’s registry (qwen3_4b_instruct_2507, qwen2_5_vl_7b_instruct, etc.). To add a new Qualcomm AI Hub Model, register it on the C++ side first — see third-party/geniex-qairt/models/{llm,vlm}_model_registry.h.
Qualcomm AI Hub Models are compiled with fixed KV cache and context length. Leave both nGpuLayers and nCtx at their defaults; tune max_tokens and enable_thinking instead.
The same startup guard as on Linux. The default AAR is compiled for armv8.7-a with the fp16, dotprod, and i8mm extensions, but minSdk 27 still admits phones that predate them, so geniex_init returns NOT_SUPPORTED instead of crashing with a raw SIGILL partway through a run.Ship the CPU-only AAR on those devices — geniex-android-aar-cpu-<tag>.aar from the release assets. It is compiled for plain armv8.0-a with no ISA extensions, ships CPU inference only (no Qualcomm AI Engine Direct, no OpenCL, no Hexagon), and is correspondingly slower. Otherwise it is a drop-in replacement: same com.geniex.sdk namespace and API. Only the default AAR is published to Maven Central.

Still stuck?

GitHub Issues

File a bug, request a feature, or browse open issues.

Slack

Developer collaboration.