Pilot benchmark
The shipped pilot config runs 10 images × 2 dimensions × 5 samples = 100 trials throughgoogle/gemma-4-31b-it on OpenRouter, vision modality, capture_reasoning: true, cache_buster: true:
The image data URL dominates input tokens — the per-trial cost includes both the full image upload and a one-sentence reasoning string in the output.
Full-set extrapolation
Scaling the same model toimage_set: full_900 × 2 dimensions × 5 samples = 9,000 trials:
Cost by model class
Frontier models run roughly 20–100× more expensive per trial than open mid-size models. Plan your budget before choosing a model:Full-set numbers extrapolate from observed pilot per-trial cost. They are
estimates, not quotes. Run a smoke test against any new model to validate cost
capture before committing to a full run.
How cost is captured
Cost capture uses a two-tier fallback in the model runner:1
LiteLLM cost lookup (primary)
litellm.completion_cost(completion_response=resp) consults LiteLLM’s
built-in price table for the resolved model ID. This works for first-party
Anthropic, OpenAI, and Google models, and for most well-known open-weights
routes.2
OpenRouter native usage.cost (fallback)
For OpenRouter runs, the runner injects the following before each call:OpenRouter then returns the actual billed cost in
resp.usage.cost. The
runner reads it through three different access paths (attribute,
model_extra, __dict__) to handle pydantic-version variations in the
LiteLLM response object.3
NULL (Ollama and local providers)
No price source is available for local models.
cost_usd is stored as
NULL. Latency and token counts are still captured for every trial.Throughput formula
max_concurrency is the asyncio semaphore size. Effective throughput is:
For the Gemma-4-31B pilot at 8.2 s mean latency, max_concurrency: 4 yields roughly 0.49 trial/s, matching the observed numbers. Bumping concurrency further usually hits OpenRouter per-key rate limits before it speeds anything up — start at 4 and only raise it if you observe a queue building.
Budget worksheet
Use this formula to estimate any run before you launch it:oasis-llm smoke <config> first — it executes 3 trials for under $0.001 and reports per-trial cost. Read cost_per_trial from oasis-llm status, then multiply by your full trial count before launching the real run.