mirror of
https://github.com/open-webui/open-webui
synced 2025-06-26 18:26:48 +00:00
🤩 Added custom openai tts models and role variables
This commit is contained in:
@@ -223,7 +223,8 @@
|
||||
const res = await synthesizeOpenAISpeech(
|
||||
localStorage.token,
|
||||
$settings?.audio?.speaker,
|
||||
sentence
|
||||
sentence,
|
||||
$settings?.audio?.OpenAIModel
|
||||
).catch((error) => {
|
||||
toast.error(error);
|
||||
|
||||
|
||||
@@ -26,6 +26,8 @@
|
||||
|
||||
let voices = [];
|
||||
let speaker = '';
|
||||
let models = [];
|
||||
let OpenAIModel = '';
|
||||
|
||||
const getOpenAIVoices = () => {
|
||||
voices = [
|
||||
@@ -38,6 +40,10 @@
|
||||
];
|
||||
};
|
||||
|
||||
const getOpenAIVoicesModel = () => {
|
||||
models = [{ name: 'tts-1' }, { name: 'tts-1-hd' }];
|
||||
};
|
||||
|
||||
const getWebAPIVoices = () => {
|
||||
const getVoicesLoop = setInterval(async () => {
|
||||
voices = await speechSynthesis.getVoices();
|
||||
@@ -78,12 +84,16 @@
|
||||
if (TTSEngine === 'openai') {
|
||||
const res = await updateAudioConfig(localStorage.token, {
|
||||
url: OpenAIUrl,
|
||||
key: OpenAIKey
|
||||
key: OpenAIKey,
|
||||
model: OpenAIModel,
|
||||
speaker: speaker,
|
||||
});
|
||||
|
||||
if (res) {
|
||||
OpenAIUrl = res.OPENAI_API_BASE_URL;
|
||||
OpenAIKey = res.OPENAI_API_KEY;
|
||||
OpenAIModel = res.OPENAI_API_MODEL;
|
||||
speaker = res.OPENAI_API_SPEAKER;
|
||||
}
|
||||
}
|
||||
};
|
||||
@@ -98,9 +108,11 @@
|
||||
STTEngine = settings?.audio?.STTEngine ?? '';
|
||||
TTSEngine = settings?.audio?.TTSEngine ?? '';
|
||||
speaker = settings?.audio?.speaker ?? '';
|
||||
OpenAIModel = settings?.audio?.OpenAIModel ?? '';
|
||||
|
||||
if (TTSEngine === 'openai') {
|
||||
getOpenAIVoices();
|
||||
getOpenAIVoicesModel();
|
||||
} else {
|
||||
getWebAPIVoices();
|
||||
}
|
||||
@@ -111,6 +123,8 @@
|
||||
if (res) {
|
||||
OpenAIUrl = res.OPENAI_API_BASE_URL;
|
||||
OpenAIKey = res.OPENAI_API_KEY;
|
||||
OpenAIModel = res.OPENAI_API_MODEL;
|
||||
speaker = res.OPENAI_API_SPEAKER;
|
||||
}
|
||||
}
|
||||
});
|
||||
@@ -126,7 +140,8 @@
|
||||
audio: {
|
||||
STTEngine: STTEngine !== '' ? STTEngine : undefined,
|
||||
TTSEngine: TTSEngine !== '' ? TTSEngine : undefined,
|
||||
speaker: speaker !== '' ? speaker : undefined
|
||||
speaker: speaker !== '' ? speaker : undefined,
|
||||
OpenAIModel: OpenAIModel !== '' ? OpenAIModel : undefined
|
||||
}
|
||||
});
|
||||
dispatch('save');
|
||||
@@ -215,6 +230,7 @@
|
||||
if (e.target.value === 'openai') {
|
||||
getOpenAIVoices();
|
||||
speaker = 'alloy';
|
||||
OpenAIModel = 'tts-1';
|
||||
} else {
|
||||
getWebAPIVoices();
|
||||
speaker = '';
|
||||
@@ -307,6 +323,25 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<div class=" mb-2.5 text-sm font-medium">{$i18n.t('Set Model')}</div>
|
||||
<div class="flex w-full">
|
||||
<div class="flex-1">
|
||||
<input
|
||||
list="model-list"
|
||||
class="w-full rounded-lg py-2 px-4 text-sm dark:text-gray-300 dark:bg-gray-850 outline-none"
|
||||
bind:value={OpenAIModel}
|
||||
placeholder="Select a model"
|
||||
/>
|
||||
|
||||
<datalist id="model-list">
|
||||
{#each models as OpenAIMode}
|
||||
<option value={OpenAIMode.name} />
|
||||
{/each}
|
||||
</datalist>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{/if}
|
||||
</div>
|
||||
|
||||
|
||||
Reference in New Issue
Block a user