# Vela 3.0 architecture figures: sources

The figures are generated by `vela3_figures.py` on the `architecture_svg.py` primitives of the Vela 2.0 figure kit. Every
dimension comes from `vela3-spec.json`, which `build_vela3_spec.py` builds from the release packages' own configuration
files. This was a static inspection of configuration files, source code and safetensors headers. No weights were loaded and
no model was run.

```sh
python3 build_vela3_spec.py   # needs the package files listed below in pkg_src/
python3 vela3_figures.py      # writes the SVGs
```

## Release revisions

| Model | Revision | Files read |
| --- | --- | --- |
| [vllm-sr/vela3-fast](https://huggingface.co/vllm-sr/vela3-fast) | `68a57a3779cac946370d640a388d6ada60940dab` | `config.json`, `vela3_config.json`, `modeling_ultrabert.py`, `vela3_encoder.py`, `vela3_schema.py`, `ub_d3_common.py`, adapter safetensors headers |
| [vllm-sr/vela3-fast-vision](https://huggingface.co/vllm-sr/vela3-fast-vision) | `e2b12d698f471a7e7d41c71cb2fbda7012b83f6f` | `config.json`, `vela3v_config.json`, `text/config.json`, `text/vela3_config.json`, `uvb_core.py`, `vela3v_encoder.py`, `vela3_encoder.py`, adapter safetensors headers |
| [vllm-sr/vela3-lite](https://huggingface.co/vllm-sr/vela3-lite) | `3e4f02e4134dd4c16e098561118c652081ace741` | `config.json`, `vela3_config.json`, `modeling_vela3.py`, `vela3_adapters.py`, `vela3_span.py`, `vela3_labeldef.py`, adapter safetensors headers |
| [vllm-sr/vela3-mini](https://huggingface.co/vllm-sr/vela3-mini) | `f1c73f5d1b63b4decc4883d8afa78df7c1d1fdaa` | as vela3-lite |
| [vllm-sr/vela3-flash](https://huggingface.co/vllm-sr/vela3-flash) | `0e0452e01a0c1a3b818e224d3af2671b105ea9a2` | as vela3-lite |
| [vllm-sr/vela3-turbo](https://huggingface.co/vllm-sr/vela3-turbo) | `39af842a9cdae46c8feb79b3b52d3ac6b78979e8` | as vela3-lite |

Each d3-size package's `config.json` is its base's configuration (Qwen3.5 text and vision), and `vela3_config.json` pins
the base revision: d3-lite `9c107031`, d3-mini `566da0ea`, d3-flash `8b35c853`, d3-turbo v1.0 `da17b5d0`.

## What each figure is checked against

- **01 vela3-fast:**
  - backbone dimensions, the attention window and the global-layer schedule, and RoPE θ: `config.json`;
  - pre-norm blocks, SwiGLU and the bidirectional local mask: `modeling_ultrabert.py`;
  - the decision rendering and readout: `vela3_encoder.DecisionEncoder` and `ub_d3_common.to_row`;
  - adapter construction, with frozen weights shared by reference: `vela3_schema.build_adapter`;
  - LoRA ranks and unfrozen top layers: the adapter headers (`lora_rank`, `lora_alpha`, `unfreeze_top`).
- **02 vela3-fast-vision:**
  - the network per task and the backbone file per task: `vela3v_config.json`, `uvb_core.TaskNet`, `vela3v_encoder.py`;
  - text-side routing: `vela3_encoder.py`;
  - the image read (2 × 2 tiles of 512 px plus a global view, 320 tokens): `uvb_core.py`.
- **03–06, the d3 sizes:**
  - base dimensions: `config.json` (`text_config`, `vision_config`);
  - adapter names, ranks and first layers: `vela3_config.json` `adapters`;
  - the d3 code readout: the router's own Decision 3.0 runtime description (`src/model-runtime/vllm_srun/families/decision3/family.py`).
- **07 routing:** `Vela3Encoder.system_one` / `span_answer` (vela3-fast); `Vela3MiniModel.decide` / `_span_route` (d3 sizes).
- **08 row-gated LoRA:** `vela3_adapters.MultiLoRA`.
- **09 decision readout:** `DecisionEncoder._logits`. The training target (soft-target cross-entropy against d3's answer distribution, half gold and half d3 where a gold label exists) is from the training records.
- **10 d3 span pass:** `vela3_span.Render`, `SpanEngine.logits`, `SpanHeadV2`.

Parameter counts in figure titles are the cards' reported sizes. They are not an audit of every registered parameter.
