Repository navigation
feat(models): show the model picker as aligned columns - #242
Merged
Merged
Conversation
Each row shows input and output price per 1M, the Artificial Analysis intelligence index, context, and free/new/sale tags, all from the catalog. A missing value draws a dim dash. Columns drop by width, and a detail block shows the highlighted model's prices and a cost gauge. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TMDU43edyk59D2Wis5si6x Co-authored-by: Duyet Le <me@duyet.net> Co-authored-by: duyetbot <bot@duyet.net>
Contributor
anyr size and startupStartup is wall time for a cold Size budget:
Budget check: ok raw timings[
{
"asset": "anyr-darwin-arm64",
"kind": "native",
"path": "/Users/runner/work/cli/cli/anyr-darwin-arm64",
"bytes": 2570504,
"size": "2.5 MiB",
"version": "0.1.37 (built 2026-10-29 04:22:53)",
"target": "aarch64-apple-darwin",
"os": "macos-latest",
"startup_version": {
"n": 21,
"min_ms": 5.05,
"median_ms": 5.7,
"p95_ms": 9.14,
"mean_ms": 6.54
},
"startup_help": {
"n": 21,
"min_ms": 3.86,
"median_ms": 4.69,
"p95_ms": 7.46,
"mean_ms": 5.1
}
},
{
"asset": "anyr-darwin-x86_64",
"kind": "native",
"path": "/Users/runner/work/cli/cli/anyr-darwin-x86_64",
"bytes": 3066424,
"size": "2.9 MiB",
"version": "0.1.37 (built 2026-10-29 04:23:24)",
"target": "x86_64-apple-darwin",
"os": "macos-latest",
"startup_version": {
"n": 21,
"min_ms": 39.23,
"median_ms": 47.81,
"p95_ms": 55.49,
"mean_ms": 47.93
},
"startup_help": {
"n": 21,
"min_ms": 37.48,
"median_ms": 44.8,
"p95_ms": 54.85,
"mean_ms": 44.84
}
},
{
"asset": "anyr-linux-arm64",
"kind": "native",
"path": "/home/runner/work/cli/cli/anyr-linux-arm64",
"bytes": 3020048,
"size": "2.9 MiB",
"version": "0.1.37 (built 2026-10-29 04:22:27)",
"target": "aarch64-unknown-linux-gnu",
"os": "ubuntu-24.04-arm",
"startup_version": {
"n": 21,
"min_ms": 0.8,
"median_ms": 0.87,
"p95_ms": 0.97,
"mean_ms": 0.87
},
"startup_help": {
"n": 21,
"min_ms": 0.82,
"median_ms": 0.88,
"p95_ms": 0.91,
"mean_ms": 0.88
}
},
{
"asset": "anyr-linux-x86_64",
"kind": "native",
"path": "/home/runner/work/cli/cli/anyr-linux-x86_64",
"bytes": 3554960,
"size": "3.4 MiB",
"version": "0.1.37 (built 2026-10-29 04:22:29)",
"target": "x86_64-unknown-linux-gnu",
"os": "ubuntu-latest",
"startup_version": {
"n": 21,
"min_ms": 1.01,
"median_ms": 1.05,
"p95_ms": 1.17,
"mean_ms": 1.07
},
"startup_help": {
"n": 21,
"min_ms": 1.01,
"median_ms": 1.03,
"p95_ms": 1.08,
"mean_ms": 1.04
}
},
{
"asset": "anyr-windows-x86_64.exe",
"kind": "native",
"path": "D:\\a\\cli\\cli\\anyr-windows-x86_64.exe",
"bytes": 3027968,
"size": "2.9 MiB",
"version": "0.1.37 (built 2026-10-29T04:23:15Z)",
"target": "x86_64-pc-windows-msvc",
"os": "windows-latest",
"startup_version": {
"n": 21,
"min_ms": 7.86,
"median_ms": 8.43,
"p95_ms": 8.84,
"mean_ms": 8.38
},
"startup_help": {
"n": 21,
"min_ms": 7.37,
"median_ms": 7.79,
"p95_ms": 8.04,
"mean_ms": 7.8
}
},
{
"asset": "anyr.wasm",
"kind": "wasm",
"path": "/home/runner/work/cli/cli/target/wasm-pkg/anyr_cli_bg.wasm",
"bytes": 258338,
"size": "252.3 KiB",
"version": "wasm",
"target": "wasm32-unknown-unknown",
"os": ""
}
] |
The column keeps a short price, and a paid price under $0.0005 shows as <$0.001 instead of $0. A context just under 1M shows 1M, not 1000K. A legend cut on an exact fit now ends in an ellipsis. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TMDU43edyk59D2Wis5si6x Co-authored-by: Duyet Le <me@duyet.net> Co-authored-by: duyetbot <bot@duyet.net>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What changes for users
anyr claude model,anyr models --pick, and the other model pickers now show each model as a row of aligned columns. You can compare price, intelligence score, and context without opening each model.pricing.input_per_1mandpricing.output_per_1m.intelligence_indexfrom the public/api/v1/analytics/model-benchmarksfeed. It has a 2 s timeout and falls back to a dash.context_length. A value of0counts as missing.free(billing isfree),new(created in the last 14 days, the same window as the web catalog), andsale(list_pricingis abovepricing).—. An empty tags cell is blank, not a dash.…. When a terminal is narrower, the tags column drops first, then smart, then context, then price.—. Today that is 2 of 290 models, because BYOK hops list $0.type to search · ↑↓ select · ↵ confirm · esc cancel.anyrouter/autois still pinned first, and typeahead still matches ids only, so typing1.2does not match$1.25.@preset/*rows stay.NO_COLOR, the picker draws no color codes and keeps bold only.--dump-tuioutput is plain text.›prefix. The›prefix on everyanthropic/claude-*row is gone. It came fromitem_iconmatching "claude" in the id.Shape
http.rsparsespricing,created, andper_upstreamcache prices intoCatalogModel(ModelPricing). It also addsfetch_intelligence.cmd/model_picker.rs(native) builds oneModelRowper id withmodel_rows. Thenmodel_tableturns the rows into aPickTable.tui/table.rsis the generic layout.layout(table, width)picks the column widths and the columns to drop.rowandheaderlay out the text.--dump-tuidump both use the same layout. Other pickers do not change.model_pick_labelandpicker_choice_listare deleted. Their tests now use the row API, and they check the same behavior: preset pinned, typeahead, and dump order.Before / after
Same data for both binaries: a saved authenticated
/api/v1/modelsresponse (290 models) and the benchmarks feed, served locally. The isolatedANYROUTER_HOMEholds no live key. Live captures are from tmuxcapture-paneaftermodels --pick --agent claudeand three↓presses.Before, 80 columns
After, 80 columns
After, 120 columns, typing
opusChecks
cargo fmt --check: clean.cargo clippy --locked --all-targets: 0 warnings.cargo test --locked --all-targets: 1044 passed, 0 failed.cargo check --lib --no-default-features --target wasm32-unknown-unknown: builds, with the same 25 warnings asmain(none new).saletag;🤖 Generated with Claude Code
https://claude.ai/code/session_01TMDU43edyk59D2Wis5si6x