pyannote-cpp-node 0.2.3 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -7,7 +7,7 @@ Node.js native bindings for integrated Whisper transcription + speaker diarizati
7
7
 
8
8
  ## Overview
9
9
 
10
- `pyannote-cpp-node` exposes the integrated C++ pipeline that combines streaming diarization and Whisper transcription into a single API.
10
+ `pyannote-cpp-node` exposes the integrated C++ pipeline that combines Whisper transcription and speaker diarization into a single API.
11
11
 
12
12
  Given 16 kHz mono PCM audio (`Float32Array`), it produces cumulative and final transcript segments shaped as:
13
13
 
@@ -15,14 +15,15 @@ Given 16 kHz mono PCM audio (`Float32Array`), it produces cumulative and final t
15
15
  - segment start/duration in seconds
16
16
  - segment text
17
17
 
18
- The API supports both one-shot processing (`transcribe`) and incremental streaming (`createSession` + `push`/`finalize`). All heavy operations are asynchronous and run on libuv worker threads.
18
+ The API supports three modes: **offline** batch processing (`transcribeOffline`), **one-shot** streaming (`transcribe`), and **incremental** streaming (`createSession` + `push`/`finalize`). All heavy operations are asynchronous and run on libuv worker threads.
19
19
 
20
20
  ## Features
21
21
 
22
22
  - Integrated transcription + diarization in one pipeline
23
23
  - Speaker-labeled transcript segments with sentence-level text
24
- - One-shot and streaming APIs with the same output schema
25
- - Incremental `segments` events plus separate real-time `audio` chunk streaming
24
+ - **Offline mode**: runs Whisper on the full audio at once + offline diarization (fastest for batch)
25
+ - **One-shot mode**: streaming pipeline with automatic chunking
26
+ - **Streaming mode**: incremental push/finalize with real-time `segments` events and `audio` chunk streaming
26
27
  - Deterministic output for the same audio/models/config
27
28
  - CoreML-accelerated inference on macOS
28
29
  - TypeScript-first API with complete type definitions
@@ -68,7 +69,9 @@ const pipeline = await Pipeline.load({
68
69
  });
69
70
 
70
71
  const audio = loadAudioAsFloat32Array('./audio-16khz-mono.wav');
71
- const result = await pipeline.transcribe(audio);
72
+
73
+ // Offline mode — fastest for batch processing
74
+ const result = await pipeline.transcribeOffline(audio);
72
75
 
73
76
  for (const segment of result.segments) {
74
77
  const end = segment.start + segment.duration;
@@ -87,7 +90,10 @@ pipeline.close();
87
90
  ```typescript
88
91
  class Pipeline {
89
92
  static async load(config: ModelConfig): Promise<Pipeline>;
93
+ async transcribeOffline(audio: Float32Array): Promise<TranscriptionResult>;
90
94
  async transcribe(audio: Float32Array): Promise<TranscriptionResult>;
95
+ setLanguage(language: string): void;
96
+ setDecodeOptions(options: DecodeOptions): void;
91
97
  createSession(): PipelineSession;
92
98
  close(): void;
93
99
  get isClosed(): boolean;
@@ -98,9 +104,21 @@ class Pipeline {
98
104
 
99
105
  Validates model paths and initializes native pipeline resources.
100
106
 
107
+ #### `async transcribeOffline(audio: Float32Array): Promise<TranscriptionResult>`
108
+
109
+ Runs Whisper on the **entire** audio buffer in a single `whisper_full()` call, then runs offline diarization and WhisperX-style speaker alignment. This is the fastest mode for batch processing — no streaming infrastructure is involved.
110
+
101
111
  #### `async transcribe(audio: Float32Array): Promise<TranscriptionResult>`
102
112
 
103
- Runs one-shot transcription + diarization on the full audio buffer.
113
+ Runs one-shot transcription + diarization using the streaming pipeline internally (pushes 1-second chunks then finalizes).
114
+
115
+ #### `setLanguage(language: string): void`
116
+
117
+ Updates the Whisper decode language for subsequent `transcribe()` calls. This is a convenience shorthand for `setDecodeOptions({ language })`.
118
+
119
+ #### `setDecodeOptions(options: DecodeOptions): void`
120
+
121
+ Updates one or more Whisper decode options for subsequent `transcribe()` calls. Only the fields you pass are changed; others retain their current values. See `DecodeOptions` for available fields.
104
122
 
105
123
  #### `createSession(): PipelineSession`
106
124
 
@@ -120,6 +138,8 @@ Returns `true` after `close()`.
120
138
  ```typescript
121
139
  class PipelineSession extends EventEmitter {
122
140
  async push(audio: Float32Array): Promise<boolean[]>;
141
+ setLanguage(language: string): void;
142
+ setDecodeOptions(options: DecodeOptions): void;
123
143
  async finalize(): Promise<TranscriptionResult>;
124
144
  close(): void;
125
145
  get isClosed(): boolean;
@@ -146,6 +166,14 @@ Pushes an arbitrary number of samples into the streaming pipeline.
146
166
  - First 10 seconds return an empty array because the pipeline needs a full 10-second window
147
167
  - Chunk size is flexible; not restricted to 16,000-sample pushes
148
168
 
169
+ #### `setLanguage(language: string): void`
170
+
171
+ Updates the Whisper decode language on the live streaming session. Takes effect on the next Whisper decode run. Thread-safe — the change is pushed to the C++ pipeline immediately.
172
+
173
+ #### `setDecodeOptions(options: DecodeOptions): void`
174
+
175
+ Updates one or more Whisper decode options on the live streaming session. Takes effect on the next Whisper decode run. Thread-safe — changes are pushed to the C++ pipeline immediately. Only the fields you pass are changed; others retain their current values.
176
+
149
177
  #### `async finalize(): Promise<TranscriptionResult>`
150
178
 
151
179
  Flushes all stages, runs final recluster + alignment, and returns the definitive result.
@@ -284,6 +312,41 @@ export interface ModelConfig {
284
312
  suppressNst?: boolean;
285
313
  }
286
314
 
315
+ export interface DecodeOptions {
316
+ /** Language code (e.g., 'en', 'zh'). Omit for auto-detect. */
317
+ language?: string;
318
+ /** Translate non-English speech to English */
319
+ translate?: boolean;
320
+ /** Auto-detect spoken language. Overrides 'language' when true. */
321
+ detectLanguage?: boolean;
322
+ /** Number of threads for Whisper inference */
323
+ nThreads?: number;
324
+ /** Sampling temperature. 0.0 = greedy deterministic. */
325
+ temperature?: number;
326
+ /** Temperature increment for fallback retries */
327
+ temperatureInc?: number;
328
+ /** Disable temperature fallback. If true, temperatureInc is ignored. */
329
+ noFallback?: boolean;
330
+ /** Beam search size. -1 uses greedy decoding. >1 enables beam search. */
331
+ beamSize?: number;
332
+ /** Best-of-N sampling candidates for greedy decoding */
333
+ bestOf?: number;
334
+ /** Entropy threshold for decoder fallback */
335
+ entropyThold?: number;
336
+ /** Log probability threshold for decoder fallback */
337
+ logprobThold?: number;
338
+ /** No-speech probability threshold */
339
+ noSpeechThold?: number;
340
+ /** Initial prompt text to condition the decoder */
341
+ prompt?: string;
342
+ /** Don't use previous segment as context for next segment */
343
+ noContext?: boolean;
344
+ /** Suppress blank outputs at the beginning of segments */
345
+ suppressBlank?: boolean;
346
+ /** Suppress non-speech tokens */
347
+ suppressNst?: boolean;
348
+ }
349
+
287
350
  export interface AlignedSegment {
288
351
  /** Global speaker label (e.g., SPEAKER_00). */
289
352
  speaker: string;
@@ -306,7 +369,34 @@ export interface TranscriptionResult {
306
369
 
307
370
  ## Usage Examples
308
371
 
309
- ### One-shot transcription
372
+ ### Offline transcription (recommended for batch)
373
+
374
+ ```typescript
375
+ import { Pipeline } from 'pyannote-cpp-node';
376
+
377
+ async function runOffline(audio: Float32Array) {
378
+ const pipeline = await Pipeline.load({
379
+ segModelPath: './models/segmentation.gguf',
380
+ embModelPath: './models/embedding.gguf',
381
+ pldaPath: './models/plda.gguf',
382
+ coremlPath: './models/embedding.mlpackage',
383
+ segCoremlPath: './models/segmentation.mlpackage',
384
+ whisperModelPath: './models/ggml-large-v3-turbo-q5_0.bin',
385
+ });
386
+
387
+ // Runs Whisper on full audio at once + offline diarization
388
+ const result = await pipeline.transcribeOffline(audio);
389
+
390
+ for (const seg of result.segments) {
391
+ const end = seg.start + seg.duration;
392
+ console.log(`[${seg.speaker}] ${seg.start.toFixed(2)}-${end.toFixed(2)} ${seg.text.trim()}`);
393
+ }
394
+
395
+ pipeline.close();
396
+ }
397
+ ```
398
+
399
+ ### One-shot transcription (streaming internals)
310
400
 
311
401
  ```typescript
312
402
  import { Pipeline } from 'pyannote-cpp-node';
@@ -321,6 +411,7 @@ async function runOneShot(audio: Float32Array) {
321
411
  whisperModelPath: './models/ggml-large-v3-turbo-q5_0.bin',
322
412
  });
323
413
 
414
+ // Uses streaming pipeline internally (push 1s chunks + finalize)
324
415
  const result = await pipeline.transcribe(audio);
325
416
 
326
417
  for (const seg of result.segments) {
@@ -419,6 +510,60 @@ const pipeline = await Pipeline.load({
419
510
  });
420
511
  ```
421
512
 
513
+ ### Changing language at runtime
514
+
515
+ ```typescript
516
+ import { Pipeline } from 'pyannote-cpp-node';
517
+
518
+ const pipeline = await Pipeline.load({
519
+ segModelPath: './models/segmentation.gguf',
520
+ embModelPath: './models/embedding.gguf',
521
+ pldaPath: './models/plda.gguf',
522
+ coremlPath: './models/embedding.mlpackage',
523
+ segCoremlPath: './models/segmentation.mlpackage',
524
+ whisperModelPath: './models/ggml-large-v3-turbo-q5_0.bin',
525
+ language: 'en',
526
+ });
527
+
528
+ // First transcription in English
529
+ const result1 = await pipeline.transcribe(englishAudio);
530
+
531
+ // Switch to Korean for the next transcription
532
+ pipeline.setLanguage('ko');
533
+ const result2 = await pipeline.transcribe(koreanAudio);
534
+
535
+ // Or update multiple decode options at once
536
+ pipeline.setDecodeOptions({
537
+ language: 'zh',
538
+ temperature: 0.2,
539
+ beamSize: 5,
540
+ });
541
+ const result3 = await pipeline.transcribe(chineseAudio);
542
+
543
+ pipeline.close();
544
+ ```
545
+
546
+ Streaming sessions also support runtime changes:
547
+
548
+ ```typescript
549
+ const session = pipeline.createSession();
550
+
551
+ session.on('segments', (segments) => {
552
+ console.log(segments);
553
+ });
554
+
555
+ // Push English audio
556
+ await session.push(englishChunk);
557
+
558
+ // Switch language mid-stream — takes effect on the next Whisper decode
559
+ session.setLanguage('ko');
560
+ await session.push(koreanChunk);
561
+
562
+ const result = await session.finalize();
563
+
564
+ session.close();
565
+ ```
566
+
422
567
  ## JSON Output Format
423
568
 
424
569
  The pipeline returns this JSON shape:
@@ -447,7 +592,15 @@ All API methods expect decoded PCM samples; file decoding/resampling is handled
447
592
 
448
593
  ## Architecture
449
594
 
450
- The integrated pipeline runs in 7 stages:
595
+ ### Offline mode (`transcribeOffline`)
596
+
597
+ 1. Single `whisper_full()` call on entire audio
598
+ 2. Offline diarization (segmentation → powerset → embeddings → PLDA → AHC → VBx)
599
+ 3. WhisperX-style alignment (speaker assignment by maximum segment overlap)
600
+
601
+ ### Streaming mode (`transcribe` / `createSession`)
602
+
603
+ The streaming pipeline runs in 7 stages:
451
604
 
452
605
  1. VAD silence filter (optional compression of long silence)
453
606
  2. Audio buffer (stream-safe FIFO with timestamp tracking)
@@ -459,8 +612,9 @@ The integrated pipeline runs in 7 stages:
459
612
 
460
613
  ## Performance
461
614
 
615
+ - Offline transcription + diarization: **~12x real-time** (30s audio in 2.5s)
462
616
  - Diarization only: **39x real-time**
463
- - Integrated transcription + diarization: **~14.6x real-time**
617
+ - Integrated streaming transcription + diarization: **~14.6x real-time**
464
618
  - 45-minute Korean meeting test (6 speakers): **2713s audio in 186s**
465
619
  - Each Whisper segment maps 1:1 to a speaker-labeled segment (no merging)
466
620
  - Speaker confusion rate: **2.55%**
@@ -1,10 +1,13 @@
1
1
  import { PipelineSession } from './PipelineSession.js';
2
- import type { ModelConfig, TranscriptionResult } from './types.js';
2
+ import type { ModelConfig, TranscriptionResult, DecodeOptions } from './types.js';
3
3
  export declare class Pipeline {
4
4
  private native;
5
5
  private constructor();
6
6
  static load(config: ModelConfig): Promise<Pipeline>;
7
7
  transcribe(audio: Float32Array): Promise<TranscriptionResult>;
8
+ transcribeOffline(audio: Float32Array): Promise<TranscriptionResult>;
9
+ setLanguage(language: string): void;
10
+ setDecodeOptions(options: DecodeOptions): void;
8
11
  createSession(): PipelineSession;
9
12
  close(): void;
10
13
  get isClosed(): boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"Pipeline.d.ts","sourceRoot":"","sources":["../src/Pipeline.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,KAAK,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAEnE,qBAAa,QAAQ;IACnB,OAAO,CAAC,MAAM,CAAsB;IAEpC,OAAO;WAIM,IAAI,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,QAAQ,CAAC;IAiBnD,UAAU,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAOnE,aAAa,IAAI,eAAe;IAWhC,KAAK,IAAI,IAAI;IACb,IAAI,QAAQ,IAAI,OAAO,CAAiC;CACzD"}
1
+ {"version":3,"file":"Pipeline.d.ts","sourceRoot":"","sources":["../src/Pipeline.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,KAAK,EAAE,WAAW,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAElF,qBAAa,QAAQ;IACnB,OAAO,CAAC,MAAM,CAAsB;IAEpC,OAAO;WAIM,IAAI,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,QAAQ,CAAC;IAiBnD,UAAU,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAO7D,iBAAiB,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAO1E,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAKnC,gBAAgB,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI;IAK9C,aAAa,IAAI,eAAe;IAWhC,KAAK,IAAI,IAAI;IACb,IAAI,QAAQ,IAAI,OAAO,CAAiC;CACzD"}
package/dist/Pipeline.js CHANGED
@@ -32,6 +32,25 @@ export class Pipeline {
32
32
  throw new Error('Audio must not be empty');
33
33
  return this.native.transcribe(audio);
34
34
  }
35
+ async transcribeOffline(audio) {
36
+ if (this.native.isClosed)
37
+ throw new Error('Pipeline is closed');
38
+ if (!(audio instanceof Float32Array))
39
+ throw new TypeError('Expected Float32Array');
40
+ if (audio.length === 0)
41
+ throw new Error('Audio must not be empty');
42
+ return this.native.transcribeOffline(audio);
43
+ }
44
+ setLanguage(language) {
45
+ if (this.native.isClosed)
46
+ throw new Error('Pipeline is closed');
47
+ this.native.setLanguage(language);
48
+ }
49
+ setDecodeOptions(options) {
50
+ if (this.native.isClosed)
51
+ throw new Error('Pipeline is closed');
52
+ this.native.setDecodeOptions({ ...options });
53
+ }
35
54
  createSession() {
36
55
  if (this.native.isClosed)
37
56
  throw new Error('Pipeline is closed');
@@ -1 +1 @@
1
- {"version":3,"file":"Pipeline.js","sourceRoot":"","sources":["../src/Pipeline.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,UAAU,EAA4B,MAAM,cAAc,CAAC;AACpE,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAGvD,MAAM,OAAO,QAAQ;IACX,MAAM,CAAsB;IAEpC,YAAoB,MAA2B;QAC7C,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,MAAmB;QACnC,MAAM,aAAa,GAAG;YACpB,MAAM,CAAC,YAAY;YACnB,MAAM,CAAC,YAAY;YACnB,MAAM,CAAC,QAAQ;YACf,MAAM,CAAC,UAAU;YACjB,MAAM,CAAC,aAAa;YACpB,MAAM,CAAC,gBAAgB;SACxB,CAAC;QACF,KAAK,MAAM,IAAI,IAAI,aAAa;YAAE,UAAU,CAAC,IAAI,CAAC,CAAC;QACnD,IAAI,MAAM,CAAC,YAAY;YAAE,UAAU,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;QAEzD,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;QAC7B,MAAM,MAAM,GAAG,IAAI,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;QACjD,OAAO,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC9B,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,KAAmB;QAClC,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ;YAAE,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC;QAChE,IAAI,CAAC,CAAC,KAAK,YAAY,YAAY,CAAC;YAAE,MAAM,IAAI,SAAS,CAAC,uBAAuB,CAAC,CAAC;QACnF,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;QACnE,OAAO,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;IACvC,CAAC;IAED,aAAa;QACX,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ;YAAE,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC;QAChE,MAAM,OAAO,GAAG,IAAI,eAAe,EAAE,CAAC;QACtC,MAAM,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,CAC7C,CAAC,QAAe,EAAE,EAAE,CAAC,OAAO,CAAC,mBAAmB,CAAC,QAAQ,CAAC,EAC1D,CAAC,KAAmB,EAAE,EAAE,CAAC,OAAO,CAAC,gBAAgB,CAAC,KAAK,CAAC,CACzD,CAAC;QACF,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;QAClC,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,KAAK,KAAW,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IACtC,IAAI,QAAQ,KAAc,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;CACzD"}
1
+ {"version":3,"file":"Pipeline.js","sourceRoot":"","sources":["../src/Pipeline.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import { EventEmitter } from 'node:events';
2
2
  import type { NativePipelineSession } from './binding.js';
3
- import type { AlignedSegment, TranscriptionResult } from './types.js';
3
+ import type { AlignedSegment, TranscriptionResult, DecodeOptions } from './types.js';
4
4
  export interface PipelineSessionEvents {
5
5
  segments: [segments: AlignedSegment[]];
6
6
  audio: [audio: Float32Array];
@@ -13,6 +13,8 @@ export declare class PipelineSession extends EventEmitter {
13
13
  _onSegmentsCallback(segments: any[]): void;
14
14
  _onAudioCallback(audio: Float32Array): void;
15
15
  push(audio: Float32Array): Promise<boolean[]>;
16
+ setLanguage(language: string): void;
17
+ setDecodeOptions(options: DecodeOptions): void;
16
18
  finalize(): Promise<TranscriptionResult>;
17
19
  close(): void;
18
20
  get isClosed(): boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"PipelineSession.d.ts","sourceRoot":"","sources":["../src/PipelineSession.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAC1D,OAAO,KAAK,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAEtE,MAAM,WAAW,qBAAqB;IACpC,QAAQ,EAAE,CAAC,QAAQ,EAAE,cAAc,EAAE,CAAC,CAAC;IACvC,KAAK,EAAE,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;IAC7B,KAAK,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;CACvB;AAED,qBAAa,eAAgB,SAAQ,YAAY;IAC/C,OAAO,CAAC,MAAM,CAAsC;;IAMpD,UAAU,CAAC,MAAM,EAAE,qBAAqB,GAAG,IAAI;IAI/C,mBAAmB,CAAC,QAAQ,EAAE,GAAG,EAAE,GAAG,IAAI;IAI1C,gBAAgB,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI;IAIrC,IAAI,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAW7C,QAAQ,IAAI,OAAO,CAAC,mBAAmB,CAAC;IAQ9C,KAAK,IAAI,IAAI;IAMb,IAAI,QAAQ,IAAI,OAAO,CAEtB;CACF"}
1
+ {"version":3,"file":"PipelineSession.d.ts","sourceRoot":"","sources":["../src/PipelineSession.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAC1D,OAAO,KAAK,EAAE,cAAc,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAErF,MAAM,WAAW,qBAAqB;IACpC,QAAQ,EAAE,CAAC,QAAQ,EAAE,cAAc,EAAE,CAAC,CAAC;IACvC,KAAK,EAAE,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;IAC7B,KAAK,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;CACvB;AAED,qBAAa,eAAgB,SAAQ,YAAY;IAC/C,OAAO,CAAC,MAAM,CAAsC;;IAMpD,UAAU,CAAC,MAAM,EAAE,qBAAqB,GAAG,IAAI;IAI/C,mBAAmB,CAAC,QAAQ,EAAE,GAAG,EAAE,GAAG,IAAI;IAI1C,gBAAgB,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI;IAIrC,IAAI,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAWnD,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAOnC,gBAAgB,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI;IAOxC,QAAQ,IAAI,OAAO,CAAC,mBAAmB,CAAC;IAQ9C,KAAK,IAAI,IAAI;IAMb,IAAI,QAAQ,IAAI,OAAO,CAEtB;CACF"}
@@ -22,6 +22,18 @@ export class PipelineSession extends EventEmitter {
22
22
  }
23
23
  return this.native.push(audio);
24
24
  }
25
+ setLanguage(language) {
26
+ if (!this.native || this.native.isClosed) {
27
+ throw new Error('Session is closed');
28
+ }
29
+ this.native.setLanguage(language);
30
+ }
31
+ setDecodeOptions(options) {
32
+ if (!this.native || this.native.isClosed) {
33
+ throw new Error('Session is closed');
34
+ }
35
+ this.native.setDecodeOptions({ ...options });
36
+ }
25
37
  async finalize() {
26
38
  if (!this.native || this.native.isClosed) {
27
39
  throw new Error('Session is closed');
@@ -1 +1 @@
1
- {"version":3,"file":"PipelineSession.js","sourceRoot":"","sources":["../src/PipelineSession.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAW3C,MAAM,OAAO,eAAgB,SAAQ,YAAY;IACvC,MAAM,GAAiC,IAAI,CAAC;IAEpD;QACE,KAAK,EAAE,CAAC;IACV,CAAC;IAED,UAAU,CAAC,MAA6B;QACtC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAED,mBAAmB,CAAC,QAAe;QACjC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,QAA4B,CAAC,CAAC;IACtD,CAAC;IAED,gBAAgB,CAAC,KAAmB;QAClC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IAC5B,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,KAAmB;QAC5B,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;YACzC,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;QACvC,CAAC;QACD,IAAI,CAAC,CAAC,KAAK,YAAY,YAAY,CAAC,EAAE,CAAC;YACrC,MAAM,IAAI,SAAS,CAAC,uBAAuB,CAAC,CAAC;QAC/C,CAAC;QAED,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACjC,CAAC;IAED,KAAK,CAAC,QAAQ;QACZ,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;YACzC,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;QACvC,CAAC;QAED,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;IAChC,CAAC;IAED,KAAK;QACH,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QACtB,CAAC;IACH,CAAC;IAED,IAAI,QAAQ;QACV,OAAO,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC;IAC9C,CAAC;CACF"}
1
+ {"version":3,"file":"PipelineSession.js","sourceRoot":"","sources":["../src/PipelineSession.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAW3C,MAAM,OAAO,eAAgB,SAAQ,YAAY;IACvC,MAAM,GAAiC,IAAI,CAAC;IAEpD;QACE,KAAK,EAAE,CAAC;IACV,CAAC;IAED,UAAU,CAAC,MAA6B;QACtC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAED,mBAAmB,CAAC,QAAe;QACjC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,QAA4B,CAAC,CAAC;IACtD,CAAC;IAED,gBAAgB,CAAC,KAAmB;QAClC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IAC5B,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,KAAmB;QAC5B,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;YACzC,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;QACvC,CAAC;QACD,IAAI,CAAC,CAAC,KAAK,YAAY,YAAY,CAAC,EAAE,CAAC;YACrC,MAAM,IAAI,SAAS,CAAC,uBAAuB,CAAC,CAAC;QAC/C,CAAC;QAED,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACjC,CAAC;IAED,WAAW,CAAC,QAAgB;QAC1B,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;YACzC,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;QACvC,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;IACpC,CAAC;IAED,gBAAgB,CAAC,OAAsB;QACrC,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;YACzC,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;QACvC,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC;IAC/C,CAAC;IAED,KAAK,CAAC,QAAQ;QACZ,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;YACzC,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;QACvC,CAAC;QAED,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;IAChC,CAAC;IAED,KAAK;QACH,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QACtB,CAAC;IACH,CAAC;IAED,IAAI,QAAQ;QACV,OAAO,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC;IAC9C,CAAC;CACF"}
package/dist/binding.d.ts CHANGED
@@ -1,12 +1,17 @@
1
1
  import type { ModelConfig, TranscriptionResult } from './types.js';
2
2
  export interface NativePipelineModel {
3
3
  transcribe(audio: Float32Array): Promise<TranscriptionResult>;
4
+ transcribeOffline(audio: Float32Array): Promise<TranscriptionResult>;
5
+ setLanguage(language: string): void;
6
+ setDecodeOptions(options: Record<string, unknown>): void;
4
7
  createSession(segmentsCb: (segments: any[]) => void, audioCb: (audio: Float32Array) => void): NativePipelineSession;
5
8
  close(): void;
6
9
  isClosed: boolean;
7
10
  }
8
11
  export interface NativePipelineSession {
9
12
  push(audio: Float32Array): Promise<boolean[]>;
13
+ setLanguage(language: string): void;
14
+ setDecodeOptions(options: Record<string, unknown>): void;
10
15
  finalize(): Promise<TranscriptionResult>;
11
16
  close(): void;
12
17
  isClosed: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"binding.d.ts","sourceRoot":"","sources":["../src/binding.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAInE,MAAM,WAAW,mBAAmB;IAClC,UAAU,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAC;IAC9D,aAAa,CACX,UAAU,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE,KAAK,IAAI,EACrC,OAAO,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,GACrC,qBAAqB,CAAC;IACzB,KAAK,IAAI,IAAI,CAAC;IACd,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,qBAAqB;IACpC,IAAI,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;IAC9C,QAAQ,IAAI,OAAO,CAAC,mBAAmB,CAAC,CAAC;IACzC,KAAK,IAAI,IAAI,CAAC;IACd,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,aAAa;IAC5B,aAAa,EAAE,KAAK,MAAM,EAAE,WAAW,KAAK,mBAAmB,CAAC;IAChE,eAAe,EAAE,KAAK,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,qBAAqB,CAAC;CACpE;AAoCD,wBAAgB,UAAU,IAAI,aAAa,CAyB1C"}
1
+ {"version":3,"file":"binding.d.ts","sourceRoot":"","sources":["../src/binding.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAInE,MAAM,WAAW,mBAAmB;IAClC,UAAU,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAC;IAC9D,iBAAiB,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAC;IACrE,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,gBAAgB,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IACzD,aAAa,CACX,UAAU,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE,KAAK,IAAI,EACrC,OAAO,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,GACrC,qBAAqB,CAAC;IACzB,KAAK,IAAI,IAAI,CAAC;IACd,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,qBAAqB;IACpC,IAAI,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;IAC9C,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,gBAAgB,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IACzD,QAAQ,IAAI,OAAO,CAAC,mBAAmB,CAAC,CAAC;IACzC,KAAK,IAAI,IAAI,CAAC;IACd,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,aAAa;IAC5B,aAAa,EAAE,KAAK,MAAM,EAAE,WAAW,KAAK,mBAAmB,CAAC;IAChE,eAAe,EAAE,KAAK,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,qBAAqB,CAAC;CACpE;AAoCD,wBAAgB,UAAU,IAAI,aAAa,CAyB1C"}
@@ -1 +1 @@
1
- {"version":3,"file":"binding.js","sourceRoot":"","sources":["../src/binding.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AAIvC,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAwB/C,IAAI,aAAa,GAAyB,IAAI,CAAC;AAE/C,SAAS,cAAc;IACrB,IAAI,OAAO,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAClC,MAAM,IAAI,KAAK,CACb,yBAAyB,OAAO,CAAC,QAAQ,oDAAoD,CAC9F,CAAC;IACJ,CAAC;IAED,IAAI,OAAO,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;QAC7B,OAAO,iCAAiC,CAAC;IAC3C,CAAC;IAED,IAAI,OAAO,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;QAC3B,OAAO,+BAA+B,CAAC;IACzC,CAAC;IAED,MAAM,IAAI,KAAK,CACb,sCAAsC,OAAO,CAAC,IAAI,8CAA8C,CACjG,CAAC;AACJ,CAAC;AAED,SAAS,eAAe,CAAC,KAAc;IACrC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QAChD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,SAAS,GAAG,KAAgC,CAAC;IACnD,OAAO,CACL,OAAO,SAAS,CAAC,aAAa,KAAK,UAAU;QAC7C,OAAO,SAAS,CAAC,eAAe,KAAK,UAAU,CAChD,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,UAAU;IACxB,IAAI,aAAa,KAAK,IAAI,EAAE,CAAC;QAC3B,OAAO,aAAa,CAAC;IACvB,CAAC;IAED,MAAM,WAAW,GAAG,cAAc,EAAE,CAAC;IAErC,IAAI,MAAe,CAAC;IACpB,IAAI,CAAC;QACH,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IAChC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACvE,MAAM,IAAI,KAAK,CACb,iCAAiC,WAAW,gEAAgE,OAAO,EAAE,CACtH,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,EAAE,CAAC;QAC7B,MAAM,IAAI,KAAK,CACb,sCAAsC,WAAW,6DAA6D,CAC/G,CAAC;IACJ,CAAC;IAED,aAAa,GAAG,MAAM,CAAC;IACvB,OAAO,aAAa,CAAC;AACvB,CAAC"}
1
+ {"version":3,"file":"binding.js","sourceRoot":"","sources":["../src/binding.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AAIvC,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AA6B/C,IAAI,aAAa,GAAyB,IAAI,CAAC;AAE/C,SAAS,cAAc;IACrB,IAAI,OAAO,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAClC,MAAM,IAAI,KAAK,CACb,yBAAyB,OAAO,CAAC,QAAQ,oDAAoD,CAC9F,CAAC;IACJ,CAAC;IAED,IAAI,OAAO,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;QAC7B,OAAO,iCAAiC,CAAC;IAC3C,CAAC;IAED,IAAI,OAAO,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;QAC3B,OAAO,+BAA+B,CAAC;IACzC,CAAC;IAED,MAAM,IAAI,KAAK,CACb,sCAAsC,OAAO,CAAC,IAAI,8CAA8C,CACjG,CAAC;AACJ,CAAC;AAED,SAAS,eAAe,CAAC,KAAc;IACrC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QAChD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,SAAS,GAAG,KAAgC,CAAC;IACnD,OAAO,CACL,OAAO,SAAS,CAAC,aAAa,KAAK,UAAU;QAC7C,OAAO,SAAS,CAAC,eAAe,KAAK,UAAU,CAChD,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,UAAU;IACxB,IAAI,aAAa,KAAK,IAAI,EAAE,CAAC;QAC3B,OAAO,aAAa,CAAC;IACvB,CAAC;IAED,MAAM,WAAW,GAAG,cAAc,EAAE,CAAC;IAErC,IAAI,MAAe,CAAC;IACpB,IAAI,CAAC;QACH,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IAChC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACvE,MAAM,IAAI,KAAK,CACb,iCAAiC,WAAW,gEAAgE,OAAO,EAAE,CACtH,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,EAAE,CAAC;QAC7B,MAAM,IAAI,KAAK,CACb,sCAAsC,WAAW,6DAA6D,CAC/G,CAAC;IACJ,CAAC;IAED,aAAa,GAAG,MAAM,CAAC;IACvB,OAAO,aAAa,CAAC;AACvB,CAAC"}
package/dist/index.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  export { Pipeline } from './Pipeline.js';
2
2
  export { PipelineSession } from './PipelineSession.js';
3
- export type { AlignedSegment, ModelConfig, TranscriptionResult, } from './types.js';
3
+ export type { AlignedSegment, DecodeOptions, ModelConfig, TranscriptionResult, } from './types.js';
4
4
  export type { NativePipelineModel, NativePipelineSession, NativeBinding, } from './binding.js';
5
5
  export { getBinding } from './binding.js';
6
6
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,YAAY,EACV,cAAc,EACd,WAAW,EACX,mBAAmB,GACpB,MAAM,YAAY,CAAC;AACpB,YAAY,EACV,mBAAmB,EACnB,qBAAqB,EACrB,aAAa,GACd,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,YAAY,EACV,cAAc,EACd,aAAa,EACb,WAAW,EACX,mBAAmB,GACpB,MAAM,YAAY,CAAC;AACpB,YAAY,EACV,mBAAmB,EACnB,qBAAqB,EACrB,aAAa,GACd,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC"}
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAWvD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAYvD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC"}
package/dist/types.d.ts CHANGED
@@ -60,6 +60,40 @@ export interface ModelConfig {
60
60
  /** Suppress non-speech tokens (default: false) */
61
61
  suppressNst?: boolean;
62
62
  }
63
+ export interface DecodeOptions {
64
+ /** Language code (e.g., 'en', 'zh'). Omit for auto-detect. */
65
+ language?: string;
66
+ /** Translate non-English speech to English */
67
+ translate?: boolean;
68
+ /** Auto-detect spoken language. Overrides 'language' when true. */
69
+ detectLanguage?: boolean;
70
+ /** Number of threads for Whisper inference */
71
+ nThreads?: number;
72
+ /** Sampling temperature. 0.0 = greedy deterministic. */
73
+ temperature?: number;
74
+ /** Temperature increment for fallback retries */
75
+ temperatureInc?: number;
76
+ /** Disable temperature fallback. If true, temperatureInc is ignored. */
77
+ noFallback?: boolean;
78
+ /** Beam search size. -1 uses greedy decoding. >1 enables beam search. */
79
+ beamSize?: number;
80
+ /** Best-of-N sampling candidates for greedy decoding */
81
+ bestOf?: number;
82
+ /** Entropy threshold for decoder fallback */
83
+ entropyThold?: number;
84
+ /** Log probability threshold for decoder fallback */
85
+ logprobThold?: number;
86
+ /** No-speech probability threshold */
87
+ noSpeechThold?: number;
88
+ /** Initial prompt text to condition the decoder */
89
+ prompt?: string;
90
+ /** Don't use previous segment as context for next segment */
91
+ noContext?: boolean;
92
+ /** Suppress blank outputs at the beginning of segments */
93
+ suppressBlank?: boolean;
94
+ /** Suppress non-speech tokens */
95
+ suppressNst?: boolean;
96
+ }
63
97
  export interface AlignedSegment {
64
98
  speaker: string;
65
99
  start: number;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,WAAW;IAE1B,sCAAsC;IACtC,YAAY,EAAE,MAAM,CAAC;IACrB,mCAAmC;IACnC,YAAY,EAAE,MAAM,CAAC;IACrB,8BAA8B;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,oDAAoD;IACpD,UAAU,EAAE,MAAM,CAAC;IACnB,uDAAuD;IACvD,aAAa,EAAE,MAAM,CAAC;IACtB,iCAAiC;IACjC,gBAAgB,EAAE,MAAM,CAAC;IAGzB,uEAAuE;IACvE,YAAY,CAAC,EAAE,MAAM,CAAC;IAGtB,8CAA8C;IAC9C,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,6CAA6C;IAC7C,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,oCAAoC;IACpC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;OAIG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,uDAAuD;IACvD,QAAQ,CAAC,EAAE,OAAO,CAAC;IAGnB,2DAA2D;IAC3D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,8EAA8E;IAC9E,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,+DAA+D;IAC/D,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,oFAAoF;IACpF,cAAc,CAAC,EAAE,OAAO,CAAC;IAGzB,uEAAuE;IACvE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gEAAgE;IAChE,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,yFAAyF;IACzF,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,uFAAuF;IACvF,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,qEAAqE;IACrE,MAAM,CAAC,EAAE,MAAM,CAAC;IAGhB,4DAA4D;IAC5D,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,qEAAqE;IACrE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,qDAAqD;IACrD,aAAa,CAAC,EAAE,MAAM,CAAC;IAGvB,mEAAmE;IACnE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,6EAA6E;IAC7E,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,0EAA0E;IAC1E,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,kDAAkD;IAClD,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,cAAc,EAAE,CAAC;CAC5B"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,WAAW;IAE1B,sCAAsC;IACtC,YAAY,EAAE,MAAM,CAAC;IACrB,mCAAmC;IACnC,YAAY,EAAE,MAAM,CAAC;IACrB,8BAA8B;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,oDAAoD;IACpD,UAAU,EAAE,MAAM,CAAC;IACnB,uDAAuD;IACvD,aAAa,EAAE,MAAM,CAAC;IACtB,iCAAiC;IACjC,gBAAgB,EAAE,MAAM,CAAC;IAGzB,uEAAuE;IACvE,YAAY,CAAC,EAAE,MAAM,CAAC;IAGtB,8CAA8C;IAC9C,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,6CAA6C;IAC7C,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,oCAAoC;IACpC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;OAIG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,uDAAuD;IACvD,QAAQ,CAAC,EAAE,OAAO,CAAC;IAGnB,2DAA2D;IAC3D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,8EAA8E;IAC9E,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,+DAA+D;IAC/D,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,oFAAoF;IACpF,cAAc,CAAC,EAAE,OAAO,CAAC;IAGzB,uEAAuE;IACvE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gEAAgE;IAChE,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,yFAAyF;IACzF,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,uFAAuF;IACvF,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,qEAAqE;IACrE,MAAM,CAAC,EAAE,MAAM,CAAC;IAGhB,4DAA4D;IAC5D,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,qEAAqE;IACrE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,qDAAqD;IACrD,aAAa,CAAC,EAAE,MAAM,CAAC;IAGvB,mEAAmE;IACnE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,6EAA6E;IAC7E,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,0EAA0E;IAC1E,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,kDAAkD;IAClD,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,aAAa;IAC5B,8DAA8D;IAC9D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,8CAA8C;IAC9C,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,mEAAmE;IACnE,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,8CAA8C;IAC9C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,wDAAwD;IACxD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,iDAAiD;IACjD,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,wEAAwE;IACxE,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,yEAAyE;IACzE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,wDAAwD;IACxD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,6CAA6C;IAC7C,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,qDAAqD;IACrD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,sCAAsC;IACtC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,mDAAmD;IACnD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,6DAA6D;IAC7D,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,0DAA0D;IAC1D,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,iCAAiC;IACjC,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,cAAc,EAAE,CAAC;CAC5B"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pyannote-cpp-node",
3
- "version": "0.2.3",
3
+ "version": "0.4.0",
4
4
  "type": "module",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",
@@ -17,8 +17,8 @@
17
17
  "access": "public"
18
18
  },
19
19
  "optionalDependencies": {
20
- "@pyannote-cpp-node/darwin-arm64": "0.2.3",
21
- "@pyannote-cpp-node/darwin-x64": "0.2.3"
20
+ "@pyannote-cpp-node/darwin-arm64": "0.4.0",
21
+ "@pyannote-cpp-node/darwin-x64": "0.4.0"
22
22
  },
23
23
  "devDependencies": {
24
24
  "typescript": "^5.7.0"