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. default marks the model Postil uses out of the box; the rest are a curated set spanning cost and locally-runnable open-weights options. Re-check live provider pricing before committing to a procurement number.

ModelCapabilitiesPrice / 1M tokens
GLM 5.2default
z-ai/glm-5.2
1.0M ctxopen-weights>200Buntested
$0.42 in / $1.32 out
Kimi K2.7 Code
moonshotai/kimi-k2.7-code
262K ctxopen-weights>200Buntested
$0.72 in / $3.50 out
DeepSeek V4 Pro
deepseek/deepseek-v4-pro
1.0M ctxopen-weights>200B
$0.435 in / $0.87 out
Kimi K2.6
moonshotai/kimi-k2.6
262K ctxvisionopen-weights>200B
$0.66 in / $3.41 out
DeepSeek V4 Flash
deepseek/deepseek-v4-flash
1.0M ctxopen-weights40B-200B
$0.077 in / $0.154 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 runnable
$0.08 in / $0.28 out
Mistral Small 3.2 24B
mistralai/mistral-small-3.2-24b-instruct
128K ctxvisionopen-weights<40B · locally runnable
$0.075 in / $0.20 out
Gemma 3 27B
google/gemma-3-27b-it
131K ctxvisionopen-weights<40B · locally runnable
$0.08 in / $0.16 out

Price values are a committed public snapshot from the OpenRouter catalog, captured July 12, 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. Mean cost per review is the headline column; total cost shows aggregate spend for the checked-in run.

Detection rate here is a floor for what a model catches on seeded, unambiguous defects; it is not a ranking across models. The checked-in live report below uses 40 fixtures, with 33 seeded defects and 7 clean PRs where the correct review is silence. Capable models can saturate this suite, which shows only that a model handles the review pipeline and obvious bugs at the stated cost.

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.

Generated 2026-07-10T11:00:12.292Z with postil-cli postil 0.1.2. Workflow run and artifact.

ModelCost / reviewTotal costDetection rateFalse positivesCases runMean duration
deepseek/deepseek-v4-pro$0.0009$0.036697%0406.5s
deepseek/deepseek-v4-flash$0.0002$0.006691%1407.4s
moonshotai/kimi-k2.6$0.0069$0.276385%04034.4s
qwen/qwen3-32b$0.0002$0.008194%3402.4s
mistralai/mistral-small-3.2-24b-instruct$0.0001$0.0038100%0405.6s
google/gemma-3-27b-it$0.0001$0.003597%1402.9s

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.

cd postil-cli/bench
export MODEL_API_KEY=...
export POSTIL_API_KEY="$MODEL_API_KEY"
export POSTIL_BENCH_MODELS=z-ai/glm-5.2,moonshotai/kimi-k2.7-code,deepseek/deepseek-v4-flash
bun run bench:live-models -- --json-out .runs/live-models.json

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.