fix: LuxTTS generation and preserve model selection after generate

- Fix silent Zod validation failure when LuxTTS selected (modelSize was
  set to 'default' which failed enum validation, preventing form submit)
- Preserve engine, model size, and language after successful generation
  instead of resetting to defaults
This commit is contained in:
James Pine
2026-03-13 00:21:43 -07:00
parent 163528bf69
commit 1e5afc2bef
3 changed files with 34 additions and 14 deletions
@@ -404,11 +404,19 @@ export function FloatingGenerateBox({
<FormItem className="flex-1 space-y-0">
<Select
value={`${form.watch('engine') || 'qwen'}:${form.watch('modelSize') || '1.7B'}`}
value={
form.watch('engine') === 'luxtts'
? 'luxtts'
: `qwen:${form.watch('modelSize') || '1.7B'}`
}
onValueChange={(value) => {
const [engine, modelSize] = value.split(':');
form.setValue('engine', engine as 'qwen' | 'luxtts');
if (modelSize) form.setValue('modelSize', modelSize as '1.7B' | '0.6B');
if (value === 'luxtts') {
form.setValue('engine', 'luxtts');
} else {
const [, modelSize] = value.split(':');
form.setValue('engine', 'qwen');
form.setValue('modelSize', modelSize as '1.7B' | '0.6B');
}
}}
>
<FormControl>
@@ -423,10 +431,7 @@ export function FloatingGenerateBox({
<SelectItem value="qwen:0.6B" className="text-xs text-muted-foreground">
Qwen3-TTS 0.6B
</SelectItem>
<SelectItem
value="luxtts:default"
className="text-xs text-muted-foreground"
>
<SelectItem value="luxtts" className="text-xs text-muted-foreground">
LuxTTS
</SelectItem>
</SelectContent>
@@ -104,11 +104,19 @@ export function GenerationForm() {
<FormItem>
<FormLabel>Model</FormLabel>
<Select
value={`${form.watch('engine') || 'qwen'}:${form.watch('modelSize') || '1.7B'}`}
value={
form.watch('engine') === 'luxtts'
? 'luxtts'
: `qwen:${form.watch('modelSize') || '1.7B'}`
}
onValueChange={(value) => {
const [engine, modelSize] = value.split(':');
form.setValue('engine', engine as 'qwen' | 'luxtts');
if (modelSize) form.setValue('modelSize', modelSize as '1.7B' | '0.6B');
if (value === 'luxtts') {
form.setValue('engine', 'luxtts');
} else {
const [, modelSize] = value.split(':');
form.setValue('engine', 'qwen');
form.setValue('modelSize', modelSize as '1.7B' | '0.6B');
}
}}
>
<FormControl>
@@ -119,7 +127,7 @@ export function GenerationForm() {
<SelectContent>
<SelectItem value="qwen:1.7B">Qwen3-TTS 1.7B</SelectItem>
<SelectItem value="qwen:0.6B">Qwen3-TTS 0.6B</SelectItem>
<SelectItem value="luxtts:default">LuxTTS</SelectItem>
<SelectItem value="luxtts">LuxTTS</SelectItem>
</SelectContent>
</Select>
<FormDescription>
+8 -1
View File
@@ -108,7 +108,14 @@ export function useGenerationForm(options: UseGenerationFormOptions = {}) {
const audioUrl = apiClient.getAudioUrl(result.id);
setAudioWithAutoPlay(audioUrl, result.id, selectedProfileId, data.text.substring(0, 50));
form.reset();
form.reset({
text: '',
language: data.language,
seed: undefined,
modelSize: data.modelSize,
instruct: '',
engine: data.engine,
});
options.onSuccess?.(result.id);
} catch (error) {
toast({