github charmbracelet/catwalk v3.0.0

latest release: v3.0.1
3 hours ago

Catwalk v3 is here 💅

A brand-new, cleaner schema for describing models. Pricing, reasoning and capabilities each get their own home, and type now tells you how to talk to a model rather than who made it. Same catwalk, much better outfits.

The big one!

Provider type now names the API format a provider speaks, not the vendor. There are just three:

  • completions: OpenAI Chat Completions
  • responses: OpenAI Responses
  • messages: Anthropic Messages

Models can override their provider's type, too, so a single provider can serve Completions, Responses and Messages models side by side (looking at you, OpenCode and Copilot 👀).

Prettier models

  • Pricing now lives in a nested pricing object with clearer names: input, output, cache_create and cache_hit. No more guessing which "cached" field means what.
  • Reasoning is described by thinking (always, never or toggleable), plus effort levels that carry display names, like xhigh showing as "X-High".
  • Capabilities tell you about vision and, new, audio support.
  • max_attachments sets a per-model attachment limit.
  • session_affinity_header lets providers that route by session do just that.

Migrating from v2

The module path changed, so update your imports:

go get charm.land/catwalk/v3
import "charm.land/catwalk/v3/pkg/catwalk"

Then:

v2 v3
TypeOpenAI, TypeAnthropic, TypeBedrock… TypeCompletions, TypeResponses, TypeMessages (use the provider ID to tell vendors apart)
CostPer1MIn / CostPer1MOut Pricing.Input / Pricing.Output
CostPer1MInCached Pricing.CacheCreate
CostPer1MOutCached Pricing.CacheHit
CanReason (field) CanReason() (method)
ReasoningLevels ReasoningEffortLevels(), or Reasoning.EffortLevels for display names
DefaultReasoningEffort Reasoning.DefaultEffortLevel
SupportsImages Capabilities.Vision
— model.EffectiveType(provider.Type) to resolve the per-model type

The client now fetches from /v3/providers.

Not ready to move yet? No worries. /v2/providers stays live for some time, serving the old schema translated automatically from the v3 data, so existing clients keep working. We'll give plenty of notice before it goes away.

More to come,
Charm XX ⭐

Changelog

Fixed

Other stuff


Verifying the artifacts

First, download the checksums.txt file and the checksums.txt.sigstore.json file files, for example, with wget:

wget 'https://github.com/charmbracelet/catwalk/releases/download/v3.0.0/checksums.txt'
wget 'https://github.com/charmbracelet/catwalk/releases/download/v3.0.0/checksums.txt.sigstore.json'

Then, verify it using cosign:

cosign verify-blob \
  --certificate-identity 'https://github.com/charmbracelet/meta/.github/workflows/goreleaser.yml@refs/heads/main' \
  --certificate-oidc-issuer 'https://token.actions.githubusercontent.com' \
  --bundle 'checksums.txt.sigstore.json' \
  ./checksums.txt

If the output is Verified OK, you can safely use it to verify the checksums of other artifacts you downloaded from the release using sha256sum:

sha256sum --ignore-missing -c checksums.txt

Done! You artifacts are now verified!

The Charm logo

Thoughts? Questions? We love hearing from you. Feel free to reach out on X, Discord, Slack, The Fediverse, Bluesky.

Don't miss a new catwalk release

NewReleases is sending notifications on new releases.