@absolutejs/voice 0.0.22-beta.546 → 0.0.22-beta.547
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/core/types.d.ts +6 -2
- package/dist/index.js +17 -2
- package/dist/testing/index.js +54 -26
- package/package.json +1 -1
package/dist/core/types.d.ts
CHANGED
|
@@ -745,7 +745,9 @@ export type VoiceSurfaceConfig<O> = false | O | (Record<string, never> extends O
|
|
|
745
745
|
export type VoicePluginConfig<TContext = unknown, TSession extends VoiceSessionRecord = VoiceSessionRecord, TResult = unknown> = {
|
|
746
746
|
costTelemetry?: VoiceCostTelemetryConfig<TContext, TSession, TResult>;
|
|
747
747
|
path: string;
|
|
748
|
-
greeting?: string | ((
|
|
748
|
+
greeting?: string | ((input: {
|
|
749
|
+
session: TSession;
|
|
750
|
+
}) => string | Promise<string>);
|
|
749
751
|
languageStrategy?: VoiceLanguageStrategy;
|
|
750
752
|
lexicon?: VoiceLexiconEntry[] | VoiceLexiconResolver<TContext>;
|
|
751
753
|
phraseHints?: VoicePhraseHint[] | VoicePhraseHintResolver<TContext>;
|
|
@@ -859,7 +861,9 @@ export type CreateVoiceSessionOptions<TContext = unknown, TSession extends Voice
|
|
|
859
861
|
id: string;
|
|
860
862
|
context: TContext;
|
|
861
863
|
socket: VoiceSocket;
|
|
862
|
-
greeting?: string | ((
|
|
864
|
+
greeting?: string | ((input: {
|
|
865
|
+
session: TSession;
|
|
866
|
+
}) => string | Promise<string>);
|
|
863
867
|
stt?: STTAdapter;
|
|
864
868
|
realtime?: RealtimeAdapter;
|
|
865
869
|
realtimeInputFormat?: AudioFormat;
|
package/dist/index.js
CHANGED
|
@@ -5721,7 +5721,7 @@ var createVoiceSession = (options) => {
|
|
|
5721
5721
|
kickCallSilenceWatchdog();
|
|
5722
5722
|
startAmdEvaluationTimer();
|
|
5723
5723
|
if (shouldFireOnSession && options.greeting && session.turns.length === 0) {
|
|
5724
|
-
const greetingText = typeof options.greeting === "function" ? await options.greeting() : options.greeting;
|
|
5724
|
+
const greetingText = typeof options.greeting === "function" ? await options.greeting({ session }) : options.greeting;
|
|
5725
5725
|
const greetingTurnId = createId();
|
|
5726
5726
|
await send({
|
|
5727
5727
|
text: greetingText,
|
|
@@ -24302,8 +24302,23 @@ var createTwilioSocketAdapter = (socket, getState) => ({
|
|
|
24302
24302
|
if (!state.streamSid) {
|
|
24303
24303
|
return;
|
|
24304
24304
|
}
|
|
24305
|
+
const clearMessage = { event: "clear", streamSid: state.streamSid };
|
|
24305
24306
|
state.reviewRecorder?.recordTwilioOutbound({ event: "clear" });
|
|
24306
|
-
await
|
|
24307
|
+
await state.trace?.append({
|
|
24308
|
+
at: Date.now(),
|
|
24309
|
+
payload: {
|
|
24310
|
+
callSid: state.callSid ?? undefined,
|
|
24311
|
+
carrier: state.carrier,
|
|
24312
|
+
direction: "outbound",
|
|
24313
|
+
envelope: clearMessage,
|
|
24314
|
+
event: "clear",
|
|
24315
|
+
streamId: state.streamSid
|
|
24316
|
+
},
|
|
24317
|
+
scenarioId: state.scenarioId ?? undefined,
|
|
24318
|
+
sessionId: state.sessionId ?? state.streamSid,
|
|
24319
|
+
type: "client.telephony_media"
|
|
24320
|
+
});
|
|
24321
|
+
await Promise.resolve(socket.send(JSON.stringify(clearMessage)));
|
|
24307
24322
|
},
|
|
24308
24323
|
close: async (code, reason) => {
|
|
24309
24324
|
await Promise.resolve(socket.close(code, reason));
|
package/dist/testing/index.js
CHANGED
|
@@ -7538,7 +7538,7 @@ var createVoiceSession = (options) => {
|
|
|
7538
7538
|
kickCallSilenceWatchdog();
|
|
7539
7539
|
startAmdEvaluationTimer();
|
|
7540
7540
|
if (shouldFireOnSession && options.greeting && session.turns.length === 0) {
|
|
7541
|
-
const greetingText = typeof options.greeting === "function" ? await options.greeting() : options.greeting;
|
|
7541
|
+
const greetingText = typeof options.greeting === "function" ? await options.greeting({ session }) : options.greeting;
|
|
7542
7542
|
const greetingTurnId = createId();
|
|
7543
7543
|
await send({
|
|
7544
7544
|
text: greetingText,
|
|
@@ -12838,8 +12838,23 @@ var createTwilioSocketAdapter = (socket, getState) => ({
|
|
|
12838
12838
|
if (!state.streamSid) {
|
|
12839
12839
|
return;
|
|
12840
12840
|
}
|
|
12841
|
+
const clearMessage = { event: "clear", streamSid: state.streamSid };
|
|
12841
12842
|
state.reviewRecorder?.recordTwilioOutbound({ event: "clear" });
|
|
12842
|
-
await
|
|
12843
|
+
await state.trace?.append({
|
|
12844
|
+
at: Date.now(),
|
|
12845
|
+
payload: {
|
|
12846
|
+
callSid: state.callSid ?? undefined,
|
|
12847
|
+
carrier: state.carrier,
|
|
12848
|
+
direction: "outbound",
|
|
12849
|
+
envelope: clearMessage,
|
|
12850
|
+
event: "clear",
|
|
12851
|
+
streamId: state.streamSid
|
|
12852
|
+
},
|
|
12853
|
+
scenarioId: state.scenarioId ?? undefined,
|
|
12854
|
+
sessionId: state.sessionId ?? state.streamSid,
|
|
12855
|
+
type: "client.telephony_media"
|
|
12856
|
+
});
|
|
12857
|
+
await Promise.resolve(socket.send(JSON.stringify(clearMessage)));
|
|
12843
12858
|
},
|
|
12844
12859
|
close: async (code, reason) => {
|
|
12845
12860
|
await Promise.resolve(socket.close(code, reason));
|
|
@@ -13361,7 +13376,7 @@ var createFakeSTTAdapter = (inputSpy, sttDelayMs) => ({
|
|
|
13361
13376
|
final: new Set,
|
|
13362
13377
|
partial: new Set
|
|
13363
13378
|
};
|
|
13364
|
-
let
|
|
13379
|
+
let sendCount = 0;
|
|
13365
13380
|
return {
|
|
13366
13381
|
close: async () => {
|
|
13367
13382
|
for (const handler of listeners.close) {
|
|
@@ -13376,31 +13391,44 @@ var createFakeSTTAdapter = (inputSpy, sttDelayMs) => ({
|
|
|
13376
13391
|
},
|
|
13377
13392
|
send: async (audio) => {
|
|
13378
13393
|
inputSpy.push(toUint8Array2(audio));
|
|
13379
|
-
|
|
13394
|
+
sendCount += 1;
|
|
13395
|
+
if (sendCount === 1) {
|
|
13396
|
+
if (sttDelayMs > 0) {
|
|
13397
|
+
await Bun.sleep(sttDelayMs);
|
|
13398
|
+
}
|
|
13399
|
+
const receivedAt = Date.now();
|
|
13400
|
+
for (const handler of listeners.final) {
|
|
13401
|
+
handler({
|
|
13402
|
+
receivedAt,
|
|
13403
|
+
transcript: {
|
|
13404
|
+
id: "telephony-benchmark-final",
|
|
13405
|
+
isFinal: true,
|
|
13406
|
+
text: "hello from twilio"
|
|
13407
|
+
},
|
|
13408
|
+
type: "final"
|
|
13409
|
+
});
|
|
13410
|
+
}
|
|
13411
|
+
for (const handler of listeners.endOfTurn) {
|
|
13412
|
+
handler({
|
|
13413
|
+
reason: "vendor",
|
|
13414
|
+
receivedAt,
|
|
13415
|
+
type: "endOfTurn"
|
|
13416
|
+
});
|
|
13417
|
+
}
|
|
13380
13418
|
return;
|
|
13381
13419
|
}
|
|
13382
|
-
|
|
13383
|
-
|
|
13384
|
-
|
|
13385
|
-
|
|
13386
|
-
|
|
13387
|
-
|
|
13388
|
-
|
|
13389
|
-
|
|
13390
|
-
|
|
13391
|
-
|
|
13392
|
-
|
|
13393
|
-
|
|
13394
|
-
},
|
|
13395
|
-
type: "final"
|
|
13396
|
-
});
|
|
13397
|
-
}
|
|
13398
|
-
for (const handler of listeners.endOfTurn) {
|
|
13399
|
-
handler({
|
|
13400
|
-
reason: "vendor",
|
|
13401
|
-
receivedAt,
|
|
13402
|
-
type: "endOfTurn"
|
|
13403
|
-
});
|
|
13420
|
+
if (sendCount === 2) {
|
|
13421
|
+
for (const handler of listeners.partial) {
|
|
13422
|
+
handler({
|
|
13423
|
+
receivedAt: Date.now(),
|
|
13424
|
+
transcript: {
|
|
13425
|
+
id: "telephony-benchmark-partial",
|
|
13426
|
+
isFinal: false,
|
|
13427
|
+
text: "actually wait"
|
|
13428
|
+
},
|
|
13429
|
+
type: "partial"
|
|
13430
|
+
});
|
|
13431
|
+
}
|
|
13404
13432
|
}
|
|
13405
13433
|
}
|
|
13406
13434
|
};
|