@livekit/agents 0.3.5 → 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.
Files changed (188) hide show
  1. package/.turbo/turbo-build.log +1 -1
  2. package/CHANGELOG.md +30 -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 +16 -11
  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 +4 -4
  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
@@ -0,0 +1,5 @@
1
+ import * as basic from './basic/index.js';
2
+ export { type TokenData, SentenceTokenizer, SentenceStream, WordTokenizer, WordStream, } from './tokenizer.js';
3
+ export { BufferedSentenceStream, BufferedTokenStream, BufferedWordStream } from './token_stream.js';
4
+ export { basic };
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tokenize/index.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,MAAM,kBAAkB,CAAC;AAE1C,OAAO,EACL,KAAK,SAAS,EACd,iBAAiB,EACjB,cAAc,EACd,aAAa,EACb,UAAU,GACX,MAAM,gBAAgB,CAAC;AAExB,OAAO,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAEpG,OAAO,EAAE,KAAK,EAAE,CAAC"}
@@ -0,0 +1,8 @@
1
+ // SPDX-FileCopyrightText: 2024 LiveKit, Inc.
2
+ //
3
+ // SPDX-License-Identifier: Apache-2.0
4
+ import * as basic from './basic/index.js';
5
+ export { SentenceTokenizer, SentenceStream, WordTokenizer, WordStream, } from './tokenizer.js';
6
+ export { BufferedSentenceStream, BufferedTokenStream, BufferedWordStream } from './token_stream.js';
7
+ export { basic };
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tokenize/index.ts"],"names":[],"mappings":"AAAA,6CAA6C;AAC7C,EAAE;AACF,sCAAsC;AACtC,OAAO,KAAK,KAAK,MAAM,kBAAkB,CAAC;AAE1C,OAAO,EAEL,iBAAiB,EACjB,cAAc,EACd,aAAa,EACb,UAAU,GACX,MAAM,gBAAgB,CAAC;AAExB,OAAO,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAEpG,OAAO,EAAE,KAAK,EAAE,CAAC"}
@@ -0,0 +1,36 @@
1
+ import { AsyncIterableQueue } from '../utils.js';
2
+ import type { TokenData } from './tokenizer.js';
3
+ import { SentenceStream, WordStream } from './tokenizer.js';
4
+ type TokenizeFunc = (x: string) => string[] | [string, number, number][];
5
+ export declare class BufferedTokenStream implements AsyncIterableIterator<TokenData> {
6
+ #private;
7
+ protected queue: AsyncIterableQueue<TokenData>;
8
+ protected closed: boolean;
9
+ constructor(func: TokenizeFunc, minTokenLength: number, minContextLength: number);
10
+ /** Push a string of text into the token stream */
11
+ pushText(text: string): void;
12
+ /** Flush the stream, causing it to process all pending text */
13
+ flush(): void;
14
+ /** Mark the input as ended and forbid additional pushes */
15
+ endInput(): void;
16
+ next(): Promise<IteratorResult<TokenData>>;
17
+ /** Close both the input and output of the token stream */
18
+ close(): void;
19
+ [Symbol.asyncIterator](): BufferedTokenStream;
20
+ }
21
+ export declare class BufferedSentenceStream extends SentenceStream {
22
+ #private;
23
+ constructor(func: TokenizeFunc, minTokenLength: number, minContextLength: number);
24
+ pushText(text: string): void;
25
+ close(): void;
26
+ next(): Promise<IteratorResult<TokenData>>;
27
+ }
28
+ export declare class BufferedWordStream extends WordStream {
29
+ #private;
30
+ constructor(func: TokenizeFunc, minTokenLength: number, minContextLength: number);
31
+ pushText(text: string): void;
32
+ close(): void;
33
+ next(): Promise<IteratorResult<TokenData>>;
34
+ }
35
+ export {};
36
+ //# sourceMappingURL=token_stream.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"token_stream.d.ts","sourceRoot":"","sources":["../../src/tokenize/token_stream.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAE5D,KAAK,YAAY,GAAG,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC;AAEzE,qBAAa,mBAAoB,YAAW,qBAAqB,CAAC,SAAS,CAAC;;IAC1E,SAAS,CAAC,KAAK,gCAAuC;IACtD,SAAS,CAAC,MAAM,UAAS;gBAUb,IAAI,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM;IAQhF,kDAAkD;IAClD,QAAQ,CAAC,IAAI,EAAE,MAAM;IAoCrB,+DAA+D;IAC/D,KAAK;IA4BL,2DAA2D;IAC3D,QAAQ;IAQR,IAAI,IAAI,OAAO,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;IAI1C,0DAA0D;IAC1D,KAAK;IAKL,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,mBAAmB;CAG9C;AAED,qBAAa,sBAAuB,SAAQ,cAAc;;gBAG5C,IAAI,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM;IAKhF,QAAQ,CAAC,IAAI,EAAE,MAAM;IAIrB,KAAK;IAKL,IAAI,IAAI,OAAO,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;CAG3C;AAED,qBAAa,kBAAmB,SAAQ,UAAU;;gBAGpC,IAAI,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM;IAKhF,QAAQ,CAAC,IAAI,EAAE,MAAM;IAIrB,KAAK;IAKL,IAAI,IAAI,OAAO,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;CAG3C"}
@@ -0,0 +1,136 @@
1
+ // SPDX-FileCopyrightText: 2024 LiveKit, Inc.
2
+ //
3
+ // SPDX-License-Identifier: Apache-2.0
4
+ import { randomUUID } from 'node:crypto';
5
+ import { AsyncIterableQueue } from '../utils.js';
6
+ import { SentenceStream, WordStream } from './tokenizer.js';
7
+ export class BufferedTokenStream {
8
+ queue = new AsyncIterableQueue();
9
+ closed = false;
10
+ #func;
11
+ #minTokenLength;
12
+ #minContextLength;
13
+ #bufTokens = [];
14
+ #inBuf = '';
15
+ #outBuf = '';
16
+ #currentSegmentId;
17
+ constructor(func, minTokenLength, minContextLength) {
18
+ this.#func = func;
19
+ this.#minTokenLength = minTokenLength;
20
+ this.#minContextLength = minContextLength;
21
+ this.#currentSegmentId = randomUUID();
22
+ }
23
+ /** Push a string of text into the token stream */
24
+ pushText(text) {
25
+ if (this.closed) {
26
+ throw new Error('Stream is closed');
27
+ }
28
+ this.#inBuf += text;
29
+ if (this.#inBuf.length < this.#minContextLength)
30
+ return;
31
+ while (true) {
32
+ const tokens = this.#func(this.#inBuf);
33
+ if (tokens.length === 0)
34
+ break;
35
+ if (this.#outBuf)
36
+ this.#outBuf += ' ';
37
+ const tok = tokens.shift();
38
+ let tokText = tok;
39
+ if (tok.length > 1 && typeof tok[1] === 'number') {
40
+ tokText = tok[0];
41
+ }
42
+ this.#outBuf += tokText;
43
+ if (this.#outBuf.length >= this.#minTokenLength) {
44
+ this.queue.put({ token: this.#outBuf, segmentId: this.#currentSegmentId });
45
+ this.#outBuf = '';
46
+ }
47
+ if (typeof tok !== 'string') {
48
+ this.#inBuf = this.#inBuf.slice(tok[2]);
49
+ }
50
+ else {
51
+ this.#inBuf = this.#inBuf
52
+ .slice(Math.max(0, this.#inBuf.indexOf(tok)) + tok.length)
53
+ .trimStart();
54
+ }
55
+ }
56
+ }
57
+ /** Flush the stream, causing it to process all pending text */
58
+ flush() {
59
+ if (this.closed) {
60
+ throw new Error('Stream is closed');
61
+ }
62
+ if (this.#inBuf || this.#outBuf) {
63
+ const tokens = this.#func(this.#inBuf);
64
+ if (tokens) {
65
+ if (this.#outBuf)
66
+ this.#outBuf += ' ';
67
+ if (typeof tokens[0] !== 'string') {
68
+ this.#outBuf += tokens.map((tok) => tok[0]).join(' ');
69
+ }
70
+ else {
71
+ this.#outBuf += tokens.join(' ');
72
+ }
73
+ }
74
+ if (this.#outBuf) {
75
+ this.queue.put({ token: this.#outBuf, segmentId: this.#currentSegmentId });
76
+ }
77
+ this.#currentSegmentId = randomUUID();
78
+ }
79
+ this.#inBuf = '';
80
+ this.#outBuf = '';
81
+ }
82
+ /** Mark the input as ended and forbid additional pushes */
83
+ endInput() {
84
+ if (this.closed) {
85
+ throw new Error('Stream is closed');
86
+ }
87
+ this.flush();
88
+ this.closed = true;
89
+ }
90
+ next() {
91
+ return this.queue.next();
92
+ }
93
+ /** Close both the input and output of the token stream */
94
+ close() {
95
+ this.queue.close();
96
+ this.closed = true;
97
+ }
98
+ [Symbol.asyncIterator]() {
99
+ return this;
100
+ }
101
+ }
102
+ export class BufferedSentenceStream extends SentenceStream {
103
+ #stream;
104
+ constructor(func, minTokenLength, minContextLength) {
105
+ super();
106
+ this.#stream = new BufferedTokenStream(func, minTokenLength, minContextLength);
107
+ }
108
+ pushText(text) {
109
+ this.#stream.pushText(text);
110
+ }
111
+ close() {
112
+ super.close();
113
+ this.#stream.close();
114
+ }
115
+ next() {
116
+ return this.#stream.next();
117
+ }
118
+ }
119
+ export class BufferedWordStream extends WordStream {
120
+ #stream;
121
+ constructor(func, minTokenLength, minContextLength) {
122
+ super();
123
+ this.#stream = new BufferedTokenStream(func, minTokenLength, minContextLength);
124
+ }
125
+ pushText(text) {
126
+ this.#stream.pushText(text);
127
+ }
128
+ close() {
129
+ super.close();
130
+ this.#stream.close();
131
+ }
132
+ next() {
133
+ return this.#stream.next();
134
+ }
135
+ }
136
+ //# sourceMappingURL=token_stream.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"token_stream.js","sourceRoot":"","sources":["../../src/tokenize/token_stream.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,55 @@
1
+ import { AsyncIterableQueue } from '../utils.js';
2
+ export declare const PUNCTUATIONS: string[];
3
+ export interface TokenData {
4
+ segmentId: string;
5
+ token: string;
6
+ }
7
+ export declare abstract class SentenceTokenizer {
8
+ abstract tokenize(text: string, language?: string): string[];
9
+ /**
10
+ * Returns a {@link SentenceStream} that can be used to push strings and receive smaller segments.
11
+ */
12
+ abstract stream(): SentenceStream;
13
+ }
14
+ export declare abstract class SentenceStream {
15
+ #private;
16
+ protected static readonly FLUSH_SENTINEL: unique symbol;
17
+ protected input: AsyncIterableQueue<string | typeof SentenceStream.FLUSH_SENTINEL>;
18
+ protected queue: AsyncIterableQueue<TokenData>;
19
+ get closed(): boolean;
20
+ /** Push a string of text to the tokenizer */
21
+ pushText(text: string): void;
22
+ /** Flush the tokenizer, causing it to process all pending text */
23
+ flush(): void;
24
+ /** Mark the input as ended and forbid additional pushes */
25
+ endInput(): void;
26
+ next(): Promise<IteratorResult<TokenData>>;
27
+ /** Close both the input and output of the tokenizer stream */
28
+ close(): void;
29
+ [Symbol.asyncIterator](): SentenceStream;
30
+ }
31
+ export declare abstract class WordTokenizer {
32
+ abstract tokenize(text: string, language?: string): string[];
33
+ /**
34
+ * Returns a {@link WordStream} that can be used to push words and receive smaller segments.
35
+ */
36
+ abstract stream(): WordStream;
37
+ }
38
+ export declare abstract class WordStream {
39
+ #private;
40
+ protected static readonly FLUSH_SENTINEL: unique symbol;
41
+ protected input: AsyncIterableQueue<string | typeof WordStream.FLUSH_SENTINEL>;
42
+ protected queue: AsyncIterableQueue<TokenData>;
43
+ get closed(): boolean;
44
+ /** Push a string of text to the tokenizer */
45
+ pushText(text: string): void;
46
+ /** Flush the tokenizer, causing it to process all pending text */
47
+ flush(): void;
48
+ /** Mark the input as ended and forbid additional pushes */
49
+ endInput(): void;
50
+ next(): Promise<IteratorResult<TokenData>>;
51
+ /** Close both the input and output of the tokenizer stream */
52
+ close(): void;
53
+ [Symbol.asyncIterator](): WordStream;
54
+ }
55
+ //# sourceMappingURL=tokenizer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tokenizer.d.ts","sourceRoot":"","sources":["../../src/tokenize/tokenizer.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAGjD,eAAO,MAAM,YAAY,UAIxB,CAAA;AAED,MAAM,WAAW,SAAS;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,8BAAsB,iBAAiB;IACrC,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE;IAE5D;;OAEG;IACH,QAAQ,CAAC,MAAM,IAAI,cAAc;CAClC;AAED,8BAAsB,cAAc;;IAClC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,gBAA4B;IACpE,SAAS,CAAC,KAAK,oEAA2E;IAC1F,SAAS,CAAC,KAAK,gCAAuC;IAGtD,IAAI,MAAM,IAAI,OAAO,CAEpB;IAED,6CAA6C;IAC7C,QAAQ,CAAC,IAAI,EAAE,MAAM;IAUrB,kEAAkE;IAClE,KAAK;IAUL,2DAA2D;IAC3D,QAAQ;IAUR,IAAI,IAAI,OAAO,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;IAI1C,8DAA8D;IAC9D,KAAK;IAML,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,cAAc;CAGzC;AAED,8BAAsB,aAAa;IACjC,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE;IAE5D;;OAEG;IACH,QAAQ,CAAC,MAAM,IAAI,UAAU;CAC9B;AAED,8BAAsB,UAAU;;IAC9B,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,gBAA4B;IACpE,SAAS,CAAC,KAAK,gEAAuE;IACtF,SAAS,CAAC,KAAK,gCAAuC;IAGtD,IAAI,MAAM,IAAI,OAAO,CAEpB;IAED,6CAA6C;IAC7C,QAAQ,CAAC,IAAI,EAAE,MAAM;IAUrB,kEAAkE;IAClE,KAAK;IAUL,2DAA2D;IAC3D,QAAQ;IAUR,IAAI,IAAI,OAAO,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;IAI1C,8DAA8D;IAC9D,KAAK;IAML,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,UAAU;CAGrC"}
@@ -0,0 +1,117 @@
1
+ // SPDX-FileCopyrightText: 2024 LiveKit, Inc.
2
+ //
3
+ // SPDX-License-Identifier: Apache-2.0
4
+ import { AsyncIterableQueue } from '../utils.js';
5
+ // prettier-ignore
6
+ export const PUNCTUATIONS = [
7
+ '!', '"', '#', '$', '%', '&', "'", '(', ')', '*', '+', ',', '-', '.', '/', ':', ';', '<', '=',
8
+ '>', '?', '@', '[', '\\', ']', '^', '_', '`', '{', '|', '}', '~', '±', '—', '‘', '’', '“', '”',
9
+ '…',
10
+ ];
11
+ export class SentenceTokenizer {
12
+ }
13
+ export class SentenceStream {
14
+ static FLUSH_SENTINEL = Symbol('FLUSH_SENTINEL');
15
+ input = new AsyncIterableQueue();
16
+ queue = new AsyncIterableQueue();
17
+ #closed = false;
18
+ get closed() {
19
+ return this.#closed;
20
+ }
21
+ /** Push a string of text to the tokenizer */
22
+ pushText(text) {
23
+ if (this.input.closed) {
24
+ throw new Error('Input is closed');
25
+ }
26
+ if (this.#closed) {
27
+ throw new Error('Stream is closed');
28
+ }
29
+ this.input.put(text);
30
+ }
31
+ /** Flush the tokenizer, causing it to process all pending text */
32
+ flush() {
33
+ if (this.input.closed) {
34
+ throw new Error('Input is closed');
35
+ }
36
+ if (this.#closed) {
37
+ throw new Error('Stream is closed');
38
+ }
39
+ this.input.put(SentenceStream.FLUSH_SENTINEL);
40
+ }
41
+ /** Mark the input as ended and forbid additional pushes */
42
+ endInput() {
43
+ if (this.input.closed) {
44
+ throw new Error('Input is closed');
45
+ }
46
+ if (this.#closed) {
47
+ throw new Error('Stream is closed');
48
+ }
49
+ this.input.close();
50
+ }
51
+ next() {
52
+ return this.queue.next();
53
+ }
54
+ /** Close both the input and output of the tokenizer stream */
55
+ close() {
56
+ this.input.close();
57
+ this.queue.close();
58
+ this.#closed = true;
59
+ }
60
+ [Symbol.asyncIterator]() {
61
+ return this;
62
+ }
63
+ }
64
+ export class WordTokenizer {
65
+ }
66
+ export class WordStream {
67
+ static FLUSH_SENTINEL = Symbol('FLUSH_SENTINEL');
68
+ input = new AsyncIterableQueue();
69
+ queue = new AsyncIterableQueue();
70
+ #closed = false;
71
+ get closed() {
72
+ return this.#closed;
73
+ }
74
+ /** Push a string of text to the tokenizer */
75
+ pushText(text) {
76
+ if (this.input.closed) {
77
+ throw new Error('Input is closed');
78
+ }
79
+ if (this.#closed) {
80
+ throw new Error('Stream is closed');
81
+ }
82
+ this.input.put(text);
83
+ }
84
+ /** Flush the tokenizer, causing it to process all pending text */
85
+ flush() {
86
+ if (this.input.closed) {
87
+ throw new Error('Input is closed');
88
+ }
89
+ if (this.#closed) {
90
+ throw new Error('Stream is closed');
91
+ }
92
+ this.input.put(WordStream.FLUSH_SENTINEL);
93
+ }
94
+ /** Mark the input as ended and forbid additional pushes */
95
+ endInput() {
96
+ if (this.input.closed) {
97
+ throw new Error('Input is closed');
98
+ }
99
+ if (this.#closed) {
100
+ throw new Error('Stream is closed');
101
+ }
102
+ this.input.close();
103
+ }
104
+ next() {
105
+ return this.queue.next();
106
+ }
107
+ /** Close both the input and output of the tokenizer stream */
108
+ close() {
109
+ this.input.close();
110
+ this.queue.close();
111
+ this.#closed = true;
112
+ }
113
+ [Symbol.asyncIterator]() {
114
+ return this;
115
+ }
116
+ }
117
+ //# sourceMappingURL=tokenizer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tokenizer.js","sourceRoot":"","sources":["../../src/tokenize/tokenizer.ts"],"names":[],"mappings":"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"}
@@ -1,112 +1,101 @@
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 _BasicTranscriptionForwarder_instances, _BasicTranscriptionForwarder_room, _BasicTranscriptionForwarder_participantIdentity, _BasicTranscriptionForwarder_trackSid, _BasicTranscriptionForwarder_currentText, _BasicTranscriptionForwarder_totalAudioDuration, _BasicTranscriptionForwarder_currentPlayoutTime, _BasicTranscriptionForwarder_DEFAULT_CHARS_PER_SECOND, _BasicTranscriptionForwarder_charsPerSecond, _BasicTranscriptionForwarder_messageId, _BasicTranscriptionForwarder_isRunning, _BasicTranscriptionForwarder_logger, _BasicTranscriptionForwarder_textIsComplete, _BasicTranscriptionForwarder_audioIsComplete, _BasicTranscriptionForwarder_adjustTimingIfBothFinished, _BasicTranscriptionForwarder_computeSleepInterval, _BasicTranscriptionForwarder_startPublishingLoop, _BasicTranscriptionForwarder_publishTranscription;
13
1
  import { log } from './log.js';
14
2
  export class BasicTranscriptionForwarder {
3
+ #room;
4
+ #participantIdentity;
5
+ #trackSid;
6
+ #currentText = '';
7
+ #totalAudioDuration = 0;
8
+ #currentPlayoutTime = 0;
9
+ #DEFAULT_CHARS_PER_SECOND = 16;
10
+ #charsPerSecond = this.#DEFAULT_CHARS_PER_SECOND;
11
+ #messageId;
12
+ #isRunning = false;
13
+ #logger = log();
14
+ currentCharacterIndex = 0;
15
15
  constructor(room, participantIdentity, trackSid, messageId) {
16
- _BasicTranscriptionForwarder_instances.add(this);
17
- _BasicTranscriptionForwarder_room.set(this, void 0);
18
- _BasicTranscriptionForwarder_participantIdentity.set(this, void 0);
19
- _BasicTranscriptionForwarder_trackSid.set(this, void 0);
20
- _BasicTranscriptionForwarder_currentText.set(this, '');
21
- _BasicTranscriptionForwarder_totalAudioDuration.set(this, 0);
22
- _BasicTranscriptionForwarder_currentPlayoutTime.set(this, 0);
23
- _BasicTranscriptionForwarder_DEFAULT_CHARS_PER_SECOND.set(this, 16);
24
- _BasicTranscriptionForwarder_charsPerSecond.set(this, __classPrivateFieldGet(this, _BasicTranscriptionForwarder_DEFAULT_CHARS_PER_SECOND, "f"));
25
- _BasicTranscriptionForwarder_messageId.set(this, void 0);
26
- _BasicTranscriptionForwarder_isRunning.set(this, false);
27
- _BasicTranscriptionForwarder_logger.set(this, log());
28
- this.currentCharacterIndex = 0;
29
- _BasicTranscriptionForwarder_textIsComplete.set(this, false);
30
- _BasicTranscriptionForwarder_audioIsComplete.set(this, false);
31
- __classPrivateFieldSet(this, _BasicTranscriptionForwarder_room, room, "f");
32
- __classPrivateFieldSet(this, _BasicTranscriptionForwarder_participantIdentity, participantIdentity, "f");
33
- __classPrivateFieldSet(this, _BasicTranscriptionForwarder_trackSid, trackSid, "f");
34
- __classPrivateFieldSet(this, _BasicTranscriptionForwarder_messageId, messageId, "f");
16
+ this.#room = room;
17
+ this.#participantIdentity = participantIdentity;
18
+ this.#trackSid = trackSid;
19
+ this.#messageId = messageId;
35
20
  }
36
21
  start() {
37
- if (!__classPrivateFieldGet(this, _BasicTranscriptionForwarder_isRunning, "f")) {
38
- __classPrivateFieldSet(this, _BasicTranscriptionForwarder_isRunning, true, "f");
39
- __classPrivateFieldGet(this, _BasicTranscriptionForwarder_instances, "m", _BasicTranscriptionForwarder_startPublishingLoop).call(this).catch((error) => {
40
- __classPrivateFieldGet(this, _BasicTranscriptionForwarder_logger, "f").error('Error in publishing loop:', error);
41
- __classPrivateFieldSet(this, _BasicTranscriptionForwarder_isRunning, false, "f");
22
+ if (!this.#isRunning) {
23
+ this.#isRunning = true;
24
+ this.#startPublishingLoop().catch((error) => {
25
+ this.#logger.error('Error in publishing loop:', error);
26
+ this.#isRunning = false;
42
27
  });
43
28
  }
44
29
  }
45
30
  pushAudio(frame) {
46
- __classPrivateFieldSet(this, _BasicTranscriptionForwarder_totalAudioDuration, __classPrivateFieldGet(this, _BasicTranscriptionForwarder_totalAudioDuration, "f") + frame.samplesPerChannel / frame.sampleRate, "f");
31
+ this.#totalAudioDuration += frame.samplesPerChannel / frame.sampleRate;
47
32
  }
48
33
  pushText(text) {
49
- __classPrivateFieldSet(this, _BasicTranscriptionForwarder_currentText, __classPrivateFieldGet(this, _BasicTranscriptionForwarder_currentText, "f") + text, "f");
34
+ this.#currentText += text;
50
35
  }
36
+ #textIsComplete = false;
37
+ #audioIsComplete = false;
51
38
  markTextComplete() {
52
- __classPrivateFieldSet(this, _BasicTranscriptionForwarder_textIsComplete, true, "f");
53
- __classPrivateFieldGet(this, _BasicTranscriptionForwarder_instances, "m", _BasicTranscriptionForwarder_adjustTimingIfBothFinished).call(this);
39
+ this.#textIsComplete = true;
40
+ this.#adjustTimingIfBothFinished();
54
41
  }
55
42
  markAudioComplete() {
56
- __classPrivateFieldSet(this, _BasicTranscriptionForwarder_audioIsComplete, true, "f");
57
- __classPrivateFieldGet(this, _BasicTranscriptionForwarder_instances, "m", _BasicTranscriptionForwarder_adjustTimingIfBothFinished).call(this);
43
+ this.#audioIsComplete = true;
44
+ this.#adjustTimingIfBothFinished();
58
45
  }
59
- async close(interrupt) {
60
- __classPrivateFieldSet(this, _BasicTranscriptionForwarder_isRunning, false, "f");
61
- // Publish whatever we had as final
62
- if (!interrupt) {
63
- this.currentCharacterIndex = __classPrivateFieldGet(this, _BasicTranscriptionForwarder_currentText, "f").length;
46
+ #adjustTimingIfBothFinished() {
47
+ if (this.#textIsComplete && this.#audioIsComplete) {
48
+ const actualDuration = this.#totalAudioDuration;
49
+ if (actualDuration > 0 && this.#currentText.length > 0) {
50
+ this.#charsPerSecond = this.#currentText.length / actualDuration;
51
+ }
64
52
  }
65
- await __classPrivateFieldGet(this, _BasicTranscriptionForwarder_instances, "m", _BasicTranscriptionForwarder_publishTranscription).call(this, true);
66
53
  }
67
- }
68
- _BasicTranscriptionForwarder_room = new WeakMap(), _BasicTranscriptionForwarder_participantIdentity = new WeakMap(), _BasicTranscriptionForwarder_trackSid = new WeakMap(), _BasicTranscriptionForwarder_currentText = new WeakMap(), _BasicTranscriptionForwarder_totalAudioDuration = new WeakMap(), _BasicTranscriptionForwarder_currentPlayoutTime = new WeakMap(), _BasicTranscriptionForwarder_DEFAULT_CHARS_PER_SECOND = new WeakMap(), _BasicTranscriptionForwarder_charsPerSecond = new WeakMap(), _BasicTranscriptionForwarder_messageId = new WeakMap(), _BasicTranscriptionForwarder_isRunning = new WeakMap(), _BasicTranscriptionForwarder_logger = new WeakMap(), _BasicTranscriptionForwarder_textIsComplete = new WeakMap(), _BasicTranscriptionForwarder_audioIsComplete = new WeakMap(), _BasicTranscriptionForwarder_instances = new WeakSet(), _BasicTranscriptionForwarder_adjustTimingIfBothFinished = function _BasicTranscriptionForwarder_adjustTimingIfBothFinished() {
69
- if (__classPrivateFieldGet(this, _BasicTranscriptionForwarder_textIsComplete, "f") && __classPrivateFieldGet(this, _BasicTranscriptionForwarder_audioIsComplete, "f")) {
70
- const actualDuration = __classPrivateFieldGet(this, _BasicTranscriptionForwarder_totalAudioDuration, "f");
71
- if (actualDuration > 0 && __classPrivateFieldGet(this, _BasicTranscriptionForwarder_currentText, "f").length > 0) {
72
- __classPrivateFieldSet(this, _BasicTranscriptionForwarder_charsPerSecond, __classPrivateFieldGet(this, _BasicTranscriptionForwarder_currentText, "f").length / actualDuration, "f");
73
- }
54
+ #computeSleepInterval() {
55
+ return Math.min(Math.max(1 / this.#charsPerSecond, 0.0625), 0.5);
74
56
  }
75
- }, _BasicTranscriptionForwarder_computeSleepInterval = function _BasicTranscriptionForwarder_computeSleepInterval() {
76
- return Math.min(Math.max(1 / __classPrivateFieldGet(this, _BasicTranscriptionForwarder_charsPerSecond, "f"), 0.0625), 0.5);
77
- }, _BasicTranscriptionForwarder_startPublishingLoop = async function _BasicTranscriptionForwarder_startPublishingLoop() {
78
- __classPrivateFieldSet(this, _BasicTranscriptionForwarder_isRunning, true, "f");
79
- let sleepInterval = __classPrivateFieldGet(this, _BasicTranscriptionForwarder_instances, "m", _BasicTranscriptionForwarder_computeSleepInterval).call(this);
80
- let isComplete = false;
81
- while (__classPrivateFieldGet(this, _BasicTranscriptionForwarder_isRunning, "f") && !isComplete) {
82
- __classPrivateFieldSet(this, _BasicTranscriptionForwarder_currentPlayoutTime, __classPrivateFieldGet(this, _BasicTranscriptionForwarder_currentPlayoutTime, "f") + sleepInterval, "f");
83
- this.currentCharacterIndex = Math.floor(__classPrivateFieldGet(this, _BasicTranscriptionForwarder_currentPlayoutTime, "f") * __classPrivateFieldGet(this, _BasicTranscriptionForwarder_charsPerSecond, "f"));
84
- isComplete = __classPrivateFieldGet(this, _BasicTranscriptionForwarder_textIsComplete, "f") && this.currentCharacterIndex >= __classPrivateFieldGet(this, _BasicTranscriptionForwarder_currentText, "f").length;
85
- await __classPrivateFieldGet(this, _BasicTranscriptionForwarder_instances, "m", _BasicTranscriptionForwarder_publishTranscription).call(this, false);
86
- if (__classPrivateFieldGet(this, _BasicTranscriptionForwarder_isRunning, "f") && !isComplete) {
87
- sleepInterval = __classPrivateFieldGet(this, _BasicTranscriptionForwarder_instances, "m", _BasicTranscriptionForwarder_computeSleepInterval).call(this);
88
- await new Promise((resolve) => setTimeout(resolve, sleepInterval * 1000));
57
+ async #startPublishingLoop() {
58
+ this.#isRunning = true;
59
+ let sleepInterval = this.#computeSleepInterval();
60
+ let isComplete = false;
61
+ while (this.#isRunning && !isComplete) {
62
+ this.#currentPlayoutTime += sleepInterval;
63
+ this.currentCharacterIndex = Math.floor(this.#currentPlayoutTime * this.#charsPerSecond);
64
+ isComplete = this.#textIsComplete && this.currentCharacterIndex >= this.#currentText.length;
65
+ await this.#publishTranscription(false);
66
+ if (this.#isRunning && !isComplete) {
67
+ sleepInterval = this.#computeSleepInterval();
68
+ await new Promise((resolve) => setTimeout(resolve, sleepInterval * 1000));
69
+ }
70
+ }
71
+ if (this.#isRunning) {
72
+ this.close(false);
89
73
  }
90
74
  }
91
- if (__classPrivateFieldGet(this, _BasicTranscriptionForwarder_isRunning, "f")) {
92
- this.close(false);
75
+ async #publishTranscription(final) {
76
+ const textToPublish = this.#currentText.slice(0, this.currentCharacterIndex);
77
+ await this.#room.localParticipant?.publishTranscription({
78
+ participantIdentity: this.#participantIdentity,
79
+ trackSid: this.#trackSid,
80
+ segments: [
81
+ {
82
+ text: textToPublish,
83
+ final: final,
84
+ id: this.#messageId,
85
+ startTime: BigInt(0),
86
+ endTime: BigInt(0),
87
+ language: '',
88
+ },
89
+ ],
90
+ });
93
91
  }
94
- }, _BasicTranscriptionForwarder_publishTranscription = async function _BasicTranscriptionForwarder_publishTranscription(final) {
95
- var _a;
96
- const textToPublish = __classPrivateFieldGet(this, _BasicTranscriptionForwarder_currentText, "f").slice(0, this.currentCharacterIndex);
97
- await ((_a = __classPrivateFieldGet(this, _BasicTranscriptionForwarder_room, "f").localParticipant) === null || _a === void 0 ? void 0 : _a.publishTranscription({
98
- participantIdentity: __classPrivateFieldGet(this, _BasicTranscriptionForwarder_participantIdentity, "f"),
99
- trackSid: __classPrivateFieldGet(this, _BasicTranscriptionForwarder_trackSid, "f"),
100
- segments: [
101
- {
102
- text: textToPublish,
103
- final: final,
104
- id: __classPrivateFieldGet(this, _BasicTranscriptionForwarder_messageId, "f"),
105
- startTime: BigInt(0),
106
- endTime: BigInt(0),
107
- language: '',
108
- },
109
- ],
110
- }));
111
- };
92
+ async close(interrupt) {
93
+ this.#isRunning = false;
94
+ // Publish whatever we had as final
95
+ if (!interrupt) {
96
+ this.currentCharacterIndex = this.#currentText.length;
97
+ }
98
+ await this.#publishTranscription(true);
99
+ }
100
+ }
112
101
  //# sourceMappingURL=transcription.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"transcription.js","sourceRoot":"","sources":["../src/transcription.ts"],"names":[],"mappings":";;;;;;;;;;;;AAIA,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAY/B,MAAM,OAAO,2BAA2B;IActC,YAAY,IAAU,EAAE,mBAA2B,EAAE,QAAgB,EAAE,SAAiB;;QAbxF,oDAAY;QACZ,mEAA6B;QAC7B,wDAAkB;QAClB,mDAAuB,EAAE,EAAC;QAC1B,0DAA8B,CAAC,EAAC;QAChC,0DAA8B,CAAC,EAAC;QAChC,gEAA4B,EAAE,EAAC;QAC/B,sDAA0B,uBAAA,IAAI,6DAA0B,EAAC;QACzD,yDAAmB;QACnB,iDAAsB,KAAK,EAAC;QAC5B,8CAAU,GAAG,EAAE,EAAC;QAChB,0BAAqB,GAAW,CAAC,CAAC;QA2BlC,sDAA2B,KAAK,EAAC;QACjC,uDAA4B,KAAK,EAAC;QAzBhC,uBAAA,IAAI,qCAAS,IAAI,MAAA,CAAC;QAClB,uBAAA,IAAI,oDAAwB,mBAAmB,MAAA,CAAC;QAChD,uBAAA,IAAI,yCAAa,QAAQ,MAAA,CAAC;QAC1B,uBAAA,IAAI,0CAAc,SAAS,MAAA,CAAC;IAC9B,CAAC;IAED,KAAK;QACH,IAAI,CAAC,uBAAA,IAAI,8CAAW,EAAE,CAAC;YACrB,uBAAA,IAAI,0CAAc,IAAI,MAAA,CAAC;YACvB,uBAAA,IAAI,gGAAqB,MAAzB,IAAI,CAAuB,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;gBAC1C,uBAAA,IAAI,2CAAQ,CAAC,KAAK,CAAC,2BAA2B,EAAE,KAAK,CAAC,CAAC;gBACvD,uBAAA,IAAI,0CAAc,KAAK,MAAA,CAAC;YAC1B,CAAC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,SAAS,CAAC,KAAiB;QACzB,mKAA4B,KAAK,CAAC,iBAAiB,GAAG,KAAK,CAAC,UAAU,MAAA,CAAC;IACzE,CAAC;IAED,QAAQ,CAAC,IAAY;QACnB,qJAAqB,IAAI,MAAA,CAAC;IAC5B,CAAC;IAKD,gBAAgB;QACd,uBAAA,IAAI,+CAAmB,IAAI,MAAA,CAAC;QAC5B,uBAAA,IAAI,uGAA4B,MAAhC,IAAI,CAA8B,CAAC;IACrC,CAAC;IAED,iBAAiB;QACf,uBAAA,IAAI,gDAAoB,IAAI,MAAA,CAAC;QAC7B,uBAAA,IAAI,uGAA4B,MAAhC,IAAI,CAA8B,CAAC;IACrC,CAAC;IAqDD,KAAK,CAAC,KAAK,CAAC,SAAkB;QAC5B,uBAAA,IAAI,0CAAc,KAAK,MAAA,CAAC;QAExB,mCAAmC;QACnC,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,IAAI,CAAC,qBAAqB,GAAG,uBAAA,IAAI,gDAAa,CAAC,MAAM,CAAC;QACxD,CAAC;QACD,MAAM,uBAAA,IAAI,iGAAsB,MAA1B,IAAI,EAAuB,IAAI,CAAC,CAAC;IACzC,CAAC;CACF;;IA3DG,IAAI,uBAAA,IAAI,mDAAgB,IAAI,uBAAA,IAAI,oDAAiB,EAAE,CAAC;QAClD,MAAM,cAAc,GAAG,uBAAA,IAAI,uDAAoB,CAAC;QAChD,IAAI,cAAc,GAAG,CAAC,IAAI,uBAAA,IAAI,gDAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvD,uBAAA,IAAI,+CAAmB,uBAAA,IAAI,gDAAa,CAAC,MAAM,GAAG,cAAc,MAAA,CAAC;QACnE,CAAC;IACH,CAAC;AACH,CAAC;IAGC,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,uBAAA,IAAI,mDAAgB,EAAE,MAAM,CAAC,EAAE,GAAG,CAAC,CAAC;AACnE,CAAC,qDAED,KAAK;IACH,uBAAA,IAAI,0CAAc,IAAI,MAAA,CAAC;IACvB,IAAI,aAAa,GAAG,uBAAA,IAAI,iGAAsB,MAA1B,IAAI,CAAwB,CAAC;IACjD,IAAI,UAAU,GAAG,KAAK,CAAC;IACvB,OAAO,uBAAA,IAAI,8CAAW,IAAI,CAAC,UAAU,EAAE,CAAC;QACtC,mKAA4B,aAAa,MAAA,CAAC;QAC1C,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC,KAAK,CAAC,uBAAA,IAAI,uDAAoB,GAAG,uBAAA,IAAI,mDAAgB,CAAC,CAAC;QACzF,UAAU,GAAG,uBAAA,IAAI,mDAAgB,IAAI,IAAI,CAAC,qBAAqB,IAAI,uBAAA,IAAI,gDAAa,CAAC,MAAM,CAAC;QAC5F,MAAM,uBAAA,IAAI,iGAAsB,MAA1B,IAAI,EAAuB,KAAK,CAAC,CAAC;QACxC,IAAI,uBAAA,IAAI,8CAAW,IAAI,CAAC,UAAU,EAAE,CAAC;YACnC,aAAa,GAAG,uBAAA,IAAI,iGAAsB,MAA1B,IAAI,CAAwB,CAAC;YAC7C,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI,CAAC,CAAC,CAAC;QAC5E,CAAC;IACH,CAAC;IAED,IAAI,uBAAA,IAAI,8CAAW,EAAE,CAAC;QACpB,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACpB,CAAC;AACH,CAAC,sDAED,KAAK,4DAAuB,KAAc;;IACxC,MAAM,aAAa,GAAG,uBAAA,IAAI,gDAAa,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,qBAAqB,CAAC,CAAC;IAC7E,MAAM,CAAA,MAAA,uBAAA,IAAI,yCAAM,CAAC,gBAAgB,0CAAE,oBAAoB,CAAC;QACtD,mBAAmB,EAAE,uBAAA,IAAI,wDAAqB;QAC9C,QAAQ,EAAE,uBAAA,IAAI,6CAAU;QACxB,QAAQ,EAAE;YACR;gBACE,IAAI,EAAE,aAAa;gBACnB,KAAK,EAAE,KAAK;gBACZ,EAAE,EAAE,uBAAA,IAAI,8CAAW;gBACnB,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC;gBACpB,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC;gBAClB,QAAQ,EAAE,EAAE;aACb;SACF;KACF,CAAC,CAAA,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"transcription.js","sourceRoot":"","sources":["../src/transcription.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,2 @@
1
- import { StreamAdapter, StreamAdapterWrapper } from './stream_adapter.js';
2
- import { ChunkedStream, SynthesisEvent, SynthesisEventType, SynthesizeStream, type SynthesizedAudio, TTS } from './tts.js';
3
- export { TTS, SynthesisEvent, SynthesisEventType, SynthesizedAudio, SynthesizeStream, StreamAdapter, StreamAdapterWrapper, ChunkedStream, };
1
+ export { type SynthesizedAudio, type TTSCapabilities, TTS, SynthesizeStream } from './tts.js';
4
2
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tts/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC1E,OAAO,EACL,aAAa,EACb,cAAc,EACd,kBAAkB,EAClB,gBAAgB,EAChB,KAAK,gBAAgB,EACrB,GAAG,EACJ,MAAM,UAAU,CAAC;AAElB,OAAO,EACL,GAAG,EACH,cAAc,EACd,kBAAkB,EAClB,gBAAgB,EAChB,gBAAgB,EAChB,aAAa,EACb,oBAAoB,EACpB,aAAa,GACd,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tts/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,gBAAgB,EAAE,KAAK,eAAe,EAAE,GAAG,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC"}