Postil

Models

Postil supports OpenAI-compatible chat completions and Anthropic Messages APIs. Use a managed provider such as OpenRouter, connect Anthropic directly, or run a local endpoint with Ollama, vLLM, SGLang, or LiteLLM.

Every model does the same job: read a diff, decide what is worth flagging. Capability and price vary across models; use case matters less, so the table below leads with facts (context, vision, weights, parameter class) instead of per-model recommendations.

Model catalog

This table uses committed public price snapshots from the OpenRouter catalog. The list spans cost and locally-runnable open-weights options. Bench-tested badges refer to the checked-in results below. Re-check live provider pricing before committing to a procurement number.

Hosted reviews route only to endpoints that deny data collection and hold no copy of the request, so a model whose providers offer no such endpoint cannot serve a hosted review at any price. That constraint is ours to enforce, not yours to configure. It also means the price a hosted review pays is the price of the qualifying route, which is not always the headline price for the model. Self-hosted and bring-your-own-key deployments choose their own provider and their own policy.

ModelCapabilitiesPrice / 1M tokens
GLM 5.2
z-ai/glm-5.2
1.0M ctxopen-weights>200Bbench-tested
$0.966 in / $3.036 out
Kimi K2.7 Code
moonshotai/kimi-k2.7-code
262K ctxvisionopen-weights>200Bbench-tested
$0.71 in / $3.50 out
DeepSeek V4 Pro 0813
deepseek/deepseek-v4-pro-0813
1.0M ctxopen-weights>200Bbench-tested
$0.66 in / $1.98 out
Kimi K2.6
moonshotai/kimi-k2.6
262K ctxvisionopen-weights>200Bbench-tested
$0.95 in / $4.00 out
DeepSeek V4 Flash 0731
deepseek/deepseek-v4-flash-0731
1.3M ctxopen-weights40B-200Bbench-tested
$0.14 in / $0.28 out
Qwen3.8 27B
qwen/qwen3.8-27b
262K ctxvisionopen-weights<40B · locally runnablebench-tested
$0.45 in / $3.20 out
DeepSeek V4 Pro
deepseek/deepseek-v4-pro
1.0M ctxopen-weights>200Buntested
$1.44 in / $2.88 out
DeepSeek V4 Flash
deepseek/deepseek-v4-flash
1.0M ctxopen-weights40B-200Buntested
$0.083 in / $0.165 out
GPT-5.6 Luna
openai/gpt-5.6-luna
1.1M ctxvisionproprietarybench-tested
$0.20 in / $1.20 out
Gemma 4 31B
google/gemma-4-31b-it
262K ctxvisionopen-weights<40B · locally runnablebench-tested
$0.09 in / $0.34 out
Nemotron 3.5 Lightning
nvidia/nemotron-3.5-lightning
1M ctxopen-weights40B-200Bbench-tested
$0.08 in / $0.20 out
Claude Haiku 4.5
anthropic/claude-haiku-4.5
200K ctxvisionproprietaryuntested
$1.00 in / $5.00 out
GPT-5 Mini
openai/gpt-5-mini
400K ctxvisionproprietaryuntested
$0.25 in / $2.00 out
Qwen3 32B
qwen/qwen3-32b
131K ctxopen-weights<40B · locally runnablebench-tested
$0.08 in / $0.28 out
Mistral Small 3.2 24B
mistralai/mistral-small-3.2-24b-instruct
256K ctxvisionopen-weights<40B · locally runnablebench-tested
$0.094 in / $0.25 out
Gemma 3 27B
google/gemma-3-27b-it
262K ctxvisionopen-weights<40B · locally runnablebench-tested
$0.08 in / $0.45 out

Price values are a committed public snapshot from the OpenRouter catalog, captured August 19, 2026. Re-check provider pricing before committing to a procurement number. Capability badges are maintained in this repo.

Cost per review

Review cost depends on the observed prompt and completion token counts and the provider's per-token prices. The formula is straightforward:

review_cost =
  prompt_tokens * input_price_per_token +
  completion_tokens * output_price_per_token

Multiply against the snapshot price in the table above for a rough per-review number. Larger diffs, consensus mode, or multiple model retries increase it.

Local models

Local inference is best for sensitive repositories and for teams that already operate GPU capacity. The catalog above marks open-weights models under 40B parameters as locally runnable. Start there. Postil fails closed when a model cannot produce a valid review envelope, so pick a coder-tuned model that follows JSON schema reliably.

Ollama

ollama pull qwen3:32b
POSTIL_API_BASE=http://localhost:11434/v1 \
MODEL_API_KEY=ollama \
POSTIL_API_KEY=ollama \
REVIEW_MODEL=qwen3:32b \
postil doctor

vLLM or LiteLLM

export POSTIL_API_BASE=http://localhost:8000/v1
export MODEL_API_KEY=local
export POSTIL_API_KEY="$MODEL_API_KEY"
export REVIEW_MODEL=served-model-name
postil review --staged --output-json

Measured on our bench

Method: seeded-defect fixtures run through a mock forge against the real model, scored against ground truth. The suite is 70 fixtures, 57 with a seeded defect and 13 clean pull requests where the correct review is silence.

Every model we have scored, with detection, gate correctness, silence on clean pull requests, cost and latency, is on the model bench page, along with the raw report and the command to reproduce it.

These public model-bench fixtures are separate from the private 126-PR silence-rate measurement dataset. The public site publishes aggregate silence-rate methodology and figures, not the raw measurement dataset, envelopes, or run logs.

Run the bench yourself

The CLI benchmark harness can score live OpenRouter models against the fixture suite. Live mode spends real inference tokens, writes reports under postil-cli/bench/.runs, and never prints the API key.

cargo build --release
cd postil-cli/bench
bun install --frozen-lockfile
export MODEL_API_KEY=...
REVIEW_MODEL=deepseek/deepseek-v4-pro-0813 \
  bun run bench:live -- --json-out .runs/v4-pro.json

One model per run. The report records the fixture corpus and evaluator digests alongside the metrics, so a run is only comparable to another run that scored the identical corpus with the identical evaluator.

Promote the cheapest model that preserves detection rate and silence on clean PRs for your own codebase. The numbers above are a starting point, not a substitute for running it on your diffs.