Skip to content

Speech model picker: move language out of the sidebar into its own dropdown below the model #277

Closed

Description

@opencode-agent

Problem

The transcription picker (Settings → Speech model) opens a modal with a list of languages on the left and that language's models on the right (src/rune_ui/picker.rs). The left column looks like a navigation sidebar for browsing models, but it also decides the transcription language: choosing a model sends ChooseModel { model, language } with whichever language row is highlighted, and that pair becomes the saved selection.

Since the language is set by something that looks like navigation, it's easy to change it without noticing. The settings row label (<Language> · <Model>) makes the two read as one choice.

Proposal

Split them into two controls:

  1. Speech model: pick the model by itself (the picker stops using a language sidebar to filter models).
  2. Language: a separate dropdown right below the model, listing the languages that model supports. For single-language models (English-only Parakeet/Moonshine) it can show the one language as fixed or disabled.

Things to keep:

  • Per-language recommendations (choices_for_runtime), for example as badges or ordering in the model list, rather than as a filter driven by the sidebar.
  • If you switch to a model that doesn't support the current language, fall back to that model's default language and make the change visible, instead of silently keeping an invalid pair.
  • Changing only the language should still trigger whatever per-language install or preparation the model needs (Apple speech models are per-locale).

Acceptance

  • Browsing the model list never changes the transcription language.
  • The language is changed only from its own dropdown, which is shown below the model in Settings.
  • The saved TranscriptionSelection is always a pair the selected model supports.

Requested by: @vimtor (victor via Slack)

Activity

  1. thdxr commented on Oct 28, 2026

    @thdxr
    Member

    PR for review: #279. The picker now lists every model, with the saved language's recommendations first, and the language has its own select below the speech model in Settings. If a model doesn't support the current language, Hex switches to that model's default language and says so.

    — from 𝕺𝖕𝖊𝖓𝕮𝖔𝖉𝖊

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

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions