This commit is contained in:
Quan HL
2025-05-13 17:55:41 +07:00
parent 9409405769
commit 545df0b770
5 changed files with 14 additions and 9 deletions

View File

@@ -25,7 +25,7 @@ function getExtensionAndSampleRate(path) {
} }
async function addFileToCache(client, logger, path, async function addFileToCache(client, logger, path,
{account_sid, vendor, language, voice, deploymentId, engine, model, text}) { {account_sid, vendor, language, voice, deploymentId, engine, model, text, instructions}) {
let key; let key;
logger = logger || noopLogger; logger = logger || noopLogger;
@@ -38,6 +38,7 @@ async function addFileToCache(client, logger, path,
engine, engine,
model, model,
text, text,
instructions
}); });
const [extension, sampleRate] = getExtensionAndSampleRate(path); const [extension, sampleRate] = getExtensionAndSampleRate(path);
const audioBuffer = await fs.readFile(path); const audioBuffer = await fs.readFile(path);

View File

@@ -12,7 +12,7 @@ const debug = require('debug')('jambonz:realtimedb-helpers');
* @returns {object} result - {error, purgedCount} * @returns {object} result - {error, purgedCount}
*/ */
async function purgeTtsCache(client, logger, {all, account_sid, vendor, async function purgeTtsCache(client, logger, {all, account_sid, vendor,
language, voice, deploymentId, engine, model, text} = {all: true}) { language, voice, deploymentId, engine, model, text, instructions} = {all: true}) {
logger = logger || noopLogger; logger = logger || noopLogger;
let purgedCount = 0, error; let purgedCount = 0, error;
@@ -35,6 +35,7 @@ async function purgeTtsCache(client, logger, {all, account_sid, vendor,
engine, engine,
model, model,
text, text,
instructions
}); });
purgedCount = await client.del(key); purgedCount = await client.del(key);
if (purgedCount === 0) error = 'Specified item not found'; if (purgedCount === 0) error = 'Specified item not found';

View File

@@ -171,7 +171,8 @@ async function synthAudio(client, createHash, retrieveHash, logger, stats, { acc
engine, engine,
// model or model_id is used to identify the tts cache. // model or model_id is used to identify the tts cache.
model: model || credentials.model_id, model: model || credentials.model_id,
text text,
instructions
}); });
debug(`synth key is ${key}`); debug(`synth key is ${key}`);

View File

@@ -23,10 +23,11 @@ function makeSynthKey({
voice, voice,
engine = '', engine = '',
model = '', model = '',
text text,
instructions = '',
}) { }) {
const hash = crypto.createHash('sha1'); const hash = crypto.createHash('sha1');
hash.update(`${language}:${vendor}:${voice}:${engine}:${model}:${text}`); hash.update(`${language}:${vendor}:${voice}:${engine}:${model}:${text}:${instructions}`);
const hexHashKey = hash.digest('hex'); const hexHashKey = hash.digest('hex');
const accountKey = account_sid ? `:${account_sid}` : ''; const accountKey = account_sid ? `:${account_sid}` : '';
const key = `tts${accountKey}:${hexHashKey}`; const key = `tts${accountKey}:${hexHashKey}`;

View File

@@ -887,7 +887,8 @@ test('TTS Cache tests', async(t) => {
// save some random tts keys to cache // save some random tts keys to cache
const minRecords = 8; const minRecords = 8;
for (const i in Array(minRecords).fill(0)) { for (const i in Array(minRecords).fill(0)) {
await client.set(makeSynthKey({vendor: i, language: i, voice: i, engine: i, model: i, text: i}), i); await client.set(makeSynthKey({vendor: i, language: i, voice: i, engine: i, model: i, text: i,
instructions: i}), i);
} }
const count = await getTtsSize(); const count = await getTtsSize();
t.ok(count >= minRecords, 'getTtsSize worked.'); t.ok(count >= minRecords, 'getTtsSize worked.');
@@ -906,7 +907,7 @@ test('TTS Cache tests', async(t) => {
try { try {
// save some random tts keys to cache // save some random tts keys to cache
for (const i in Array(10).fill(0)) { for (const i in Array(10).fill(0)) {
await client.set(makeSynthKey({vendor: i, language: i, voice: i, engine: i, text: i}), i); await client.set(makeSynthKey({vendor: i, language: i, voice: i, engine: i, text: i, instructions: i}), i);
} }
// save a specific key to tts cache // save a specific key to tts cache
const opts = {vendor: 'aws', language: 'en-US', voice: 'MALE', engine: 'Engine', text: 'Hello World!'}; const opts = {vendor: 'aws', language: 'en-US', voice: 'MALE', engine: 'Engine', text: 'Hello World!'};
@@ -944,10 +945,10 @@ test('TTS Cache tests', async(t) => {
const account_sid = "12412512_cabc_5aff" const account_sid = "12412512_cabc_5aff"
const account_sid2 = "22412512_cabc_5aff" const account_sid2 = "22412512_cabc_5aff"
for (const i in Array(minRecords).fill(0)) { for (const i in Array(minRecords).fill(0)) {
await client.set(makeSynthKey({account_sid, vendor: i, language: i, voice: i, engine: i, text: i}), i); await client.set(makeSynthKey({account_sid, vendor: i, language: i, voice: i, engine: i, text: i, instructions: i}), i);
} }
for (const i in Array(minRecords).fill(0)) { for (const i in Array(minRecords).fill(0)) {
await client.set(makeSynthKey({account_sid: account_sid2, vendor: i, language: i, voice: i, engine: i, text: i}), i); await client.set(makeSynthKey({account_sid: account_sid2, vendor: i, language: i, voice: i, engine: i, text: i, instructions: i}), i);
} }
const {purgedCount} = await purgeTtsCache({account_sid}); const {purgedCount} = await purgeTtsCache({account_sid});
t.equal(purgedCount, minRecords, `successfully purged at least ${minRecords} tts records from cache for account_sid:${account_sid}`); t.equal(purgedCount, minRecords, `successfully purged at least ${minRecords} tts records from cache for account_sid:${account_sid}`);