Skip to content

[Feature]: Make truncated model picker labels distinguishable (provider compaction or model-first order) #3569

Description

@DaveW001

Area

Catalog / models

What are you trying to accomplish?

I want to tell similar models apart in the Codex App picker before I select one. The picker renders each routed row as provider/model-id in a narrow dropdown and cuts the end of the string with an ellipsis. The part that gets cut is the model suffix, which is usually the only part that differs between rows.

My picker currently shows these rows (OpenCodex 2.41.0, Windows 11):

  • opencode-go/deepseek-v4-f... and opencode-go/deepseek-v4-...: these are deepseek-v4-flash and deepseek-v4-pro, but nothing on screen says which is which.
  • opencode-zen/deepseek-v4-...: hides whether the row is the free variant.
  • opencode-go/muse-spark-1.... and opencode-zen/muse-spark-1....: version and variant collapse into the same few visible characters.

I cannot tell which row selects which model until I pick one and check what actually runs. The label truncates exactly the information I am choosing on.

What prevents this today?

End-of-string ellipsis plus a provider-first label means a long provider name pushes the distinguishing suffix out of view. opencode-zen/ is 13 characters before the model name even starts.

The recent display work helps, but none of it fixes the default view:

Out of the box, two rows that share a prefix still render identically.

What should OpenCodex do?

Any of these would keep the distinguishing part visible in a narrow picker, in the order I would prefer:

  1. A display-level provider compaction option: when a composed label exceeds a configurable length, render the provider's short form in the label only. Routing ids stay untouched. This generalizes what feat(catalog,providers): compact google-antigravity to agy across display and routing #3531 does for one provider.
  2. A label-order option that renders model (provider), so end truncation eats the provider prefix instead of the model suffix. deepseek-v4-flash (opencode-zen) stays identifiable even when clipped; the current order does the opposite.
  3. If neither fits, a docs note in the display-names guide: when two discovered rows truncate to the same visible prefix, set modelDisplayNames or a provider alias for that pair.

A wider picker or a smaller font would also fix it, but that rendering belongs to the Codex App rather than OpenCodex. The label string is the part OpenCodex controls, and it is enough.

Example usage or interface

Illustrative config. Field names are up to you; the ask is the behavior.

{
  "catalog": {
    "displayProviderCompaction": true   // opencode-go -> go, opencode-zen -> zen in picker labels only
  }
}

Before:

opencode-go/deepseek-v4-f...
opencode-go/deepseek-v4-...

After:

go/deepseek-v4-flash
go/deepseek-v4-pro

Same width, distinguishable.

Alternatives or workarounds

I can set modelDisplayNames for every colliding pair today, or alias the providers. It works, but it is manual, per-environment, and fails silently the next time discovery adds a colliding row. The dashboard editor in #2716 will lower the friction once it merges, but defaults would still truncate for anyone who has not labeled anything.

Additional context

Codex App on Windows 11, OpenCodex 2.41.0, routed providers opencode-go and opencode-zen. Related: #2201 and #3212 (model display names), #2959 and #2960 (alias-aware picker labels), #2716 (display-name editor), #3531 (per-provider compaction).

  • I searched existing issues and documentation.
  • This request describes a concrete OpenCodex workflow rather than merely naming a desired technology.
  • I removed secrets and personal data.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    catalogModel catalog, slugs, visibility, routed entriesenhancementNew feature or request

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions