Selora AI LLM 14B — fused single-model build
Qwen3 14B fine-tuned for Home Assistant, with all five Selora specialists
(command, automation, answer, clarification, utilities) merged into
one model. For runtimes that cannot hot-swap LoRA adapters — Ollama being
the common case. Needs about 16 GB of memory.
The adapter bundle this is merged from lives in selorahomes/Selora-AI-LLM-14B: a shared quantized base plus five separate LoRA adapters, swapped per request. That is the reference deployment and the one the Home Assistant integration uses.
Which one do you want?
| This repo | Selora-AI-LLM-14B | |
|---|---|---|
| Ships | One fused GGUF | Base GGUF + 5 LoRA adapters |
| Runtime | Ollama, llama.cpp — anything that loads a single GGUF | llama.cpp with --lora, vLLM with --enable-lora |
| Picks the response type | The model does, from the router prompt | The caller does, by activating one adapter |
| Accuracy | Trails the adapters: see below | Measured on the Allen suite — see its card |
Merging trades accuracy for simplicity. Each adapter was trained against its own system prompt; the fused model is driven by a router prompt that asks it to choose a response type first, which is not a shape any adapter was trained on. If you can swap adapters, swap adapters.
Measured on the Allen benchmark through the Home Assistant integration's Ollama backend, at temperature 0, on the full datasets, beside the adapter bundle:
| dataset | cases | fused, model only | adapters, model only | fused, with overrides | adapters, with overrides |
|---|---|---|---|---|---|
| assist | 460 | 65.9% | 80.4% | 82.4% | 88.0% |
| assist-mini | 196 | 87.8% | 95.9% | 100.0% | 100.0% |
| questions | 370 | 59.5% | 85.7% | 91.6% | 94.6% |
| automations | 20 | 100.0% | 100.0% | 100.0% | 100.0% |
Model only switches the integration's deterministic overrides off, so every
turn is decided by the model; with overrides has them on. Neither is exactly
the shipped configuration: approval and the safe-command allowlist are off for
the run. The fused runs used this repo's system prompt, which lets the model
answer a blueprint request with YAML. An automations reply passes if Home
Assistant accepts it as an automation blueprint with every requested input
wired; the automation is not run.
Quick start
ollama run hf.co/selorahomes/Selora-AI-LLM-14B-ollama:selora-ollama.Q5_K_S.gguf
The filename tag is deliberate. Hugging Face's Ollama integration selects
Q4_K_M when present and otherwise picks a reasonable quant from the repo;
naming the file removes the guess.
Or build it yourself from the Modelfile in this repo:
ollama create selora-14b -f Modelfile
ollama run selora-14b
The system, template and params files at the repo root configure the
same thing for ollama run hf.co/… directly.
Prompt format
ChatML, with /no_think prefixed to the user turn to suppress Qwen3's
reasoning block so the output is bare JSON. Inference must match training
byte-for-byte; template in this repo is the authoritative form.
<|im_start|>system
{system}<|im_end|>
<|im_start|>user
/no_think {prompt}<|im_end|>
<|im_start|>assistant
<think>
</think>
The empty <think></think> block is part of the prompt, not the output. Training
includes it (masked), so the template must emit it. Ollama renders the chat
template embedded in the GGUF rather than template, and that one always emits
it, with or without --think=false. Without it the model
generates as though the JSON's opening {" had already been written and returns
q=[...] instead of {"q":[...]}, which no parser accepts.
The user turn carries the AVAILABLE ENTITIES list, EXISTING AUTOMATIONS,
and — for utilities questions — a RELEVANT DOCS block. The model replies with
exactly one JSON object, of whichever of the five types it picked. Context is
4096 tokens.
Generation parameters
Set by params / the Modelfile:
temperature 0.0
repeat_penalty 1.0
repeat_last_n 256
num_ctx 4096
stop <|im_end|>, <|endoftext|>
repeat_penalty stays at 1.0 on purpose. JSON output is mostly repeated
structural tokens, and penalising them degrades schema fidelity.
Files
| Artifact | Purpose |
|---|---|
selora-ollama.Q5_K_S.gguf |
The fused model, Q5_K_S, 10.3 GB (9.6 GiB) |
Modelfile |
Ollama recipe (model + router prompt + params) |
system |
Router system prompt |
template |
Go chat template |
params |
Sampler settings |
manifest.json |
Version, checksum, provenance |
LICENSE / NOTICE |
Apache 2.0 text and the Qwen3 attribution |
Modelfile, system, template and params are generated from
the models repo —
data-pipeline/prompts/router_system_prompt.txt is the source of truth for the
system prompt. Don't edit them here; they are overwritten on every release.
Versioning
main is the latest release, and each release is also tagged v<x.y.z>.
Versions track the adapter bundle in
selorahomes/Selora-AI-LLM-14B: the same
manifest.json version covers both, because both are built from one conversion
run.
License
Apache 2.0, inheriting Qwen3-14B.