Four views of one catalog
Models, Providers, Offerings and Labs are built from the same typed catalog. A canonical model can be traced to provider offerings, while provider-specific cost and limit fields remain attached to the offering.
Released · v0.1.1
An explorable model catalog, inside the terminal.
A Go terminal application for the models.dev catalog. It connects canonical models, provider-specific offerings, labs, capabilities and prices in four browsable views, with conditional refresh, disk caching and an embedded offline snapshot.
The same model can appear under several providers with different prices and limits. A useful catalog needs to preserve that distinction, expose the relationships and remain usable when the network is unavailable.
Models, Providers, Offerings and Labs are built from the same typed catalog. A canonical model can be traced to provider offerings, while provider-specific cost and limit fields remain attached to the offering.
The network path respects a 45-second minimum spacing, ETag conditional requests and 429 Retry-After backoff. Idle auto-refresh uses a 15-minute cadence; repeated refresh keys do not bypass the floor.
A failed live fetch falls back to disk cache and then a bundled catalog snapshot. The interface carries source labels, including stale or offline cache states.
Bubble Tea handles the interaction loop, capability forms narrow results and fuzzy filtering drives browsing. Harmonica spring state animates the layout while a detail view exposes the catalog fields.
Inspect the network/cache branches and the index that connects models to offerings.
Explore the spacing and Retry-After gates behind a responsive catalog that avoids unnecessary network traffic.
Illustrative refresh policy, not live models.dev traffic. The source checks active backoff first, then the 45-second spacing floor. ETag reuse and offline cache are separate response paths; all catalog examples are synthetic.
A model identity and a provider’s offering have different fields. BuildIndex keeps them separate and exposes the relationship, preventing model-level capabilities from being confused with provider pricing.
ETag, last request, last success and backoff deadline survive the immediate fetch. A mutex serializes refresh work and the force flag still respects rate policy.
The fallback chain prioritizes live data, then cached catalog, then an embedded snapshot. Older data stays inspectable, with source labels signaling its freshness limits.
Implementation details, examples, and project documentation.
Inspected CanRefresh, RefreshCatalog and LoadCatalog.
Typed JSON parsing, atomic cache replacement and embedded snapshot.
Models, providers, offerings and labs.
Distinct canonical-model and offering filters.
Architecture and descriptions reflect the linked repository snapshot. The playground explains a mechanism; it does not execute the repository or report measured performance.