|
- import { SimpleLogger } from '@peertube/peertube-models'
- import { TranscriptionEngine, TranscriptionEngineName } from './transcription-engine.js'
- import { Ctranslate2Transcriber, OpenaiTranscriber } from './whisper/index.js'
-
- export class TranscriberFactory {
- engines: TranscriptionEngine[]
-
- constructor (engines: TranscriptionEngine[]) {
- this.engines = engines
- }
-
- createFromEngineName (options: {
- engineName: TranscriptionEngineName
- enginePath?: string
- binDirectory?: string
-
- logger: SimpleLogger
- }) {
- const { engineName } = options
-
- const transcriberArgs = {
- ...options,
-
- engine: this.getEngineByName(engineName)
- }
-
- switch (engineName) {
- case 'openai-whisper':
- return new OpenaiTranscriber(transcriberArgs)
-
- case 'whisper-ctranslate2':
- return new Ctranslate2Transcriber(transcriberArgs)
-
- default:
- throw new Error(`Unimplemented engine ${engineName}`)
- }
- }
-
- getEngineByName (engineName: string) {
- const engine = this.engines.find(({ name }) => name === engineName)
- if (!engine) {
- throw new Error(`Unknow engine ${engineName}`)
- }
-
- return engine
- }
- }
|