Skip to content

v0.2.3 — the Groq driver, validated by a real billed run

Choose a tag to compare

@theo-titonis theo-titonis released this 24 Aug 00:50
· 13 commits to main since this release

The Groq batch venue shipped in 0.2.2 could not have worked. This release is the
fix, and a real billed run is what validated it.

What was wrong

supports() carried twelve model prefixes and not one matched a model on
Groq's production chat lineup
— so the venue answered "no" to the entire
catalogue it exists to reach, and everything it did match had already been shut
off (llama-3.3-70b-versatile and llama-3.1-8b-instant on 2026-08-16;
qwen/qwen3-32b and meta-llama/llama-4-scout on 2026-07-17; mixtral, gemma2
and the DeepSeek distills long before).

The price sheet had no Groq rows at all, so a Groq settlement rendered a
receipt with no cost and no captured spread: a run that really billed, looking as
though it had been free.

What changed

  • Routing audited against the live model list. Now claims
    openai/gpt-oss (120b, 20b, safeguard-20b) and groq/ (compound,
    compound-mini). Groq's batch docs page still lists the dead Llamas; it is
    stale, and the deprecations page is the truth.
  • openai/gpt-oss is spelled out, not reached for as a bare openai/ — that
    namespace is Groq's catalogue, and claiming all of it would poach every future
    OpenAI-authored model that lands there.
  • Whisper dropped, for a different reason than the rest: it is live on Groq
    and this driver still cannot run it. build_jsonl writes
    /v1/chat/completions with a messages body; transcription needs
    /v1/audio/transcriptions with a file.
  • Price rows addedopenai/gpt-oss-120b at $0.15/$0.60 and
    openai/gpt-oss-20b at $0.075/$0.30 per 1M, batch at the standard 50% rule.
    No fast-tier rows: Groq sells no fast tier, and a sheet should not imply an
    urgency spread nobody offers.
  • openai/gpt-oss joins the max_completion_tokens translation; Groq marks
    max_tokens deprecated in favour of it.
  • Published batch limits enforced before upload — 50,000 requests, 200MB. A
    rejection at the far end arrives once the file has already crossed the wire.

The batch tier is still unverified, and not because of this code

Groq gates its entire Batch API behind a plan. On this account
POST /openai/v1/files (purpose=batch) and GET /openai/v1/batches both answer
403 not_available_for_plan, so submit() cannot finish its first call.

The validating run went anyway and is published as
receipts/2026-08-23-groq-1.json: 24 jobs, 24 ok, $0.0023637 paid, $0.00
captured
, every one of them through the sync fallback at list price. The 0% is
the finding, and it sits on the public ledger next to three rows reading 50.0%.

What that run does prove with real money: the model routes to groq:batch, the
body renders in Groq's dialect, the new price rows settle a real receipt instead
of an unpriced one, and the SLA held at 24/24.

Also in this release

Documentation and naming: the night board is now the Spread Board, and the
copy leads with the deadline rather than the hour.

Upgrading

pip install -U offpeak

No API changes. Groq remains opt-in — its own extra, outside all, and not in
default_venues().