learning_ai_common_plat/packages/speech/src/factory.ts

55 lines
1.7 KiB
TypeScript

/**
* Factory function for creating speech transcribers.
*
* Auto-detects provider from SPEECH_PROVIDER env var, or falls back
* to 'azure' if AZURE_SPEECH_KEY is set, else 'mock'.
*/
import type { SpeechConfig, SpeechTranscriber } from './types.js';
import { MockSpeechTranscriber } from './providers/mock.js';
/**
* Create a speech transcriber based on config or env vars.
*
* For Azure and Whisper providers, consumers must provide their own
* platform-specific implementations (Python azure_stt.py / whisper_stt.py,
* Swift AzureSpeechTranscriber, etc.). This factory handles the mock
* provider for testing and serves as the registry point for future
* TS-native providers.
*/
export function createSpeechTranscriber(config?: Partial<SpeechConfig>): SpeechTranscriber {
const provider = config?.provider ?? detectProvider();
switch (provider) {
case 'mock':
return new MockSpeechTranscriber();
case 'azure':
case 'whisper':
case 'google':
case 'deepgram':
throw new Error(
`Speech provider '${provider}' requires a platform-specific implementation. ` +
`Use the Python SpeechTranscriber ABC (src/audio/speech_types.py) or ` +
`Swift SpeechTranscriberProtocol for native providers.`
);
default:
throw new Error(`Unknown speech provider: ${provider}`);
}
}
function detectProvider(): SpeechConfig['provider'] {
const explicit = (process.env.SPEECH_PROVIDER || '').toLowerCase();
if (
explicit === 'azure' ||
explicit === 'whisper' ||
explicit === 'google' ||
explicit === 'deepgram' ||
explicit === 'mock'
) {
return explicit;
}
return 'mock';
}
export { MockSpeechTranscriber } from './providers/mock.js';