Skip to content

Commit 79a4c7b

Browse files
committed
feat(editor): hide Parakeet models in captions tab on Intel Macs
Made-with: Cursor
1 parent 6abd9d6 commit 79a4c7b

1 file changed

Lines changed: 36 additions & 8 deletions

File tree

apps/desktop/src/routes/editor/CaptionsTab.tsx

Lines changed: 36 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,12 @@ import {
2626
applyCaptionResultToProject,
2727
CAPTION_MODEL_FOLDER,
2828
DEFAULT_CAPTION_MODEL,
29+
DEFAULT_WHISPER_CAPTION_MODEL,
2930
getCaptionGenerationErrorMessage,
3031
getModelPath,
3132
PARAKEET_DIR_MODELS,
33+
resolveCaptionModel,
34+
supportsParakeetTranscription,
3235
syncCaptionWordsWithText,
3336
transcribeEditorCaptions,
3437
} from "./captions";
@@ -186,7 +189,9 @@ export function CaptionsTab() {
186189
setProject("captions", "settings", key, value);
187190
};
188191

189-
const [selectedModel, setSelectedModel] = createSignal(DEFAULT_CAPTION_MODEL);
192+
const [selectedModel, setSelectedModel] = createSignal(
193+
resolveCaptionModel(DEFAULT_CAPTION_MODEL),
194+
);
190195
const [selectedLanguage, setSelectedLanguage] = createSignal("auto");
191196
const [downloadedModels, setDownloadedModels] = createSignal<string[]>([]);
192197

@@ -203,8 +208,15 @@ export function CaptionsTab() {
203208
const setIsGenerating = (value: boolean) =>
204209
setEditorState("captions", "isGenerating", value);
205210
const [hasAudio, setHasAudio] = createSignal(false);
211+
const availableModelOptions = createMemo(() =>
212+
supportsParakeetTranscription()
213+
? MODEL_OPTIONS
214+
: MODEL_OPTIONS.filter((model) => !PARAKEET_DIR_MODELS.has(model.name)),
215+
);
206216
const selectedModelOption = createMemo(
207-
() => MODEL_OPTIONS.find((model) => model.name === selectedModel()) ?? null,
217+
() =>
218+
availableModelOptions().find((model) => model.name === selectedModel()) ??
219+
null,
208220
);
209221

210222
createEffect(
@@ -231,7 +243,7 @@ export function CaptionsTab() {
231243
}
232244

233245
const models = await Promise.all(
234-
MODEL_OPTIONS.map(async (model) => {
246+
availableModelOptions().map(async (model) => {
235247
const downloaded = await checkModelExists(model.name);
236248
return { name: model.name, downloaded };
237249
}),
@@ -242,9 +254,18 @@ export function CaptionsTab() {
242254
.map((m) => m.name);
243255
setDownloadedModels(downloadedModelNames);
244256

245-
const savedModel = localStorage.getItem("selectedTranscriptionModel");
246-
if (savedModel && MODEL_OPTIONS.some((m) => m.name === savedModel)) {
257+
const savedModel = resolveCaptionModel(
258+
localStorage.getItem("selectedTranscriptionModel"),
259+
);
260+
if (
261+
savedModel &&
262+
availableModelOptions().some((model) => model.name === savedModel)
263+
) {
247264
setSelectedModel(savedModel);
265+
} else {
266+
setSelectedModel(
267+
availableModelOptions()[0]?.name ?? DEFAULT_WHISPER_CAPTION_MODEL,
268+
);
248269
}
249270

250271
const savedLanguage = localStorage.getItem(
@@ -430,13 +451,13 @@ export function CaptionsTab() {
430451
<div class="space-y-4">
431452
<Subfield name="Model" class="items-start">
432453
<KSelect<string>
433-
options={MODEL_OPTIONS.map((model) => model.name)}
454+
options={availableModelOptions().map((model) => model.name)}
434455
value={selectedModel()}
435456
onChange={(value: string | null) => {
436457
if (value) setSelectedModel(value);
437458
}}
438459
itemComponent={(props) => {
439-
const model = MODEL_OPTIONS.find(
460+
const model = availableModelOptions().find(
440461
(option) => option.name === props.item.rawValue,
441462
);
442463

@@ -532,6 +553,13 @@ export function CaptionsTab() {
532553
</KSelect>
533554
</Subfield>
534555

556+
<Show when={!supportsParakeetTranscription()}>
557+
<p class="text-xs text-gray-10">
558+
Parakeet caption models are unavailable on Intel Macs. Whisper
559+
models remain available.
560+
</p>
561+
</Show>
562+
535563
<Subfield name="Language">
536564
<KSelect<string>
537565
options={LANGUAGE_OPTIONS.map((l) => l.code)}
@@ -600,7 +628,7 @@ export function CaptionsTab() {
600628
<IconLucideDownload class="size-4" />
601629
Download{" "}
602630
{
603-
MODEL_OPTIONS.find(
631+
availableModelOptions().find(
604632
(m) => m.name === selectedModel(),
605633
)?.label
606634
}{" "}

0 commit comments

Comments
 (0)