| 
							- import { SimpleLogger } from '@peertube/peertube-models'
 - import { buildSUUID, SUUID } from '@peertube/peertube-node-utils'
 - import { $ } from 'execa'
 - import { PerformanceObserver } from 'node:perf_hooks'
 - import { join } from 'path'
 - import { TranscriptFile, TranscriptFormat } from './transcript-file.js'
 - import { TranscriptionEngine } from './transcription-engine.js'
 - import { TranscriptionModel } from './transcription-model.js'
 - import { TranscriptionRun } from './transcription-run.js'
 - 
 - export interface TranscribeArgs {
 -   mediaFilePath: string
 -   model: TranscriptionModel
 -   format: TranscriptFormat
 -   transcriptDirectory: string
 - 
 -   language?: string
 -   runId?: SUUID
 - }
 - 
 - export abstract class AbstractTranscriber {
 -   engine: TranscriptionEngine
 - 
 -   protected binDirectory: string
 -   protected enginePath: string
 - 
 -   protected logger: SimpleLogger
 - 
 -   protected performanceObserver?: PerformanceObserver
 -   protected run?: TranscriptionRun
 - 
 -   constructor (options: {
 -     engine: TranscriptionEngine
 -     binDirectory?: string
 -     enginePath?: string
 - 
 -     logger: SimpleLogger
 -     performanceObserver?: PerformanceObserver
 -   }) {
 -     const { engine, logger, enginePath, binDirectory, performanceObserver } = options
 - 
 -     this.engine = engine
 -     this.enginePath = enginePath
 -     this.logger = logger
 -     this.binDirectory = binDirectory
 -     this.performanceObserver = performanceObserver
 -   }
 - 
 -   createRun (uuid: SUUID = buildSUUID()) {
 -     this.run = new TranscriptionRun(this.logger, uuid)
 -   }
 - 
 -   startRun () {
 -     this.run.start()
 -   }
 - 
 -   stopRun () {
 -     this.run.stop()
 -     delete this.run
 -   }
 - 
 -   assertLanguageDetectionAvailable (language?: string) {
 -     if (!this.engine.languageDetection && !language) {
 -       throw new Error(`Language detection isn't available in ${this.engine.name}. A language must me provided explicitly.`)
 -     }
 -   }
 - 
 -   supports (model: TranscriptionModel) {
 -     return model.format === 'PyTorch'
 -   }
 - 
 -   protected getEngineBinary () {
 -     if (this.enginePath) return this.enginePath
 -     if (this.binDirectory) return join(this.binDirectory, this.engine.command)
 - 
 -     return this.engine.command
 -   }
 - 
 -   protected getExec (env?: { [ id: string ]: string }) {
 -     const logLevels = {
 -       command: 'debug',
 -       output: 'debug',
 -       ipc: 'debug',
 -       error: 'error',
 -       duration: 'debug'
 -     }
 - 
 -     return $({
 -       verbose: (_verboseLine, { message, ...verboseObject }) => {
 -         const level = logLevels[verboseObject.type]
 - 
 -         this.logger[level](message, verboseObject)
 -       },
 - 
 -       env
 -     })
 -   }
 - 
 -   abstract transcribe (options: TranscribeArgs): Promise<TranscriptFile>
 - 
 -   abstract install (path: string): Promise<void>
 - }
 
 
  |