import EventEmitter from 'node:events'; declare enum WhisperSamplingStrategy { WHISPER_SAMPLING_GREEDY = 0, WHISPER_SAMPLING_BEAM_SEARCH = 1 } type TranscribeFormat = "simple" | "detail"; /** * See {@link https://github.com/ggerganov/whisper.cpp/blob/00b7a4be02ca82d53ac69dd2dd438c16e2af7658/whisper.h#L433C19-L433C19} for details. */ interface TranscribeParams { strategy: WhisperSamplingStrategy; n_threads: number; n_max_text_ctx: number; offset_ms: number; duration_ms: number; translate: boolean; no_context: boolean; no_timestamps: boolean; single_segment: boolean; print_special: boolean; print_progress: boolean; print_realtime: boolean; print_timestamps: boolean; token_timestamps: TokenTimestamp; thold_pt: number; thold_ptsum: number; max_len: number; split_on_word: boolean; max_tokens: number; speed_up: boolean; debug_mode: boolean; audio_ctx: number; tdrz_enable: boolean; initial_prompt: string; /** * Language code, e.g. "en", "de", "fr", "es", "it", "nl", "pt", "ru", "tr", "uk", "pl", "sv", "cs", "zh", "ja", "ko" */ language: string; suppress_blank: boolean; suppress_non_speech_tokens: boolean; temperature: number; max_initial_ts: number; length_penalty: number; temperature_inc: number; entropy_thold: number; logprob_thold: number; no_speech_thold: number; best_of: number; beam_size: number; format: Format; } interface TranscribeSimpleResult { from: number; to: number; text: string; } /** * Represents a detailed result of transcription. */ interface TranscribeDetailedResult extends TranscribeSimpleResult { /** The detected spoken language. */ lang: string; /** The confidence level of the transcription, calculated by the average probability of the tokens. */ confidence: number; /** The tokens generated during the transcription process. */ tokens: { /** The text of the token, for CJK languages, due to the BPE encoding, the token text may not be readable. */ text: string; /** The ID of the token. */ id: number; /** The probability of the token. */ p: number; /** The start timestamp of the token, in milliseconds. Only available when `token_timestamps` of {@link TranscribeParams} is `true`. */ from: TokenTimestamp extends true ? number : undefined; /** The end timestamp of the token, in milliseconds. Only available when `token_timestamps` of {@link TranscribeParams} is `true`. */ to: TokenTimestamp extends true ? number : undefined; }[]; } type TranscribeResult = Format extends "simple" ? TranscribeSimpleResult : TranscribeDetailedResult; /** * A external handle to a model. */ type Handle = { readonly "": unique symbol; }; declare enum WhisperAligmentHeadsPreset { NONE = 0 } interface WhisperContextParams { use_gpu?: boolean; flash_attn?: boolean; gpu_device?: number; dtw_token_timestamps?: boolean; dtw_aheads_preset?: WhisperAligmentHeadsPreset; dtw_n_top?: number; dtw_mem_size?: number; offload?: number; } interface WhisperConfig$1 { /** * Whether to use GPU acceleration (if available) * @default true */ gpu?: boolean; /** * Time in seconds after which the model is freed from memory * @default 0 (disabled) */ offload?: number; /** * Advanced configuration parameters */ params?: WhisperContextParams; } declare namespace Binding { /** * Load a model from a whisper weights file. * @param file The path to the whisper weights file. * @param gpu Whether to use the GPU or not. * @param callback A callback that will be called with the handle to the model. */ function load(file: string, gpu: boolean, callback: (handle: Handle) => void): void; /** * Release the memory of the model, it will be unusable after this. * @param handle The handle to the model. * @param callback A callback that will be called when the model is freed. */ function free(handle: Handle, callback: () => void): void; /** * Transcribe a PCM buffer. * @param handle The handle to the model. * @param pcm The PCM buffer. * @param params The parameters to use for transcription. * @param finish A callback that will be called when the transcription is finished. * @param progress A callback that will be called when a new result is available. */ function transcribe(handle: Handle, pcm: Float32Array, params: Partial>, finish: (results: TranscribeResult[]) => void, progress: (result: TranscribeResult) => void): void; class WhisperModel { private _ctx; constructor(handle: Handle); get handle(): Handle | null; get freed(): boolean; /** * Release the memory of the model, it will be unusable after this. * It's safe to call this multiple times, but it will only free the model once. */ free(): Promise; /** * Load a model from a whisper weights file. * @param file The path to the whisper weights file. * @param config Configuration for the model or boolean for GPU usage */ static load(file: string, config?: WhisperConfig$1 | boolean): Promise; } } /** * The native binding for the underlying C++ addon. */ declare const binding: typeof Binding; declare class WhisperModel extends binding.WhisperModel { } declare class TranscribeTask extends EventEmitter { private _model; private _result; /** * You should not construct this class directly, use {@link TranscribeTask.run} instead. */ constructor(model: WhisperModel); get model(): WhisperModel; /** * A promise that resolves to the result of the transcription task. */ get result(): Promise[]>; private _run; static run(model: WhisperModel, pcm: Float32Array, params: Partial>): Promise>; on(event: "finish", listener: (results: TranscribeResult[]) => void): this; on(event: "transcribed", listener: (result: TranscribeResult) => void): this; once(event: "finish", listener: (results: TranscribeResult[]) => void): this; once(event: "transcribed", listener: (result: TranscribeResult) => void): this; off(event: "finish", listener: (results: TranscribeResult[]) => void): this; off(event: "transcribed", listener: (result: TranscribeResult) => void): this; } interface WhisperConfig { /** * Time in seconds to wait before offloading the model if it's not being used. */ offload: number; /** * Whether to use the GPU or not. */ gpu: boolean; /** * Advanced configuration parameters */ params?: WhisperContextParams; } /** * The Whisper class is responsible for managing the lifecycle and operations of whisper model. * It handles the loading and offloading of the model, managing transcription tasks, and configuring model parameters. */ declare class Whisper { private _file; private _available; private _loading; private _tasks; private _config; private _offload_timer; /** * Constructs a new Whisper instance with a specified model file and configuration. * @param file - The path to the Whisper model file. * @param config - Optional configuration for the Whisper instance. */ constructor(file: string, config?: Partial); get file(): string; set file(file: string); get config(): WhisperConfig; get tasks(): Promise[]; reset_offload_timer(): void; private clear_offload_timer; model(): Promise; /** * Loads the whisper model asynchronously. * If the model is already being loaded, returns the existing one. * * You don't need to call this method directly, it's called automatically if necessary when you call {@link Whisper.transcribe}. * * @returns A Promise that resolves to the loaded model. */ load(): Promise; /** * Transcribes the given PCM audio data using the Whisper model. * @param pcm - The mono 16k PCM audio data to transcribe. * @param params - Optional parameters for transcription. * @returns A promise that resolves to the result of the transcription task. */ transcribe(pcm: Float32Array, params?: Partial>): Promise>; free(): Promise; } /** * MODELS is an object that contains the URLs of different ggml whisper models. * Each model is represented by a key-value pair, where the key is the model name * and the value is the URL of the model. */ declare const MODELS: { readonly tiny: "https://huggingface.co/ggerganov/whisper.cpp/resolve/main/ggml-tiny.bin"; readonly "tiny.en": "https://huggingface.co/ggerganov/whisper.cpp/resolve/main/ggml-tiny.en.bin"; readonly small: "https://huggingface.co/ggerganov/whisper.cpp/resolve/main/ggml-small.bin"; readonly "small.en": "https://huggingface.co/ggerganov/whisper.cpp/resolve/main/ggml-small.en.bin"; readonly base: "https://huggingface.co/ggerganov/whisper.cpp/resolve/main/ggml-base.bin"; readonly "base.en": "https://huggingface.co/ggerganov/whisper.cpp/resolve/main/ggml-base.en.bin"; readonly medium: "https://huggingface.co/ggerganov/whisper.cpp/resolve/main/ggml-medium.bin"; readonly "medium.en": "https://huggingface.co/ggerganov/whisper.cpp/resolve/main/ggml-medium.en.bin"; readonly "large-v1": "https://huggingface.co/ggerganov/whisper.cpp/resolve/main/ggml-large-v1.bin"; readonly "large-v2": "https://huggingface.co/ggerganov/whisper.cpp/resolve/main/ggml-large-v2.bin"; readonly "large-v3": "https://huggingface.co/ggerganov/whisper.cpp/resolve/main/ggml-large-v3.bin"; readonly "large-v3-turbo": "https://huggingface.co/ggerganov/whisper.cpp/resolve/main/ggml-large-v3-turbo.bin"; }; type ModelName = keyof typeof MODELS | (string & {}); /** * Downloads a ggml whisper model from a specified URL or shorthand. * * @param model - The model to download, specified either as a key of the {@link MODELS} object or as a URL. * @returns A promise that resolves to the name of the downloaded model. * @throws An error if the model URL or shorthand is invalid, or if the model fails to download. */ declare function download(model: ModelName): Promise; /** * Removes a locally downloaded model. * @param model - The name of the model to remove. */ declare function remove(model: ModelName): void; /** * Retrieves a list of model names that are available locally. * @returns An array of model names. */ declare function list(): ModelName[]; /** * Checks if a model exists. * @param model - The name of the model. * @returns True if the model exists, false otherwise. */ declare function check(model: ModelName): boolean; /** * Resolves the absolute path of a model. * @param model - The name of the model. * @returns The resolved path of the model. * @throws Error if the model is not found. */ declare function resolve(model: ModelName): string; declare const dir: { root: string; models: string; }; declare const index_MODELS: typeof MODELS; type index_ModelName = ModelName; declare const index_check: typeof check; declare const index_dir: typeof dir; declare const index_download: typeof download; declare const index_list: typeof list; declare const index_remove: typeof remove; declare const index_resolve: typeof resolve; declare namespace index { export { index_MODELS as MODELS, type index_ModelName as ModelName, index_check as check, index_dir as dir, index_download as download, index_list as list, index_remove as remove, index_resolve as resolve }; } export { Binding, type Handle, type TranscribeDetailedResult, type TranscribeFormat, type TranscribeParams, type TranscribeResult, type TranscribeSimpleResult, TranscribeTask, Whisper, WhisperAligmentHeadsPreset, type WhisperConfig$1 as WhisperConfig, type WhisperContextParams, WhisperModel, WhisperSamplingStrategy, binding, index as manager };