@livekit/agents 0.3.5 → 0.4.1

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.
Files changed (188) hide show
  1. package/.turbo/turbo-build.log +1 -1
  2. package/CHANGELOG.md +36 -0
  3. package/dist/audio.js +17 -30
  4. package/dist/audio.js.map +1 -1
  5. package/dist/cli.js +3 -14
  6. package/dist/cli.js.map +1 -1
  7. package/dist/http_server.d.ts +1 -1
  8. package/dist/http_server.js +5 -9
  9. package/dist/http_server.js.map +1 -1
  10. package/dist/index.d.ts +3 -2
  11. package/dist/index.d.ts.map +1 -1
  12. package/dist/index.js +14 -2
  13. package/dist/index.js.map +1 -1
  14. package/dist/ipc/job_executor.js +3 -5
  15. package/dist/ipc/job_executor.js.map +1 -1
  16. package/dist/ipc/job_main.d.ts +1 -1
  17. package/dist/ipc/proc_job_executor.js +66 -80
  18. package/dist/ipc/proc_job_executor.js.map +1 -1
  19. package/dist/ipc/proc_pool.d.ts +3 -3
  20. package/dist/ipc/proc_pool.d.ts.map +1 -1
  21. package/dist/ipc/proc_pool.js +38 -20
  22. package/dist/ipc/proc_pool.js.map +1 -1
  23. package/dist/job.js +56 -73
  24. package/dist/job.js.map +1 -1
  25. package/dist/llm/chat_context.d.ts +66 -0
  26. package/dist/llm/chat_context.d.ts.map +1 -0
  27. package/dist/llm/chat_context.js +93 -0
  28. package/dist/llm/chat_context.js.map +1 -0
  29. package/dist/llm/function_context.d.ts +19 -1
  30. package/dist/llm/function_context.d.ts.map +1 -1
  31. package/dist/llm/function_context.js +54 -18
  32. package/dist/llm/function_context.js.map +1 -1
  33. package/dist/llm/function_context.test.d.ts +2 -0
  34. package/dist/llm/function_context.test.d.ts.map +1 -0
  35. package/dist/llm/function_context.test.js +218 -0
  36. package/dist/llm/function_context.test.js.map +1 -0
  37. package/dist/llm/index.d.ts +3 -2
  38. package/dist/llm/index.d.ts.map +1 -1
  39. package/dist/llm/index.js +3 -2
  40. package/dist/llm/index.js.map +1 -1
  41. package/dist/llm/llm.d.ts +53 -0
  42. package/dist/llm/llm.d.ts.map +1 -0
  43. package/dist/llm/llm.js +45 -0
  44. package/dist/llm/llm.js.map +1 -0
  45. package/dist/multimodal/agent_playout.d.ts +1 -1
  46. package/dist/multimodal/agent_playout.js +116 -153
  47. package/dist/multimodal/agent_playout.js.map +1 -1
  48. package/dist/multimodal/multimodal_agent.d.ts +4 -3
  49. package/dist/multimodal/multimodal_agent.d.ts.map +1 -1
  50. package/dist/multimodal/multimodal_agent.js +207 -234
  51. package/dist/multimodal/multimodal_agent.js.map +1 -1
  52. package/dist/pipeline/agent_output.d.ts +30 -0
  53. package/dist/pipeline/agent_output.d.ts.map +1 -0
  54. package/dist/pipeline/agent_output.js +155 -0
  55. package/dist/pipeline/agent_output.js.map +1 -0
  56. package/dist/pipeline/agent_playout.d.ts +38 -0
  57. package/dist/pipeline/agent_playout.d.ts.map +1 -0
  58. package/dist/pipeline/agent_playout.js +142 -0
  59. package/dist/pipeline/agent_playout.js.map +1 -0
  60. package/dist/pipeline/human_input.d.ts +28 -0
  61. package/dist/pipeline/human_input.d.ts.map +1 -0
  62. package/dist/pipeline/human_input.js +134 -0
  63. package/dist/pipeline/human_input.js.map +1 -0
  64. package/dist/pipeline/index.d.ts +2 -0
  65. package/dist/pipeline/index.d.ts.map +1 -0
  66. package/dist/pipeline/index.js +5 -0
  67. package/dist/pipeline/index.js.map +1 -0
  68. package/dist/pipeline/pipeline_agent.d.ts +134 -0
  69. package/dist/pipeline/pipeline_agent.d.ts.map +1 -0
  70. package/dist/pipeline/pipeline_agent.js +661 -0
  71. package/dist/pipeline/pipeline_agent.js.map +1 -0
  72. package/dist/pipeline/speech_handle.d.ts +27 -0
  73. package/dist/pipeline/speech_handle.d.ts.map +1 -0
  74. package/dist/pipeline/speech_handle.js +102 -0
  75. package/dist/pipeline/speech_handle.js.map +1 -0
  76. package/dist/plugin.js +7 -20
  77. package/dist/plugin.js.map +1 -1
  78. package/dist/stt/index.d.ts +1 -2
  79. package/dist/stt/index.d.ts.map +1 -1
  80. package/dist/stt/index.js +1 -2
  81. package/dist/stt/index.js.map +1 -1
  82. package/dist/stt/stt.d.ts +62 -24
  83. package/dist/stt/stt.d.ts.map +1 -1
  84. package/dist/stt/stt.js +77 -27
  85. package/dist/stt/stt.js.map +1 -1
  86. package/dist/tokenize/basic/basic.d.ts +16 -0
  87. package/dist/tokenize/basic/basic.d.ts.map +1 -0
  88. package/dist/tokenize/basic/basic.js +50 -0
  89. package/dist/tokenize/basic/basic.js.map +1 -0
  90. package/dist/tokenize/basic/hyphenator.d.ts +17 -0
  91. package/dist/tokenize/basic/hyphenator.d.ts.map +1 -0
  92. package/dist/tokenize/basic/hyphenator.js +420 -0
  93. package/dist/tokenize/basic/hyphenator.js.map +1 -0
  94. package/dist/tokenize/basic/index.d.ts +2 -0
  95. package/dist/tokenize/basic/index.d.ts.map +1 -0
  96. package/dist/tokenize/basic/index.js +5 -0
  97. package/dist/tokenize/basic/index.js.map +1 -0
  98. package/dist/tokenize/basic/paragraph.d.ts +5 -0
  99. package/dist/tokenize/basic/paragraph.d.ts.map +1 -0
  100. package/dist/tokenize/basic/paragraph.js +38 -0
  101. package/dist/tokenize/basic/paragraph.js.map +1 -0
  102. package/dist/tokenize/basic/sentence.d.ts +5 -0
  103. package/dist/tokenize/basic/sentence.d.ts.map +1 -0
  104. package/dist/tokenize/basic/sentence.js +60 -0
  105. package/dist/tokenize/basic/sentence.js.map +1 -0
  106. package/dist/tokenize/basic/word.d.ts +5 -0
  107. package/dist/tokenize/basic/word.d.ts.map +1 -0
  108. package/dist/tokenize/basic/word.js +23 -0
  109. package/dist/tokenize/basic/word.js.map +1 -0
  110. package/dist/tokenize/index.d.ts +5 -0
  111. package/dist/tokenize/index.d.ts.map +1 -0
  112. package/dist/tokenize/index.js +8 -0
  113. package/dist/tokenize/index.js.map +1 -0
  114. package/dist/tokenize/token_stream.d.ts +36 -0
  115. package/dist/tokenize/token_stream.d.ts.map +1 -0
  116. package/dist/tokenize/token_stream.js +136 -0
  117. package/dist/tokenize/token_stream.js.map +1 -0
  118. package/dist/tokenize/tokenizer.d.ts +55 -0
  119. package/dist/tokenize/tokenizer.d.ts.map +1 -0
  120. package/dist/tokenize/tokenizer.js +117 -0
  121. package/dist/tokenize/tokenizer.js.map +1 -0
  122. package/dist/transcription.js +78 -89
  123. package/dist/transcription.js.map +1 -1
  124. package/dist/tts/index.d.ts +1 -3
  125. package/dist/tts/index.d.ts.map +1 -1
  126. package/dist/tts/index.js +1 -3
  127. package/dist/tts/index.js.map +1 -1
  128. package/dist/tts/tts.d.ts +66 -37
  129. package/dist/tts/tts.d.ts.map +1 -1
  130. package/dist/tts/tts.js +79 -74
  131. package/dist/tts/tts.js.map +1 -1
  132. package/dist/utils.d.ts +21 -6
  133. package/dist/utils.d.ts.map +1 -1
  134. package/dist/utils.js +120 -76
  135. package/dist/utils.js.map +1 -1
  136. package/dist/vad.d.ts +43 -39
  137. package/dist/vad.d.ts.map +1 -1
  138. package/dist/vad.js +51 -4
  139. package/dist/vad.js.map +1 -1
  140. package/dist/worker.d.ts +1 -1
  141. package/dist/worker.js +257 -247
  142. package/dist/worker.js.map +1 -1
  143. package/package.json +4 -3
  144. package/src/index.ts +16 -2
  145. package/src/ipc/proc_pool.ts +25 -13
  146. package/src/llm/chat_context.ts +147 -0
  147. package/src/llm/function_context.test.ts +248 -0
  148. package/src/llm/function_context.ts +77 -18
  149. package/src/llm/index.ts +21 -2
  150. package/src/llm/llm.ts +102 -0
  151. package/src/multimodal/multimodal_agent.ts +6 -2
  152. package/src/pipeline/agent_output.ts +185 -0
  153. package/src/pipeline/agent_playout.ts +187 -0
  154. package/src/pipeline/human_input.ts +166 -0
  155. package/src/pipeline/index.ts +15 -0
  156. package/src/pipeline/pipeline_agent.ts +917 -0
  157. package/src/pipeline/speech_handle.ts +136 -0
  158. package/src/stt/index.ts +8 -2
  159. package/src/stt/stt.ts +98 -31
  160. package/src/tokenize/basic/basic.ts +73 -0
  161. package/src/tokenize/basic/hyphenator.ts +436 -0
  162. package/src/tokenize/basic/index.ts +5 -0
  163. package/src/tokenize/basic/paragraph.ts +43 -0
  164. package/src/tokenize/basic/sentence.ts +69 -0
  165. package/src/tokenize/basic/word.ts +27 -0
  166. package/src/tokenize/index.ts +16 -0
  167. package/src/tokenize/token_stream.ts +163 -0
  168. package/src/tokenize/tokenizer.ts +152 -0
  169. package/src/tts/index.ts +1 -20
  170. package/src/tts/tts.ts +110 -57
  171. package/src/utils.ts +95 -25
  172. package/src/vad.ts +86 -45
  173. package/tsconfig.tsbuildinfo +1 -1
  174. package/dist/stt/stream_adapter.d.ts +0 -19
  175. package/dist/stt/stream_adapter.d.ts.map +0 -1
  176. package/dist/stt/stream_adapter.js +0 -96
  177. package/dist/stt/stream_adapter.js.map +0 -1
  178. package/dist/tokenize.d.ts +0 -15
  179. package/dist/tokenize.d.ts.map +0 -1
  180. package/dist/tokenize.js +0 -12
  181. package/dist/tokenize.js.map +0 -1
  182. package/dist/tts/stream_adapter.d.ts +0 -19
  183. package/dist/tts/stream_adapter.d.ts.map +0 -1
  184. package/dist/tts/stream_adapter.js +0 -111
  185. package/dist/tts/stream_adapter.js.map +0 -1
  186. package/src/stt/stream_adapter.ts +0 -104
  187. package/src/tokenize.ts +0 -22
  188. package/src/tts/stream_adapter.ts +0 -93
package/dist/tts/index.js CHANGED
@@ -1,7 +1,5 @@
1
1
  // SPDX-FileCopyrightText: 2024 LiveKit, Inc.
2
2
  //
3
3
  // SPDX-License-Identifier: Apache-2.0
4
- import { StreamAdapter, StreamAdapterWrapper } from './stream_adapter.js';
5
- import { ChunkedStream, SynthesisEvent, SynthesisEventType, SynthesizeStream, TTS, } from './tts.js';
6
- export { TTS, SynthesisEvent, SynthesisEventType, SynthesizeStream, StreamAdapter, StreamAdapterWrapper, ChunkedStream, };
4
+ export { TTS, SynthesizeStream } from './tts.js';
7
5
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tts/index.ts"],"names":[],"mappings":"AAAA,6CAA6C;AAC7C,EAAE;AACF,sCAAsC;AACtC,OAAO,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC1E,OAAO,EACL,aAAa,EACb,cAAc,EACd,kBAAkB,EAClB,gBAAgB,EAEhB,GAAG,GACJ,MAAM,UAAU,CAAC;AAElB,OAAO,EACL,GAAG,EACH,cAAc,EACd,kBAAkB,EAElB,gBAAgB,EAChB,aAAa,EACb,oBAAoB,EACpB,aAAa,GACd,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tts/index.ts"],"names":[],"mappings":"AAAA,6CAA6C;AAC7C,EAAE;AACF,sCAAsC;AACtC,OAAO,EAA+C,GAAG,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC"}
package/dist/tts/tts.d.ts CHANGED
@@ -1,47 +1,76 @@
1
1
  import type { AudioFrame } from '@livekit/rtc-node';
2
+ import { AsyncIterableQueue } from '../utils.js';
3
+ /** SynthesizedAudio is a packet of speech synthesis as returned by the TTS. */
2
4
  export interface SynthesizedAudio {
3
- text: string;
4
- data: AudioFrame;
5
+ /** Request ID (one segment could be made up of multiple requests) */
6
+ requestId: string;
7
+ /** Segment ID, each segment is separated by a flush */
8
+ segmentId: string;
9
+ /** Synthesized audio frame */
10
+ frame: AudioFrame;
11
+ /** Current segment of the synthesized audio */
12
+ deltaText?: string;
5
13
  }
6
- export declare enum SynthesisEventType {
7
- /**
8
- * Indicate the start of synthesis.
9
- * Retriggered after FINISHED.
10
- */
11
- STARTED = 0,
12
- /**
13
- * Indicate that audio data is available.
14
- */
15
- AUDIO = 1,
16
- /**
17
- * Indicate the end of synthesis. Does not necessarily mean stream is done.
18
- */
19
- FINISHED = 2
20
- }
21
- export declare class SynthesisEvent {
22
- type: SynthesisEventType;
23
- audio?: SynthesizedAudio;
24
- constructor(type: SynthesisEventType, audio?: SynthesizedAudio | undefined);
25
- }
26
- export declare abstract class SynthesizeStream implements IterableIterator<SynthesisEvent> {
27
- abstract pushText(token?: string): void;
28
- markSegmentEnd(): void;
29
- abstract close(wait: boolean): Promise<void>;
30
- abstract next(): IteratorResult<SynthesisEvent>;
31
- [Symbol.iterator](): SynthesizeStream;
14
+ /**
15
+ * Describes the capabilities of the TTS provider.
16
+ *
17
+ * @remarks
18
+ * At present, only `streaming` is supplied to this interface, and the framework only supports
19
+ * providers that do have a streaming endpoint.
20
+ */
21
+ export interface TTSCapabilities {
22
+ streaming: boolean;
32
23
  }
24
+ /**
25
+ * An instance of a text-to-speech adapter.
26
+ *
27
+ * @remarks
28
+ * This class is abstract, and as such cannot be used directly. Instead, use a provider plugin that
29
+ * exports its own child TTS class, which inherits this class's methods.
30
+ */
33
31
  export declare abstract class TTS {
34
32
  #private;
35
- constructor(streamingSupported: boolean);
36
- abstract synthesize(text: string): Promise<ChunkedStream>;
33
+ constructor(sampleRate: number, numChannels: number, capabilities: TTSCapabilities);
34
+ /** Returns this TTS's capabilities */
35
+ get capabilities(): TTSCapabilities;
36
+ /** Returns the sample rate of audio frames returned by this TTS */
37
+ get sampleRate(): number;
38
+ /** Returns the channel count of audio frames returned by this TTS */
39
+ get numChannels(): number;
40
+ /**
41
+ * Returns a {@link SynthesizeStream} that can be used to push text and receive audio data
42
+ */
37
43
  abstract stream(): SynthesizeStream;
38
- get streamingSupported(): boolean;
39
44
  }
40
- export declare abstract class ChunkedStream implements AsyncIterableIterator<SynthesizedAudio> {
41
- collect(): Promise<AudioFrame>;
42
- abstract close(): Promise<void>;
43
- abstract next(): Promise<IteratorResult<SynthesizedAudio>>;
44
- [Symbol.iterator](): ChunkedStream;
45
- [Symbol.asyncIterator](): ChunkedStream;
45
+ /**
46
+ * An instance of a text-to-speech stream, as an asynchronous iterable iterator.
47
+ *
48
+ * @example Looping through frames
49
+ * ```ts
50
+ * for await (const event of stream) {
51
+ * await source.captureFrame(event.frame);
52
+ * }
53
+ * ```
54
+ *
55
+ * @remarks
56
+ * This class is abstract, and as such cannot be used directly. Instead, use a provider plugin that
57
+ * exports its own child SynthesizeStream class, which inherits this class's methods.
58
+ */
59
+ export declare abstract class SynthesizeStream implements AsyncIterableIterator<SynthesizedAudio | typeof SynthesizeStream.END_OF_STREAM> {
60
+ protected static readonly FLUSH_SENTINEL: unique symbol;
61
+ static readonly END_OF_STREAM: unique symbol;
62
+ protected input: AsyncIterableQueue<string | typeof SynthesizeStream.FLUSH_SENTINEL>;
63
+ protected queue: AsyncIterableQueue<SynthesizedAudio | typeof SynthesizeStream.END_OF_STREAM>;
64
+ protected closed: boolean;
65
+ /** Push a string of text to the TTS */
66
+ pushText(text: string): void;
67
+ /** Flush the TTS, causing it to process all pending text */
68
+ flush(): void;
69
+ /** Mark the input as ended and forbid additional pushes */
70
+ endInput(): void;
71
+ next(): Promise<IteratorResult<SynthesizedAudio | typeof SynthesizeStream.END_OF_STREAM>>;
72
+ /** Close both the input and output of the TTS stream */
73
+ close(): void;
74
+ [Symbol.asyncIterator](): SynthesizeStream;
46
75
  }
47
76
  //# sourceMappingURL=tts.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"tts.d.ts","sourceRoot":"","sources":["../../src/tts/tts.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAGpD,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,UAAU,CAAC;CAClB;AAED,oBAAY,kBAAkB;IAC5B;;;OAGG;IACH,OAAO,IAAI;IACX;;OAEG;IACH,KAAK,IAAI;IACT;;OAEG;IACH,QAAQ,IAAI;CACb;AAED,qBAAa,cAAc;IACzB,IAAI,EAAE,kBAAkB,CAAC;IACzB,KAAK,CAAC,EAAE,gBAAgB,CAAC;gBAEb,IAAI,EAAE,kBAAkB,EAAE,KAAK,GAAE,gBAAgB,GAAG,SAAqB;CAItF;AAED,8BAAsB,gBAAiB,YAAW,gBAAgB,CAAC,cAAc,CAAC;IAChF,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI;IAEvC,cAAc;IAId,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAC5C,QAAQ,CAAC,IAAI,IAAI,cAAc,CAAC,cAAc,CAAC;IAE/C,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,gBAAgB;CAGtC;AAED,8BAAsB,GAAG;;gBAGX,kBAAkB,EAAE,OAAO;IAIvC,QAAQ,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IAEzD,QAAQ,CAAC,MAAM,IAAI,gBAAgB;IAEnC,IAAI,kBAAkB,IAAI,OAAO,CAEhC;CACF;AAED,8BAAsB,aAAc,YAAW,qBAAqB,CAAC,gBAAgB,CAAC;IAC9E,OAAO,IAAI,OAAO,CAAC,UAAU,CAAC;IAQpC,QAAQ,CAAC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAC/B,QAAQ,CAAC,IAAI,IAAI,OAAO,CAAC,cAAc,CAAC,gBAAgB,CAAC,CAAC;IAE1D,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,aAAa;IAIlC,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,aAAa;CAGxC"}
1
+ {"version":3,"file":"tts.d.ts","sourceRoot":"","sources":["../../src/tts/tts.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAEjD,+EAA+E;AAC/E,MAAM,WAAW,gBAAgB;IAC/B,qEAAqE;IACrE,SAAS,EAAE,MAAM,CAAC;IAClB,uDAAuD;IACvD,SAAS,EAAE,MAAM,CAAC;IAClB,8BAA8B;IAC9B,KAAK,EAAE,UAAU,CAAC;IAClB,+CAA+C;IAC/C,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;GAMG;AACH,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,OAAO,CAAC;CACpB;AAED;;;;;;GAMG;AACH,8BAAsB,GAAG;;gBAKX,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,eAAe;IAMlF,sCAAsC;IACtC,IAAI,YAAY,IAAI,eAAe,CAElC;IAED,mEAAmE;IACnE,IAAI,UAAU,IAAI,MAAM,CAEvB;IAED,qEAAqE;IACrE,IAAI,WAAW,IAAI,MAAM,CAExB;IAED;;OAEG;IACH,QAAQ,CAAC,MAAM,IAAI,gBAAgB;CACpC;AAED;;;;;;;;;;;;;GAaG;AACH,8BAAsB,gBACpB,YAAW,qBAAqB,CAAC,gBAAgB,GAAG,OAAO,gBAAgB,CAAC,aAAa,CAAC;IAE1F,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,gBAA4B;IACpE,MAAM,CAAC,QAAQ,CAAC,aAAa,gBAA2B;IACxD,SAAS,CAAC,KAAK,sEAA6E;IAC5F,SAAS,CAAC,KAAK,+EAEX;IACJ,SAAS,CAAC,MAAM,UAAS;IAEzB,uCAAuC;IACvC,QAAQ,CAAC,IAAI,EAAE,MAAM;IAUrB,4DAA4D;IAC5D,KAAK;IAUL,2DAA2D;IAC3D,QAAQ;IAUR,IAAI,IAAI,OAAO,CAAC,cAAc,CAAC,gBAAgB,GAAG,OAAO,gBAAgB,CAAC,aAAa,CAAC,CAAC;IAIzF,wDAAwD;IACxD,KAAK;IAML,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,gBAAgB;CAG3C"}
package/dist/tts/tts.js CHANGED
@@ -1,86 +1,91 @@
1
- var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
2
- if (kind === "m") throw new TypeError("Private method is not writable");
3
- if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
4
- if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
5
- return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
6
- };
7
- var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
8
- if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
9
- if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
10
- return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
11
- };
12
- var __asyncValues = (this && this.__asyncValues) || function (o) {
13
- if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
14
- var m = o[Symbol.asyncIterator], i;
15
- return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i);
16
- function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }
17
- function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }
18
- };
19
- var _TTS_streamingSupported;
20
- import { mergeFrames } from '../utils.js';
21
- export var SynthesisEventType;
22
- (function (SynthesisEventType) {
23
- /**
24
- * Indicate the start of synthesis.
25
- * Retriggered after FINISHED.
26
- */
27
- SynthesisEventType[SynthesisEventType["STARTED"] = 0] = "STARTED";
28
- /**
29
- * Indicate that audio data is available.
30
- */
31
- SynthesisEventType[SynthesisEventType["AUDIO"] = 1] = "AUDIO";
32
- /**
33
- * Indicate the end of synthesis. Does not necessarily mean stream is done.
34
- */
35
- SynthesisEventType[SynthesisEventType["FINISHED"] = 2] = "FINISHED";
36
- })(SynthesisEventType || (SynthesisEventType = {}));
37
- export class SynthesisEvent {
38
- constructor(type, audio = undefined) {
39
- this.type = type;
40
- this.audio = audio;
1
+ import { AsyncIterableQueue } from '../utils.js';
2
+ /**
3
+ * An instance of a text-to-speech adapter.
4
+ *
5
+ * @remarks
6
+ * This class is abstract, and as such cannot be used directly. Instead, use a provider plugin that
7
+ * exports its own child TTS class, which inherits this class's methods.
8
+ */
9
+ export class TTS {
10
+ #capabilities;
11
+ #sampleRate;
12
+ #numChannels;
13
+ constructor(sampleRate, numChannels, capabilities) {
14
+ this.#capabilities = capabilities;
15
+ this.#sampleRate = sampleRate;
16
+ this.#numChannels = numChannels;
41
17
  }
42
- }
43
- export class SynthesizeStream {
44
- markSegmentEnd() {
45
- this.pushText(undefined);
18
+ /** Returns this TTS's capabilities */
19
+ get capabilities() {
20
+ return this.#capabilities;
46
21
  }
47
- [Symbol.iterator]() {
48
- return this;
22
+ /** Returns the sample rate of audio frames returned by this TTS */
23
+ get sampleRate() {
24
+ return this.#sampleRate;
25
+ }
26
+ /** Returns the channel count of audio frames returned by this TTS */
27
+ get numChannels() {
28
+ return this.#numChannels;
49
29
  }
50
30
  }
51
- export class TTS {
52
- constructor(streamingSupported) {
53
- _TTS_streamingSupported.set(this, void 0);
54
- __classPrivateFieldSet(this, _TTS_streamingSupported, streamingSupported, "f");
31
+ /**
32
+ * An instance of a text-to-speech stream, as an asynchronous iterable iterator.
33
+ *
34
+ * @example Looping through frames
35
+ * ```ts
36
+ * for await (const event of stream) {
37
+ * await source.captureFrame(event.frame);
38
+ * }
39
+ * ```
40
+ *
41
+ * @remarks
42
+ * This class is abstract, and as such cannot be used directly. Instead, use a provider plugin that
43
+ * exports its own child SynthesizeStream class, which inherits this class's methods.
44
+ */
45
+ export class SynthesizeStream {
46
+ static FLUSH_SENTINEL = Symbol('FLUSH_SENTINEL');
47
+ static END_OF_STREAM = Symbol('END_OF_STREAM');
48
+ input = new AsyncIterableQueue();
49
+ queue = new AsyncIterableQueue();
50
+ closed = false;
51
+ /** Push a string of text to the TTS */
52
+ pushText(text) {
53
+ if (this.input.closed) {
54
+ throw new Error('Input is closed');
55
+ }
56
+ if (this.closed) {
57
+ throw new Error('Stream is closed');
58
+ }
59
+ this.input.put(text);
55
60
  }
56
- get streamingSupported() {
57
- return __classPrivateFieldGet(this, _TTS_streamingSupported, "f");
61
+ /** Flush the TTS, causing it to process all pending text */
62
+ flush() {
63
+ if (this.input.closed) {
64
+ throw new Error('Input is closed');
65
+ }
66
+ if (this.closed) {
67
+ throw new Error('Stream is closed');
68
+ }
69
+ this.input.put(SynthesizeStream.FLUSH_SENTINEL);
58
70
  }
59
- }
60
- _TTS_streamingSupported = new WeakMap();
61
- export class ChunkedStream {
62
- async collect() {
63
- var _a, e_1, _b, _c;
64
- const frames = [];
65
- try {
66
- for (var _d = true, _e = __asyncValues(this), _f; _f = await _e.next(), _a = _f.done, !_a; _d = true) {
67
- _c = _f.value;
68
- _d = false;
69
- const ev = _c;
70
- frames.push(ev.data);
71
- }
71
+ /** Mark the input as ended and forbid additional pushes */
72
+ endInput() {
73
+ if (this.input.closed) {
74
+ throw new Error('Input is closed');
72
75
  }
73
- catch (e_1_1) { e_1 = { error: e_1_1 }; }
74
- finally {
75
- try {
76
- if (!_d && !_a && (_b = _e.return)) await _b.call(_e);
77
- }
78
- finally { if (e_1) throw e_1.error; }
76
+ if (this.closed) {
77
+ throw new Error('Stream is closed');
79
78
  }
80
- return mergeFrames(frames);
79
+ this.input.close();
81
80
  }
82
- [Symbol.iterator]() {
83
- return this;
81
+ next() {
82
+ return this.queue.next();
83
+ }
84
+ /** Close both the input and output of the TTS stream */
85
+ close() {
86
+ this.input.close();
87
+ this.queue.close();
88
+ this.closed = true;
84
89
  }
85
90
  [Symbol.asyncIterator]() {
86
91
  return this;
@@ -1 +1 @@
1
- {"version":3,"file":"tts.js","sourceRoot":"","sources":["../../src/tts/tts.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;AAIA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAO1C,MAAM,CAAN,IAAY,kBAcX;AAdD,WAAY,kBAAkB;IAC5B;;;OAGG;IACH,iEAAW,CAAA;IACX;;OAEG;IACH,6DAAS,CAAA;IACT;;OAEG;IACH,mEAAY,CAAA;AACd,CAAC,EAdW,kBAAkB,KAAlB,kBAAkB,QAc7B;AAED,MAAM,OAAO,cAAc;IAIzB,YAAY,IAAwB,EAAE,QAAsC,SAAS;QACnF,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;CACF;AAED,MAAM,OAAgB,gBAAgB;IAGpC,cAAc;QACZ,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;IAC3B,CAAC;IAKD,CAAC,MAAM,CAAC,QAAQ,CAAC;QACf,OAAO,IAAI,CAAC;IACd,CAAC;CACF;AAED,MAAM,OAAgB,GAAG;IAGvB,YAAY,kBAA2B;QAFvC,0CAA6B;QAG3B,uBAAA,IAAI,2BAAuB,kBAAkB,MAAA,CAAC;IAChD,CAAC;IAMD,IAAI,kBAAkB;QACpB,OAAO,uBAAA,IAAI,+BAAoB,CAAC;IAClC,CAAC;CACF;;AAED,MAAM,OAAgB,aAAa;IACjC,KAAK,CAAC,OAAO;;QACX,MAAM,MAAM,GAAG,EAAE,CAAC;;YAClB,KAAuB,eAAA,KAAA,cAAA,IAAI,CAAA,IAAA,sDAAE,CAAC;gBAAP,cAAI;gBAAJ,WAAI;gBAAhB,MAAM,EAAE,KAAA,CAAA;gBACjB,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;YACvB,CAAC;;;;;;;;;QACD,OAAO,WAAW,CAAC,MAAM,CAAC,CAAC;IAC7B,CAAC;IAKD,CAAC,MAAM,CAAC,QAAQ,CAAC;QACf,OAAO,IAAI,CAAC;IACd,CAAC;IAED,CAAC,MAAM,CAAC,aAAa,CAAC;QACpB,OAAO,IAAI,CAAC;IACd,CAAC;CACF"}
1
+ {"version":3,"file":"tts.js","sourceRoot":"","sources":["../../src/tts/tts.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAyBjD;;;;;;GAMG;AACH,MAAM,OAAgB,GAAG;IACvB,aAAa,CAAkB;IAC/B,WAAW,CAAS;IACpB,YAAY,CAAS;IAErB,YAAY,UAAkB,EAAE,WAAmB,EAAE,YAA6B;QAChF,IAAI,CAAC,aAAa,GAAG,YAAY,CAAC;QAClC,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC;QAC9B,IAAI,CAAC,YAAY,GAAG,WAAW,CAAC;IAClC,CAAC;IAED,sCAAsC;IACtC,IAAI,YAAY;QACd,OAAO,IAAI,CAAC,aAAa,CAAC;IAC5B,CAAC;IAED,mEAAmE;IACnE,IAAI,UAAU;QACZ,OAAO,IAAI,CAAC,WAAW,CAAC;IAC1B,CAAC;IAED,qEAAqE;IACrE,IAAI,WAAW;QACb,OAAO,IAAI,CAAC,YAAY,CAAC;IAC3B,CAAC;CAMF;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,OAAgB,gBAAgB;IAG1B,MAAM,CAAU,cAAc,GAAG,MAAM,CAAC,gBAAgB,CAAC,CAAC;IACpE,MAAM,CAAU,aAAa,GAAG,MAAM,CAAC,eAAe,CAAC,CAAC;IAC9C,KAAK,GAAG,IAAI,kBAAkB,EAAmD,CAAC;IAClF,KAAK,GAAG,IAAI,kBAAkB,EAErC,CAAC;IACM,MAAM,GAAG,KAAK,CAAC;IAEzB,uCAAuC;IACvC,QAAQ,CAAC,IAAY;QACnB,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;YACtB,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;QACrC,CAAC;QACD,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC;QACtC,CAAC;QACD,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACvB,CAAC;IAED,4DAA4D;IAC5D,KAAK;QACH,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;YACtB,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;QACrC,CAAC;QACD,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC;QACtC,CAAC;QACD,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,gBAAgB,CAAC,cAAc,CAAC,CAAC;IAClD,CAAC;IAED,2DAA2D;IAC3D,QAAQ;QACN,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;YACtB,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;QACrC,CAAC;QACD,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC;QACtC,CAAC;QACD,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;IACrB,CAAC;IAED,IAAI;QACF,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;IAC3B,CAAC;IAED,wDAAwD;IACxD,KAAK;QACH,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QACnB,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QACnB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;IACrB,CAAC;IAED,CAAC,MAAM,CAAC,aAAa,CAAC;QACpB,OAAO,IAAI,CAAC;IACd,CAAC"}
package/dist/utils.d.ts CHANGED
@@ -45,13 +45,28 @@ export declare class CancellablePromise<T> {
45
45
  /** @internal */
46
46
  export declare function gracefullyCancel<T>(promise: CancellablePromise<T>): Promise<void>;
47
47
  /** @internal */
48
- export declare class AsyncIterableQueue<T> implements AsyncIterable<T> {
49
- private queue;
50
- private closed;
51
- private static readonly QUEUE_END_MARKER;
52
- constructor();
48
+ export declare class AsyncIterableQueue<T> implements AsyncIterableIterator<T> {
49
+ #private;
50
+ private static readonly CLOSE_SENTINEL;
51
+ get closed(): boolean;
53
52
  put(item: T): void;
54
53
  close(): void;
55
- [Symbol.asyncIterator](): AsyncIterator<T>;
54
+ next(): Promise<IteratorResult<T>>;
55
+ [Symbol.asyncIterator](): AsyncIterableQueue<T>;
56
+ }
57
+ /** @internal */
58
+ export declare class ExpFilter {
59
+ #private;
60
+ constructor(alpha: number, max?: number);
61
+ reset(alpha?: number): void;
62
+ apply(exp: number, sample: number): number;
63
+ get filtered(): number | undefined;
64
+ set alpha(alpha: number);
65
+ }
66
+ /** @internal */
67
+ export declare class AudioEnergyFilter {
68
+ #private;
69
+ constructor(cooldownSeconds?: number);
70
+ pushFrame(frame: AudioFrame): boolean;
56
71
  }
57
72
  //# sourceMappingURL=utils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAGV,IAAI,EAEL,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,UAAU,EAAe,MAAM,mBAAmB,CAAC;AAG5D,0DAA0D;AAC1D,MAAM,MAAM,WAAW,GAAG,UAAU,EAAE,GAAG,UAAU,CAAC;AAEpD;;;;;;;GAOG;AACH,eAAO,MAAM,WAAW,WAAY,WAAW,KAAG,UA6BjD,CAAC;AAEF,eAAO,MAAM,gBAAgB,SAAU,IAAI,YAAY,MAAM,KAAG,MAyB/D,CAAC;AAEF,gBAAgB;AAChB,qBAAa,KAAK,CAAC,CAAC;;IAClB,gBAAgB;IAChB,KAAK,EAAE,CAAC,EAAE,CAAM;gBAIJ,KAAK,CAAC,EAAE,MAAM;IAIpB,GAAG,IAAI,OAAO,CAAC,CAAC,CAAC;IASjB,GAAG,CAAC,IAAI,EAAE,CAAC;CAOlB;AAED,gBAAgB;AAChB,qBAAa,MAAM;;;IAajB,IAAI,KAAK,kBAER;IAED,IAAI,IAAI,YAEP;IAED,OAAO;IAKP,MAAM,CAAC,KAAK,EAAE,KAAK;CAIpB;AAED,gBAAgB;AAChB,qBAAa,kBAAkB,CAAC,CAAC;;gBAO7B,QAAQ,EAAE,CACR,OAAO,EAAE,CAAC,KAAK,EAAE,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,KAAK,IAAI,EAC5C,MAAM,EAAE,CAAC,MAAM,CAAC,EAAE,GAAG,KAAK,IAAI,EAC9B,QAAQ,EAAE,CAAC,QAAQ,EAAE,MAAM,IAAI,KAAK,IAAI,KACrC,IAAI;IAuBX,IAAI,WAAW,IAAI,OAAO,CAEzB;IAED,IAAI,KAAK,IAAI,KAAK,GAAG,IAAI,CAExB;IAED,IAAI,CAAC,QAAQ,GAAG,CAAC,EAAE,QAAQ,GAAG,KAAK,EACjC,WAAW,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,KAAK,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,GAAG,IAAI,EACjE,UAAU,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,GAAG,KAAK,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,GAAG,IAAI,GAClE,OAAO,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAI/B,KAAK,CAAC,OAAO,GAAG,KAAK,EACnB,UAAU,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,GAAG,KAAK,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,IAAI,GAChE,OAAO,CAAC,CAAC,GAAG,OAAO,CAAC;IAIvB,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC,MAAM,IAAI,CAAC,GAAG,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC;IAIpD,MAAM,IAAI,IAAI;IAId,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,kBAAkB,CAAC,CAAC,CAAC;CAK3D;AAED,gBAAgB;AAChB,wBAAsB,gBAAgB,CAAC,CAAC,EAAE,OAAO,EAAE,kBAAkB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CASvF;AAED,gBAAgB;AAChB,qBAAa,kBAAkB,CAAC,CAAC,CAAE,YAAW,aAAa,CAAC,CAAC,CAAC;IAC5D,OAAO,CAAC,KAAK,CAAwD;IACrE,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,gBAAgB,CAA8B;;IAMtE,GAAG,CAAC,IAAI,EAAE,CAAC,GAAG,IAAI;IAOlB,KAAK,IAAI,IAAI;IAKb,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,aAAa,CAAC,CAAC,CAAC;CAc3C"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"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"}