Self-hosted web search and query answering for AI agents — an open-source Exa alternative.
uv sync
uv sync --extra ml # llama-cpp-python for answer, embed, and rerank
crawl4ai-setup # installs Playwright Chromiumml: llama-cpp-python + huggingface-hub — one process, no sidecars. Answer, embedding, and reranking all run through llama.cpp on GGUF models (no PyTorch/transformers stack).
NVIDIA GPU: rebuild llama.cpp with CUDA support:
CMAKE_ARGS="-DGGML_CUDA=on" uv pip install --force-reinstall --no-cache-dir llama-cpp-pythonModels download to .noxa_models/ (GGUF) on first boot.
Copy the example env and set your HuggingFace token (models download at startup):
cp .env.example .env
# edit HF_TOKEN=...Boot fails if models cannot be downloaded or loaded (unless NOXA_PRELOAD_MODELS=false).
uv run noxa
# or
uv run uvicorn noxa.app:app --reloadPre-built images are published to GitHub Container Registry via the manual Release workflow (Actions → Release → Run workflow on main).
| Image | Use case | Platforms |
|---|---|---|
ghcr.io/radek-baczynski/noxa:<version>-cpu |
CPU inference | linux/amd64, linux/arm64 |
ghcr.io/radek-baczynski/noxa:<version>-cuda |
NVIDIA GPU (CUDA) | linux/amd64 |
Optional latest-cpu / latest-cuda tags are updated when Publish latest is checked during release.
# CPU (pin a released version)
docker run --rm -p 8000:8000 \
-e HF_TOKEN=hf_... \
-v noxa-data:/data \
ghcr.io/radek-baczynski/noxa:0.1.0-cpu
# CUDA (requires NVIDIA Container Toolkit)
docker run --rm --gpus all -p 8000:8000 \
-e HF_TOKEN=hf_... \
-v noxa-data:/data \
ghcr.io/radek-baczynski/noxa:0.1.0-cudaModels and SQLite cache are stored under /data (NOXA_MODEL_CACHE_DIR, NOXA_SQLITE_PATH). The CPU image sets NOXA_RUNTIME_PROFILE=cloud-cpu; the CUDA image sets cloud-gpu.
Build locally:
docker build -f docker/Dockerfile --target cpu -t noxa:cpu .
docker build -f docker/Dockerfile --target cuda -t noxa:cuda .POST /web_search— ddgs searchPOST /web_fetch— fetch single URL as markdown (Crawl4AI)POST /web_crawl— bounded deep crawl from seed URLsPOST /content_select— hybrid retrieval + reranking over documentsPOST /web_answer— full search → fetch → answer pipeline
Put settings in .env (see .env.example). Most vars use the NOXA_ prefix; HF_TOKEN is also read for model downloads.
Copy one full block into .env to test. Replace hf_... with your token (or use hf auth login).
All models are Hugging Face GGUF repos. Noxa picks the Q4_K_M file from each repo. Leave NOXA_EMBED_MODEL / NOXA_RERANK_MODEL empty for built-in defaults (nomic-embed-text-v1.5, Qwen3-Reranker-0.6B).
HF_TOKEN=hf_...
NOXA_RUNTIME_PROFILE=mac-local
NOXA_ANSWER_MODEL_FAST=unsloth/Qwen3-0.6B-GGUF
NOXA_ANSWER_MODEL_DEFAULT=unsloth/Qwen3-1.7B-GGUF
NOXA_ANSWER_GGUF_QUANT=Q4_K_M
NOXA_EMBED_MODEL=
NOXA_RERANK_MODEL=
NOXA_MODEL_CACHE_DIR=.noxa_models
NOXA_PRELOAD_MODELS=trueHF_TOKEN=hf_...
NOXA_RUNTIME_PROFILE=auto
NOXA_ANSWER_MODEL_FAST=
NOXA_ANSWER_MODEL_DEFAULT=
NOXA_ANSWER_GGUF_QUANT=Q4_K_M
NOXA_EMBED_MODEL=
NOXA_RERANK_MODEL=
NOXA_MODEL_CACHE_DIR=.noxa_models
NOXA_PRELOAD_MODELS=trueEmpty answer models → built-in defaults (unsloth/Qwen3-0.6B-GGUF, unsloth/Qwen3-1.7B-GGUF).
HF_TOKEN=hf_...
NOXA_RUNTIME_PROFILE=cloud-cpu
NOXA_ANSWER_MODEL_FAST=unsloth/Qwen3-0.6B-GGUF
NOXA_ANSWER_MODEL_DEFAULT=unsloth/Qwen3-1.7B-GGUF
NOXA_ANSWER_GGUF_QUANT=Q4_K_M
NOXA_EMBED_MODEL=
NOXA_RERANK_MODEL=
NOXA_MODEL_CACHE_DIR=.noxa_models
NOXA_PRELOAD_MODELS=trueHF_TOKEN=hf_...
NOXA_RUNTIME_PROFILE=cloud-gpu
NOXA_ANSWER_MODEL_FAST=unsloth/Qwen3-0.6B-GGUF
NOXA_ANSWER_MODEL_DEFAULT=unsloth/Qwen3-1.7B-GGUF
NOXA_ANSWER_GGUF_QUANT=Q4_K_M
NOXA_EMBED_MODEL=
NOXA_RERANK_MODEL=
NOXA_MODEL_CACHE_DIR=.noxa_models
NOXA_PRELOAD_MODELS=trueHF_TOKEN=hf_...
NOXA_RUNTIME_PROFILE=mac-local
NOXA_ANSWER_MODEL_FAST=unsloth/Qwen3-0.6B-GGUF
NOXA_ANSWER_MODEL_DEFAULT=unsloth/Qwen3-1.7B-GGUF
NOXA_ANSWER_GGUF_QUANT=Q4_K_M
NOXA_EMBED_MODEL=
NOXA_RERANK_MODEL=
NOXA_MODEL_CACHE_DIR=.noxa_models
NOXA_PRELOAD_MODELS=falseAll use NOXA_RUNTIME_PROFILE=mac-local + llama_cpp unless noted. Each repo was checked for a Q4_K_M .gguf file via the Hugging Face Hub API. Download counts from Hugging Face Hub (June 2026).
| Family | Preset | Fast model | Default model |
|---|---|---|---|
| Qwen3 | balanced (default) | unsloth/Qwen3-0.6B-GGUF |
unsloth/Qwen3-1.7B-GGUF |
| Qwen3 | 4B quality | unsloth/Qwen3-0.6B-GGUF |
unsloth/Qwen3-4B-Instruct-2507-GGUF |
| Qwen3.5 | latest | unsloth/Qwen3.5-0.8B-GGUF |
unsloth/Qwen3.5-4B-GGUF |
| Qwen2.5 | classic | Qwen/Qwen2.5-1.5B-Instruct-GGUF |
Qwen/Qwen2.5-3B-Instruct-GGUF |
| Phi | 4-mini | unsloth/Phi-4-mini-instruct-GGUF |
MaziyarPanahi/Phi-4-mini-instruct-GGUF |
| Gemma 4 | efficient | unsloth/gemma-4-E2B-it-GGUF |
unsloth/gemma-4-E4B-it-GGUF |
| Gemma 3 | compact | MaziyarPanahi/gemma-3-1b-it-GGUF |
unsloth/gemma-3-4b-it-GGUF |
| Gemma 2 | tiny | bartowski/gemma-2-2b-it-GGUF |
bartowski/gemma-2-2b-it-GGUF |
| SmolLM2 | ultra-fast | unsloth/SmolLM2-135M-Instruct-GGUF |
bartowski/SmolLM2-1.7B-Instruct-GGUF |
| SmolLM3 | 3B | unsloth/SmolLM3-3B-GGUF |
unsloth/SmolLM3-3B-GGUF |
| SmolLM3 | 3B 128K | unsloth/SmolLM3-3B-GGUF |
unsloth/SmolLM3-3B-128K-GGUF |
| SmolLM3 | 2 fast + 3 default | unsloth/SmolLM2-135M-Instruct-GGUF |
unsloth/SmolLM3-3B-GGUF |
| Granite 4.1 | 3B (RAG) | unsloth/granite-4.1-3b-GGUF |
unsloth/granite-4.1-3b-GGUF |
| Granite 4.1 | 3B + 8B | unsloth/granite-4.1-3b-GGUF |
unsloth/granite-4.1-8b-GGUF |
| Granite 4.0 | 350m + 4.1 3B | unsloth/granite-4.0-350m-GGUF |
unsloth/granite-4.1-3b-GGUF |
| Granite 3.3 | 2B + 8B | unsloth/granite-3.3-2b-instruct-GGUF |
ibm-granite/granite-3.3-8b-instruct-GGUF |
| Liquid LFM2.5 | 1.2B instruct | LiquidAI/LFM2.5-1.2B-Instruct-GGUF |
LiquidAI/LFM2.5-1.2B-Instruct-GGUF |
| Liquid LFM2.5 | 350m + 1.2B | LiquidAI/LFM2.5-350M-GGUF |
LiquidAI/LFM2.5-1.2B-Instruct-GGUF |
| Liquid LFM2.5 | 1.2B + 8B MoE | LiquidAI/LFM2.5-1.2B-Instruct-GGUF |
LiquidAI/LFM2.5-8B-A1B-GGUF |
| Liquid LFM2.5 | thinking | LiquidAI/LFM2.5-350M-GGUF |
LiquidAI/LFM2.5-1.2B-Thinking-GGUF |
| Llama 3.2 | 1B + 3B | unsloth/Llama-3.2-1B-Instruct-GGUF |
unsloth/Llama-3.2-3B-Instruct-GGUF |
| Llama 3.1 | 8B quality | unsloth/Llama-3.2-1B-Instruct-GGUF |
MaziyarPanahi/Meta-Llama-3.1-8B-Instruct-GGUF |
| Mistral | 7B | unsloth/Llama-3.2-1B-Instruct-GGUF |
MaziyarPanahi/Mistral-7B-Instruct-v0.3-GGUF |
| DeepSeek | R1 distill 7B | unsloth/Qwen3-0.6B-GGUF |
bartowski/DeepSeek-R1-Distill-Qwen-7B-GGUF |
Fast unsloth/Qwen3-0.6B-GGUF (~79k dl) + default unsloth/Qwen3-1.7B-GGUF (~28k dl). Auto embed/rerank.
HF_TOKEN=hf_...
NOXA_RUNTIME_PROFILE=mac-local
NOXA_ANSWER_MODEL_FAST=unsloth/Qwen3-0.6B-GGUF
NOXA_ANSWER_MODEL_DEFAULT=unsloth/Qwen3-1.7B-GGUF
NOXA_ANSWER_GGUF_QUANT=Q4_K_M
NOXA_EMBED_MODEL=
NOXA_RERANK_MODEL=
NOXA_MODEL_CACHE_DIR=.noxa_models
NOXA_PRELOAD_MODELS=trueSame answer models + explicit retrieval pair: nomic-ai/nomic-embed-text-v1.5-GGUF + Voodisss/Qwen3-Reranker-0.6B-GGUF-llama_cpp.
HF_TOKEN=hf_...
NOXA_RUNTIME_PROFILE=mac-local
NOXA_ANSWER_MODEL_FAST=unsloth/Qwen3-0.6B-GGUF
NOXA_ANSWER_MODEL_DEFAULT=unsloth/Qwen3-1.7B-GGUF
NOXA_ANSWER_GGUF_QUANT=Q4_K_M
NOXA_EMBED_MODEL=nomic-ai/nomic-embed-text-v1.5-GGUF
NOXA_RERANK_MODEL=Voodisss/Qwen3-Reranker-0.6B-GGUF-llama_cpp
NOXA_MODEL_CACHE_DIR=.noxa_models
NOXA_PRELOAD_MODELS=trueFast unsloth/Qwen3-0.6B-GGUF + default unsloth/Qwen3-4B-Instruct-2507-GGUF (~64k dl). Use API mode: quality to exercise the 4B model. Auto embed/rerank.
HF_TOKEN=hf_...
NOXA_RUNTIME_PROFILE=mac-local
NOXA_ANSWER_MODEL_FAST=unsloth/Qwen3-0.6B-GGUF
NOXA_ANSWER_MODEL_DEFAULT=unsloth/Qwen3-4B-Instruct-2507-GGUF
NOXA_ANSWER_GGUF_QUANT=Q4_K_M
NOXA_EMBED_MODEL=
NOXA_RERANK_MODEL=
NOXA_MODEL_CACHE_DIR=.noxa_models
NOXA_PRELOAD_MODELS=trueFast unsloth/Qwen3-0.6B-GGUF + default MaziyarPanahi/Qwen3-1.7B-GGUF (~289k dl, most-downloaded 1.7B quant). Auto embed/rerank.
HF_TOKEN=hf_...
NOXA_RUNTIME_PROFILE=mac-local
NOXA_ANSWER_MODEL_FAST=unsloth/Qwen3-0.6B-GGUF
NOXA_ANSWER_MODEL_DEFAULT=MaziyarPanahi/Qwen3-1.7B-GGUF
NOXA_ANSWER_GGUF_QUANT=Q4_K_M
NOXA_EMBED_MODEL=
NOXA_RERANK_MODEL=
NOXA_MODEL_CACHE_DIR=.noxa_models
NOXA_PRELOAD_MODELS=trueNewer Qwen line. Fast unsloth/Qwen3.5-0.8B-GGUF (~315k dl) + default unsloth/Qwen3.5-4B-GGUF (~721k dl). Use mode: quality for the 4B model.
HF_TOKEN=hf_...
NOXA_RUNTIME_PROFILE=mac-local
NOXA_ANSWER_MODEL_FAST=unsloth/Qwen3.5-0.8B-GGUF
NOXA_ANSWER_MODEL_DEFAULT=unsloth/Qwen3.5-4B-GGUF
NOXA_ANSWER_GGUF_QUANT=Q4_K_M
NOXA_EMBED_MODEL=
NOXA_RERANK_MODEL=
NOXA_MODEL_CACHE_DIR=.noxa_models
NOXA_PRELOAD_MODELS=trueStable prior-gen Qwen. Fast Qwen/Qwen2.5-1.5B-Instruct-GGUF (~254k dl) + default Qwen/Qwen2.5-3B-Instruct-GGUF (~262k dl). Good baseline vs Qwen3.
HF_TOKEN=hf_...
NOXA_RUNTIME_PROFILE=mac-local
NOXA_ANSWER_MODEL_FAST=Qwen/Qwen2.5-1.5B-Instruct-GGUF
NOXA_ANSWER_MODEL_DEFAULT=Qwen/Qwen2.5-3B-Instruct-GGUF
NOXA_ANSWER_GGUF_QUANT=Q4_K_M
NOXA_EMBED_MODEL=
NOXA_RERANK_MODEL=
NOXA_MODEL_CACHE_DIR=.noxa_models
NOXA_PRELOAD_MODELS=trueFast unsloth/Phi-4-mini-instruct-GGUF (~60k dl) + default MaziyarPanahi/Phi-4-mini-instruct-GGUF (~175k dl). Strong small instruct model outside the Qwen/Llama families.
HF_TOKEN=hf_...
NOXA_RUNTIME_PROFILE=mac-local
NOXA_ANSWER_MODEL_FAST=unsloth/Phi-4-mini-instruct-GGUF
NOXA_ANSWER_MODEL_DEFAULT=MaziyarPanahi/Phi-4-mini-instruct-GGUF
NOXA_ANSWER_GGUF_QUANT=Q4_K_M
NOXA_EMBED_MODEL=
NOXA_RERANK_MODEL=
NOXA_MODEL_CACHE_DIR=.noxa_models
NOXA_PRELOAD_MODELS=trueFast unsloth/gemma-4-E2B-it-GGUF (~1.0M dl) + default unsloth/gemma-4-E4B-it-GGUF (~958k dl). New Gemma 4 line; use mode: quality for E4B.
HF_TOKEN=hf_...
NOXA_RUNTIME_PROFILE=mac-local
NOXA_ANSWER_MODEL_FAST=unsloth/gemma-4-E2B-it-GGUF
NOXA_ANSWER_MODEL_DEFAULT=unsloth/gemma-4-E4B-it-GGUF
NOXA_ANSWER_GGUF_QUANT=Q4_K_M
NOXA_EMBED_MODEL=
NOXA_RERANK_MODEL=
NOXA_MODEL_CACHE_DIR=.noxa_models
NOXA_PRELOAD_MODELS=trueFast MaziyarPanahi/gemma-3-1b-it-GGUF (~170k dl) + default unsloth/gemma-3-4b-it-GGUF (~44k dl).
HF_TOKEN=hf_...
NOXA_RUNTIME_PROFILE=mac-local
NOXA_ANSWER_MODEL_FAST=MaziyarPanahi/gemma-3-1b-it-GGUF
NOXA_ANSWER_MODEL_DEFAULT=unsloth/gemma-3-4b-it-GGUF
NOXA_ANSWER_GGUF_QUANT=Q4_K_M
NOXA_EMBED_MODEL=
NOXA_RERANK_MODEL=
NOXA_MODEL_CACHE_DIR=.noxa_models
NOXA_PRELOAD_MODELS=trueBoth modes use bartowski/gemma-2-2b-it-GGUF (~327k dl). Smallest Gemma preset; good for latency experiments.
HF_TOKEN=hf_...
NOXA_RUNTIME_PROFILE=mac-local
NOXA_ANSWER_MODEL_FAST=bartowski/gemma-2-2b-it-GGUF
NOXA_ANSWER_MODEL_DEFAULT=bartowski/gemma-2-2b-it-GGUF
NOXA_ANSWER_GGUF_QUANT=Q4_K_M
NOXA_EMBED_MODEL=
NOXA_RERANK_MODEL=
NOXA_MODEL_CACHE_DIR=.noxa_models
NOXA_PRELOAD_MODELS=trueFast unsloth/SmolLM2-135M-Instruct-GGUF (~62k dl) + default bartowski/SmolLM2-1.7B-Instruct-GGUF (~49k dl). Fastest answer preset; useful for smoke tests.
HF_TOKEN=hf_...
NOXA_RUNTIME_PROFILE=mac-local
NOXA_ANSWER_MODEL_FAST=unsloth/SmolLM2-135M-Instruct-GGUF
NOXA_ANSWER_MODEL_DEFAULT=bartowski/SmolLM2-1.7B-Instruct-GGUF
NOXA_ANSWER_GGUF_QUANT=Q4_K_M
NOXA_EMBED_MODEL=
NOXA_RERANK_MODEL=
NOXA_MODEL_CACHE_DIR=.noxa_models
NOXA_PRELOAD_MODELS=trueSmolLM3 is 3B only (multilingual, dual-mode reasoning). Both modes use unsloth/SmolLM3-3B-GGUF (~6k dl). Base model: HuggingFaceTB/SmolLM3-3B (~519k dl).
HF_TOKEN=hf_...
NOXA_RUNTIME_PROFILE=mac-local
NOXA_ANSWER_MODEL_FAST=unsloth/SmolLM3-3B-GGUF
NOXA_ANSWER_MODEL_DEFAULT=unsloth/SmolLM3-3B-GGUF
NOXA_ANSWER_GGUF_QUANT=Q4_K_M
NOXA_EMBED_MODEL=
NOXA_RERANK_MODEL=
NOXA_MODEL_CACHE_DIR=.noxa_models
NOXA_PRELOAD_MODELS=trueFast unsloth/SmolLM3-3B-GGUF + default unsloth/SmolLM3-3B-128K-GGUF (~3k dl). Use mode: quality for the 128K variant when you need longer context.
HF_TOKEN=hf_...
NOXA_RUNTIME_PROFILE=mac-local
NOXA_ANSWER_MODEL_FAST=unsloth/SmolLM3-3B-GGUF
NOXA_ANSWER_MODEL_DEFAULT=unsloth/SmolLM3-3B-128K-GGUF
NOXA_ANSWER_GGUF_QUANT=Q4_K_M
NOXA_EMBED_MODEL=
NOXA_RERANK_MODEL=
NOXA_MODEL_CACHE_DIR=.noxa_models
NOXA_PRELOAD_MODELS=trueFast unsloth/SmolLM2-135M-Instruct-GGUF (~62k dl) + default unsloth/SmolLM3-3B-GGUF (~6k dl). Smallest fast path with SmolLM3 quality on default / quality modes.
HF_TOKEN=hf_...
NOXA_RUNTIME_PROFILE=mac-local
NOXA_ANSWER_MODEL_FAST=unsloth/SmolLM2-135M-Instruct-GGUF
NOXA_ANSWER_MODEL_DEFAULT=unsloth/SmolLM3-3B-GGUF
NOXA_ANSWER_GGUF_QUANT=Q4_K_M
NOXA_EMBED_MODEL=
NOXA_RERANK_MODEL=
NOXA_MODEL_CACHE_DIR=.noxa_models
NOXA_PRELOAD_MODELS=trueLatest IBM Granite instruct line; explicitly tuned for RAG. Both modes use unsloth/granite-4.1-3b-GGUF (~10k dl). Base: ibm-granite/granite-4.1-3b (~231k dl). Multilingual, Apache 2.0.
HF_TOKEN=hf_...
NOXA_RUNTIME_PROFILE=mac-local
NOXA_ANSWER_MODEL_FAST=unsloth/granite-4.1-3b-GGUF
NOXA_ANSWER_MODEL_DEFAULT=unsloth/granite-4.1-3b-GGUF
NOXA_ANSWER_GGUF_QUANT=Q4_K_M
NOXA_EMBED_MODEL=
NOXA_RERANK_MODEL=
NOXA_MODEL_CACHE_DIR=.noxa_models
NOXA_PRELOAD_MODELS=trueFast unsloth/granite-4.1-3b-GGUF (~10k dl) + default unsloth/granite-4.1-8b-GGUF (~16k dl). Use mode: quality for the 8B model.
HF_TOKEN=hf_...
NOXA_RUNTIME_PROFILE=mac-local
NOXA_ANSWER_MODEL_FAST=unsloth/granite-4.1-3b-GGUF
NOXA_ANSWER_MODEL_DEFAULT=unsloth/granite-4.1-8b-GGUF
NOXA_ANSWER_GGUF_QUANT=Q4_K_M
NOXA_EMBED_MODEL=
NOXA_RERANK_MODEL=
NOXA_MODEL_CACHE_DIR=.noxa_models
NOXA_PRELOAD_MODELS=trueFast unsloth/granite-4.0-350m-GGUF (~4k dl) + default unsloth/granite-4.1-3b-GGUF (~10k dl). Smallest Granite preset; 350M nano instruct for fast mode.
HF_TOKEN=hf_...
NOXA_RUNTIME_PROFILE=mac-local
NOXA_ANSWER_MODEL_FAST=unsloth/granite-4.0-350m-GGUF
NOXA_ANSWER_MODEL_DEFAULT=unsloth/granite-4.1-3b-GGUF
NOXA_ANSWER_GGUF_QUANT=Q4_K_M
NOXA_EMBED_MODEL=
NOXA_RERANK_MODEL=
NOXA_MODEL_CACHE_DIR=.noxa_models
NOXA_PRELOAD_MODELS=trueFast unsloth/granite-3.3-2b-instruct-GGUF (~723 dl) + default ibm-granite/granite-3.3-8b-instruct-GGUF (~937 dl). Previous Granite 3.3 instruct line.
HF_TOKEN=hf_...
NOXA_RUNTIME_PROFILE=mac-local
NOXA_ANSWER_MODEL_FAST=unsloth/granite-3.3-2b-instruct-GGUF
NOXA_ANSWER_MODEL_DEFAULT=ibm-granite/granite-3.3-8b-instruct-GGUF
NOXA_ANSWER_GGUF_QUANT=Q4_K_M
NOXA_EMBED_MODEL=
NOXA_RERANK_MODEL=
NOXA_MODEL_CACHE_DIR=.noxa_models
NOXA_PRELOAD_MODELS=trueLiquid AI LFM2.5 edge hybrid models. Both modes use LiquidAI/LFM2.5-1.2B-Instruct-GGUF (~51k dl). Base: LiquidAI/LFM2.5-1.2B-Instruct (~207k dl). Multilingual, runs under ~1GB RAM at Q4.
HF_TOKEN=hf_...
NOXA_RUNTIME_PROFILE=mac-local
NOXA_ANSWER_MODEL_FAST=LiquidAI/LFM2.5-1.2B-Instruct-GGUF
NOXA_ANSWER_MODEL_DEFAULT=LiquidAI/LFM2.5-1.2B-Instruct-GGUF
NOXA_ANSWER_GGUF_QUANT=Q4_K_M
NOXA_EMBED_MODEL=
NOXA_RERANK_MODEL=
NOXA_MODEL_CACHE_DIR=.noxa_models
NOXA_PRELOAD_MODELS=trueFast LiquidAI/LFM2.5-350M-GGUF (~10k dl) + default LiquidAI/LFM2.5-1.2B-Instruct-GGUF (~51k dl). Smallest Liquid preset.
HF_TOKEN=hf_...
NOXA_RUNTIME_PROFILE=mac-local
NOXA_ANSWER_MODEL_FAST=LiquidAI/LFM2.5-350M-GGUF
NOXA_ANSWER_MODEL_DEFAULT=LiquidAI/LFM2.5-1.2B-Instruct-GGUF
NOXA_ANSWER_GGUF_QUANT=Q4_K_M
NOXA_EMBED_MODEL=
NOXA_RERANK_MODEL=
NOXA_MODEL_CACHE_DIR=.noxa_models
NOXA_PRELOAD_MODELS=trueFast LiquidAI/LFM2.5-1.2B-Instruct-GGUF + default LiquidAI/LFM2.5-8B-A1B-GGUF (~164k dl). 8B MoE (A1B active); use mode: quality for the larger model.
HF_TOKEN=hf_...
NOXA_RUNTIME_PROFILE=mac-local
NOXA_ANSWER_MODEL_FAST=LiquidAI/LFM2.5-1.2B-Instruct-GGUF
NOXA_ANSWER_MODEL_DEFAULT=LiquidAI/LFM2.5-8B-A1B-GGUF
NOXA_ANSWER_GGUF_QUANT=Q4_K_M
NOXA_EMBED_MODEL=
NOXA_RERANK_MODEL=
NOXA_MODEL_CACHE_DIR=.noxa_models
NOXA_PRELOAD_MODELS=trueFast LiquidAI/LFM2.5-350M-GGUF + default LiquidAI/LFM2.5-1.2B-Thinking-GGUF (~12k dl). Reasoning-tuned variant for default / quality modes.
HF_TOKEN=hf_...
NOXA_RUNTIME_PROFILE=mac-local
NOXA_ANSWER_MODEL_FAST=LiquidAI/LFM2.5-350M-GGUF
NOXA_ANSWER_MODEL_DEFAULT=LiquidAI/LFM2.5-1.2B-Thinking-GGUF
NOXA_ANSWER_GGUF_QUANT=Q4_K_M
NOXA_EMBED_MODEL=
NOXA_RERANK_MODEL=
NOXA_MODEL_CACHE_DIR=.noxa_models
NOXA_PRELOAD_MODELS=trueFast unsloth/Llama-3.2-1B-Instruct-GGUF (~27k dl) + default unsloth/Llama-3.2-3B-Instruct-GGUF (~76k dl). Meta stack with a real fast/default split.
HF_TOKEN=hf_...
NOXA_RUNTIME_PROFILE=mac-local
NOXA_ANSWER_MODEL_FAST=unsloth/Llama-3.2-1B-Instruct-GGUF
NOXA_ANSWER_MODEL_DEFAULT=unsloth/Llama-3.2-3B-Instruct-GGUF
NOXA_ANSWER_GGUF_QUANT=Q4_K_M
NOXA_EMBED_MODEL=
NOXA_RERANK_MODEL=
NOXA_MODEL_CACHE_DIR=.noxa_models
NOXA_PRELOAD_MODELS=trueBoth modes use unsloth/Llama-3.2-3B-Instruct-GGUF (~76k dl). Good A/B vs Qwen3 when you want one model for all modes.
HF_TOKEN=hf_...
NOXA_RUNTIME_PROFILE=mac-local
NOXA_ANSWER_MODEL_FAST=unsloth/Llama-3.2-3B-Instruct-GGUF
NOXA_ANSWER_MODEL_DEFAULT=unsloth/Llama-3.2-3B-Instruct-GGUF
NOXA_ANSWER_GGUF_QUANT=Q4_K_M
NOXA_EMBED_MODEL=
NOXA_RERANK_MODEL=
NOXA_MODEL_CACHE_DIR=.noxa_models
NOXA_PRELOAD_MODELS=trueFast unsloth/Llama-3.2-1B-Instruct-GGUF + default MaziyarPanahi/Meta-Llama-3.1-8B-Instruct-GGUF (~179k dl). Heavier; use mode: quality and enough RAM/VRAM.
HF_TOKEN=hf_...
NOXA_RUNTIME_PROFILE=mac-local
NOXA_ANSWER_MODEL_FAST=unsloth/Llama-3.2-1B-Instruct-GGUF
NOXA_ANSWER_MODEL_DEFAULT=MaziyarPanahi/Meta-Llama-3.1-8B-Instruct-GGUF
NOXA_ANSWER_GGUF_QUANT=Q4_K_M
NOXA_EMBED_MODEL=
NOXA_RERANK_MODEL=
NOXA_MODEL_CACHE_DIR=.noxa_models
NOXA_PRELOAD_MODELS=trueFast unsloth/Llama-3.2-1B-Instruct-GGUF + default MaziyarPanahi/Mistral-7B-Instruct-v0.3-GGUF (~187k dl). Classic Mistral instruct line.
HF_TOKEN=hf_...
NOXA_RUNTIME_PROFILE=mac-local
NOXA_ANSWER_MODEL_FAST=unsloth/Llama-3.2-1B-Instruct-GGUF
NOXA_ANSWER_MODEL_DEFAULT=MaziyarPanahi/Mistral-7B-Instruct-v0.3-GGUF
NOXA_ANSWER_GGUF_QUANT=Q4_K_M
NOXA_EMBED_MODEL=
NOXA_RERANK_MODEL=
NOXA_MODEL_CACHE_DIR=.noxa_models
NOXA_PRELOAD_MODELS=trueFast unsloth/Qwen3-0.6B-GGUF + default bartowski/DeepSeek-R1-Distill-Qwen-7B-GGUF (~34k dl). Reasoning-oriented quality model; slower than 3–4B instruct models.
HF_TOKEN=hf_...
NOXA_RUNTIME_PROFILE=mac-local
NOXA_ANSWER_MODEL_FAST=unsloth/Qwen3-0.6B-GGUF
NOXA_ANSWER_MODEL_DEFAULT=bartowski/DeepSeek-R1-Distill-Qwen-7B-GGUF
NOXA_ANSWER_GGUF_QUANT=Q4_K_M
NOXA_EMBED_MODEL=
NOXA_RERANK_MODEL=
NOXA_MODEL_CACHE_DIR=.noxa_models
NOXA_PRELOAD_MODELS=trueAnswer: Qwen3 unsloth stack. Retrieval: BAAI/bge-small-en-v1.5-GGUF + Voodisss/Qwen3-Reranker-0.6B-GGUF-llama_cpp.
HF_TOKEN=hf_...
NOXA_RUNTIME_PROFILE=mac-local
NOXA_ANSWER_MODEL_FAST=unsloth/Qwen3-0.6B-GGUF
NOXA_ANSWER_MODEL_DEFAULT=unsloth/Qwen3-1.7B-GGUF
NOXA_ANSWER_GGUF_QUANT=Q4_K_M
NOXA_EMBED_MODEL=BAAI/bge-small-en-v1.5-GGUF
NOXA_RERANK_MODEL=Voodisss/Qwen3-Reranker-0.6B-GGUF-llama_cpp
NOXA_MODEL_CACHE_DIR=.noxa_models
NOXA_PRELOAD_MODELS=true| Variable | Values | Meaning |
|---|---|---|
NOXA_RUNTIME_PROFILE |
auto, mac-local, cloud-cpu, cloud-gpu |
Hardware profile for llama.cpp GPU offload defaults |
All inference (answer, embed, rerank) uses llama-cpp-python with GGUF Hugging Face repos only.
| Variable | Example | Notes |
|---|---|---|
NOXA_ANSWER_MODEL_FAST |
unsloth/Qwen3-0.6B-GGUF |
Fast mode GGUF repo |
NOXA_ANSWER_MODEL_DEFAULT |
unsloth/Qwen3-1.7B-GGUF |
Default/quality mode GGUF repo |
NOXA_ANSWER_GGUF_QUANT |
Q4_K_M |
Quantization tag to pick from each GGUF repo |
NOXA_EMBED_MODEL |
nomic-ai/nomic-embed-text-v1.5-GGUF |
Embedding GGUF repo (create_embedding) |
NOXA_RERANK_MODEL |
Voodisss/Qwen3-Reranker-0.6B-GGUF-llama_cpp |
Reranker GGUF repo (yes/no logit scoring) |
Request mode (fast / default / quality) selects which answer model role is used — not a separate env var.
| Variable | Default | Notes |
|---|---|---|
HF_TOKEN |
— | Hugging Face token for gated models / rate limits |
NOXA_PRELOAD_MODELS |
true |
Download and warm models at startup |
NOXA_MODEL_CACHE_DIR |
.noxa_models |
Local GGUF download directory |
NOXA_SQLITE_PATH |
noxa.db |
Search/fetch/embedding cache |
| Variable | Default | Notes |
|---|---|---|
NOXA_HOST |
0.0.0.0 |
Bind address |
NOXA_PORT |
8000 |
Listen port |
NOXA_DEFAULT_MODE |
default |
Default pipeline mode when request omits mode |
NOXA_GLOBAL_TIMEOUT_MS |
25000 |
Fetch stage budget |
NOXA_PER_PAGE_TIMEOUT_MS |
8000 |
Single-page fetch timeout |
NOXA_MAX_CHARS_PER_PAGE |
80000 |
Truncate fetched markdown |
NOXA_PROXIES |
— | Comma-separated proxy URLs |
NOXA_DEBUG_DUMP_DIR |
dump |
Debug output for return_debug: true |
Benchmark answer backends:
uv run python scripts/benchmark_answer.py --fixture dump/web_answer_* --output benchmark.csv