{ await updateConfigHandler(); dispatch('save'); }} >
{$i18n.t('Speech-to-Text')}
{#if STT_ENGINE !== 'web'}
{$i18n.t('Supported MIME Types')}
{/if}
{$i18n.t('Speech-to-Text Engine')}
{$i18n.t('Whisper (Local)')}
{$i18n.t('OpenAI')}
{$i18n.t('Web API')}
{$i18n.t('Deepgram')}
{$i18n.t('Azure AI Speech')}
{$i18n.t('MistralAI')}
{#if STT_ENGINE === 'openai'}
{$i18n.t('STT Model')}
{:else if STT_ENGINE === 'deepgram'}
{$i18n.t('STT Model')}
{$i18n.t('Leave model field empty to use the default model.')}
{$i18n.t('Click here to see available models.')}
{:else if STT_ENGINE === 'azure'}
{$i18n.t('Azure Region')}
{$i18n.t('Language Locales')}
{$i18n.t('Endpoint URL')}
{$i18n.t('Max Speakers')}
{:else if STT_ENGINE === 'mistral'}
{$i18n.t('STT Model')}
{$i18n.t('Leave empty to use the default model (voxtral-mini-latest).')}
{$i18n.t('Learn more about Voxtral transcription.')}
{$i18n.t('Use Chat Completions API')}
{$i18n.t( 'Use /v1/chat/completions endpoint instead of /v1/audio/transcriptions for potentially better accuracy.' )}
{:else if STT_ENGINE === ''}
{$i18n.t('STT Model')}
{ sttModelUpdateHandler(); }} disabled={STT_WHISPER_MODEL_LOADING} > {#if STT_WHISPER_MODEL_LOADING}
{:else}
{/if}
{$i18n.t(`Open WebUI uses faster-whisper internally.`)}
{$i18n.t( `Click here to learn more about faster-whisper and see the available models.` )}
{/if}
{$i18n.t('Text-to-Speech')}
{$i18n.t('Text-to-Speech Engine')}
{ await updateConfigHandler(); await getVoices(); await getModels(); if (e.target?.value === 'openai') { TTS_VOICE = 'alloy'; TTS_MODEL = 'tts-1'; } else { TTS_VOICE = ''; TTS_MODEL = ''; } }} >
{$i18n.t('Web API')}
{$i18n.t('Transformers')} ({$i18n.t('Local')})
{$i18n.t('OpenAI')}
{$i18n.t('ElevenLabs')}
{$i18n.t('Azure AI Speech')}
{#if TTS_ENGINE === 'openai'}
{:else if TTS_ENGINE === 'elevenlabs'}
{:else if TTS_ENGINE === 'azure'}
{$i18n.t('Azure Region')}
{$i18n.t('Endpoint URL')}
{/if}
{#if TTS_ENGINE === ''}
{$i18n.t('TTS Voice')}
{$i18n.t('Default')}
{#each voices as voice}
{voice.name}
{/each}
{:else if TTS_ENGINE === 'transformers'}
{$i18n.t('TTS Model')}
{$i18n.t(`Open WebUI uses SpeechT5 and CMU Arctic speaker embeddings.`)} To learn more about SpeechT5,
{$i18n.t(`click here`, { name: 'SpeechT5' })}.
To see the available CMU Arctic speaker embeddings,
{$i18n.t(`click here`)}.
{:else if TTS_ENGINE === 'openai'}
{$i18n.t('TTS Voice')}
{#each voices as voice}
{voice.name}
{/each}
{$i18n.t('TTS Model')}
{#each models as model}
{/each}
{$i18n.t('Additional Parameters')}
{:else if TTS_ENGINE === 'elevenlabs'}
{$i18n.t('TTS Voice')}
{#each voices as voice}
{voice.name}
{/each}
{$i18n.t('TTS Model')}
{#each models as model}
{/each}
{:else if TTS_ENGINE === 'azure'}
{$i18n.t('TTS Voice')}
{#each voices as voice}
{voice.name}
{/each}
{$i18n.t('Output format')}
{$i18n.t('Available list')}
{/if}
{$i18n.t('Response splitting')}
{#each Object.values(TTS_RESPONSE_SPLIT) as split}
{$i18n.t(split.charAt(0).toUpperCase() + split.slice(1))}
{/each}
{$i18n.t( "Control how message text is split for TTS requests. 'Punctuation' splits into sentences, 'paragraphs' splits into paragraphs, and 'none' keeps the message as a single string." )}
{$i18n.t('Save')}