Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
chenpangpang
open-webui
Commits
761c66a8
Commit
761c66a8
authored
May 06, 2024
by
Yanyutin753
Browse files
🤩 Added custom openai tts models and role variables
parent
e92311b4
Changes
34
Hide whitespace changes
Inline
Side-by-side
Showing
20 changed files
with
75 additions
and
7 deletions
+75
-7
backend/apps/audio/main.py
backend/apps/audio/main.py
+12
-0
backend/config.py
backend/config.py
+2
-0
src/lib/apis/audio/index.ts
src/lib/apis/audio/index.ts
+5
-2
src/lib/apis/openai/index.ts
src/lib/apis/openai/index.ts
+3
-2
src/lib/components/chat/Messages/ResponseMessage.svelte
src/lib/components/chat/Messages/ResponseMessage.svelte
+2
-1
src/lib/components/chat/Settings/Audio.svelte
src/lib/components/chat/Settings/Audio.svelte
+37
-2
src/lib/i18n/locales/ar-BH/translation.json
src/lib/i18n/locales/ar-BH/translation.json
+1
-0
src/lib/i18n/locales/bg-BG/translation.json
src/lib/i18n/locales/bg-BG/translation.json
+1
-0
src/lib/i18n/locales/bn-BD/translation.json
src/lib/i18n/locales/bn-BD/translation.json
+1
-0
src/lib/i18n/locales/ca-ES/translation.json
src/lib/i18n/locales/ca-ES/translation.json
+1
-0
src/lib/i18n/locales/de-DE/translation.json
src/lib/i18n/locales/de-DE/translation.json
+1
-0
src/lib/i18n/locales/dg-DG/translation.json
src/lib/i18n/locales/dg-DG/translation.json
+1
-0
src/lib/i18n/locales/en-GB/translation.json
src/lib/i18n/locales/en-GB/translation.json
+1
-0
src/lib/i18n/locales/en-US/translation.json
src/lib/i18n/locales/en-US/translation.json
+1
-0
src/lib/i18n/locales/es-ES/translation.json
src/lib/i18n/locales/es-ES/translation.json
+1
-0
src/lib/i18n/locales/fa-IR/translation.json
src/lib/i18n/locales/fa-IR/translation.json
+1
-0
src/lib/i18n/locales/fr-CA/translation.json
src/lib/i18n/locales/fr-CA/translation.json
+1
-0
src/lib/i18n/locales/fr-FR/translation.json
src/lib/i18n/locales/fr-FR/translation.json
+1
-0
src/lib/i18n/locales/it-IT/translation.json
src/lib/i18n/locales/it-IT/translation.json
+1
-0
src/lib/i18n/locales/ja-JP/translation.json
src/lib/i18n/locales/ja-JP/translation.json
+1
-0
No files found.
backend/apps/audio/main.py
View file @
761c66a8
...
@@ -43,6 +43,8 @@ from config import (
...
@@ -43,6 +43,8 @@ from config import (
DEVICE_TYPE
,
DEVICE_TYPE
,
AUDIO_OPENAI_API_BASE_URL
,
AUDIO_OPENAI_API_BASE_URL
,
AUDIO_OPENAI_API_KEY
,
AUDIO_OPENAI_API_KEY
,
AUDIO_OPENAI_API_MODEL
,
AUDIO_OPENAI_API_SPEAKER
)
)
log
=
logging
.
getLogger
(
__name__
)
log
=
logging
.
getLogger
(
__name__
)
...
@@ -60,6 +62,8 @@ app.add_middleware(
...
@@ -60,6 +62,8 @@ app.add_middleware(
app
.
state
.
OPENAI_API_BASE_URL
=
AUDIO_OPENAI_API_BASE_URL
app
.
state
.
OPENAI_API_BASE_URL
=
AUDIO_OPENAI_API_BASE_URL
app
.
state
.
OPENAI_API_KEY
=
AUDIO_OPENAI_API_KEY
app
.
state
.
OPENAI_API_KEY
=
AUDIO_OPENAI_API_KEY
app
.
state
.
OPENAI_API_MODEL
=
AUDIO_OPENAI_API_MODEL
app
.
state
.
OPENAI_API_SPEAKER
=
AUDIO_OPENAI_API_SPEAKER
# setting device type for whisper model
# setting device type for whisper model
whisper_device_type
=
DEVICE_TYPE
if
DEVICE_TYPE
and
DEVICE_TYPE
==
"cuda"
else
"cpu"
whisper_device_type
=
DEVICE_TYPE
if
DEVICE_TYPE
and
DEVICE_TYPE
==
"cuda"
else
"cpu"
...
@@ -72,6 +76,8 @@ SPEECH_CACHE_DIR.mkdir(parents=True, exist_ok=True)
...
@@ -72,6 +76,8 @@ SPEECH_CACHE_DIR.mkdir(parents=True, exist_ok=True)
class
OpenAIConfigUpdateForm
(
BaseModel
):
class
OpenAIConfigUpdateForm
(
BaseModel
):
url
:
str
url
:
str
key
:
str
key
:
str
model
:
str
speaker
:
str
@
app
.
get
(
"/config"
)
@
app
.
get
(
"/config"
)
...
@@ -79,6 +85,8 @@ async def get_openai_config(user=Depends(get_admin_user)):
...
@@ -79,6 +85,8 @@ async def get_openai_config(user=Depends(get_admin_user)):
return
{
return
{
"OPENAI_API_BASE_URL"
:
app
.
state
.
OPENAI_API_BASE_URL
,
"OPENAI_API_BASE_URL"
:
app
.
state
.
OPENAI_API_BASE_URL
,
"OPENAI_API_KEY"
:
app
.
state
.
OPENAI_API_KEY
,
"OPENAI_API_KEY"
:
app
.
state
.
OPENAI_API_KEY
,
"OPENAI_API_MODEL"
:
app
.
state
.
OPENAI_API_MODEL
,
"OPENAI_API_SPEAKER"
:
app
.
state
.
OPENAI_API_SPEAKER
}
}
...
@@ -91,11 +99,15 @@ async def update_openai_config(
...
@@ -91,11 +99,15 @@ async def update_openai_config(
app
.
state
.
OPENAI_API_BASE_URL
=
form_data
.
url
app
.
state
.
OPENAI_API_BASE_URL
=
form_data
.
url
app
.
state
.
OPENAI_API_KEY
=
form_data
.
key
app
.
state
.
OPENAI_API_KEY
=
form_data
.
key
app
.
state
.
OPENAI_API_MODEL
=
form_data
.
model
app
.
state
.
OPENAI_API_SPEAKER
=
form_data
.
speaker
return
{
return
{
"status"
:
True
,
"status"
:
True
,
"OPENAI_API_BASE_URL"
:
app
.
state
.
OPENAI_API_BASE_URL
,
"OPENAI_API_BASE_URL"
:
app
.
state
.
OPENAI_API_BASE_URL
,
"OPENAI_API_KEY"
:
app
.
state
.
OPENAI_API_KEY
,
"OPENAI_API_KEY"
:
app
.
state
.
OPENAI_API_KEY
,
"OPENAI_API_MODEL"
:
app
.
state
.
OPENAI_API_MODEL
,
"OPENAI_API_SPEAKER"
:
app
.
state
.
OPENAI_API_SPEAKER
,
}
}
...
...
backend/config.py
View file @
761c66a8
...
@@ -574,6 +574,8 @@ IMAGE_GENERATION_MODEL = os.getenv("IMAGE_GENERATION_MODEL", "")
...
@@ -574,6 +574,8 @@ IMAGE_GENERATION_MODEL = os.getenv("IMAGE_GENERATION_MODEL", "")
AUDIO_OPENAI_API_BASE_URL
=
os
.
getenv
(
"AUDIO_OPENAI_API_BASE_URL"
,
OPENAI_API_BASE_URL
)
AUDIO_OPENAI_API_BASE_URL
=
os
.
getenv
(
"AUDIO_OPENAI_API_BASE_URL"
,
OPENAI_API_BASE_URL
)
AUDIO_OPENAI_API_KEY
=
os
.
getenv
(
"AUDIO_OPENAI_API_KEY"
,
OPENAI_API_KEY
)
AUDIO_OPENAI_API_KEY
=
os
.
getenv
(
"AUDIO_OPENAI_API_KEY"
,
OPENAI_API_KEY
)
AUDIO_OPENAI_API_MODEL
=
os
.
getenv
(
"AUDIO_OPENAI_API_MODEL"
,
"tts-1"
)
AUDIO_OPENAI_API_SPEAKER
=
os
.
getenv
(
"AUDIO_OPENAI_API_SPEAKER"
,
"alloy"
)
####################################
####################################
# LiteLLM
# LiteLLM
...
...
src/lib/apis/audio/index.ts
View file @
761c66a8
...
@@ -30,6 +30,8 @@ export const getAudioConfig = async (token: string) => {
...
@@ -30,6 +30,8 @@ export const getAudioConfig = async (token: string) => {
type
OpenAIConfigForm
=
{
type
OpenAIConfigForm
=
{
url
:
string
;
url
:
string
;
key
:
string
;
key
:
string
;
model
:
string
;
speaker
:
string
;
};
};
export
const
updateAudioConfig
=
async
(
token
:
string
,
payload
:
OpenAIConfigForm
)
=>
{
export
const
updateAudioConfig
=
async
(
token
:
string
,
payload
:
OpenAIConfigForm
)
=>
{
...
@@ -95,7 +97,8 @@ export const transcribeAudio = async (token: string, file: File) => {
...
@@ -95,7 +97,8 @@ export const transcribeAudio = async (token: string, file: File) => {
export
const
synthesizeOpenAISpeech
=
async
(
export
const
synthesizeOpenAISpeech
=
async
(
token
:
string
=
''
,
token
:
string
=
''
,
speaker
:
string
=
'
alloy
'
,
speaker
:
string
=
'
alloy
'
,
text
:
string
=
''
text
:
string
=
''
,
OpenAIModel
:
string
=
'
tts-1
'
)
=>
{
)
=>
{
let
error
=
null
;
let
error
=
null
;
...
@@ -106,7 +109,7 @@ export const synthesizeOpenAISpeech = async (
...
@@ -106,7 +109,7 @@ export const synthesizeOpenAISpeech = async (
'
Content-Type
'
:
'
application/json
'
'
Content-Type
'
:
'
application/json
'
},
},
body
:
JSON
.
stringify
({
body
:
JSON
.
stringify
({
model
:
'
tts-1
'
,
model
:
OpenAIModel
,
input
:
text
,
input
:
text
,
voice
:
speaker
voice
:
speaker
})
})
...
...
src/lib/apis/openai/index.ts
View file @
761c66a8
...
@@ -239,7 +239,8 @@ export const generateOpenAIChatCompletion = async (
...
@@ -239,7 +239,8 @@ export const generateOpenAIChatCompletion = async (
export
const
synthesizeOpenAISpeech
=
async
(
export
const
synthesizeOpenAISpeech
=
async
(
token
:
string
=
''
,
token
:
string
=
''
,
speaker
:
string
=
'
alloy
'
,
speaker
:
string
=
'
alloy
'
,
text
:
string
=
''
text
:
string
=
''
,
model
:
string
=
'
tts-1
'
)
=>
{
)
=>
{
let
error
=
null
;
let
error
=
null
;
...
@@ -250,7 +251,7 @@ export const synthesizeOpenAISpeech = async (
...
@@ -250,7 +251,7 @@ export const synthesizeOpenAISpeech = async (
'
Content-Type
'
:
'
application/json
'
'
Content-Type
'
:
'
application/json
'
},
},
body
:
JSON
.
stringify
({
body
:
JSON
.
stringify
({
model
:
'
tts-1
'
,
model
:
model
,
input
:
text
,
input
:
text
,
voice
:
speaker
voice
:
speaker
})
})
...
...
src/lib/components/chat/Messages/ResponseMessage.svelte
View file @
761c66a8
...
@@ -223,7 +223,8 @@
...
@@ -223,7 +223,8 @@
const res = await synthesizeOpenAISpeech(
const res = await synthesizeOpenAISpeech(
localStorage.token,
localStorage.token,
$settings?.audio?.speaker,
$settings?.audio?.speaker,
sentence
sentence,
$settings?.audio?.OpenAIModel
).catch((error) => {
).catch((error) => {
toast.error(error);
toast.error(error);
...
...
src/lib/components/chat/Settings/Audio.svelte
View file @
761c66a8
...
@@ -26,6 +26,8 @@
...
@@ -26,6 +26,8 @@
let voices = [];
let voices = [];
let speaker = '';
let speaker = '';
let models = [];
let OpenAIModel = '';
const getOpenAIVoices = () => {
const getOpenAIVoices = () => {
voices = [
voices = [
...
@@ -38,6 +40,10 @@
...
@@ -38,6 +40,10 @@
];
];
};
};
const getOpenAIVoicesModel = () => {
models = [{ name: 'tts-1' }, { name: 'tts-1-hd' }];
};
const getWebAPIVoices = () => {
const getWebAPIVoices = () => {
const getVoicesLoop = setInterval(async () => {
const getVoicesLoop = setInterval(async () => {
voices = await speechSynthesis.getVoices();
voices = await speechSynthesis.getVoices();
...
@@ -78,12 +84,16 @@
...
@@ -78,12 +84,16 @@
if (TTSEngine === 'openai') {
if (TTSEngine === 'openai') {
const res = await updateAudioConfig(localStorage.token, {
const res = await updateAudioConfig(localStorage.token, {
url: OpenAIUrl,
url: OpenAIUrl,
key: OpenAIKey
key: OpenAIKey,
model: OpenAIModel,
speaker: speaker,
});
});
if (res) {
if (res) {
OpenAIUrl = res.OPENAI_API_BASE_URL;
OpenAIUrl = res.OPENAI_API_BASE_URL;
OpenAIKey = res.OPENAI_API_KEY;
OpenAIKey = res.OPENAI_API_KEY;
OpenAIModel = res.OPENAI_API_MODEL;
speaker = res.OPENAI_API_SPEAKER;
}
}
}
}
};
};
...
@@ -98,9 +108,11 @@
...
@@ -98,9 +108,11 @@
STTEngine = settings?.audio?.STTEngine ?? '';
STTEngine = settings?.audio?.STTEngine ?? '';
TTSEngine = settings?.audio?.TTSEngine ?? '';
TTSEngine = settings?.audio?.TTSEngine ?? '';
speaker = settings?.audio?.speaker ?? '';
speaker = settings?.audio?.speaker ?? '';
OpenAIModel = settings?.audio?.OpenAIModel ?? '';
if (TTSEngine === 'openai') {
if (TTSEngine === 'openai') {
getOpenAIVoices();
getOpenAIVoices();
getOpenAIVoicesModel();
} else {
} else {
getWebAPIVoices();
getWebAPIVoices();
}
}
...
@@ -111,6 +123,8 @@
...
@@ -111,6 +123,8 @@
if (res) {
if (res) {
OpenAIUrl = res.OPENAI_API_BASE_URL;
OpenAIUrl = res.OPENAI_API_BASE_URL;
OpenAIKey = res.OPENAI_API_KEY;
OpenAIKey = res.OPENAI_API_KEY;
OpenAIModel = res.OPENAI_API_MODEL;
speaker = res.OPENAI_API_SPEAKER;
}
}
}
}
});
});
...
@@ -126,7 +140,8 @@
...
@@ -126,7 +140,8 @@
audio: {
audio: {
STTEngine: STTEngine !== '' ? STTEngine : undefined,
STTEngine: STTEngine !== '' ? STTEngine : undefined,
TTSEngine: TTSEngine !== '' ? TTSEngine : undefined,
TTSEngine: TTSEngine !== '' ? TTSEngine : undefined,
speaker: speaker !== '' ? speaker : undefined
speaker: speaker !== '' ? speaker : undefined,
OpenAIModel: OpenAIModel !== '' ? OpenAIModel : undefined
}
}
});
});
dispatch('save');
dispatch('save');
...
@@ -215,6 +230,7 @@
...
@@ -215,6 +230,7 @@
if (e.target.value === 'openai') {
if (e.target.value === 'openai') {
getOpenAIVoices();
getOpenAIVoices();
speaker = 'alloy';
speaker = 'alloy';
OpenAIModel = 'tts-1';
} else {
} else {
getWebAPIVoices();
getWebAPIVoices();
speaker = '';
speaker = '';
...
@@ -307,6 +323,25 @@
...
@@ -307,6 +323,25 @@
</div>
</div>
</div>
</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}
{/if}
</div>
</div>
...
...
src/lib/i18n/locales/ar-BH/translation.json
View file @
761c66a8
...
@@ -350,6 +350,7 @@
...
@@ -350,6 +350,7 @@
"Set Steps"
:
"ضبط الخطوات"
,
"Set Steps"
:
"ضبط الخطوات"
,
"Set Title Auto-Generation Model"
:
"قم بتعيين نموذج إنشاء العنوان تلقائيًا"
,
"Set Title Auto-Generation Model"
:
"قم بتعيين نموذج إنشاء العنوان تلقائيًا"
,
"Set Voice"
:
"ضبط الصوت"
,
"Set Voice"
:
"ضبط الصوت"
,
"Set Model"
:
"ضبط النموذج"
,
"Settings"
:
"الاعدادات"
,
"Settings"
:
"الاعدادات"
,
"Settings saved successfully!"
:
"تم حفظ الاعدادات بنجاح"
,
"Settings saved successfully!"
:
"تم حفظ الاعدادات بنجاح"
,
"Share"
:
"كشاركة"
,
"Share"
:
"كشاركة"
,
...
...
src/lib/i18n/locales/bg-BG/translation.json
View file @
761c66a8
...
@@ -350,6 +350,7 @@
...
@@ -350,6 +350,7 @@
"Set Steps"
:
"Задай Стъпки"
,
"Set Steps"
:
"Задай Стъпки"
,
"Set Title Auto-Generation Model"
:
"Задай Модел за Автоматично Генериране на Заглавие"
,
"Set Title Auto-Generation Model"
:
"Задай Модел за Автоматично Генериране на Заглавие"
,
"Set Voice"
:
"Задай Глас"
,
"Set Voice"
:
"Задай Глас"
,
"Set Model"
:
"Задай Модел"
,
"Settings"
:
"Настройки"
,
"Settings"
:
"Настройки"
,
"Settings saved successfully!"
:
"Настройките са запазени успешно!"
,
"Settings saved successfully!"
:
"Настройките са запазени успешно!"
,
"Share"
:
""
,
"Share"
:
""
,
...
...
src/lib/i18n/locales/bn-BD/translation.json
View file @
761c66a8
...
@@ -350,6 +350,7 @@
...
@@ -350,6 +350,7 @@
"Set Steps"
:
"পরবর্তী ধাপসমূহ"
,
"Set Steps"
:
"পরবর্তী ধাপসমূহ"
,
"Set Title Auto-Generation Model"
:
"শিরোনাম অটোজেনারেশন মডেন নির্ধারণ করুন"
,
"Set Title Auto-Generation Model"
:
"শিরোনাম অটোজেনারেশন মডেন নির্ধারণ করুন"
,
"Set Voice"
:
"কন্ঠস্বর নির্ধারণ করুন"
,
"Set Voice"
:
"কন্ঠস্বর নির্ধারণ করুন"
,
"Set Model"
:
"মডেল নির্ধারণ করুন"
,
"Settings"
:
"সেটিংসমূহ"
,
"Settings"
:
"সেটিংসমূহ"
,
"Settings saved successfully!"
:
"সেটিংগুলো সফলভাবে সংরক্ষিত হয়েছে"
,
"Settings saved successfully!"
:
"সেটিংগুলো সফলভাবে সংরক্ষিত হয়েছে"
,
"Share"
:
""
,
"Share"
:
""
,
...
...
src/lib/i18n/locales/ca-ES/translation.json
View file @
761c66a8
...
@@ -350,6 +350,7 @@
...
@@ -350,6 +350,7 @@
"Set Steps"
:
"Estableix Passos"
,
"Set Steps"
:
"Estableix Passos"
,
"Set Title Auto-Generation Model"
:
"Estableix Model d'Auto-Generació de Títol"
,
"Set Title Auto-Generation Model"
:
"Estableix Model d'Auto-Generació de Títol"
,
"Set Voice"
:
"Estableix Veu"
,
"Set Voice"
:
"Estableix Veu"
,
"Set Model"
:
"Estableix Model"
,
"Settings"
:
"Configuracions"
,
"Settings"
:
"Configuracions"
,
"Settings saved successfully!"
:
"Configuracions guardades amb èxit!"
,
"Settings saved successfully!"
:
"Configuracions guardades amb èxit!"
,
"Share"
:
""
,
"Share"
:
""
,
...
...
src/lib/i18n/locales/de-DE/translation.json
View file @
761c66a8
...
@@ -350,6 +350,7 @@
...
@@ -350,6 +350,7 @@
"Set Steps"
:
"Schritte festlegen"
,
"Set Steps"
:
"Schritte festlegen"
,
"Set Title Auto-Generation Model"
:
"Modell für automatische Titelgenerierung festlegen"
,
"Set Title Auto-Generation Model"
:
"Modell für automatische Titelgenerierung festlegen"
,
"Set Voice"
:
"Stimme festlegen"
,
"Set Voice"
:
"Stimme festlegen"
,
"Set Model"
:
"Modell festlegen"
,
"Settings"
:
"Einstellungen"
,
"Settings"
:
"Einstellungen"
,
"Settings saved successfully!"
:
"Einstellungen erfolgreich gespeichert!"
,
"Settings saved successfully!"
:
"Einstellungen erfolgreich gespeichert!"
,
"Share"
:
"Teilen"
,
"Share"
:
"Teilen"
,
...
...
src/lib/i18n/locales/dg-DG/translation.json
View file @
761c66a8
...
@@ -350,6 +350,7 @@
...
@@ -350,6 +350,7 @@
"Set Steps"
:
"Set Steps so many steps"
,
"Set Steps"
:
"Set Steps so many steps"
,
"Set Title Auto-Generation Model"
:
"Set Title Auto-Generation Model very auto-generate"
,
"Set Title Auto-Generation Model"
:
"Set Title Auto-Generation Model very auto-generate"
,
"Set Voice"
:
"Set Voice so speak"
,
"Set Voice"
:
"Set Voice so speak"
,
"Set Model"
:
"Set Model so speak"
,
"Settings"
:
"Settings much settings"
,
"Settings"
:
"Settings much settings"
,
"Settings saved successfully!"
:
"Settings saved successfully! Very success!"
,
"Settings saved successfully!"
:
"Settings saved successfully! Very success!"
,
"Share"
:
""
,
"Share"
:
""
,
...
...
src/lib/i18n/locales/en-GB/translation.json
View file @
761c66a8
...
@@ -350,6 +350,7 @@
...
@@ -350,6 +350,7 @@
"Set Steps"
:
""
,
"Set Steps"
:
""
,
"Set Title Auto-Generation Model"
:
""
,
"Set Title Auto-Generation Model"
:
""
,
"Set Voice"
:
""
,
"Set Voice"
:
""
,
"Set Model"
:
""
,
"Settings"
:
""
,
"Settings"
:
""
,
"Settings saved successfully!"
:
""
,
"Settings saved successfully!"
:
""
,
"Share"
:
""
,
"Share"
:
""
,
...
...
src/lib/i18n/locales/en-US/translation.json
View file @
761c66a8
...
@@ -350,6 +350,7 @@
...
@@ -350,6 +350,7 @@
"Set Steps"
:
""
,
"Set Steps"
:
""
,
"Set Title Auto-Generation Model"
:
""
,
"Set Title Auto-Generation Model"
:
""
,
"Set Voice"
:
""
,
"Set Voice"
:
""
,
"Set Model"
:
""
,
"Settings"
:
""
,
"Settings"
:
""
,
"Settings saved successfully!"
:
""
,
"Settings saved successfully!"
:
""
,
"Share"
:
""
,
"Share"
:
""
,
...
...
src/lib/i18n/locales/es-ES/translation.json
View file @
761c66a8
...
@@ -350,6 +350,7 @@
...
@@ -350,6 +350,7 @@
"Set Steps"
:
"Establecer Pasos"
,
"Set Steps"
:
"Establecer Pasos"
,
"Set Title Auto-Generation Model"
:
"Establecer modelo de generación automática de títulos"
,
"Set Title Auto-Generation Model"
:
"Establecer modelo de generación automática de títulos"
,
"Set Voice"
:
"Establecer la voz"
,
"Set Voice"
:
"Establecer la voz"
,
"Set Model"
:
"Establecer el modelo"
,
"Settings"
:
"Configuración"
,
"Settings"
:
"Configuración"
,
"Settings saved successfully!"
:
"¡Configuración guardada exitosamente!"
,
"Settings saved successfully!"
:
"¡Configuración guardada exitosamente!"
,
"Share"
:
""
,
"Share"
:
""
,
...
...
src/lib/i18n/locales/fa-IR/translation.json
View file @
761c66a8
...
@@ -350,6 +350,7 @@
...
@@ -350,6 +350,7 @@
"Set Steps"
:
"تنظیم گام
\u
200cها"
,
"Set Steps"
:
"تنظیم گام
\u
200cها"
,
"Set Title Auto-Generation Model"
:
"تنظیم مدل تولید خودکار عنوان"
,
"Set Title Auto-Generation Model"
:
"تنظیم مدل تولید خودکار عنوان"
,
"Set Voice"
:
"تنظیم صدا"
,
"Set Voice"
:
"تنظیم صدا"
,
"Set Model"
:
"تنظیم مدل"
,
"Settings"
:
"تنظیمات"
,
"Settings"
:
"تنظیمات"
,
"Settings saved successfully!"
:
"تنظیمات با موفقیت ذخیره شد!"
,
"Settings saved successfully!"
:
"تنظیمات با موفقیت ذخیره شد!"
,
"Share"
:
""
,
"Share"
:
""
,
...
...
src/lib/i18n/locales/fr-CA/translation.json
View file @
761c66a8
...
@@ -350,6 +350,7 @@
...
@@ -350,6 +350,7 @@
"Set Steps"
:
"Définir les étapes"
,
"Set Steps"
:
"Définir les étapes"
,
"Set Title Auto-Generation Model"
:
"Définir le modèle de génération automatique de titre"
,
"Set Title Auto-Generation Model"
:
"Définir le modèle de génération automatique de titre"
,
"Set Voice"
:
"Définir la voix"
,
"Set Voice"
:
"Définir la voix"
,
"Set Model"
:
"Configurer le modèle"
,
"Settings"
:
"Paramètres"
,
"Settings"
:
"Paramètres"
,
"Settings saved successfully!"
:
"Paramètres enregistrés avec succès !"
,
"Settings saved successfully!"
:
"Paramètres enregistrés avec succès !"
,
"Share"
:
""
,
"Share"
:
""
,
...
...
src/lib/i18n/locales/fr-FR/translation.json
View file @
761c66a8
...
@@ -350,6 +350,7 @@
...
@@ -350,6 +350,7 @@
"Set Steps"
:
"Définir les étapes"
,
"Set Steps"
:
"Définir les étapes"
,
"Set Title Auto-Generation Model"
:
"Définir le modèle de génération automatique de titre"
,
"Set Title Auto-Generation Model"
:
"Définir le modèle de génération automatique de titre"
,
"Set Voice"
:
"Définir la voix"
,
"Set Voice"
:
"Définir la voix"
,
"Set Model"
:
"Définir le modèle"
,
"Settings"
:
"Paramètres"
,
"Settings"
:
"Paramètres"
,
"Settings saved successfully!"
:
"Paramètres enregistrés avec succès !"
,
"Settings saved successfully!"
:
"Paramètres enregistrés avec succès !"
,
"Share"
:
""
,
"Share"
:
""
,
...
...
src/lib/i18n/locales/it-IT/translation.json
View file @
761c66a8
...
@@ -350,6 +350,7 @@
...
@@ -350,6 +350,7 @@
"Set Steps"
:
"Imposta passaggi"
,
"Set Steps"
:
"Imposta passaggi"
,
"Set Title Auto-Generation Model"
:
"Imposta modello di generazione automatica del titolo"
,
"Set Title Auto-Generation Model"
:
"Imposta modello di generazione automatica del titolo"
,
"Set Voice"
:
"Imposta voce"
,
"Set Voice"
:
"Imposta voce"
,
"Set Model"
:
"Imposta modello"
,
"Settings"
:
"Impostazioni"
,
"Settings"
:
"Impostazioni"
,
"Settings saved successfully!"
:
"Impostazioni salvate con successo!"
,
"Settings saved successfully!"
:
"Impostazioni salvate con successo!"
,
"Share"
:
""
,
"Share"
:
""
,
...
...
src/lib/i18n/locales/ja-JP/translation.json
View file @
761c66a8
...
@@ -350,6 +350,7 @@
...
@@ -350,6 +350,7 @@
"Set Steps"
:
"ステップを設定"
,
"Set Steps"
:
"ステップを設定"
,
"Set Title Auto-Generation Model"
:
"タイトル自動生成モデルを設定"
,
"Set Title Auto-Generation Model"
:
"タイトル自動生成モデルを設定"
,
"Set Voice"
:
"音声を設定"
,
"Set Voice"
:
"音声を設定"
,
"Set Model"
:
"モデルを設定"
,
"Settings"
:
"設定"
,
"Settings"
:
"設定"
,
"Settings saved successfully!"
:
"設定が正常に保存されました!"
,
"Settings saved successfully!"
:
"設定が正常に保存されました!"
,
"Share"
:
""
,
"Share"
:
""
,
...
...
Prev
1
2
Next
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment