mirror of
https://github.com/jamiepine/voicebox.git
synced 2026-10-03 09:05:17 -07:00
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:
@@ -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>
|
||||||
|
|||||||
@@ -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({
|
||||||
|
|||||||
Reference in New Issue
Block a user