hama-js
Version:
G2P, phoneme-ASR, and P2G inference for Node, Bun, and browsers, powered by a self-contained WASM engine (no onnxruntime).
49 lines (48 loc) • 1.75 kB
TypeScript
export declare const ENC_FEAT = 192;
export declare const ENC_HID = 96;
export declare const DEC_HID = 96;
export declare const ASR_VOCAB = 191;
export interface EncoderOut {
encoderOutputs: Float32Array;
projectedKeys: Float32Array;
hidden: Float32Array;
mask: Uint8Array;
prevAttn: Float32Array;
T: number;
}
export interface DecoderOut {
nextToken: number;
attnArgmax: number;
hiddenOut: Float32Array;
prevOut: Float32Array;
}
export declare class HamaEngine {
private ex;
private constructor();
static fromBytes(wasm: Uint8Array): Promise<HamaEngine>;
private writeBytes;
private writeF32;
private writeI64;
private readF32;
private readU8;
private readI64;
private loadModel;
loadEncoder(bytes: Uint8Array): number;
loadDecoder(bytes: Uint8Array): number;
loadAsr(bytes: Uint8Array): number;
loadP2g(bytes: Uint8Array): number;
/** Greedy decode: prefixIds = [bos, src, phones..., tgt]; returns generated token ids. */
p2gGreedy(h: number, prefixIds: BigInt64Array, maxNew: number, eos: number, pad: number): number[];
/** Greedy decode + per-token source-phoneme alignment index (-1 if unaligned). */
p2gGreedyAlign(h: number, prefixIds: BigInt64Array, maxNew: number, eos: number, pad: number): {
ids: number[];
align: number[];
};
encoderRun(h: number, ids: BigInt64Array, length: number): EncoderOut;
decoderStep(h: number, token: number, eo: Float32Array, pk: Float32Array, mask: Uint8Array, prev: Float32Array, hidden: Float32Array, positions: Float32Array): DecoderOut;
asrRun(h: number, wav: Float32Array): {
logProbs: Float32Array;
T: number;
outLength: number;
};
}