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"> <FormItem className="flex-1 space-y-0">
<Select <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) => { onValueChange={(value) => {
const [engine, modelSize] = value.split(':'); if (value === 'luxtts') {
form.setValue('engine', engine as 'qwen' | 'luxtts'); form.setValue('engine', 'luxtts');
if (modelSize) form.setValue('modelSize', modelSize as '1.7B' | '0.6B'); } else {
const [, modelSize] = value.split(':');
form.setValue('engine', 'qwen');
form.setValue('modelSize', modelSize as '1.7B' | '0.6B');
}
}} }}
> >
<FormControl> <FormControl>
@@ -423,10 +431,7 @@ export function FloatingGenerateBox({
<SelectItem value="qwen:0.6B" className="text-xs text-muted-foreground"> <SelectItem value="qwen:0.6B" className="text-xs text-muted-foreground">
Qwen3-TTS 0.6B Qwen3-TTS 0.6B
</SelectItem> </SelectItem>
<SelectItem <SelectItem value="luxtts" className="text-xs text-muted-foreground">
value="luxtts:default"
className="text-xs text-muted-foreground"
>
LuxTTS LuxTTS
</SelectItem> </SelectItem>
</SelectContent> </SelectContent>
@@ -104,11 +104,19 @@ export function GenerationForm() {
<FormItem> <FormItem>
<FormLabel>Model</FormLabel> <FormLabel>Model</FormLabel>
<Select <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) => { onValueChange={(value) => {
const [engine, modelSize] = value.split(':'); if (value === 'luxtts') {
form.setValue('engine', engine as 'qwen' | 'luxtts'); form.setValue('engine', 'luxtts');
if (modelSize) form.setValue('modelSize', modelSize as '1.7B' | '0.6B'); } else {
const [, modelSize] = value.split(':');
form.setValue('engine', 'qwen');
form.setValue('modelSize', modelSize as '1.7B' | '0.6B');
}
}} }}
> >
<FormControl> <FormControl>
@@ -119,7 +127,7 @@ export function GenerationForm() {
<SelectContent> <SelectContent>
<SelectItem value="qwen:1.7B">Qwen3-TTS 1.7B</SelectItem> <SelectItem value="qwen:1.7B">Qwen3-TTS 1.7B</SelectItem>
<SelectItem value="qwen:0.6B">Qwen3-TTS 0.6B</SelectItem> <SelectItem value="qwen:0.6B">Qwen3-TTS 0.6B</SelectItem>
<SelectItem value="luxtts:default">LuxTTS</SelectItem> <SelectItem value="luxtts">LuxTTS</SelectItem>
</SelectContent> </SelectContent>
</Select> </Select>
<FormDescription> <FormDescription>
+8 -1
View File
@@ -108,7 +108,14 @@ export function useGenerationForm(options: UseGenerationFormOptions = {}) {
const audioUrl = apiClient.getAudioUrl(result.id); const audioUrl = apiClient.getAudioUrl(result.id);
setAudioWithAutoPlay(audioUrl, result.id, selectedProfileId, data.text.substring(0, 50)); 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); options.onSuccess?.(result.id);
} catch (error) { } catch (error) {
toast({ toast({