# mapika/decider architecture

> Architecture diagram of the GitHub repository mapika/decider, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-09). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/mapika/decider
- Repository: https://github.com/mapika/decider

## Overview

Decider turns a state and typed questions into calibrated option probabilities in one model pass. The primary path is a caller using `Decider`, which builds prompts, scores answer slots through a selected inference engine, and formats typed results; HTTP and vLLM servers expose serving variants. Training data, vision, and game-agent workflows are meaningful adjacent capabilities. Edges are limited to relationships shown in excerpts, source-index references, or the README; several unsampled subsystems are represented without speculative wiring.

Main entry points: [`decider/infer.py`](https://github.com/mapika/decider/blob/main/decider/infer.py) (Decider API), [`decider/prompt.py`](https://github.com/mapika/decider/blob/main/decider/prompt.py) (Prompt construction), [`decider/engine.py`](https://github.com/mapika/decider/blob/main/decider/engine.py) (Torch inference), [`decider/model.py`](https://github.com/mapika/decider/blob/main/decider/model.py) (Decision model)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_decision["Decision runtime"]
  node_decider_api["Decider API<br/>[infer.py]"]
  node_typed_format["Typed result format<br/>[systemone.py]"]
  node_prompt_build["Prompt construction<br/>[prompt.py]"]
  node_decision_model["Decision model<br/>[model.py]"]
  node_engine["Torch inference<br/>[engine.py]"]
  node_gguf_engine["GGUF inference<br/>[engine_gguf.py]"]
  node_schema_cache["Schema cache<br/>[schema_engine.py]"]
  node_shared_prefix["Shared prefix<br/>[shared_prefix.py]"]
  node_temperatures["Probability calibration<br/>[temperature.py]"]
end

subgraph group_serving["Serving interfaces"]
  node_http_server["HTTP server<br/>[serve.py]"]
  node_vllm_server["vLLM server<br/>[serve_vllm.py]"]
  node_vllm_worker["vLLM worker<br/>[vllm_worker.py]"]
  node_image_input["Image handling<br/>[images.py]"]
end

subgraph group_learning["Data and training"]
  node_task_data["Task datasets<br/>[core.py]"]
  node_data_tasks["Extended tasks<br/>[tasks_extended.py]"]
  node_agent_tasks["Agent tasks<br/>[tasks_agents.py]"]
  node_heldout_tasks["Held-out tasks<br/>[tasks_heldout.py]"]
  node_data_mixture["Training mixture<br/>[mixture.py]"]
  node_trainer["Model training<br/>[train.py]"]
end

subgraph group_multimodal["Vision decisions"]
  node_vision_model["Vision model<br/>[model.py]"]
  node_vision_data["Vision data<br/>[data.py]"]
  node_vision_training["Vision training<br/>[train.py]"]
  node_vision_reader["Vision reader<br/>[vision_reader.py]"]
end

subgraph group_applications["Evaluation and games"]
  node_game_envs["Game environments<br/>[envs.py]"]
  node_game_rl["Game reinforcement learning<br/>[rl.py]"]
  node_mario["Mario interface<br/>[mario.py]"]
  node_mario_rl["Mario reinforcement learning<br/>[mario_rl.py]"]
  node_probes["Capability probes<br/>[applications.py]"]
  node_metrics["Evaluation metrics<br/>[metrics.py]"]
end

node_caller(("Application caller"))

node_caller -->|"requests decisions"| node_decider_api
node_decider_api -->|"scores prompts"| node_engine
node_decider_api -->|"selects GGUF"| node_gguf_engine
node_decider_api -->|"loads model"| node_decision_model
node_decider_api -->|"formats answers"| node_typed_format
node_engine -->|"runs backbone"| node_decision_model
node_engine -->|"scores prompt items"| node_prompt_build
node_engine -->|"calibrates probabilities"| node_temperatures
node_gguf_engine -->|"uses prompt rows"| node_prompt_build
node_gguf_engine -->|"shares calibration"| node_temperatures
node_decision_model -->|"uses option tokens"| node_prompt_build
node_schema_cache -->|"builds schema prompts"| node_prompt_build
node_schema_cache -.->|"reuses prefix cache"| node_shared_prefix
node_http_server -->|"serves typed requests"| node_typed_format
node_http_server -->|"uses inference API"| node_decider_api
node_http_server -->|"handles image assets"| node_image_input
node_vllm_server -->|"serves typed requests"| node_typed_format
node_vllm_server -->|"dispatches work"| node_vllm_worker
node_vllm_server -->|"handles image assets"| node_image_input
node_data_tasks -->|"registers tasks"| node_task_data
node_agent_tasks -->|"uses task format"| node_task_data
node_heldout_tasks -->|"uses task format"| node_task_data
node_trainer -->|"loads training data"| node_task_data
node_trainer -->|"trains model"| node_decision_model
node_vision_model -->|"builds typed prompts"| node_prompt_build
node_vision_training -->|"trains vision model"| node_vision_model
node_vision_training -->|"loads vision data"| node_vision_data
node_game_rl -->|"uses environments"| node_game_envs
node_game_rl -->|"requests decisions"| node_decider_api
node_mario -->|"requests decisions"| node_decider_api
node_mario_rl -->|"uses Mario interface"| node_mario
node_mario_rl -->|"requests decisions"| node_decider_api
node_probes -->|"probes decisions"| node_decider_api

click node_decider_api "https://github.com/mapika/decider/blob/main/decider/infer.py"
click node_typed_format "https://github.com/mapika/decider/blob/main/decider/systemone.py"
click node_prompt_build "https://github.com/mapika/decider/blob/main/decider/prompt.py"
click node_decision_model "https://github.com/mapika/decider/blob/main/decider/model.py"
click node_engine "https://github.com/mapika/decider/blob/main/decider/engine.py"
click node_gguf_engine "https://github.com/mapika/decider/blob/main/decider/engine_gguf.py"
click node_schema_cache "https://github.com/mapika/decider/blob/main/decider/schema_engine.py"
click node_shared_prefix "https://github.com/mapika/decider/blob/main/decider/shared_prefix.py"
click node_temperatures "https://github.com/mapika/decider/blob/main/decider/temperature.py"
click node_http_server "https://github.com/mapika/decider/blob/main/decider/serve.py"
click node_vllm_server "https://github.com/mapika/decider/blob/main/decider/serve_vllm.py"
click node_vllm_worker "https://github.com/mapika/decider/blob/main/decider/vllm_worker.py"
click node_image_input "https://github.com/mapika/decider/blob/main/decider/images.py"
click node_task_data "https://github.com/mapika/decider/blob/main/decider/data/core.py"
click node_data_tasks "https://github.com/mapika/decider/blob/main/decider/data/tasks_extended.py"
click node_agent_tasks "https://github.com/mapika/decider/blob/main/decider/data/tasks_agents.py"
click node_heldout_tasks "https://github.com/mapika/decider/blob/main/decider/data/tasks_heldout.py"
click node_data_mixture "https://github.com/mapika/decider/blob/main/decider/data/mixture.py"
click node_trainer "https://github.com/mapika/decider/blob/main/decider/train.py"
click node_vision_model "https://github.com/mapika/decider/blob/main/decider/vision/model.py"
click node_vision_data "https://github.com/mapika/decider/blob/main/decider/vision/data.py"
click node_vision_training "https://github.com/mapika/decider/blob/main/decider/vision/train.py"
click node_vision_reader "https://github.com/mapika/decider/blob/main/decider/vision_reader.py"
click node_game_envs "https://github.com/mapika/decider/blob/main/decider/games/envs.py"
click node_game_rl "https://github.com/mapika/decider/blob/main/decider/games/rl.py"
click node_mario "https://github.com/mapika/decider/blob/main/decider/games/mario.py"
click node_mario_rl "https://github.com/mapika/decider/blob/main/decider/games/mario_rl.py"
click node_probes "https://github.com/mapika/decider/blob/main/decider/probes/applications.py"
click node_metrics "https://github.com/mapika/decider/blob/main/decider/metrics.py"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_decider_api,node_typed_format,node_prompt_build,node_decision_model,node_engine,node_gguf_engine,node_schema_cache,node_shared_prefix,node_temperatures toneBlue
class node_http_server,node_vllm_server,node_vllm_worker,node_image_input toneAmber
class node_task_data,node_data_tasks,node_agent_tasks,node_heldout_tasks,node_data_mixture,node_trainer toneMint
class node_vision_model,node_vision_data,node_vision_training,node_vision_reader toneRose
class node_game_envs,node_game_rl,node_mario,node_mario_rl,node_probes,node_metrics,node_caller toneIndigo
```

## Components

### Decision runtime

- [Decider API](https://github.com/mapika/decider/blob/main/decider/infer.py): `decider/infer.py`
- [Typed result format](https://github.com/mapika/decider/blob/main/decider/systemone.py): `decider/systemone.py`
- [Prompt construction](https://github.com/mapika/decider/blob/main/decider/prompt.py): `decider/prompt.py`
- [Decision model](https://github.com/mapika/decider/blob/main/decider/model.py): `decider/model.py`
- [Torch inference](https://github.com/mapika/decider/blob/main/decider/engine.py): `decider/engine.py`
- [GGUF inference](https://github.com/mapika/decider/blob/main/decider/engine_gguf.py): `decider/engine_gguf.py`
- [Schema cache](https://github.com/mapika/decider/blob/main/decider/schema_engine.py): `decider/schema_engine.py`
- [Shared prefix](https://github.com/mapika/decider/blob/main/decider/shared_prefix.py): `decider/shared_prefix.py`
- [Probability calibration](https://github.com/mapika/decider/blob/main/decider/temperature.py): `decider/temperature.py`

### Serving interfaces

- [HTTP server](https://github.com/mapika/decider/blob/main/decider/serve.py): `decider/serve.py`
- [vLLM server](https://github.com/mapika/decider/blob/main/decider/serve_vllm.py): `decider/serve_vllm.py`
- [vLLM worker](https://github.com/mapika/decider/blob/main/decider/vllm_worker.py): `decider/vllm_worker.py`
- [Image handling](https://github.com/mapika/decider/blob/main/decider/images.py): `decider/images.py`

### Data and training

- [Task datasets](https://github.com/mapika/decider/blob/main/decider/data/core.py): `decider/data/core.py`
- [Extended tasks](https://github.com/mapika/decider/blob/main/decider/data/tasks_extended.py): `decider/data/tasks_extended.py`
- [Agent tasks](https://github.com/mapika/decider/blob/main/decider/data/tasks_agents.py): `decider/data/tasks_agents.py`
- [Held-out tasks](https://github.com/mapika/decider/blob/main/decider/data/tasks_heldout.py): `decider/data/tasks_heldout.py`
- [Training mixture](https://github.com/mapika/decider/blob/main/decider/data/mixture.py): `decider/data/mixture.py`
- [Model training](https://github.com/mapika/decider/blob/main/decider/train.py): `decider/train.py`

### Vision decisions

- [Vision model](https://github.com/mapika/decider/blob/main/decider/vision/model.py): `decider/vision/model.py`
- [Vision data](https://github.com/mapika/decider/blob/main/decider/vision/data.py): `decider/vision/data.py`
- [Vision training](https://github.com/mapika/decider/blob/main/decider/vision/train.py): `decider/vision/train.py`
- [Vision reader](https://github.com/mapika/decider/blob/main/decider/vision_reader.py): `decider/vision_reader.py`

### Evaluation and games

- [Game environments](https://github.com/mapika/decider/blob/main/decider/games/envs.py): `decider/games/envs.py`
- [Game reinforcement learning](https://github.com/mapika/decider/blob/main/decider/games/rl.py): `decider/games/rl.py`
- [Mario interface](https://github.com/mapika/decider/blob/main/decider/games/mario.py): `decider/games/mario.py`
- [Mario reinforcement learning](https://github.com/mapika/decider/blob/main/decider/games/mario_rl.py): `decider/games/mario_rl.py`
- [Capability probes](https://github.com/mapika/decider/blob/main/decider/probes/applications.py): `decider/probes/applications.py`
- [Evaluation metrics](https://github.com/mapika/decider/blob/main/decider/metrics.py): `decider/metrics.py`

### Other components

- **Application caller**

## Connections

- Application caller → Decider API: requests decisions
- Decider API → Torch inference: scores prompts (evidence: `decider/infer.py`)
- Decider API → GGUF inference: selects GGUF (evidence: `decider/infer.py`)
- Decider API → Decision model: loads model (evidence: `decider/infer.py`)
- Decider API → Typed result format: formats answers (evidence: `decider/infer.py`)
- Torch inference → Decision model: runs backbone (evidence: `decider/engine.py`)
- Torch inference → Prompt construction: scores prompt items (evidence: `decider/engine.py`)
- Torch inference → Probability calibration: calibrates probabilities (evidence: `decider/engine.py`)
- GGUF inference → Prompt construction: uses prompt rows (evidence: `decider/engine_gguf.py`)
- GGUF inference → Probability calibration: shares calibration (evidence: `decider/engine_gguf.py`)
- Decision model → Prompt construction: uses option tokens (evidence: `decider/model.py`)
- Schema cache → Prompt construction: builds schema prompts (evidence: `decider/schema_engine.py`)
- Schema cache → Shared prefix: reuses prefix cache
- HTTP server → Typed result format: serves typed requests (evidence: `decider/serve.py`)
- HTTP server → Decider API: uses inference API (evidence: `decider/serve.py`)
- HTTP server → Image handling: handles image assets (evidence: `decider/serve.py`)
- vLLM server → Typed result format: serves typed requests (evidence: `decider/serve_vllm.py`)
- vLLM server → vLLM worker: dispatches work (evidence: `decider/serve_vllm.py`)
- vLLM server → Image handling: handles image assets (evidence: `decider/serve_vllm.py`)
- Extended tasks → Task datasets: registers tasks (evidence: `decider/data/__init__.py`)
- Agent tasks → Task datasets: uses task format (evidence: `decider/data/tasks_agents.py`)
- Held-out tasks → Task datasets: uses task format (evidence: `decider/data/tasks_heldout.py`)
- Model training → Task datasets: loads training data (evidence: `decider/train.py`)
- Model training → Decision model: trains model (evidence: `decider/train.py`)
- Vision model → Prompt construction: builds typed prompts (evidence: `decider/vision/model.py`)
- Vision training → Vision model: trains vision model (evidence: `decider/vision/train.py`)
- Vision training → Vision data: loads vision data (evidence: `decider/vision/train.py`)
- Game reinforcement learning → Game environments: uses environments (evidence: `decider/games/rl.py`)
- Game reinforcement learning → Decider API: requests decisions (evidence: `decider/games/rl.py`)
- Mario interface → Decider API: requests decisions (evidence: `decider/games/mario.py`)
- Mario reinforcement learning → Mario interface: uses Mario interface (evidence: `decider/games/mario_rl.py`)
- Mario reinforcement learning → Decider API: requests decisions (evidence: `decider/games/mario_rl.py`)
- Capability probes → Decider API: probes decisions (evidence: `decider/probes/applications.py`)
