import { type PhonemeSpan } from "./ctc.js";
export interface ASRNodeOptions {
    modelPath?: string;
    vocabPath?: string;
    sampleRate?: number;
    blankToken?: string;
    unkToken?: string;
    wordBoundaryToken?: string;
    temperature?: number;
    blankBias?: number;
    unkBias?: number;
    collapseRepeats?: boolean;
}
export interface ASRResult {
    phonemes: string[];
    phonemeText: string;
    wordPhonemeText: string;
    tokenIds: number[];
    frameTokenIds: number[];
    numFrames: number;
}
export interface CTCDecodeOptions {
    blankId: number;
    wordBoundaryToken: string;
    collapseRepeats?: boolean;
}
export declare const decodeCtcTokens: (frameTokenIds: readonly number[], decoderTokens: readonly string[], options: CTCDecodeOptions) => {
    tokenIds: number[];
    phonemes: string[];
    words: string[][];
};
export declare class ASRNodeModel {
    private readonly engine;
    private readonly handle;
    private readonly decoderTokens;
    private readonly blankId;
    private readonly unkId;
    private readonly wordBoundaryToken;
    private readonly temperature;
    private readonly blankBias;
    private readonly unkBias;
    private readonly collapseRepeats;
    private readonly sampleRate;
    private constructor();
    static create(options?: ASRNodeOptions): Promise<ASRNodeModel>;
    get inputFormat(): "waveform";
    transcribeWavFile(wavPath: string): Promise<ASRResult>;
    transcribeWaveform(waveform: readonly number[] | Float32Array, sampleRate: number): Promise<ASRResult>;
    /** Approximate per-phoneme time spans (ms) from an ASRResult. */
    phonemeSpans(result: ASRResult): PhonemeSpan[];
    private argmaxFrames;
}
