# darkscarlett-charrp-reasoning — Dark-Scarlett char-rp-reasoning seat (ana-ml2 GPU1)

The **thinking** RP reasoning seat. Serves the LiteLLM `char-rp-reasoning` alias.

- **Model:** `Dark-Scarlett-v1.0-27B-NVFP4A16-wrapper` (ReadyArt Dark-Scarlett-v1.0-27B, Qwen3.6-27B base).
- **Host/GPU:** ana-ml2, GPU1 (co-located with the utility model cluster).
- **Port:** :8018 → LiteLLM `char-rp-reasoning`.
- **Context:** 256K (`--max-model-len 262144`). Qwen3.6 hybrid GatedDeltaNet linear-attention → KV-cheap, full 256K easily.
- **Thinking:** default on (`--reasoning-parser qwen3`; reasoning lands in the `reasoning` field). ⚠ Consumers need a generous `max_tokens` or the reasoning eats the whole budget (empty content, `finish: length`).
- **Tuning:** `.env` — `DS_GPU_MEM_UTIL=0.44`, `DS_MAX_MODEL_LEN=262144`, `DS_GPU_ID=1`.

## Quant note (the wrapper recipe)

Quantized with **llm-compressor NVFP4A16 loaded via the `Qwen3_5ForConditionalGeneration`
wrapper class** — an `AutoModelForCausalLM` save produces a flat `Qwen3_5TextConfig` that **both
vLLM and SGLang reject**; loading the wrapper keeps the config they accept (verified: SGLang errors
`Qwen3_5ForCausalLM has no SGLang implementation`). ModelOpt was blocked by a modelopt↔transformers
version deadlock for Qwen3.6. **MTP was dropped by the quant loader → deferred → no `--speculative-config`**
(spec-decode is net-negative at RP temps anyway). Pipeline: `ana-ml2:/tank/aimodels/darkscarlett-nvfp4-work/`.

Replaces the retired **heretic2-charrp-reasoning** (DavidAU Qwen3.6-27B-Heretic2 modelopt NVFP4+MTP) seat.

## Deploy

```bash
scripts/deploy-stack.sh ana-ml2 darkscarlett-charrp-reasoning
# on host: cp .env.example .env; docker compose up -d
```
