support tts cartesia (#370)

* support tts cartesia

* update speech utils

* revert reset password

* revert serve-integration
This commit is contained in:
Hoan Luu Huu
2024-12-19 21:19:28 +07:00
committed by GitHub
parent 8851b3fac0
commit 0eb8097e32
6 changed files with 544 additions and 7 deletions
+24 -1
View File
@@ -11,7 +11,8 @@ const {decryptCredential, testWhisper, testDeepgramTTS,
testRimelabs,
testVerbioTts,
testVerbioStt,
testSpeechmaticsStt} = require('../../utils/speech-utils');
testSpeechmaticsStt,
testCartesia} = require('../../utils/speech-utils');
const {DbErrorUnprocessableRequest, DbErrorForbidden, DbErrorBadRequest} = require('../../utils/errors');
const {
testGoogleTts,
@@ -251,6 +252,12 @@ const encryptCredential = (obj) => {
const playhtData = JSON.stringify({api_key, user_id, voice_engine, options});
return encrypt(playhtData);
case 'cartesia':
assert(api_key, 'invalid cartesia speech credential: api_key is required');
assert(model_id, 'invalid cartesia speech credential: model_id is required');
const cartesiaData = JSON.stringify({api_key, model_id, options});
return encrypt(cartesiaData);
case 'rimelabs':
assert(api_key, 'invalid rimelabs speech credential: api_key is required');
assert(model_id, 'invalid rimelabs speech credential: model_id is required');
@@ -804,6 +811,22 @@ router.get('/:sid/test', async(req, res) => {
SpeechCredential.ttsTestResult(sid, false);
}
}
} else if (cred.vendor === 'cartesia') {
if (cred.use_for_tts) {
try {
await testCartesia(logger, synthAudio, credential);
results.tts.status = 'ok';
SpeechCredential.ttsTestResult(sid, true);
} catch (err) {
let reason = err.message;
// if error is from bent, let get the body
try {
reason = await err.text();
} catch {}
results.tts = {status: 'fail', reason};
SpeechCredential.ttsTestResult(sid, false);
}
}
} else if (cred.vendor === 'rimelabs') {
if (cred.use_for_tts) {
try {