({
mode,
config,
}: {
mode: Mode
config: AudioProviderConfig
})
| 59 | } |
| 60 | |
| 61 | function AudioGenerationForm({ |
| 62 | mode, |
| 63 | config, |
| 64 | }: { |
| 65 | mode: Mode |
| 66 | config: AudioProviderConfig |
| 67 | }) { |
| 68 | const [prompt, setPrompt] = useState('') |
| 69 | const [duration, setDuration] = useState<number | undefined>( |
| 70 | config.defaultDuration, |
| 71 | ) |
| 72 | const [selectedModel, setSelectedModel] = useState<string>(config.model) |
| 73 | |
| 74 | const hookOptions = useMemo(() => { |
| 75 | if (mode === 'hooks') { |
| 76 | return { |
| 77 | connection: fetchServerSentEvents('/api/generate/audio'), |
| 78 | body: { provider: config.id, model: selectedModel }, |
| 79 | onResult: toAudioOutput, |
| 80 | } |
| 81 | } |
| 82 | return { |
| 83 | fetcher: (input: { prompt: string; duration?: number }) => |
| 84 | generateAudioFn({ |
| 85 | data: { ...input, provider: config.id, model: selectedModel }, |
| 86 | }), |
| 87 | onResult: toAudioOutput, |
| 88 | } |
| 89 | }, [mode, config.id, selectedModel]) |
| 90 | |
| 91 | const hookReturn = useGenerateAudio(hookOptions) |
| 92 | |
| 93 | return ( |
| 94 | <AudioGenerationUI |
| 95 | {...hookReturn} |
| 96 | config={config} |
| 97 | prompt={prompt} |
| 98 | setPrompt={setPrompt} |
| 99 | duration={duration} |
| 100 | setDuration={setDuration} |
| 101 | selectedModel={selectedModel} |
| 102 | setSelectedModel={setSelectedModel} |
| 103 | /> |
| 104 | ) |
| 105 | } |
| 106 | |
| 107 | function AudioGenerationUI({ |
| 108 | config, |
nothing calls this directly
no test coverage detected