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.
| Model | Capabilities | Price / 1M tokens |
|---|---|---|
GLM 5.2defaultz-ai/glm-5.2 | 1.0M ctxopen-weights>200Buntested | $0.42 in / $1.32 out |
Kimi K2.7 Codemoonshotai/kimi-k2.7-code | 262K ctxopen-weights>200Buntested | $0.72 in / $3.50 out |
DeepSeek V4 Prodeepseek/deepseek-v4-pro | 1.0M ctxopen-weights>200B | $0.435 in / $0.87 out |
Kimi K2.6moonshotai/kimi-k2.6 | 262K ctxvisionopen-weights>200B | $0.66 in / $3.41 out |
DeepSeek V4 Flashdeepseek/deepseek-v4-flash | 1.0M ctxopen-weights40B-200B | $0.077 in / $0.154 out |
Claude Haiku 4.5anthropic/claude-haiku-4.5 | 200K ctxvisionproprietaryuntested | $1.00 in / $5.00 out |
GPT-5 Miniopenai/gpt-5-mini | 400K ctxvisionproprietaryuntested | $0.25 in / $2.00 out |
Qwen3 32Bqwen/qwen3-32b | 131K ctxopen-weights<40B · locally runnable | $0.08 in / $0.28 out |
Mistral Small 3.2 24Bmistralai/mistral-small-3.2-24b-instruct | 128K ctxvisionopen-weights<40B · locally runnable | $0.075 in / $0.20 out |
Gemma 3 27Bgoogle/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_tokenMultiply 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 doctorvLLM 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-jsonMeasured 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.
| Model | Cost / review | Total cost | Detection rate | False positives | Cases run | Mean duration |
|---|---|---|---|---|---|---|
deepseek/deepseek-v4-pro | $0.0009 | $0.0366 | 97% | 0 | 40 | 6.5s |
deepseek/deepseek-v4-flash | $0.0002 | $0.0066 | 91% | 1 | 40 | 7.4s |
moonshotai/kimi-k2.6 | $0.0069 | $0.2763 | 85% | 0 | 40 | 34.4s |
qwen/qwen3-32b | $0.0002 | $0.0081 | 94% | 3 | 40 | 2.4s |
mistralai/mistral-small-3.2-24b-instruct | $0.0001 | $0.0038 | 100% | 0 | 40 | 5.6s |
google/gemma-3-27b-it | $0.0001 | $0.0035 | 97% | 1 | 40 | 2.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.jsonPromote 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.