From 5260a4240b76119941d61d91a068ba545ce5cfcd Mon Sep 17 00:00:00 2001 From: iamdoubz <> Date: Sat, 11 Jul 2026 00:23:18 -0500 Subject: [PATCH] feat(ui): load/download/remove diarization models in the settings store --- src/lib/stores/settings.svelte.ts | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/src/lib/stores/settings.svelte.ts b/src/lib/stores/settings.svelte.ts index f233a33..518e0f9 100644 --- a/src/lib/stores/settings.svelte.ts +++ b/src/lib/stores/settings.svelte.ts @@ -61,6 +61,10 @@ class SettingsStore { // Hardware + model management (Phase 3, T3.6/T3.7). hardware = $state(null); models = $state([]); + // Speaker-diarization models (segmentation + embedding). Both must be + // installed before recordings separate speakers instead of labelling + // everything "S1" (T4.7, FR-MODEL-1). + diarizationModels = $state([]); // Transcription language catalog for the Settings dropdown (T8.7, FR-TRX-4). languages = $state([]); audioDevices = $state([]); @@ -101,6 +105,7 @@ class SettingsStore { await this.loadAudioDevices(); await this.loadInputDevices(); await this.loadModels(); + await this.loadDiarizationModels(); await this.loadLanguages(); await this.loadPrivacy(); await this.loadLlmStatus(); @@ -199,6 +204,29 @@ class SettingsStore { } } + async loadDiarizationModels() { + try { + this.diarizationModels = await api.listDiarizationModels(); + } catch { + this.diarizationModels = []; + } + } + + /** Download one diarization model. The two known ids map to the backend's + * `diar-seg`/`diar-emb` kinds; `removeModel` needs no kind (it disambiguates + * by catalog membership). */ + async downloadDiarizationModel(id: string) { + this.clearProgress(id); + await api.downloadModel(id, id.startsWith("seg") ? "diar-seg" : "diar-emb"); + this.clearProgress(id); + await this.loadDiarizationModels(); + } + + async removeDiarizationModel(id: string) { + await api.removeModel(id); + await this.loadDiarizationModels(); + } + async loadLanguages() { try { this.languages = await api.listWhisperLanguages();