feat: add models settings page with filtering and management#478
feat: add models settings page with filtering and management#478cjpais merged 26 commits intocjpais:mainfrom
Conversation
f42e1f9 to
4d0b790
Compare
|
From first glance I'm digging this, I'd like to review around how model specific settings potentially overlap with this as well |
|
Love this at first glance. (Observation on looking screenshots: It might look nicer if the download/delete buttons on the ModelCards were to the left of the accuracy/speed bars. The bars are always present so should be consistently positioned?) |
can you expand on that a bit? is there anything on the roadmap that could build on this? my goal was to put a solid foundation in place for future models -- things like tagging, filtering for now, and eventually search once the list grows if there’s something that makes sense to support now while i’m already working in this area, happy to add it
yeah, i experimented with that briefly, and i think you’re pointing out that downloading a model causes the accuracy / speed bars to shift, which isn’t ideal at the same time, i was trying to keep things consistent between the model dropdown and the model selection tab, and we generally place destructive actions on the far right open to alternative layouts if you have something specific in mind |
|
@VirenMohindra regarding
Yeah definitely. Right now there's a bit of awkwardness in that whisper supports translation built in as well as language selection. But parakeet the language is always "auto" and there's no translation built in. So it's just trying to disambiguate this in the UI since I think it could be confusing for some users. I think we just disable those settings for parakeet, which is okay but it's not super obvious why they are disabled I was considering making them invisible to the UI for parakeet, but just curious about feedback or other potential UX ideas around this |
bd76eb5 to
41df068
Compare
|
@cjpais that makes sense. current state: settings are disabled with explanatory text, but that can feel clunky i went ahead and implemented a contextual approach in this PR — there's now a "model settings" card in general settings that adapts based on the current model:
this way users only see settings that apply to their model, no more confusing disabled / grayed out options. let me know if you'd prefer a different approach or want any adjustments
|
|
Wow this is much nicer. Thank you @VirenMohindra I don't think I'll be able to review this for a bit but I think we should try and have this be part of a v0.7.0 release I don't know how reasonable it would be, but it would be very cool to have some filtering on language or something like that in the model page too. So you could pick your specific language and make sure the model you're using supports that language. Mainly I know some people have had problems in the past creating issues for example that Parakeet doesn't support their language well |
❤️❤️
no worries. def would love a couple more eyes on this since it's a thicc one
Great idea -- I actually played around with this but didn't want to blow out scope since we're already crossed a thousand lines of code. happy to take a peek and add it back in, or have a quick follow up PR what do you think? |
|
Since it's already large, I'm happy to just do a full review of the feature as a whole here I think. I pretty much know I'm going to have to sit down with it already so a couple hundred lines more of code will probably be best now rather than later. I'll probably have some more detailed feedback at some point as well |
308f19f to
ed6317c
Compare
|
done! added the ability to filter by language. opted to keep it on the frontend since we already had access to
cc @cjpais for vis |
879125d to
643b2f9
Compare
|
Thank you for the continued work on this. I'm quite excited to bring this in. I really need to play with it myself. It's been a long time and I don't want to let this get too stale. I'm really busy, but maybe within the next week or two I can make some more concrete decisions. It is quite a a big change, so it probably will take a bit longer for me to ensure this, but I'm liking generally where it's at and I can probably make some tweaks myself to clean anything else up. |
15db8a4 to
57779e0
Compare
0c14578 to
30fdbc9
Compare
- add dedicated models settings page in sidebar - reuse ModelCard component from onboarding for consistent UI - add filter buttons for all/multi-language/translation models - add model deletion with native confirmation dialog (tauri-plugin-dialog) - consolidate model event listeners into useModels hook (Zustand store) - remove duplicate event listeners from ModelSelector, LanguageSelector, TranslateToEnglish - gate AccessibilityPermissions to macOS only - add is_recommended field to model registry for featured models - remove unused get_recommended_first_model command - add translations for all 9 supported languages
adds a searchable language dropdown filter to the models page that lets users filter models by language support. when a non-english language is selected, models that don't support multiple languages (like parakeet) are hidden. - add searchable language dropdown (right-aligned in filter row) - filter models using supports_language_selection capability - add allLanguages translation key to all 10 locales
- add scripts/check-translations.cjs to validate all language files - script dynamically discovers languages from directory structure - checks that all languages have same keys as english reference - detects missing and extra keys in each language - add check:translations npm script - integrate into github actions lint workflow - validates translations on every pull request
- replace useModels hook with useModelStore in components - add permission error keys to all languages - add model settings keys to cs and tr (new languages from main)
- model dropdown now only shows downloaded models (no download/delete) - convert store to immer with record types for immutability - remove unused translation keys (welcome, downloadPrompt, etc.) - add missing moonshine-base model fields - sync translations after rebase
- add full download cancellation with Arc<AtomicBool> flags in rust backend - add progress event throttling (100ms) to prevent ui freeze - add cancel button to model card in settings page - add model-deleted event listener to refresh dropdown after deletion - remove pink background from recommended models in settings (keep badge only) - add cancel/cancelDownload translation keys to all 14 languages
…vanced settings are now only in ModelSettingsCard, not duplicated in their old locations
The ModelSelector component maintains its own local state for download progress. When a download was cancelled, the Rust backend would update its state but never emitted an event to notify the frontend. This caused the bottom progress bar to remain stuck showing "Downloading X%". Added model-download-cancelled event emission in Rust and corresponding listener in ModelSelector to clear progress state on cancellation.
Changed ModelCard flex alignment from items-center to items-start so the accuracy/speed bars stay at the top when the card expands (e.g., during download with progress bar visible).
Added extracting_models HashSet to track models currently being extracted. The update_download_status() function now skips cleanup of .extracting directories for models that are actively extracting, preventing a race condition where deleting one model would interrupt another model's extraction process.
Added two new Button variants for common patterns: - primary-soft: soft/tinted primary buttons (used for download) - danger-ghost: subtle destructive actions (used for delete/cancel) Migrated all hardcoded buttons in ModelCard to use the shared Button component for consistency and maintainability.
Split the models list into "Your Models" and "Available to Download" sections for clearer visual distinction between downloaded and downloadable models. Also adds missing translation keys to all locales: - modelSelector.capabilities.singleLanguage - modelSelector.capabilities.languageOnly - settings.models.yourModels - settings.models.availableModels
add post-processing hotkey translations to all 15 locales and backfill 29 missing keys for korean locale added in main.
3a73103 to
ef6757f
Compare
8aeafef to
90341ef
Compare
|
I just want to say a huge shout out for all this work! Thank you for bearing with me and getting this merged, but I think it's good to go. Super excited to get this in. I think this improves a bunch of UI and leaves a lot more room for future improvements as well. Thank you! |




Before Submitting This PR
Please confirm you have done the following:
Description
adds a dedicated models settings page accessible from the sidebar, allowing users to view, download, switch, and delete transcription models without going through onboarding.
changes:
ModelCardcomponent from onboarding for consistent UItauri-plugin-dialoguseModelshook (removes duplicates from ModelSelector, LanguageSelector, TranslateToEnglish)AccessibilityPermissionscomponent to macOS only (was rendering on all platforms)is_recommendedfield to model registry for featured modelsget_recommended_first_modelrust command (dead code)Related Issues/Discussions
Testing
Screenshots/Videos (if applicable)
n/a - UI reuses existing ModelCard component