@absolutejs/voice 0.0.22-beta.664 → 0.0.22-beta.666

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.
@@ -511,6 +511,11 @@ var serverMessageToAction = (message) => {
511
511
  transcript: message.transcript,
512
512
  type: "partial"
513
513
  };
514
+ case "playback_rate":
515
+ return {
516
+ rate: message.rate,
517
+ type: "playback_rate"
518
+ };
514
519
  case "replay":
515
520
  return {
516
521
  assistantTexts: message.assistantTexts,
@@ -693,6 +698,7 @@ var isVoiceServerMessage = (value) => {
693
698
  case "error":
694
699
  case "final":
695
700
  case "partial":
701
+ case "playback_rate":
696
702
  case "pong":
697
703
  case "replay":
698
704
  case "session":
@@ -1119,6 +1125,7 @@ var createInitialState = () => ({
1119
1125
  isConnected: false,
1120
1126
  paused: false,
1121
1127
  partial: "",
1128
+ playbackRate: null,
1122
1129
  reconnect: createInitialReconnectState(),
1123
1130
  scenarioId: null,
1124
1131
  sessionId: null,
@@ -1227,6 +1234,12 @@ var createVoiceStreamStore = () => {
1227
1234
  partial: joinPartial(turnFinalText, action.transcript.text)
1228
1235
  };
1229
1236
  break;
1237
+ case "playback_rate":
1238
+ state = {
1239
+ ...state,
1240
+ playbackRate: Math.max(0.5, Math.min(2, action.rate))
1241
+ };
1242
+ break;
1230
1243
  case "replay":
1231
1244
  turnFinalText = action.partial;
1232
1245
  state = {
@@ -1392,6 +1405,9 @@ var createVoiceStream = (path, options = {}) => {
1392
1405
  get partial() {
1393
1406
  return store.getSnapshot().partial;
1394
1407
  },
1408
+ get playbackRate() {
1409
+ return store.getSnapshot().playbackRate;
1410
+ },
1395
1411
  get paused() {
1396
1412
  return store.getSnapshot().paused;
1397
1413
  },
@@ -1764,6 +1780,7 @@ var createInitialState2 = (stream) => ({
1764
1780
  paused: stream.paused,
1765
1781
  pauseExpiresAt: stream.pauseExpiresAt,
1766
1782
  partial: stream.partial,
1783
+ playbackRate: stream.playbackRate,
1767
1784
  reconnect: stream.reconnect,
1768
1785
  recordingError: null,
1769
1786
  sessionId: stream.sessionId,
@@ -1801,6 +1818,7 @@ var createVoiceController = (path, options = {}) => {
1801
1818
  paused: stream.paused,
1802
1819
  pauseExpiresAt: stream.pauseExpiresAt,
1803
1820
  partial: stream.partial,
1821
+ playbackRate: stream.playbackRate,
1804
1822
  reconnect: stream.reconnect,
1805
1823
  sessionId: stream.sessionId,
1806
1824
  sessionMetadata: stream.sessionMetadata,
@@ -1947,6 +1965,9 @@ var createVoiceController = (path, options = {}) => {
1947
1965
  get partial() {
1948
1966
  return state.partial;
1949
1967
  },
1968
+ get playbackRate() {
1969
+ return state.playbackRate;
1970
+ },
1950
1971
  get paused() {
1951
1972
  return state.paused;
1952
1973
  },
@@ -13,6 +13,7 @@ export declare const serverMessageToAction: <TResult = unknown>(message: VoiceSe
13
13
  message?: undefined;
14
14
  recoverable?: undefined;
15
15
  transcript?: undefined;
16
+ rate?: undefined;
16
17
  assistantTexts?: undefined;
17
18
  call?: undefined;
18
19
  partial?: undefined;
@@ -37,6 +38,7 @@ export declare const serverMessageToAction: <TResult = unknown>(message: VoiceSe
37
38
  message?: undefined;
38
39
  recoverable?: undefined;
39
40
  transcript?: undefined;
41
+ rate?: undefined;
40
42
  assistantTexts?: undefined;
41
43
  call?: undefined;
42
44
  partial?: undefined;
@@ -61,6 +63,7 @@ export declare const serverMessageToAction: <TResult = unknown>(message: VoiceSe
61
63
  message?: undefined;
62
64
  recoverable?: undefined;
63
65
  transcript?: undefined;
66
+ rate?: undefined;
64
67
  assistantTexts?: undefined;
65
68
  call?: undefined;
66
69
  partial?: undefined;
@@ -85,6 +88,7 @@ export declare const serverMessageToAction: <TResult = unknown>(message: VoiceSe
85
88
  message?: undefined;
86
89
  recoverable?: undefined;
87
90
  transcript?: undefined;
91
+ rate?: undefined;
88
92
  assistantTexts?: undefined;
89
93
  call?: undefined;
90
94
  partial?: undefined;
@@ -109,6 +113,7 @@ export declare const serverMessageToAction: <TResult = unknown>(message: VoiceSe
109
113
  message?: undefined;
110
114
  recoverable?: undefined;
111
115
  transcript?: undefined;
116
+ rate?: undefined;
112
117
  assistantTexts?: undefined;
113
118
  call?: undefined;
114
119
  partial?: undefined;
@@ -133,6 +138,7 @@ export declare const serverMessageToAction: <TResult = unknown>(message: VoiceSe
133
138
  message?: undefined;
134
139
  recoverable?: undefined;
135
140
  transcript?: undefined;
141
+ rate?: undefined;
136
142
  assistantTexts?: undefined;
137
143
  call?: undefined;
138
144
  partial?: undefined;
@@ -157,6 +163,7 @@ export declare const serverMessageToAction: <TResult = unknown>(message: VoiceSe
157
163
  reconnect?: undefined;
158
164
  event?: undefined;
159
165
  transcript?: undefined;
166
+ rate?: undefined;
160
167
  assistantTexts?: undefined;
161
168
  call?: undefined;
162
169
  partial?: undefined;
@@ -181,6 +188,7 @@ export declare const serverMessageToAction: <TResult = unknown>(message: VoiceSe
181
188
  event?: undefined;
182
189
  message?: undefined;
183
190
  recoverable?: undefined;
191
+ rate?: undefined;
184
192
  assistantTexts?: undefined;
185
193
  call?: undefined;
186
194
  partial?: undefined;
@@ -205,6 +213,32 @@ export declare const serverMessageToAction: <TResult = unknown>(message: VoiceSe
205
213
  event?: undefined;
206
214
  message?: undefined;
207
215
  recoverable?: undefined;
216
+ rate?: undefined;
217
+ assistantTexts?: undefined;
218
+ call?: undefined;
219
+ partial?: undefined;
220
+ scenarioId?: undefined;
221
+ sessionMetadata?: undefined;
222
+ status?: undefined;
223
+ turns?: undefined;
224
+ paused?: undefined;
225
+ pauseExpiresAt?: undefined;
226
+ turn?: undefined;
227
+ } | {
228
+ rate: number;
229
+ type: "playback_rate";
230
+ chunk?: undefined;
231
+ format?: undefined;
232
+ receivedAt?: undefined;
233
+ turnId?: undefined;
234
+ text?: undefined;
235
+ delta?: undefined;
236
+ sessionId?: undefined;
237
+ reconnect?: undefined;
238
+ event?: undefined;
239
+ message?: undefined;
240
+ recoverable?: undefined;
241
+ transcript?: undefined;
208
242
  assistantTexts?: undefined;
209
243
  call?: undefined;
210
244
  partial?: undefined;
@@ -236,6 +270,7 @@ export declare const serverMessageToAction: <TResult = unknown>(message: VoiceSe
236
270
  message?: undefined;
237
271
  recoverable?: undefined;
238
272
  transcript?: undefined;
273
+ rate?: undefined;
239
274
  paused?: undefined;
240
275
  pauseExpiresAt?: undefined;
241
276
  turn?: undefined;
@@ -258,6 +293,7 @@ export declare const serverMessageToAction: <TResult = unknown>(message: VoiceSe
258
293
  message?: undefined;
259
294
  recoverable?: undefined;
260
295
  transcript?: undefined;
296
+ rate?: undefined;
261
297
  assistantTexts?: undefined;
262
298
  call?: undefined;
263
299
  partial?: undefined;
@@ -278,6 +314,7 @@ export declare const serverMessageToAction: <TResult = unknown>(message: VoiceSe
278
314
  message?: undefined;
279
315
  recoverable?: undefined;
280
316
  transcript?: undefined;
317
+ rate?: undefined;
281
318
  assistantTexts?: undefined;
282
319
  call?: undefined;
283
320
  partial?: undefined;
@@ -279,6 +279,11 @@ var serverMessageToAction = (message) => {
279
279
  transcript: message.transcript,
280
280
  type: "partial"
281
281
  };
282
+ case "playback_rate":
283
+ return {
284
+ rate: message.rate,
285
+ type: "playback_rate"
286
+ };
282
287
  case "replay":
283
288
  return {
284
289
  assistantTexts: message.assistantTexts,
@@ -610,6 +615,7 @@ var isVoiceServerMessage = (value) => {
610
615
  case "error":
611
616
  case "final":
612
617
  case "partial":
618
+ case "playback_rate":
613
619
  case "pong":
614
620
  case "replay":
615
621
  case "session":
@@ -1036,6 +1042,7 @@ var createInitialState = () => ({
1036
1042
  isConnected: false,
1037
1043
  paused: false,
1038
1044
  partial: "",
1045
+ playbackRate: null,
1039
1046
  reconnect: createInitialReconnectState(),
1040
1047
  scenarioId: null,
1041
1048
  sessionId: null,
@@ -1144,6 +1151,12 @@ var createVoiceStreamStore = () => {
1144
1151
  partial: joinPartial(turnFinalText, action.transcript.text)
1145
1152
  };
1146
1153
  break;
1154
+ case "playback_rate":
1155
+ state = {
1156
+ ...state,
1157
+ playbackRate: Math.max(0.5, Math.min(2, action.rate))
1158
+ };
1159
+ break;
1147
1160
  case "replay":
1148
1161
  turnFinalText = action.partial;
1149
1162
  state = {
@@ -1309,6 +1322,9 @@ var createVoiceStream = (path, options = {}) => {
1309
1322
  get partial() {
1310
1323
  return store.getSnapshot().partial;
1311
1324
  },
1325
+ get playbackRate() {
1326
+ return store.getSnapshot().playbackRate;
1327
+ },
1312
1328
  get paused() {
1313
1329
  return store.getSnapshot().paused;
1314
1330
  },
@@ -1644,6 +1660,7 @@ var createInitialState2 = (stream) => ({
1644
1660
  paused: stream.paused,
1645
1661
  pauseExpiresAt: stream.pauseExpiresAt,
1646
1662
  partial: stream.partial,
1663
+ playbackRate: stream.playbackRate,
1647
1664
  reconnect: stream.reconnect,
1648
1665
  recordingError: null,
1649
1666
  sessionId: stream.sessionId,
@@ -1681,6 +1698,7 @@ var createVoiceController = (path, options = {}) => {
1681
1698
  paused: stream.paused,
1682
1699
  pauseExpiresAt: stream.pauseExpiresAt,
1683
1700
  partial: stream.partial,
1701
+ playbackRate: stream.playbackRate,
1684
1702
  reconnect: stream.reconnect,
1685
1703
  sessionId: stream.sessionId,
1686
1704
  sessionMetadata: stream.sessionMetadata,
@@ -1827,6 +1845,9 @@ var createVoiceController = (path, options = {}) => {
1827
1845
  get partial() {
1828
1846
  return state.partial;
1829
1847
  },
1848
+ get playbackRate() {
1849
+ return state.playbackRate;
1850
+ },
1830
1851
  get paused() {
1831
1852
  return state.paused;
1832
1853
  },
@@ -172,6 +172,7 @@ var isVoiceServerMessage = (value) => {
172
172
  case "error":
173
173
  case "final":
174
174
  case "partial":
175
+ case "playback_rate":
175
176
  case "pong":
176
177
  case "replay":
177
178
  case "session":
@@ -1376,6 +1377,11 @@ var serverMessageToAction = (message) => {
1376
1377
  transcript: message.transcript,
1377
1378
  type: "partial"
1378
1379
  };
1380
+ case "playback_rate":
1381
+ return {
1382
+ rate: message.rate,
1383
+ type: "playback_rate"
1384
+ };
1379
1385
  case "replay":
1380
1386
  return {
1381
1387
  assistantTexts: message.assistantTexts,
@@ -1522,6 +1528,7 @@ var createInitialState2 = () => ({
1522
1528
  isConnected: false,
1523
1529
  paused: false,
1524
1530
  partial: "",
1531
+ playbackRate: null,
1525
1532
  reconnect: createInitialReconnectState(),
1526
1533
  scenarioId: null,
1527
1534
  sessionId: null,
@@ -1630,6 +1637,12 @@ var createVoiceStreamStore = () => {
1630
1637
  partial: joinPartial(turnFinalText, action.transcript.text)
1631
1638
  };
1632
1639
  break;
1640
+ case "playback_rate":
1641
+ state = {
1642
+ ...state,
1643
+ playbackRate: Math.max(0.5, Math.min(2, action.rate))
1644
+ };
1645
+ break;
1633
1646
  case "replay":
1634
1647
  turnFinalText = action.partial;
1635
1648
  state = {
@@ -1795,6 +1808,9 @@ var createVoiceStream = (path, options = {}) => {
1795
1808
  get partial() {
1796
1809
  return store.getSnapshot().partial;
1797
1810
  },
1811
+ get playbackRate() {
1812
+ return store.getSnapshot().playbackRate;
1813
+ },
1798
1814
  get paused() {
1799
1815
  return store.getSnapshot().paused;
1800
1816
  },
@@ -2360,6 +2376,7 @@ var createInitialState3 = (stream) => ({
2360
2376
  paused: stream.paused,
2361
2377
  pauseExpiresAt: stream.pauseExpiresAt,
2362
2378
  partial: stream.partial,
2379
+ playbackRate: stream.playbackRate,
2363
2380
  reconnect: stream.reconnect,
2364
2381
  recordingError: null,
2365
2382
  sessionId: stream.sessionId,
@@ -2397,6 +2414,7 @@ var createVoiceController = (path, options = {}) => {
2397
2414
  paused: stream.paused,
2398
2415
  pauseExpiresAt: stream.pauseExpiresAt,
2399
2416
  partial: stream.partial,
2417
+ playbackRate: stream.playbackRate,
2400
2418
  reconnect: stream.reconnect,
2401
2419
  sessionId: stream.sessionId,
2402
2420
  sessionMetadata: stream.sessionMetadata,
@@ -2543,6 +2561,9 @@ var createVoiceController = (path, options = {}) => {
2543
2561
  get partial() {
2544
2562
  return state.partial;
2545
2563
  },
2564
+ get playbackRate() {
2565
+ return state.playbackRate;
2566
+ },
2546
2567
  get paused() {
2547
2568
  return state.paused;
2548
2569
  },
@@ -2651,10 +2672,18 @@ var createVoiceDuplexController = (path, options = {}) => {
2651
2672
  }
2652
2673
  });
2653
2674
  const audioPlayer = createVoiceAudioPlayer(controller, options.audioPlayer);
2675
+ let appliedPlaybackRate = controller.playbackRate;
2676
+ const unsubscribePlaybackRate = controller.subscribe(() => {
2677
+ if (controller.playbackRate !== null && controller.playbackRate !== appliedPlaybackRate) {
2678
+ appliedPlaybackRate = controller.playbackRate;
2679
+ audioPlayer.setPlaybackRate(controller.playbackRate);
2680
+ }
2681
+ });
2654
2682
  bargeInBinding = bindVoiceBargeIn(controller, audioPlayer, options.bargeIn);
2655
2683
  const close = () => {
2656
2684
  bargeInBinding?.close();
2657
2685
  bargeInBinding = null;
2686
+ unsubscribePlaybackRate();
2658
2687
  audioPlayer.close();
2659
2688
  controller.close();
2660
2689
  };
@@ -601,6 +601,8 @@ export type VoiceSessionHandle<TContext = unknown, TSession extends VoiceSession
601
601
  /** Lift a caller-driven pause: watchdogs re-arm and turns process again. */
602
602
  resume: () => Promise<void>;
603
603
  snapshot: () => Promise<TSession>;
604
+ /** Ask connected browser clients to change assistant-audio playback speed. */
605
+ setPlaybackRate: (rate: number) => Promise<number>;
604
606
  /**
605
607
  * Mutate the live turn-detection config for this session — useful when a
606
608
  * tool call wants to dial silenceMs up ("the caller asked for more time")
@@ -1335,6 +1337,11 @@ export type VoiceServerAudioMessage = {
1335
1337
  receivedAt: number;
1336
1338
  turnId?: string;
1337
1339
  };
1340
+ /** Requests a live assistant-audio playback-rate change in browser clients. */
1341
+ export type VoiceServerPlaybackRateMessage = {
1342
+ type: "playback_rate";
1343
+ rate: number;
1344
+ };
1338
1345
  export type VoiceServerCompleteMessage = {
1339
1346
  type: "complete";
1340
1347
  sessionId: string;
@@ -1356,7 +1363,7 @@ export type VoiceServerConnectionMessage = {
1356
1363
  type: "connection";
1357
1364
  reconnect: VoiceReconnectClientState;
1358
1365
  };
1359
- export type VoiceServerMessage<TResult = unknown> = VoiceServerSessionMessage | VoiceServerReplayMessage<TResult> | VoiceServerPartialMessage | VoiceServerFinalMessage | VoiceServerTurnMessage<TResult> | VoiceServerAssistantMessage | VoiceServerAssistantDeltaMessage | VoiceServerAudioMessage | VoiceServerCallControlAckMessage | VoiceServerCallLifecycleMessage | VoiceServerCompleteMessage | VoiceServerErrorMessage | VoiceServerPongMessage | VoiceServerConnectionMessage;
1366
+ export type VoiceServerMessage<TResult = unknown> = VoiceServerSessionMessage | VoiceServerReplayMessage<TResult> | VoiceServerPartialMessage | VoiceServerFinalMessage | VoiceServerTurnMessage<TResult> | VoiceServerAssistantMessage | VoiceServerAssistantDeltaMessage | VoiceServerAudioMessage | VoiceServerPlaybackRateMessage | VoiceServerCallControlAckMessage | VoiceServerCallLifecycleMessage | VoiceServerCompleteMessage | VoiceServerErrorMessage | VoiceServerPongMessage | VoiceServerConnectionMessage;
1360
1367
  export type VoiceConnectionOptions = {
1361
1368
  browserMedia?: false | VoiceBrowserMediaReporterOptions;
1362
1369
  protocols?: string[];
@@ -1559,6 +1566,8 @@ export type VoiceStreamState<TResult = unknown> = {
1559
1566
  }>;
1560
1567
  error: string | null;
1561
1568
  isConnected: boolean;
1569
+ /** Latest server-requested assistant playback rate, or null if unchanged. */
1570
+ playbackRate: number | null;
1562
1571
  };
1563
1572
  export type VoiceStream<TResult = unknown> = {
1564
1573
  call: VoiceCallLifecycleState | null;
@@ -1578,6 +1587,7 @@ export type VoiceStream<TResult = unknown> = {
1578
1587
  getSnapshot: () => VoiceStreamState<TResult>;
1579
1588
  isConnected: boolean;
1580
1589
  partial: string;
1590
+ playbackRate: number | null;
1581
1591
  reconnect: VoiceReconnectClientState;
1582
1592
  sendAudio: (audio: Uint8Array | ArrayBuffer) => void;
1583
1593
  simulateDisconnect: () => void;
@@ -1678,6 +1688,7 @@ export type VoiceController<TResult = unknown> = {
1678
1688
  isConnected: boolean;
1679
1689
  isRecording: boolean;
1680
1690
  partial: string;
1691
+ playbackRate: number | null;
1681
1692
  reconnect: VoiceReconnectClientState;
1682
1693
  recordingError: string | null;
1683
1694
  sendAudio: (audio: Uint8Array | ArrayBuffer) => void;
@@ -1762,6 +1773,9 @@ export type VoiceStoreAction<TResult = unknown> = {
1762
1773
  type: "error";
1763
1774
  message: string;
1764
1775
  recoverable?: boolean;
1776
+ } | {
1777
+ type: "playback_rate";
1778
+ rate: number;
1765
1779
  } | {
1766
1780
  type: "connected";
1767
1781
  } | {
@@ -276,6 +276,11 @@ var serverMessageToAction = (message) => {
276
276
  transcript: message.transcript,
277
277
  type: "partial"
278
278
  };
279
+ case "playback_rate":
280
+ return {
281
+ rate: message.rate,
282
+ type: "playback_rate"
283
+ };
279
284
  case "replay":
280
285
  return {
281
286
  assistantTexts: message.assistantTexts,
@@ -607,6 +612,7 @@ var isVoiceServerMessage = (value) => {
607
612
  case "error":
608
613
  case "final":
609
614
  case "partial":
615
+ case "playback_rate":
610
616
  case "pong":
611
617
  case "replay":
612
618
  case "session":
@@ -1033,6 +1039,7 @@ var createInitialState = () => ({
1033
1039
  isConnected: false,
1034
1040
  paused: false,
1035
1041
  partial: "",
1042
+ playbackRate: null,
1036
1043
  reconnect: createInitialReconnectState(),
1037
1044
  scenarioId: null,
1038
1045
  sessionId: null,
@@ -1141,6 +1148,12 @@ var createVoiceStreamStore = () => {
1141
1148
  partial: joinPartial(turnFinalText, action.transcript.text)
1142
1149
  };
1143
1150
  break;
1151
+ case "playback_rate":
1152
+ state = {
1153
+ ...state,
1154
+ playbackRate: Math.max(0.5, Math.min(2, action.rate))
1155
+ };
1156
+ break;
1144
1157
  case "replay":
1145
1158
  turnFinalText = action.partial;
1146
1159
  state = {
@@ -1306,6 +1319,9 @@ var createVoiceStream = (path, options = {}) => {
1306
1319
  get partial() {
1307
1320
  return store.getSnapshot().partial;
1308
1321
  },
1322
+ get playbackRate() {
1323
+ return store.getSnapshot().playbackRate;
1324
+ },
1309
1325
  get paused() {
1310
1326
  return store.getSnapshot().paused;
1311
1327
  },
@@ -1641,6 +1657,7 @@ var createInitialState2 = (stream) => ({
1641
1657
  paused: stream.paused,
1642
1658
  pauseExpiresAt: stream.pauseExpiresAt,
1643
1659
  partial: stream.partial,
1660
+ playbackRate: stream.playbackRate,
1644
1661
  reconnect: stream.reconnect,
1645
1662
  recordingError: null,
1646
1663
  sessionId: stream.sessionId,
@@ -1678,6 +1695,7 @@ var createVoiceController = (path, options = {}) => {
1678
1695
  paused: stream.paused,
1679
1696
  pauseExpiresAt: stream.pauseExpiresAt,
1680
1697
  partial: stream.partial,
1698
+ playbackRate: stream.playbackRate,
1681
1699
  reconnect: stream.reconnect,
1682
1700
  sessionId: stream.sessionId,
1683
1701
  sessionMetadata: stream.sessionMetadata,
@@ -1824,6 +1842,9 @@ var createVoiceController = (path, options = {}) => {
1824
1842
  get partial() {
1825
1843
  return state.partial;
1826
1844
  },
1845
+ get playbackRate() {
1846
+ return state.playbackRate;
1847
+ },
1827
1848
  get paused() {
1828
1849
  return state.paused;
1829
1850
  },