# gen-seat — the fleet `gen` seat (ana-ml2 GPU0, :8015)

Serves **`qwen3.8-27b-uncensored`** (JonathanColetti/Qwen3.8-27B-Uncensored,
Heretic-abliterated Qwen3.8-27B, vision-intact, 262K context) plus the
`-thinking` served-name for the reasoning split.

Backs **7 LiteLLM aliases**: `gen`, `gen-reasoning`, `summarizer`,
`summarizer-large`, `classifier`, `image-judge`, `qwen-image-bench`. Treat any
change here as fleet-wide.

- **Quant:** in-house **mixed-precision** — NVFP4 W4A4 for layers 0-55 MLPs,
  FP8 W8A8 for attention / `linear_attn` / `lm_head` / layers 56-63 MLPs, FP8 KV.
  ~94.5 tok/s decode at bs=1, MTP n=3 @ ~48% acceptance.
- **Speculative decoding:** `qwen3_5_mtp`, `num_speculative_tokens=3` (measured
  optimum — see the quant service README).
- **Tunables:** `.env` on the host. ⚠ it is mode 0600 / lkraven-owned, so every
  `docker compose` call against this stack needs `sudo` — without it compose
  cannot read `.env`, fails with `permission denied`, and leaves the old
  container running while appearing to have succeeded.

## Pipeline, acceptance gate, and rollback

All of it — the recipe, the `re:^mtp.*` foot-gun, the benchmark harness, the GPU0
budget interaction with `meromero-charrp`, and the rollback command — lives in
[`services/gen-seat-mixed-quant/README.md`](../../services/gen-seat-mixed-quant/README.md).

## Deploy

```bash
scripts/deploy-stack.sh ana-ml2 gen-seat        # diffs vs live, prompts y/N
# on host:
ssh infra-ops@10.250.50.54
cd /opt/docker/compose/gen-seat && sudo docker compose up -d vllm-gen
```
