WeLe Agentic AI with Docker deployment
This commit is contained in:
+19
-7
@@ -7,10 +7,10 @@
|
||||
// one shift and should never have to touch a language menu.
|
||||
// ============================================
|
||||
import { Tensor } from '@huggingface/transformers';
|
||||
import { getSTT, getTTS, supportsTTS } from './models.js';
|
||||
import { getSTT, getTTS, supportsTTS, sttIsEnglishOnly, defaultLanguage } from './models.js';
|
||||
import logger from '../utils/logger.js';
|
||||
|
||||
export { LANGUAGES, warmup, speechStatus } from './models.js';
|
||||
export { LANGUAGES, warmup, speechStatus, defaultLanguage } from './models.js';
|
||||
export { Endpointer, warmupVad } from './vad.js';
|
||||
|
||||
const RATE = 16000;
|
||||
@@ -67,7 +67,7 @@ async function detectLanguage(audio) {
|
||||
* @param {string} lang 'auto' | 'ta' | 'en'
|
||||
* @param {string} prefer used when detection is unusable
|
||||
*/
|
||||
export async function transcribe(audio, lang = 'auto', prefer = 'ta') {
|
||||
export async function transcribe(audio, lang = 'auto', prefer = defaultLanguage()) {
|
||||
if (!audio || audio.length < RATE / 5) { // under 200 ms
|
||||
return { text: '', lang: prefer, note: 'too short' };
|
||||
}
|
||||
@@ -80,7 +80,11 @@ export async function transcribe(audio, lang = 'auto', prefer = 'ta') {
|
||||
let detected = null;
|
||||
let confidence = null;
|
||||
|
||||
if (lang === 'auto') {
|
||||
// An English-only checkpoint has no language tokens to read, and passing
|
||||
// `language` to it is rejected — so "auto" simply means English there.
|
||||
if (lang === 'auto' && sttIsEnglishOnly()) {
|
||||
used = 'en';
|
||||
} else if (lang === 'auto') {
|
||||
try {
|
||||
const d = await detectLanguage(audio);
|
||||
detected = d.lang;
|
||||
@@ -95,7 +99,15 @@ export async function transcribe(audio, lang = 'auto', prefer = 'ta') {
|
||||
}
|
||||
}
|
||||
|
||||
const result = await stt(audio, { task: 'transcribe', language: used, return_timestamps: false });
|
||||
// An English-only checkpoint rejects BOTH `task` and `language` — it has no
|
||||
// other mode to select. Multilingual builds require the language, since they
|
||||
// silently default to English otherwise.
|
||||
const opts = { return_timestamps: false };
|
||||
if (!sttIsEnglishOnly()) {
|
||||
opts.task = 'transcribe';
|
||||
opts.language = used;
|
||||
}
|
||||
const result = await stt(audio, opts);
|
||||
return finish(result, used, audio, t0, detected, confidence);
|
||||
}
|
||||
|
||||
@@ -115,11 +127,11 @@ function finish(result, used, audio, t0, detected, confidence) {
|
||||
* Synthesise one piece of text.
|
||||
* @returns {Promise<{audio: Float32Array, sampling_rate: number}>}
|
||||
*/
|
||||
export async function synthesize(text, lang = 'ta') {
|
||||
export async function synthesize(text, lang = defaultLanguage()) {
|
||||
const clean = (text || '').trim();
|
||||
if (!clean) return null;
|
||||
|
||||
const use = supportsTTS(lang) ? lang : 'en';
|
||||
const use = supportsTTS(lang) ? lang : defaultLanguage();
|
||||
const tts = await getTTS(use);
|
||||
|
||||
const t0 = Date.now();
|
||||
|
||||
Reference in New Issue
Block a user