@wix/legends-platform-sdk 1.32.0 → 1.33.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/components/ChromaKey/ChromaKey.js +14 -4
- package/dist/cjs/components/ChromaKey/ChromaKey.js.map +1 -1
- package/dist/cjs/components/ChromaKey/chroma-key.js +3 -0
- package/dist/cjs/components/ChromaKey/chroma-key.js.map +1 -1
- package/dist/cjs/components/LegendsPlatform/LegendsPlatform.js +32 -7
- package/dist/cjs/components/LegendsPlatform/LegendsPlatform.js.map +1 -1
- package/dist/cjs/components/Video/Video.js +16 -2
- package/dist/cjs/components/Video/Video.js.map +1 -1
- package/dist/cjs/components/Video/types.js.map +1 -1
- package/dist/cjs/components/VideoPostProcessor/VideoPostProcessor.js +12 -3
- package/dist/cjs/components/VideoPostProcessor/VideoPostProcessor.js.map +1 -1
- package/dist/cjs/hooks/useConversation/livekit/useConversation.js +24 -14
- package/dist/cjs/hooks/useConversation/livekit/useConversation.js.map +1 -1
- package/dist/cjs/hooks/useCreateConversation/useCreateConversation.js +11 -3
- package/dist/cjs/hooks/useCreateConversation/useCreateConversation.js.map +1 -1
- package/dist/cjs/sdk-consumer/context.js.map +1 -1
- package/dist/cjs/sdk.js +26 -0
- package/dist/cjs/sdk.js.map +1 -1
- package/dist/cjs/startup-telemetry/attempt.js +188 -0
- package/dist/cjs/startup-telemetry/attempt.js.map +1 -0
- package/dist/cjs/startup-telemetry/frame.js +83 -0
- package/dist/cjs/startup-telemetry/frame.js.map +1 -0
- package/dist/cjs/startup-telemetry/useStartupAttempt.js +15 -0
- package/dist/cjs/startup-telemetry/useStartupAttempt.js.map +1 -0
- package/dist/esm/components/ChromaKey/ChromaKey.js +12 -2
- package/dist/esm/components/ChromaKey/ChromaKey.js.map +1 -1
- package/dist/esm/components/ChromaKey/chroma-key.js +3 -0
- package/dist/esm/components/ChromaKey/chroma-key.js.map +1 -1
- package/dist/esm/components/LegendsPlatform/LegendsPlatform.js +28 -3
- package/dist/esm/components/LegendsPlatform/LegendsPlatform.js.map +1 -1
- package/dist/esm/components/Video/Video.js +16 -1
- package/dist/esm/components/Video/Video.js.map +1 -1
- package/dist/esm/components/Video/types.js.map +1 -1
- package/dist/esm/components/VideoPostProcessor/VideoPostProcessor.js +11 -2
- package/dist/esm/components/VideoPostProcessor/VideoPostProcessor.js.map +1 -1
- package/dist/esm/hooks/useConversation/livekit/useConversation.js +24 -14
- package/dist/esm/hooks/useConversation/livekit/useConversation.js.map +1 -1
- package/dist/esm/hooks/useCreateConversation/useCreateConversation.js +11 -3
- package/dist/esm/hooks/useCreateConversation/useCreateConversation.js.map +1 -1
- package/dist/esm/sdk-consumer/context.js.map +1 -1
- package/dist/esm/sdk.js +1 -0
- package/dist/esm/sdk.js.map +1 -1
- package/dist/esm/startup-telemetry/attempt.js +180 -0
- package/dist/esm/startup-telemetry/attempt.js.map +1 -0
- package/dist/esm/startup-telemetry/frame.js +77 -0
- package/dist/esm/startup-telemetry/frame.js.map +1 -0
- package/dist/esm/startup-telemetry/useStartupAttempt.js +10 -0
- package/dist/esm/startup-telemetry/useStartupAttempt.js.map +1 -0
- package/dist/types/components/ChromaKey/ChromaKey.d.ts +2 -0
- package/dist/types/components/ChromaKey/ChromaKey.d.ts.map +1 -1
- package/dist/types/components/ChromaKey/chroma-key.d.ts +1 -0
- package/dist/types/components/ChromaKey/chroma-key.d.ts.map +1 -1
- package/dist/types/components/LegendsPlatform/LegendsPlatform.d.ts +2 -0
- package/dist/types/components/LegendsPlatform/LegendsPlatform.d.ts.map +1 -1
- package/dist/types/components/Video/Video.d.ts +1 -0
- package/dist/types/components/Video/Video.d.ts.map +1 -1
- package/dist/types/components/Video/types.d.ts +2 -0
- package/dist/types/components/Video/types.d.ts.map +1 -1
- package/dist/types/components/VideoPostProcessor/VideoPostProcessor.d.ts +2 -0
- package/dist/types/components/VideoPostProcessor/VideoPostProcessor.d.ts.map +1 -1
- package/dist/types/hooks/useConversation/livekit/useConversation.d.ts.map +1 -1
- package/dist/types/hooks/useCreateConversation/useCreateConversation.d.ts.map +1 -1
- package/dist/types/sdk-consumer/context.d.ts +2 -0
- package/dist/types/sdk-consumer/context.d.ts.map +1 -1
- package/dist/types/sdk.d.ts +2 -0
- package/dist/types/sdk.d.ts.map +1 -1
- package/dist/types/startup-telemetry/attempt.d.ts +71 -0
- package/dist/types/startup-telemetry/attempt.d.ts.map +1 -0
- package/dist/types/startup-telemetry/frame.d.ts +6 -0
- package/dist/types/startup-telemetry/frame.d.ts.map +1 -0
- package/dist/types/startup-telemetry/useStartupAttempt.d.ts +2 -0
- package/dist/types/startup-telemetry/useStartupAttempt.d.ts.map +1 -0
- package/package.json +2 -2
|
@@ -44,10 +44,12 @@ function useConversation({
|
|
|
44
44
|
const [microphone, setMicrophone] = (0, _jotai.useAtom)(_conversation.state.microphone);
|
|
45
45
|
const [camera, setCamera] = (0, _jotai.useAtom)(_conversation.state.camera);
|
|
46
46
|
const {
|
|
47
|
-
tools: toolsRegistry = {}
|
|
47
|
+
tools: toolsRegistry = {},
|
|
48
|
+
startupTelemetrySession
|
|
48
49
|
} = (0, _sdkConsumer.useSdkConsumer)();
|
|
49
50
|
const toolRuntime = (0, _useToolCallingRuntime.useToolCallingRuntime)();
|
|
50
51
|
const toolsRegistryRef = (0, _reactUse.useLatest)(toolsRegistry);
|
|
52
|
+
const startupSessionRef = (0, _reactUse.useLatest)(startupTelemetrySession);
|
|
51
53
|
|
|
52
54
|
// for use in register/unregister room events
|
|
53
55
|
const conversationRef = (0, _reactUse.useLatest)(conversation.data);
|
|
@@ -156,8 +158,11 @@ function useConversation({
|
|
|
156
158
|
const url = new URL((conversation == null || (_conversation$data3 = conversation.data) == null ? void 0 : _conversation$data3.url) || '');
|
|
157
159
|
const accessToken = url.searchParams.get('token');
|
|
158
160
|
try {
|
|
161
|
+
var _startupTelemetrySess, _startupTelemetrySess2;
|
|
162
|
+
startupTelemetrySession == null || (_startupTelemetrySess = startupTelemetrySession.get(conversation.data.id)) == null || _startupTelemetrySess.mark('join_requested');
|
|
159
163
|
setUserConnectionState('joining');
|
|
160
164
|
await (room == null ? void 0 : room.connect(conversation.data.url, accessToken, {}));
|
|
165
|
+
startupTelemetrySession == null || (_startupTelemetrySess2 = startupTelemetrySession.get(conversation.data.id)) == null || _startupTelemetrySess2.mark('room_connected');
|
|
161
166
|
|
|
162
167
|
// sometimes the agent is already joined before the user joins the conversation
|
|
163
168
|
const remoteParticipant = (0, _utils.findJoinedAgentParticipant)(room, type);
|
|
@@ -166,6 +171,8 @@ function useConversation({
|
|
|
166
171
|
}
|
|
167
172
|
enableMediaDevices();
|
|
168
173
|
} catch (error) {
|
|
174
|
+
var _startupTelemetrySess3;
|
|
175
|
+
startupTelemetrySession == null || (_startupTelemetrySess3 = startupTelemetrySession.get(conversation.data.id)) == null || _startupTelemetrySess3.finish('error', 'join_failed');
|
|
169
176
|
console.error('Failed to join', error);
|
|
170
177
|
setUserConnectionState('join-error');
|
|
171
178
|
}
|
|
@@ -399,6 +406,8 @@ function useConversation({
|
|
|
399
406
|
setConversationStatus('error');
|
|
400
407
|
}
|
|
401
408
|
function handleDisconnectedEvent(reason) {
|
|
409
|
+
var _startupSessionRef$cu, _conversationRef$curr0;
|
|
410
|
+
(_startupSessionRef$cu = startupSessionRef.current) == null || (_startupSessionRef$cu = _startupSessionRef$cu.get((_conversationRef$curr0 = conversationRef.current) == null ? void 0 : _conversationRef$curr0.id)) == null || _startupSessionRef$cu.finish(reason === _livekitClient.DisconnectReason.CLIENT_INITIATED ? 'cancelled' : 'error', 'disconnected_before_frame');
|
|
402
411
|
isConnectedRef.current = false;
|
|
403
412
|
acousticPhaseRef.current = 'idle';
|
|
404
413
|
acousticT0Ref.current = null;
|
|
@@ -447,18 +456,19 @@ function useConversation({
|
|
|
447
456
|
}
|
|
448
457
|
}
|
|
449
458
|
function handleAgentJoin(participant) {
|
|
450
|
-
var _conversationRef$
|
|
459
|
+
var _startupSessionRef$cu2, _conversationRef$curr1, _conversationRef$curr10;
|
|
460
|
+
(_startupSessionRef$cu2 = startupSessionRef.current) == null || (_startupSessionRef$cu2 = _startupSessionRef$cu2.get((_conversationRef$curr1 = conversationRef.current) == null ? void 0 : _conversationRef$curr1.id)) == null || _startupSessionRef$cu2.mark('agent_joined');
|
|
451
461
|
setAgentConnectionState('joined');
|
|
452
462
|
emitEvent('agentJoined', {
|
|
453
|
-
conversationId: (_conversationRef$
|
|
463
|
+
conversationId: (_conversationRef$curr10 = conversationRef.current) == null ? void 0 : _conversationRef$curr10.id,
|
|
454
464
|
participant
|
|
455
465
|
});
|
|
456
466
|
}
|
|
457
467
|
function handleParticipantDisconnectedEvent(participant) {
|
|
458
|
-
var _conversationRef$
|
|
468
|
+
var _conversationRef$curr11;
|
|
459
469
|
setAgentConnectionState('left');
|
|
460
470
|
emitEvent('agentLeft', {
|
|
461
|
-
conversationId: (_conversationRef$
|
|
471
|
+
conversationId: (_conversationRef$curr11 = conversationRef.current) == null ? void 0 : _conversationRef$curr11.id,
|
|
462
472
|
participant
|
|
463
473
|
});
|
|
464
474
|
}
|
|
@@ -467,13 +477,13 @@ function useConversation({
|
|
|
467
477
|
return;
|
|
468
478
|
}
|
|
469
479
|
try {
|
|
470
|
-
var _conversationRef$
|
|
480
|
+
var _conversationRef$curr12;
|
|
471
481
|
setUserConnectionState('leaving');
|
|
472
482
|
await (room == null ? void 0 : room.disconnect(true));
|
|
473
483
|
setConversationStatus('destroyed');
|
|
474
484
|
setJoinedAt(undefined);
|
|
475
485
|
emitEvent('callEnded', {
|
|
476
|
-
conversationId: (_conversationRef$
|
|
486
|
+
conversationId: (_conversationRef$curr12 = conversationRef.current) == null ? void 0 : _conversationRef$curr12.id
|
|
477
487
|
});
|
|
478
488
|
} catch (error) {
|
|
479
489
|
console.error('Failed to leave', error);
|
|
@@ -481,22 +491,22 @@ function useConversation({
|
|
|
481
491
|
}
|
|
482
492
|
}
|
|
483
493
|
async function handleExpire() {
|
|
484
|
-
var _conversationRef$
|
|
494
|
+
var _conversationRef$curr13, _conversationRef$curr14;
|
|
485
495
|
// The duration timer keeps running after the call ends.
|
|
486
496
|
if (conversationStatus === 'credit-exhausted' || conversationStatus === 'conversation-limit-reached' || conversationStatus === 'plan-minutes-exhausted') {
|
|
487
497
|
return;
|
|
488
498
|
}
|
|
489
499
|
emitEvent('timeExceeded', {
|
|
490
|
-
conversationId: (_conversationRef$
|
|
491
|
-
limit: (_conversationRef$
|
|
500
|
+
conversationId: (_conversationRef$curr13 = conversationRef.current) == null ? void 0 : _conversationRef$curr13.id,
|
|
501
|
+
limit: (_conversationRef$curr14 = conversationRef.current) == null ? void 0 : _conversationRef$curr14.limit
|
|
492
502
|
});
|
|
493
503
|
await leave();
|
|
494
504
|
setConversationStatus('exceeded');
|
|
495
505
|
}
|
|
496
506
|
async function interrupt() {
|
|
497
|
-
var _conversationRef$
|
|
507
|
+
var _conversationRef$curr15;
|
|
498
508
|
emitEvent('interrupt', {
|
|
499
|
-
conversationId: (_conversationRef$
|
|
509
|
+
conversationId: (_conversationRef$curr15 = conversationRef.current) == null ? void 0 : _conversationRef$curr15.id
|
|
500
510
|
});
|
|
501
511
|
await (0, _utils.publishConversationDataMessage)(room, {}, 'interrupt');
|
|
502
512
|
}
|
|
@@ -506,7 +516,7 @@ function useConversation({
|
|
|
506
516
|
}, 'inactivity_dismiss');
|
|
507
517
|
}
|
|
508
518
|
async function send(message, attachments = []) {
|
|
509
|
-
var _conversationRef$
|
|
519
|
+
var _conversationRef$curr16;
|
|
510
520
|
await (room == null ? void 0 : room.localParticipant.sendText(message, {
|
|
511
521
|
topic: 'lk.chat',
|
|
512
522
|
attributes: {
|
|
@@ -514,7 +524,7 @@ function useConversation({
|
|
|
514
524
|
}
|
|
515
525
|
}));
|
|
516
526
|
emitEvent('userSendMessage', {
|
|
517
|
-
conversationId: (_conversationRef$
|
|
527
|
+
conversationId: (_conversationRef$curr16 = conversationRef.current) == null ? void 0 : _conversationRef$curr16.id,
|
|
518
528
|
message
|
|
519
529
|
});
|
|
520
530
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_react","require","_livekitClient","_invariant","_interopRequireDefault","_reactTimerHook","_reactUse","_componentsReact","_jotai","_conversation","_sdkConsumer","_useCreateConversation","_useSpeechActivityDetector","_useParticipantTrack","_useEmitConversationEvent","_useToolCallingRuntime","_serialize","_utils","_constants","useConversation","autoJoin","type","config","startWithMicrophone","startWithCamera","firstConversation","lastConversationTopic","conversationLanguage","_conversation$data2","setLogLevel","LogLevel","silent","conversation","useCreateConversation","room","useEnsureRoom","speaker","useAtomValue","state","microphone","setMicrophone","useAtom","camera","setCamera","tools","toolsRegistry","useSdkConsumer","toolRuntime","useToolCallingRuntime","toolsRegistryRef","useLatest","conversationRef","data","toolRuntimeRef","conversationStatus","setConversationStatus","userConnectionState","setUserConnectionState","joinedAt","setJoinedAt","setActiveMediaDevice","setMicrophoneDeviceId","useMediaDeviceSelect","kind","setSpeakerDeviceId","setCameraDeviceId","requestPermissions","enabled","setTranscriptions","useSetAtom","transcriptions","agentConnectionState","setAgentConnectionState","setAgentActivityState","agentActivityState","setUserActivityState","userActivityState","emitEvent","useEmitConversationEvent","inactivityTimeoutRef","useRef","creditExhaustedRef","conversationLimitReachedRef","planMinutesExhaustedRef","acousticPhaseRef","acousticT0Ref","latestTurnMetadataRef","isConnectedRef","userCumulativeTrackStatsRef","undefined","agentCumulativeTrackStatsRef","userMicPublication","useParticipantTrack","source","Source","Microphone","agentMicPublication","timer","useTimer","autoStart","onExpire","handleExpire","expiryTimestamp","Date","useEffect","registerRoomEvents","unregisterRoomEvents","useUpdateEffect","deviceId","localParticipant","setMicrophoneEnabled","setCameraEnabled","resolution","width","height","join","_conversation$data","limit","restart","getTime","_conversation$data3","invariant","url","URL","accessToken","searchParams","get","connect","remoteParticipant","findJoinedAgentParticipant","handleAgentJoin","enableMediaDevices","error","console","handleTranscriptionReceivedEvent","segments","participant","map","s","id","message","text","ParticipantKind","AGENT","old","mergeTranscriptions","handleTurnDetectionEvent","_conversationRef$curr","conversationId","current","participantKind","eventState","turnDetectionStrategy","sequence","speechId","handleAcousticUserOnset","handleAcousticUserOffset","timestampMs","ACOUSTIC_USER_HANGOVER_MS","handleAcousticAgentOnset","_conversationRef$curr2","latencyMs","emitConversationTurnLatency","clientAcousticLatencyMs","_conversationRef$curr3","userReport","agentReport","Promise","all","getTrackStats","userStats","parseTrackStats","agentStats","cumulativeTrackStats","rttMs","roundTripTimeMs","jitterBufferDelayMs","userPacketsLost","packetsLost","agentPacketsLost","handleAcousticAgentOffset","useSpeechActivityDetector","onSpeechStart","onSpeechEnd","thresholdRms","ACOUSTIC_USER_THRESHOLD_RMS","hangoverMs","ACOUSTIC_AGENT_HANGOVER_MS","handleInactivityWarningEvent","_conversationRef$curr4","gracePeriodSec","grace_period_sec","handleInactivityTimeoutEvent","_data","_conversationRef$curr5","handleGetToolsRpc","JSON","stringify","buildToolDefinitions","handleExecuteToolRpc","call","parseFunctionCallPayload","payload","functionCallId","result","executeToolCalls","extractToolErrorMessage","dataChannelHandlers","guard","checkIsTurnDetectionData","handle","checkIsInactivityWarningData","checkIsInactivityTimeoutData","handleDataReceivedEvent","_participant","_kind","topic","decoded","decodeDataPayload","checkIsCreditExhaustedMessage","_conversationRef$curr6","checkIsConversationLimitReachedMessage","_conversationRef$curr7","checkIsPlanMinutesExhaustedMessage","_conversationRef$curr8","resolve","catch","handleConnectedEvent","_conversationRef$curr9","handleEncryptionErrorEvent","handleDisconnectedEvent","reason","DisconnectReason","CLIENT_INITIATED","ROOM_CLOSED","handleParticipantConnectedEvent","shouldHandleParticipantConnected","_conversationRef$curr0","handleParticipantDisconnectedEvent","_conversationRef$curr1","leave","_conversationRef$curr10","disconnect","_conversationRef$curr11","_conversationRef$curr12","interrupt","_conversationRef$curr13","publishConversationDataMessage","dismissInactivity","send","attachments","_conversationRef$curr14","sendText","attributes","safeStringify","on","unregisterRpcMethod","GET_TOOLS_RPC_METHOD","EXECUTE_TOOL_RPC_METHOD","registerRpcMethod","off","status"],"sources":["../../../../../src/hooks/useConversation/livekit/useConversation.ts"],"sourcesContent":["import { useEffect, useRef } from 'react';\nimport {\n DisconnectReason,\n Participant,\n setLogLevel,\n ParticipantKind,\n RemoteParticipant,\n TranscriptionSegment,\n LogLevel,\n type RpcInvocationData,\n} from 'livekit-client';\nimport invariant from 'invariant';\nimport { useTimer } from 'react-timer-hook';\nimport { useLatest, useUpdateEffect } from 'react-use';\nimport { useEnsureRoom, useMediaDeviceSelect } from '@livekit/components-react';\nimport { useAtom, useAtomValue, useSetAtom } from 'jotai';\nimport {\n Conversation,\n state,\n type ConversationTranscription,\n} from '../../../conversation';\nimport type {\n UseConversationResult,\n UseConversationOptions,\n Attachment,\n} from '../types';\nimport type { FunctionCallResult } from '../../../types/service';\nimport { useSdkConsumer } from '../../../sdk-consumer';\nimport type {\n InactivityWarningData,\n InactivityTimeoutData,\n TurnDetectionData,\n} from './types';\nimport { useCreateConversation } from '../../useCreateConversation';\nimport { useSpeechActivityDetector } from '../../useSpeechActivityDetector';\nimport {\n useParticipantTrack,\n Source,\n getTrackStats,\n parseTrackStats,\n type CumulativeTrackStats,\n} from '../../useParticipantTrack';\n\nimport { useEmitConversationEvent } from '../../useConversationEvents/useEmitConversationEvent';\nimport { useToolCallingRuntime } from '../../useTools/runtime/useToolCallingRuntime';\nimport { extractToolErrorMessage } from '../../useTools/utils/serialize';\nimport {\n checkIsTurnDetectionData,\n checkIsInactivityWarningData,\n checkIsInactivityTimeoutData,\n checkIsCreditExhaustedMessage,\n checkIsConversationLimitReachedMessage,\n checkIsPlanMinutesExhaustedMessage,\n buildToolDefinitions,\n decodeDataPayload,\n findJoinedAgentParticipant,\n mergeTranscriptions,\n parseFunctionCallPayload,\n publishConversationDataMessage,\n safeStringify,\n shouldHandleParticipantConnected,\n} from './utils';\nimport {\n ACOUSTIC_AGENT_HANGOVER_MS,\n ACOUSTIC_USER_HANGOVER_MS,\n ACOUSTIC_USER_THRESHOLD_RMS,\n EXECUTE_TOOL_RPC_METHOD,\n GET_TOOLS_RPC_METHOD,\n} from './constants';\n\nexport function useConversation({\n autoJoin = true,\n type,\n config,\n startWithMicrophone = false,\n startWithCamera = false,\n firstConversation,\n lastConversationTopic,\n conversationLanguage,\n}: UseConversationOptions): UseConversationResult {\n setLogLevel(LogLevel.silent);\n\n const conversation = useCreateConversation({\n type,\n config,\n firstConversation,\n lastConversationTopic,\n conversationLanguage,\n });\n const room = useEnsureRoom();\n const speaker = useAtomValue(state.speaker);\n const [microphone, setMicrophone] = useAtom(state.microphone);\n const [camera, setCamera] = useAtom(state.camera);\n const { tools: toolsRegistry = {} } = useSdkConsumer();\n const toolRuntime = useToolCallingRuntime();\n const toolsRegistryRef = useLatest(toolsRegistry);\n\n // for use in register/unregister room events\n const conversationRef = useLatest<Conversation | undefined>(\n conversation.data,\n );\n const toolRuntimeRef = useLatest(toolRuntime);\n\n const [conversationStatus, setConversationStatus] = useAtom(\n state.conversationStatus,\n );\n\n const [userConnectionState, setUserConnectionState] = useAtom(\n state.userConnectionState,\n );\n\n const [joinedAt, setJoinedAt] = useAtom(state.joinedAt);\n\n const { setActiveMediaDevice: setMicrophoneDeviceId } = useMediaDeviceSelect({\n kind: 'audioinput',\n });\n const { setActiveMediaDevice: setSpeakerDeviceId } = useMediaDeviceSelect({\n kind: 'audiooutput',\n });\n const { setActiveMediaDevice: setCameraDeviceId } = useMediaDeviceSelect({\n kind: 'videoinput',\n requestPermissions: camera.enabled,\n });\n\n const setTranscriptions = useSetAtom(state.transcriptions);\n const [agentConnectionState, setAgentConnectionState] = useAtom(\n state.agentConnectionState,\n );\n const setAgentActivityState = useSetAtom(state.agentActivityState);\n const setUserActivityState = useSetAtom(state.userActivityState);\n const emitEvent = useEmitConversationEvent();\n\n const inactivityTimeoutRef = useRef(false);\n const creditExhaustedRef = useRef(false);\n const conversationLimitReachedRef = useRef(false);\n const planMinutesExhaustedRef = useRef(false);\n const acousticPhaseRef = useRef<'idle' | 'waitingForAgent' | 'busy'>('idle');\n const acousticT0Ref = useRef<number | null>(null);\n const latestTurnMetadataRef = useRef<{\n turnDetectionStrategy?: string;\n sequence?: number;\n speechId?: string;\n }>({});\n const isConnectedRef = useRef(false);\n const userCumulativeTrackStatsRef = useRef<CumulativeTrackStats | undefined>(\n undefined,\n );\n const agentCumulativeTrackStatsRef = useRef<CumulativeTrackStats | undefined>(\n undefined,\n );\n\n const userMicPublication = useParticipantTrack({\n type: 'user',\n source: Source.Microphone,\n });\n const agentMicPublication = useParticipantTrack({\n type: 'agent',\n source: Source.Microphone,\n });\n\n const timer = useTimer({\n autoStart: false,\n onExpire: handleExpire,\n expiryTimestamp: new Date(),\n });\n\n useEffect(() => {\n if (!room) {\n return;\n }\n registerRoomEvents();\n\n return () => {\n unregisterRoomEvents();\n };\n }, [room]);\n\n useUpdateEffect(() => {\n setMicrophoneDeviceId(microphone.deviceId);\n }, [microphone.deviceId]);\n\n useUpdateEffect(() => {\n setSpeakerDeviceId(speaker.deviceId);\n }, [speaker.deviceId]);\n\n useUpdateEffect(() => {\n setCameraDeviceId(camera.deviceId);\n }, [camera.deviceId]);\n\n useUpdateEffect(() => {\n if (agentConnectionState !== 'joined') {\n return;\n }\n room.localParticipant.setMicrophoneEnabled(microphone.enabled);\n }, [microphone.enabled, agentConnectionState]);\n\n useUpdateEffect(() => {\n if (agentConnectionState !== 'joined') {\n return;\n }\n room.localParticipant.setCameraEnabled(camera.enabled, {\n resolution: { width: 1920, height: 1080 },\n });\n }, [camera.enabled, agentConnectionState]);\n\n useEffect(() => {\n if (!autoJoin) {\n return;\n }\n\n if (conversationStatus === 'created') {\n void join();\n }\n }, [conversationStatus, autoJoin]);\n\n useEffect(() => {\n if (!joinedAt || conversation.data?.limit === undefined) {\n return;\n }\n\n timer.restart(new Date(joinedAt.getTime() + conversation.data!.limit!));\n }, [joinedAt, conversation.data?.limit]);\n\n async function join() {\n invariant(userConnectionState === 'idle', 'Already joined');\n invariant(conversation.data, 'Conversation is not ready');\n const url = new URL(conversation?.data?.url || '');\n const accessToken = url.searchParams.get('token');\n try {\n setUserConnectionState('joining');\n await room?.connect(conversation.data.url, accessToken!, {});\n\n // sometimes the agent is already joined before the user joins the conversation\n const remoteParticipant = findJoinedAgentParticipant(room, type);\n if (remoteParticipant && agentConnectionState !== 'joined') {\n handleAgentJoin(remoteParticipant);\n }\n\n enableMediaDevices();\n } catch (error) {\n console.error('Failed to join', error);\n setUserConnectionState('join-error');\n }\n }\n\n function enableMediaDevices() {\n if (startWithMicrophone) {\n setMicrophone({ ...microphone, enabled: true });\n }\n if (startWithCamera && type === 'video') {\n setCamera({ ...camera, enabled: true });\n }\n }\n\n function handleTranscriptionReceivedEvent(\n segments: TranscriptionSegment[],\n participant?: Participant,\n ) {\n const transcriptions: ConversationTranscription[] = segments.map((s) => ({\n id: s.id,\n message: s.text,\n source: participant?.kind === ParticipantKind.AGENT ? 'agent' : 'user',\n }));\n\n setTranscriptions((old) => mergeTranscriptions(transcriptions, old));\n }\n\n function handleTurnDetectionEvent(data: TurnDetectionData) {\n const conversationId = conversationRef.current?.id;\n const { participantKind, state: eventState } = data;\n switch (participantKind) {\n case 'STANDARD':\n if (eventState === 'listening') {\n latestTurnMetadataRef.current = {\n turnDetectionStrategy: data.turnDetectionStrategy,\n sequence: data.sequence,\n speechId: data.speechId,\n };\n }\n emitEvent(\n eventState === 'speaking' ? 'userSpeakStart' : 'userSpeakStop',\n { conversationId: conversationId! },\n );\n setUserActivityState(eventState);\n break;\n case 'AGENT':\n if (data.speechId) {\n latestTurnMetadataRef.current = {\n ...latestTurnMetadataRef.current,\n speechId: data.speechId,\n };\n }\n emitEvent(\n eventState === 'speaking' ? 'agentSpeakStart' : 'agentSpeakStop',\n { conversationId: conversationId! },\n );\n setAgentActivityState(eventState);\n break;\n }\n }\n\n function handleAcousticUserOnset() {\n if (!isConnectedRef.current) {\n return;\n }\n if (acousticPhaseRef.current === 'waitingForAgent') {\n acousticPhaseRef.current = 'idle';\n acousticT0Ref.current = null;\n }\n }\n\n function handleAcousticUserOffset(timestampMs: number) {\n if (!isConnectedRef.current || acousticPhaseRef.current !== 'idle') {\n return;\n }\n acousticT0Ref.current = timestampMs - ACOUSTIC_USER_HANGOVER_MS;\n acousticPhaseRef.current = 'waitingForAgent';\n }\n\n function handleAcousticAgentOnset(timestampMs: number) {\n if (\n !isConnectedRef.current ||\n acousticPhaseRef.current !== 'waitingForAgent' ||\n acousticT0Ref.current == null\n ) {\n return;\n }\n\n const latencyMs = timestampMs - acousticT0Ref.current;\n acousticT0Ref.current = null;\n acousticPhaseRef.current = 'busy';\n\n if (latencyMs < 0 || latencyMs > 15000) {\n return;\n }\n\n emitEvent('responseLatency', {\n conversationId: conversationRef.current?.id!,\n latencyMs,\n turnDetectionStrategy:\n latestTurnMetadataRef.current.turnDetectionStrategy!,\n sequence: latestTurnMetadataRef.current.sequence,\n speechId: latestTurnMetadataRef.current.speechId,\n });\n\n void emitConversationTurnLatency(latencyMs);\n }\n\n async function emitConversationTurnLatency(clientAcousticLatencyMs: number) {\n const [userReport, agentReport] = await Promise.all([\n getTrackStats(userMicPublication),\n getTrackStats(agentMicPublication),\n ]);\n const userStats = parseTrackStats(\n userReport,\n userCumulativeTrackStatsRef.current,\n );\n const agentStats = parseTrackStats(\n agentReport,\n agentCumulativeTrackStatsRef.current,\n );\n userCumulativeTrackStatsRef.current = userStats.cumulativeTrackStats;\n agentCumulativeTrackStatsRef.current = agentStats.cumulativeTrackStats;\n\n emitEvent('conversationTurnLatency', {\n conversationId: conversationRef.current?.id!,\n speechId: latestTurnMetadataRef.current.speechId,\n sequence: latestTurnMetadataRef.current.sequence,\n clientAcousticLatencyMs,\n rttMs: userStats.roundTripTimeMs,\n jitterBufferDelayMs: agentStats.jitterBufferDelayMs,\n userPacketsLost: userStats.packetsLost,\n agentPacketsLost: agentStats.packetsLost,\n });\n }\n\n function handleAcousticAgentOffset() {\n acousticPhaseRef.current = 'idle';\n }\n\n useSpeechActivityDetector({\n source: 'user',\n onSpeechStart: handleAcousticUserOnset,\n onSpeechEnd: handleAcousticUserOffset,\n thresholdRms: ACOUSTIC_USER_THRESHOLD_RMS,\n hangoverMs: ACOUSTIC_USER_HANGOVER_MS,\n });\n useSpeechActivityDetector({\n source: 'agent',\n onSpeechStart: handleAcousticAgentOnset,\n onSpeechEnd: handleAcousticAgentOffset,\n hangoverMs: ACOUSTIC_AGENT_HANGOVER_MS,\n });\n\n function handleInactivityWarningEvent(data: InactivityWarningData) {\n emitEvent('inactivityWarning', {\n conversationId: conversationRef.current?.id!,\n gracePeriodSec: data.grace_period_sec,\n });\n }\n\n function handleInactivityTimeoutEvent(_data: InactivityTimeoutData) {\n inactivityTimeoutRef.current = true;\n emitEvent('inactivityTimeout', {\n conversationId: conversationRef.current?.id!,\n });\n }\n\n async function handleGetToolsRpc() {\n return JSON.stringify(buildToolDefinitions(toolsRegistryRef.current));\n }\n\n async function handleExecuteToolRpc(data: RpcInvocationData) {\n const call = parseFunctionCallPayload(data.payload);\n if (!call) {\n return JSON.stringify({\n functionCallId: '',\n result: '',\n error: 'Malformed function call payload.',\n } satisfies FunctionCallResult);\n }\n try {\n const [result] = await toolRuntimeRef.current.executeToolCalls([call]);\n return JSON.stringify(result);\n } catch (error) {\n return JSON.stringify({\n functionCallId: call.functionCallId,\n result: '',\n error: extractToolErrorMessage(error),\n } satisfies FunctionCallResult);\n }\n }\n\n const dataChannelHandlers: {\n guard: (data: unknown) => boolean;\n handle: (data: unknown) => void | Promise<void>;\n }[] = [\n {\n guard: checkIsTurnDetectionData,\n handle: handleTurnDetectionEvent as (data: unknown) => void,\n },\n {\n guard: checkIsInactivityWarningData,\n handle: handleInactivityWarningEvent as (data: unknown) => void,\n },\n {\n guard: checkIsInactivityTimeoutData,\n handle: handleInactivityTimeoutEvent as (data: unknown) => void,\n },\n ];\n\n function handleDataReceivedEvent(\n payload: Uint8Array,\n _participant?: RemoteParticipant,\n _kind?: unknown,\n topic?: string,\n ) {\n const decoded = decodeDataPayload(payload);\n if (decoded === null) {\n return;\n }\n if (checkIsCreditExhaustedMessage(decoded, topic)) {\n creditExhaustedRef.current = true;\n emitEvent('creditExhausted', {\n conversationId: conversationRef.current?.id!,\n });\n return;\n }\n if (checkIsConversationLimitReachedMessage(decoded, topic)) {\n conversationLimitReachedRef.current = true;\n emitEvent('conversationLimitReached', {\n conversationId: conversationRef.current?.id!,\n });\n return;\n }\n if (checkIsPlanMinutesExhaustedMessage(decoded, topic)) {\n planMinutesExhaustedRef.current = true;\n emitEvent('planMinutesExhausted', {\n conversationId: conversationRef.current?.id!,\n });\n return;\n }\n for (const { guard, handle } of dataChannelHandlers) {\n if (guard(decoded)) {\n void Promise.resolve(handle(decoded)).catch((error) => {\n console.error('Failed to handle data channel payload', error);\n });\n return;\n }\n }\n }\n\n function handleConnectedEvent() {\n isConnectedRef.current = true;\n setUserConnectionState('joined');\n setAgentConnectionState('joining');\n emitEvent('callStarted', {\n conversationId: conversationRef.current?.id!,\n });\n }\n\n async function handleEncryptionErrorEvent(error: Error) {\n console.error('Encryption error', error);\n setConversationStatus('error');\n }\n\n function handleDisconnectedEvent(reason?: DisconnectReason) {\n isConnectedRef.current = false;\n acousticPhaseRef.current = 'idle';\n acousticT0Ref.current = null;\n latestTurnMetadataRef.current = {};\n userCumulativeTrackStatsRef.current = undefined;\n agentCumulativeTrackStatsRef.current = undefined;\n setAgentActivityState('idle');\n setAgentConnectionState('idle');\n setUserActivityState('idle');\n setUserConnectionState('idle');\n\n if (inactivityTimeoutRef.current) {\n inactivityTimeoutRef.current = false;\n setConversationStatus('inactivity-timeout');\n return;\n }\n\n if (creditExhaustedRef.current) {\n creditExhaustedRef.current = false;\n setConversationStatus('credit-exhausted');\n return;\n }\n\n if (conversationLimitReachedRef.current) {\n conversationLimitReachedRef.current = false;\n setConversationStatus('conversation-limit-reached');\n return;\n }\n\n if (planMinutesExhaustedRef.current) {\n planMinutesExhaustedRef.current = false;\n setConversationStatus('plan-minutes-exhausted');\n return;\n }\n\n switch (reason) {\n case DisconnectReason.CLIENT_INITIATED:\n break;\n case DisconnectReason.ROOM_CLOSED:\n setConversationStatus('destroyed');\n break;\n default:\n console.error('Conversation disconnected with reason', reason);\n setConversationStatus('error');\n break;\n }\n }\n\n function handleParticipantConnectedEvent(participant: RemoteParticipant) {\n if (shouldHandleParticipantConnected(participant, type)) {\n handleAgentJoin(participant);\n }\n }\n\n function handleAgentJoin(participant: RemoteParticipant) {\n setAgentConnectionState('joined');\n emitEvent('agentJoined', {\n conversationId: conversationRef.current?.id!,\n participant,\n });\n }\n\n function handleParticipantDisconnectedEvent(participant: RemoteParticipant) {\n setAgentConnectionState('left');\n emitEvent('agentLeft', {\n conversationId: conversationRef.current?.id!,\n participant,\n });\n }\n\n async function leave() {\n if (userConnectionState !== 'joined' && userConnectionState !== 'joining') {\n return;\n }\n\n try {\n setUserConnectionState('leaving');\n await room?.disconnect(true);\n setConversationStatus('destroyed');\n setJoinedAt(undefined);\n emitEvent('callEnded', {\n conversationId: conversationRef.current?.id!,\n });\n } catch (error) {\n console.error('Failed to leave', error);\n setConversationStatus('error');\n }\n }\n\n async function handleExpire() {\n // The duration timer keeps running after the call ends.\n if (\n conversationStatus === 'credit-exhausted' ||\n conversationStatus === 'conversation-limit-reached' ||\n conversationStatus === 'plan-minutes-exhausted'\n ) {\n return;\n }\n emitEvent('timeExceeded', {\n conversationId: conversationRef.current?.id!,\n limit: conversationRef.current?.limit!,\n });\n await leave();\n setConversationStatus('exceeded');\n }\n\n async function interrupt() {\n emitEvent('interrupt', {\n conversationId: conversationRef.current?.id!,\n });\n\n await publishConversationDataMessage(room, {}, 'interrupt');\n }\n\n async function dismissInactivity() {\n await publishConversationDataMessage(\n room,\n { type: 'inactivity_dismiss' },\n 'inactivity_dismiss',\n );\n }\n\n async function send(message: string, attachments: Attachment[] = []) {\n await room?.localParticipant.sendText(message, {\n topic: 'lk.chat',\n attributes: {\n attachments: safeStringify(attachments),\n },\n });\n emitEvent('userSendMessage', {\n conversationId: conversationRef.current?.id!,\n message,\n });\n }\n\n function registerRoomEvents() {\n room\n .on('connected', handleConnectedEvent)\n .on('encryptionError', handleEncryptionErrorEvent)\n .on('disconnected', handleDisconnectedEvent)\n .on('transcriptionReceived', handleTranscriptionReceivedEvent)\n .on('participantConnected', handleParticipantConnectedEvent)\n .on('participantDisconnected', handleParticipantDisconnectedEvent)\n .on('dataReceived', handleDataReceivedEvent);\n room.unregisterRpcMethod(GET_TOOLS_RPC_METHOD);\n room.unregisterRpcMethod(EXECUTE_TOOL_RPC_METHOD);\n room.registerRpcMethod(GET_TOOLS_RPC_METHOD, handleGetToolsRpc);\n room.registerRpcMethod(EXECUTE_TOOL_RPC_METHOD, handleExecuteToolRpc);\n }\n\n function unregisterRoomEvents() {\n room.unregisterRpcMethod(GET_TOOLS_RPC_METHOD);\n room.unregisterRpcMethod(EXECUTE_TOOL_RPC_METHOD);\n room.off('connected', handleConnectedEvent);\n room.off('encryptionError', handleEncryptionErrorEvent);\n room.off('disconnected', handleDisconnectedEvent);\n room.off('transcriptionReceived', handleTranscriptionReceivedEvent);\n room.off('participantConnected', handleParticipantConnectedEvent);\n room.off('participantDisconnected', handleParticipantDisconnectedEvent);\n room.off('dataReceived', handleDataReceivedEvent);\n }\n\n return {\n status: conversationStatus,\n conversation: conversation.data,\n join,\n send,\n interrupt,\n dismissInactivity,\n leave,\n };\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["_react","require","_livekitClient","_invariant","_interopRequireDefault","_reactTimerHook","_reactUse","_componentsReact","_jotai","_conversation","_sdkConsumer","_useCreateConversation","_useSpeechActivityDetector","_useParticipantTrack","_useEmitConversationEvent","_useToolCallingRuntime","_serialize","_utils","_constants","useConversation","autoJoin","type","config","startWithMicrophone","startWithCamera","firstConversation","lastConversationTopic","conversationLanguage","_conversation$data2","setLogLevel","LogLevel","silent","conversation","useCreateConversation","room","useEnsureRoom","speaker","useAtomValue","state","microphone","setMicrophone","useAtom","camera","setCamera","tools","toolsRegistry","startupTelemetrySession","useSdkConsumer","toolRuntime","useToolCallingRuntime","toolsRegistryRef","useLatest","startupSessionRef","conversationRef","data","toolRuntimeRef","conversationStatus","setConversationStatus","userConnectionState","setUserConnectionState","joinedAt","setJoinedAt","setActiveMediaDevice","setMicrophoneDeviceId","useMediaDeviceSelect","kind","setSpeakerDeviceId","setCameraDeviceId","requestPermissions","enabled","setTranscriptions","useSetAtom","transcriptions","agentConnectionState","setAgentConnectionState","setAgentActivityState","agentActivityState","setUserActivityState","userActivityState","emitEvent","useEmitConversationEvent","inactivityTimeoutRef","useRef","creditExhaustedRef","conversationLimitReachedRef","planMinutesExhaustedRef","acousticPhaseRef","acousticT0Ref","latestTurnMetadataRef","isConnectedRef","userCumulativeTrackStatsRef","undefined","agentCumulativeTrackStatsRef","userMicPublication","useParticipantTrack","source","Source","Microphone","agentMicPublication","timer","useTimer","autoStart","onExpire","handleExpire","expiryTimestamp","Date","useEffect","registerRoomEvents","unregisterRoomEvents","useUpdateEffect","deviceId","localParticipant","setMicrophoneEnabled","setCameraEnabled","resolution","width","height","join","_conversation$data","limit","restart","getTime","_conversation$data3","invariant","url","URL","accessToken","searchParams","get","_startupTelemetrySess","_startupTelemetrySess2","id","mark","connect","remoteParticipant","findJoinedAgentParticipant","handleAgentJoin","enableMediaDevices","error","_startupTelemetrySess3","finish","console","handleTranscriptionReceivedEvent","segments","participant","map","s","message","text","ParticipantKind","AGENT","old","mergeTranscriptions","handleTurnDetectionEvent","_conversationRef$curr","conversationId","current","participantKind","eventState","turnDetectionStrategy","sequence","speechId","handleAcousticUserOnset","handleAcousticUserOffset","timestampMs","ACOUSTIC_USER_HANGOVER_MS","handleAcousticAgentOnset","_conversationRef$curr2","latencyMs","emitConversationTurnLatency","clientAcousticLatencyMs","_conversationRef$curr3","userReport","agentReport","Promise","all","getTrackStats","userStats","parseTrackStats","agentStats","cumulativeTrackStats","rttMs","roundTripTimeMs","jitterBufferDelayMs","userPacketsLost","packetsLost","agentPacketsLost","handleAcousticAgentOffset","useSpeechActivityDetector","onSpeechStart","onSpeechEnd","thresholdRms","ACOUSTIC_USER_THRESHOLD_RMS","hangoverMs","ACOUSTIC_AGENT_HANGOVER_MS","handleInactivityWarningEvent","_conversationRef$curr4","gracePeriodSec","grace_period_sec","handleInactivityTimeoutEvent","_data","_conversationRef$curr5","handleGetToolsRpc","JSON","stringify","buildToolDefinitions","handleExecuteToolRpc","call","parseFunctionCallPayload","payload","functionCallId","result","executeToolCalls","extractToolErrorMessage","dataChannelHandlers","guard","checkIsTurnDetectionData","handle","checkIsInactivityWarningData","checkIsInactivityTimeoutData","handleDataReceivedEvent","_participant","_kind","topic","decoded","decodeDataPayload","checkIsCreditExhaustedMessage","_conversationRef$curr6","checkIsConversationLimitReachedMessage","_conversationRef$curr7","checkIsPlanMinutesExhaustedMessage","_conversationRef$curr8","resolve","catch","handleConnectedEvent","_conversationRef$curr9","handleEncryptionErrorEvent","handleDisconnectedEvent","reason","_startupSessionRef$cu","_conversationRef$curr0","DisconnectReason","CLIENT_INITIATED","ROOM_CLOSED","handleParticipantConnectedEvent","shouldHandleParticipantConnected","_startupSessionRef$cu2","_conversationRef$curr1","_conversationRef$curr10","handleParticipantDisconnectedEvent","_conversationRef$curr11","leave","_conversationRef$curr12","disconnect","_conversationRef$curr13","_conversationRef$curr14","interrupt","_conversationRef$curr15","publishConversationDataMessage","dismissInactivity","send","attachments","_conversationRef$curr16","sendText","attributes","safeStringify","on","unregisterRpcMethod","GET_TOOLS_RPC_METHOD","EXECUTE_TOOL_RPC_METHOD","registerRpcMethod","off","status"],"sources":["../../../../../src/hooks/useConversation/livekit/useConversation.ts"],"sourcesContent":["import { useEffect, useRef } from 'react';\nimport {\n DisconnectReason,\n Participant,\n setLogLevel,\n ParticipantKind,\n RemoteParticipant,\n TranscriptionSegment,\n LogLevel,\n type RpcInvocationData,\n} from 'livekit-client';\nimport invariant from 'invariant';\nimport { useTimer } from 'react-timer-hook';\nimport { useLatest, useUpdateEffect } from 'react-use';\nimport { useEnsureRoom, useMediaDeviceSelect } from '@livekit/components-react';\nimport { useAtom, useAtomValue, useSetAtom } from 'jotai';\nimport {\n Conversation,\n state,\n type ConversationTranscription,\n} from '../../../conversation';\nimport type {\n UseConversationResult,\n UseConversationOptions,\n Attachment,\n} from '../types';\nimport type { FunctionCallResult } from '../../../types/service';\nimport { useSdkConsumer } from '../../../sdk-consumer';\nimport type {\n InactivityWarningData,\n InactivityTimeoutData,\n TurnDetectionData,\n} from './types';\nimport { useCreateConversation } from '../../useCreateConversation';\nimport { useSpeechActivityDetector } from '../../useSpeechActivityDetector';\nimport {\n useParticipantTrack,\n Source,\n getTrackStats,\n parseTrackStats,\n type CumulativeTrackStats,\n} from '../../useParticipantTrack';\n\nimport { useEmitConversationEvent } from '../../useConversationEvents/useEmitConversationEvent';\nimport { useToolCallingRuntime } from '../../useTools/runtime/useToolCallingRuntime';\nimport { extractToolErrorMessage } from '../../useTools/utils/serialize';\nimport {\n checkIsTurnDetectionData,\n checkIsInactivityWarningData,\n checkIsInactivityTimeoutData,\n checkIsCreditExhaustedMessage,\n checkIsConversationLimitReachedMessage,\n checkIsPlanMinutesExhaustedMessage,\n buildToolDefinitions,\n decodeDataPayload,\n findJoinedAgentParticipant,\n mergeTranscriptions,\n parseFunctionCallPayload,\n publishConversationDataMessage,\n safeStringify,\n shouldHandleParticipantConnected,\n} from './utils';\nimport {\n ACOUSTIC_AGENT_HANGOVER_MS,\n ACOUSTIC_USER_HANGOVER_MS,\n ACOUSTIC_USER_THRESHOLD_RMS,\n EXECUTE_TOOL_RPC_METHOD,\n GET_TOOLS_RPC_METHOD,\n} from './constants';\n\nexport function useConversation({\n autoJoin = true,\n type,\n config,\n startWithMicrophone = false,\n startWithCamera = false,\n firstConversation,\n lastConversationTopic,\n conversationLanguage,\n}: UseConversationOptions): UseConversationResult {\n setLogLevel(LogLevel.silent);\n\n const conversation = useCreateConversation({\n type,\n config,\n firstConversation,\n lastConversationTopic,\n conversationLanguage,\n });\n const room = useEnsureRoom();\n const speaker = useAtomValue(state.speaker);\n const [microphone, setMicrophone] = useAtom(state.microphone);\n const [camera, setCamera] = useAtom(state.camera);\n const { tools: toolsRegistry = {}, startupTelemetrySession } =\n useSdkConsumer();\n const toolRuntime = useToolCallingRuntime();\n const toolsRegistryRef = useLatest(toolsRegistry);\n const startupSessionRef = useLatest(startupTelemetrySession);\n\n // for use in register/unregister room events\n const conversationRef = useLatest<Conversation | undefined>(\n conversation.data,\n );\n const toolRuntimeRef = useLatest(toolRuntime);\n\n const [conversationStatus, setConversationStatus] = useAtom(\n state.conversationStatus,\n );\n\n const [userConnectionState, setUserConnectionState] = useAtom(\n state.userConnectionState,\n );\n\n const [joinedAt, setJoinedAt] = useAtom(state.joinedAt);\n\n const { setActiveMediaDevice: setMicrophoneDeviceId } = useMediaDeviceSelect({\n kind: 'audioinput',\n });\n const { setActiveMediaDevice: setSpeakerDeviceId } = useMediaDeviceSelect({\n kind: 'audiooutput',\n });\n const { setActiveMediaDevice: setCameraDeviceId } = useMediaDeviceSelect({\n kind: 'videoinput',\n requestPermissions: camera.enabled,\n });\n\n const setTranscriptions = useSetAtom(state.transcriptions);\n const [agentConnectionState, setAgentConnectionState] = useAtom(\n state.agentConnectionState,\n );\n const setAgentActivityState = useSetAtom(state.agentActivityState);\n const setUserActivityState = useSetAtom(state.userActivityState);\n const emitEvent = useEmitConversationEvent();\n\n const inactivityTimeoutRef = useRef(false);\n const creditExhaustedRef = useRef(false);\n const conversationLimitReachedRef = useRef(false);\n const planMinutesExhaustedRef = useRef(false);\n const acousticPhaseRef = useRef<'idle' | 'waitingForAgent' | 'busy'>('idle');\n const acousticT0Ref = useRef<number | null>(null);\n const latestTurnMetadataRef = useRef<{\n turnDetectionStrategy?: string;\n sequence?: number;\n speechId?: string;\n }>({});\n const isConnectedRef = useRef(false);\n const userCumulativeTrackStatsRef = useRef<CumulativeTrackStats | undefined>(\n undefined,\n );\n const agentCumulativeTrackStatsRef = useRef<CumulativeTrackStats | undefined>(\n undefined,\n );\n\n const userMicPublication = useParticipantTrack({\n type: 'user',\n source: Source.Microphone,\n });\n const agentMicPublication = useParticipantTrack({\n type: 'agent',\n source: Source.Microphone,\n });\n\n const timer = useTimer({\n autoStart: false,\n onExpire: handleExpire,\n expiryTimestamp: new Date(),\n });\n\n useEffect(() => {\n if (!room) {\n return;\n }\n registerRoomEvents();\n\n return () => {\n unregisterRoomEvents();\n };\n }, [room]);\n\n useUpdateEffect(() => {\n setMicrophoneDeviceId(microphone.deviceId);\n }, [microphone.deviceId]);\n\n useUpdateEffect(() => {\n setSpeakerDeviceId(speaker.deviceId);\n }, [speaker.deviceId]);\n\n useUpdateEffect(() => {\n setCameraDeviceId(camera.deviceId);\n }, [camera.deviceId]);\n\n useUpdateEffect(() => {\n if (agentConnectionState !== 'joined') {\n return;\n }\n room.localParticipant.setMicrophoneEnabled(microphone.enabled);\n }, [microphone.enabled, agentConnectionState]);\n\n useUpdateEffect(() => {\n if (agentConnectionState !== 'joined') {\n return;\n }\n room.localParticipant.setCameraEnabled(camera.enabled, {\n resolution: { width: 1920, height: 1080 },\n });\n }, [camera.enabled, agentConnectionState]);\n\n useEffect(() => {\n if (!autoJoin) {\n return;\n }\n\n if (conversationStatus === 'created') {\n void join();\n }\n }, [conversationStatus, autoJoin]);\n\n useEffect(() => {\n if (!joinedAt || conversation.data?.limit === undefined) {\n return;\n }\n\n timer.restart(new Date(joinedAt.getTime() + conversation.data!.limit!));\n }, [joinedAt, conversation.data?.limit]);\n\n async function join() {\n invariant(userConnectionState === 'idle', 'Already joined');\n invariant(conversation.data, 'Conversation is not ready');\n const url = new URL(conversation?.data?.url || '');\n const accessToken = url.searchParams.get('token');\n try {\n startupTelemetrySession\n ?.get(conversation.data.id)\n ?.mark('join_requested');\n setUserConnectionState('joining');\n await room?.connect(conversation.data.url, accessToken!, {});\n startupTelemetrySession\n ?.get(conversation.data.id)\n ?.mark('room_connected');\n\n // sometimes the agent is already joined before the user joins the conversation\n const remoteParticipant = findJoinedAgentParticipant(room, type);\n if (remoteParticipant && agentConnectionState !== 'joined') {\n handleAgentJoin(remoteParticipant);\n }\n\n enableMediaDevices();\n } catch (error) {\n startupTelemetrySession\n ?.get(conversation.data.id)\n ?.finish('error', 'join_failed');\n console.error('Failed to join', error);\n setUserConnectionState('join-error');\n }\n }\n\n function enableMediaDevices() {\n if (startWithMicrophone) {\n setMicrophone({ ...microphone, enabled: true });\n }\n if (startWithCamera && type === 'video') {\n setCamera({ ...camera, enabled: true });\n }\n }\n\n function handleTranscriptionReceivedEvent(\n segments: TranscriptionSegment[],\n participant?: Participant,\n ) {\n const transcriptions: ConversationTranscription[] = segments.map((s) => ({\n id: s.id,\n message: s.text,\n source: participant?.kind === ParticipantKind.AGENT ? 'agent' : 'user',\n }));\n\n setTranscriptions((old) => mergeTranscriptions(transcriptions, old));\n }\n\n function handleTurnDetectionEvent(data: TurnDetectionData) {\n const conversationId = conversationRef.current?.id;\n const { participantKind, state: eventState } = data;\n switch (participantKind) {\n case 'STANDARD':\n if (eventState === 'listening') {\n latestTurnMetadataRef.current = {\n turnDetectionStrategy: data.turnDetectionStrategy,\n sequence: data.sequence,\n speechId: data.speechId,\n };\n }\n emitEvent(\n eventState === 'speaking' ? 'userSpeakStart' : 'userSpeakStop',\n { conversationId: conversationId! },\n );\n setUserActivityState(eventState);\n break;\n case 'AGENT':\n if (data.speechId) {\n latestTurnMetadataRef.current = {\n ...latestTurnMetadataRef.current,\n speechId: data.speechId,\n };\n }\n emitEvent(\n eventState === 'speaking' ? 'agentSpeakStart' : 'agentSpeakStop',\n { conversationId: conversationId! },\n );\n setAgentActivityState(eventState);\n break;\n }\n }\n\n function handleAcousticUserOnset() {\n if (!isConnectedRef.current) {\n return;\n }\n if (acousticPhaseRef.current === 'waitingForAgent') {\n acousticPhaseRef.current = 'idle';\n acousticT0Ref.current = null;\n }\n }\n\n function handleAcousticUserOffset(timestampMs: number) {\n if (!isConnectedRef.current || acousticPhaseRef.current !== 'idle') {\n return;\n }\n acousticT0Ref.current = timestampMs - ACOUSTIC_USER_HANGOVER_MS;\n acousticPhaseRef.current = 'waitingForAgent';\n }\n\n function handleAcousticAgentOnset(timestampMs: number) {\n if (\n !isConnectedRef.current ||\n acousticPhaseRef.current !== 'waitingForAgent' ||\n acousticT0Ref.current == null\n ) {\n return;\n }\n\n const latencyMs = timestampMs - acousticT0Ref.current;\n acousticT0Ref.current = null;\n acousticPhaseRef.current = 'busy';\n\n if (latencyMs < 0 || latencyMs > 15000) {\n return;\n }\n\n emitEvent('responseLatency', {\n conversationId: conversationRef.current?.id!,\n latencyMs,\n turnDetectionStrategy:\n latestTurnMetadataRef.current.turnDetectionStrategy!,\n sequence: latestTurnMetadataRef.current.sequence,\n speechId: latestTurnMetadataRef.current.speechId,\n });\n\n void emitConversationTurnLatency(latencyMs);\n }\n\n async function emitConversationTurnLatency(clientAcousticLatencyMs: number) {\n const [userReport, agentReport] = await Promise.all([\n getTrackStats(userMicPublication),\n getTrackStats(agentMicPublication),\n ]);\n const userStats = parseTrackStats(\n userReport,\n userCumulativeTrackStatsRef.current,\n );\n const agentStats = parseTrackStats(\n agentReport,\n agentCumulativeTrackStatsRef.current,\n );\n userCumulativeTrackStatsRef.current = userStats.cumulativeTrackStats;\n agentCumulativeTrackStatsRef.current = agentStats.cumulativeTrackStats;\n\n emitEvent('conversationTurnLatency', {\n conversationId: conversationRef.current?.id!,\n speechId: latestTurnMetadataRef.current.speechId,\n sequence: latestTurnMetadataRef.current.sequence,\n clientAcousticLatencyMs,\n rttMs: userStats.roundTripTimeMs,\n jitterBufferDelayMs: agentStats.jitterBufferDelayMs,\n userPacketsLost: userStats.packetsLost,\n agentPacketsLost: agentStats.packetsLost,\n });\n }\n\n function handleAcousticAgentOffset() {\n acousticPhaseRef.current = 'idle';\n }\n\n useSpeechActivityDetector({\n source: 'user',\n onSpeechStart: handleAcousticUserOnset,\n onSpeechEnd: handleAcousticUserOffset,\n thresholdRms: ACOUSTIC_USER_THRESHOLD_RMS,\n hangoverMs: ACOUSTIC_USER_HANGOVER_MS,\n });\n useSpeechActivityDetector({\n source: 'agent',\n onSpeechStart: handleAcousticAgentOnset,\n onSpeechEnd: handleAcousticAgentOffset,\n hangoverMs: ACOUSTIC_AGENT_HANGOVER_MS,\n });\n\n function handleInactivityWarningEvent(data: InactivityWarningData) {\n emitEvent('inactivityWarning', {\n conversationId: conversationRef.current?.id!,\n gracePeriodSec: data.grace_period_sec,\n });\n }\n\n function handleInactivityTimeoutEvent(_data: InactivityTimeoutData) {\n inactivityTimeoutRef.current = true;\n emitEvent('inactivityTimeout', {\n conversationId: conversationRef.current?.id!,\n });\n }\n\n async function handleGetToolsRpc() {\n return JSON.stringify(buildToolDefinitions(toolsRegistryRef.current));\n }\n\n async function handleExecuteToolRpc(data: RpcInvocationData) {\n const call = parseFunctionCallPayload(data.payload);\n if (!call) {\n return JSON.stringify({\n functionCallId: '',\n result: '',\n error: 'Malformed function call payload.',\n } satisfies FunctionCallResult);\n }\n try {\n const [result] = await toolRuntimeRef.current.executeToolCalls([call]);\n return JSON.stringify(result);\n } catch (error) {\n return JSON.stringify({\n functionCallId: call.functionCallId,\n result: '',\n error: extractToolErrorMessage(error),\n } satisfies FunctionCallResult);\n }\n }\n\n const dataChannelHandlers: {\n guard: (data: unknown) => boolean;\n handle: (data: unknown) => void | Promise<void>;\n }[] = [\n {\n guard: checkIsTurnDetectionData,\n handle: handleTurnDetectionEvent as (data: unknown) => void,\n },\n {\n guard: checkIsInactivityWarningData,\n handle: handleInactivityWarningEvent as (data: unknown) => void,\n },\n {\n guard: checkIsInactivityTimeoutData,\n handle: handleInactivityTimeoutEvent as (data: unknown) => void,\n },\n ];\n\n function handleDataReceivedEvent(\n payload: Uint8Array,\n _participant?: RemoteParticipant,\n _kind?: unknown,\n topic?: string,\n ) {\n const decoded = decodeDataPayload(payload);\n if (decoded === null) {\n return;\n }\n if (checkIsCreditExhaustedMessage(decoded, topic)) {\n creditExhaustedRef.current = true;\n emitEvent('creditExhausted', {\n conversationId: conversationRef.current?.id!,\n });\n return;\n }\n if (checkIsConversationLimitReachedMessage(decoded, topic)) {\n conversationLimitReachedRef.current = true;\n emitEvent('conversationLimitReached', {\n conversationId: conversationRef.current?.id!,\n });\n return;\n }\n if (checkIsPlanMinutesExhaustedMessage(decoded, topic)) {\n planMinutesExhaustedRef.current = true;\n emitEvent('planMinutesExhausted', {\n conversationId: conversationRef.current?.id!,\n });\n return;\n }\n for (const { guard, handle } of dataChannelHandlers) {\n if (guard(decoded)) {\n void Promise.resolve(handle(decoded)).catch((error) => {\n console.error('Failed to handle data channel payload', error);\n });\n return;\n }\n }\n }\n\n function handleConnectedEvent() {\n isConnectedRef.current = true;\n setUserConnectionState('joined');\n setAgentConnectionState('joining');\n emitEvent('callStarted', {\n conversationId: conversationRef.current?.id!,\n });\n }\n\n async function handleEncryptionErrorEvent(error: Error) {\n console.error('Encryption error', error);\n setConversationStatus('error');\n }\n\n function handleDisconnectedEvent(reason?: DisconnectReason) {\n startupSessionRef.current\n ?.get(conversationRef.current?.id)\n ?.finish(\n reason === DisconnectReason.CLIENT_INITIATED ? 'cancelled' : 'error',\n 'disconnected_before_frame',\n );\n isConnectedRef.current = false;\n acousticPhaseRef.current = 'idle';\n acousticT0Ref.current = null;\n latestTurnMetadataRef.current = {};\n userCumulativeTrackStatsRef.current = undefined;\n agentCumulativeTrackStatsRef.current = undefined;\n setAgentActivityState('idle');\n setAgentConnectionState('idle');\n setUserActivityState('idle');\n setUserConnectionState('idle');\n\n if (inactivityTimeoutRef.current) {\n inactivityTimeoutRef.current = false;\n setConversationStatus('inactivity-timeout');\n return;\n }\n\n if (creditExhaustedRef.current) {\n creditExhaustedRef.current = false;\n setConversationStatus('credit-exhausted');\n return;\n }\n\n if (conversationLimitReachedRef.current) {\n conversationLimitReachedRef.current = false;\n setConversationStatus('conversation-limit-reached');\n return;\n }\n\n if (planMinutesExhaustedRef.current) {\n planMinutesExhaustedRef.current = false;\n setConversationStatus('plan-minutes-exhausted');\n return;\n }\n\n switch (reason) {\n case DisconnectReason.CLIENT_INITIATED:\n break;\n case DisconnectReason.ROOM_CLOSED:\n setConversationStatus('destroyed');\n break;\n default:\n console.error('Conversation disconnected with reason', reason);\n setConversationStatus('error');\n break;\n }\n }\n\n function handleParticipantConnectedEvent(participant: RemoteParticipant) {\n if (shouldHandleParticipantConnected(participant, type)) {\n handleAgentJoin(participant);\n }\n }\n\n function handleAgentJoin(participant: RemoteParticipant) {\n startupSessionRef.current\n ?.get(conversationRef.current?.id)\n ?.mark('agent_joined');\n setAgentConnectionState('joined');\n emitEvent('agentJoined', {\n conversationId: conversationRef.current?.id!,\n participant,\n });\n }\n\n function handleParticipantDisconnectedEvent(participant: RemoteParticipant) {\n setAgentConnectionState('left');\n emitEvent('agentLeft', {\n conversationId: conversationRef.current?.id!,\n participant,\n });\n }\n\n async function leave() {\n if (userConnectionState !== 'joined' && userConnectionState !== 'joining') {\n return;\n }\n\n try {\n setUserConnectionState('leaving');\n await room?.disconnect(true);\n setConversationStatus('destroyed');\n setJoinedAt(undefined);\n emitEvent('callEnded', {\n conversationId: conversationRef.current?.id!,\n });\n } catch (error) {\n console.error('Failed to leave', error);\n setConversationStatus('error');\n }\n }\n\n async function handleExpire() {\n // The duration timer keeps running after the call ends.\n if (\n conversationStatus === 'credit-exhausted' ||\n conversationStatus === 'conversation-limit-reached' ||\n conversationStatus === 'plan-minutes-exhausted'\n ) {\n return;\n }\n emitEvent('timeExceeded', {\n conversationId: conversationRef.current?.id!,\n limit: conversationRef.current?.limit!,\n });\n await leave();\n setConversationStatus('exceeded');\n }\n\n async function interrupt() {\n emitEvent('interrupt', {\n conversationId: conversationRef.current?.id!,\n });\n\n await publishConversationDataMessage(room, {}, 'interrupt');\n }\n\n async function dismissInactivity() {\n await publishConversationDataMessage(\n room,\n { type: 'inactivity_dismiss' },\n 'inactivity_dismiss',\n );\n }\n\n async function send(message: string, attachments: Attachment[] = []) {\n await room?.localParticipant.sendText(message, {\n topic: 'lk.chat',\n attributes: {\n attachments: safeStringify(attachments),\n },\n });\n emitEvent('userSendMessage', {\n conversationId: conversationRef.current?.id!,\n message,\n });\n }\n\n function registerRoomEvents() {\n room\n .on('connected', handleConnectedEvent)\n .on('encryptionError', handleEncryptionErrorEvent)\n .on('disconnected', handleDisconnectedEvent)\n .on('transcriptionReceived', handleTranscriptionReceivedEvent)\n .on('participantConnected', handleParticipantConnectedEvent)\n .on('participantDisconnected', handleParticipantDisconnectedEvent)\n .on('dataReceived', handleDataReceivedEvent);\n room.unregisterRpcMethod(GET_TOOLS_RPC_METHOD);\n room.unregisterRpcMethod(EXECUTE_TOOL_RPC_METHOD);\n room.registerRpcMethod(GET_TOOLS_RPC_METHOD, handleGetToolsRpc);\n room.registerRpcMethod(EXECUTE_TOOL_RPC_METHOD, handleExecuteToolRpc);\n }\n\n function unregisterRoomEvents() {\n room.unregisterRpcMethod(GET_TOOLS_RPC_METHOD);\n room.unregisterRpcMethod(EXECUTE_TOOL_RPC_METHOD);\n room.off('connected', handleConnectedEvent);\n room.off('encryptionError', handleEncryptionErrorEvent);\n room.off('disconnected', handleDisconnectedEvent);\n room.off('transcriptionReceived', handleTranscriptionReceivedEvent);\n room.off('participantConnected', handleParticipantConnectedEvent);\n room.off('participantDisconnected', handleParticipantDisconnectedEvent);\n room.off('dataReceived', handleDataReceivedEvent);\n }\n\n return {\n status: conversationStatus,\n conversation: conversation.data,\n join,\n send,\n interrupt,\n dismissInactivity,\n leave,\n };\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -23,19 +23,25 @@ function useCreateConversation(options) {
|
|
|
23
23
|
const {
|
|
24
24
|
chatId,
|
|
25
25
|
namespace,
|
|
26
|
-
personaChatService
|
|
26
|
+
personaChatService,
|
|
27
|
+
startupTelemetrySession
|
|
27
28
|
} = (0, _sdkConsumer.useSdkConsumer)();
|
|
28
29
|
const setConversationStatus = (0, _jotai.useSetAtom)(_conversation.state.conversationStatus);
|
|
29
30
|
const [conversation, setConversation] = (0, _jotai.useAtom)(_conversation.state.conversation);
|
|
30
31
|
const emitEvent = (0, _useEmitConversationEvent.useEmitConversationEvent)();
|
|
31
32
|
(0, _react.useEffect)(() => {
|
|
32
|
-
|
|
33
|
+
const startupAttempt = type === 'video' ? startupTelemetrySession == null ? void 0 : startupTelemetrySession.start() : undefined;
|
|
34
|
+
startupAttempt == null || startupAttempt.mark('api_request');
|
|
35
|
+
void create(startupAttempt).then(() => setConversationStatus('created')).catch(error => {
|
|
36
|
+
startupAttempt == null || startupAttempt.finish('error', 'create_failed');
|
|
33
37
|
const status = (0, _createConversationFailureStatus.createConversationFailureStatus)(error);
|
|
34
38
|
if (status === 'plan-minutes-exhausted') {
|
|
35
39
|
emitEvent('planMinutesExhausted', {});
|
|
36
40
|
}
|
|
37
41
|
setConversationStatus(status);
|
|
38
42
|
});
|
|
43
|
+
return () => startupTelemetrySession == null ? void 0 : startupTelemetrySession.release(startupAttempt);
|
|
44
|
+
// Telemetry changes must not issue another create-conversation request.
|
|
39
45
|
}, [type, chatId]);
|
|
40
46
|
(0, _reactUse.useUnmount)(() => {
|
|
41
47
|
if (!conversation) {
|
|
@@ -55,7 +61,7 @@ function useCreateConversation(options) {
|
|
|
55
61
|
data: conversation,
|
|
56
62
|
destroy
|
|
57
63
|
};
|
|
58
|
-
async function create() {
|
|
64
|
+
async function create(startupAttempt) {
|
|
59
65
|
(0, _invariant.default)(personaChatService, 'personaChatService is required. Pass it as a prop to LegendsPlatform.');
|
|
60
66
|
switch (type) {
|
|
61
67
|
case 'video':
|
|
@@ -68,6 +74,8 @@ function useCreateConversation(options) {
|
|
|
68
74
|
lastConversationTopic,
|
|
69
75
|
conversationLanguage
|
|
70
76
|
});
|
|
77
|
+
startupTelemetrySession == null || startupTelemetrySession.bind(startupAttempt, result.id);
|
|
78
|
+
startupAttempt == null || startupAttempt.mark('api_response');
|
|
71
79
|
setConversation({
|
|
72
80
|
type: 'video',
|
|
73
81
|
url: result.url,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_invariant","_interopRequireDefault","require","_react","_jotai","_reactUse","_conversation","_sdkConsumer","_useEmitConversationEvent","_createConversationFailureStatus","_helpers","useCreateConversation","options","type","config","chatConfig","firstConversation","lastConversationTopic","conversationLanguage","chatId","namespace","personaChatService","useSdkConsumer","setConversationStatus","useSetAtom","state","conversationStatus","conversation","setConversation","useAtom","emitEvent","useEmitConversationEvent","useEffect","create","then","catch","error","status","createConversationFailureStatus","useUnmount","destroy","limit","data","invariant","result","createInteractiveConversation","
|
|
1
|
+
{"version":3,"names":["_invariant","_interopRequireDefault","require","_react","_jotai","_reactUse","_conversation","_sdkConsumer","_useEmitConversationEvent","_createConversationFailureStatus","_helpers","useCreateConversation","options","type","config","chatConfig","firstConversation","lastConversationTopic","conversationLanguage","chatId","namespace","personaChatService","startupTelemetrySession","useSdkConsumer","setConversationStatus","useSetAtom","state","conversationStatus","conversation","setConversation","useAtom","emitEvent","useEmitConversationEvent","useEffect","startupAttempt","start","undefined","mark","create","then","catch","error","finish","status","createConversationFailureStatus","release","useUnmount","destroy","limit","data","invariant","result","createInteractiveConversation","bind","id","url","createVoiceConversation","Error","endInteractiveConversation","conversationId"],"sources":["../../../../src/hooks/useCreateConversation/useCreateConversation.ts"],"sourcesContent":["import invariant from 'invariant';\nimport { useEffect } from 'react';\nimport { useAtom, useSetAtom } from 'jotai';\nimport { useUnmount } from 'react-use';\n\nimport {\n state,\n type ConversationType,\n type Conversation,\n} from '../../conversation';\nimport { useSdkConsumer } from '../../sdk-consumer';\nimport { useEmitConversationEvent } from '../useConversationEvents/useEmitConversationEvent';\nimport { createConversationFailureStatus } from './createConversationFailureStatus';\nimport { limit } from './helpers';\nimport type { StartupAttempt } from '../../startup-telemetry/attempt';\n\nexport type UseCreateConversationOptions = {\n type: ConversationType;\n config?: object;\n /** Whether this is the visitor's first-ever conversation with the persona (drives the opening message). */\n firstConversation?: boolean;\n /** Title of the visitor's last meaningful conversation, for a returning-visitor greeting. */\n lastConversationTopic?: string;\n /** Language or locale for a new voice/video call, e.g. es or en-GB. Omit to keep the default behavior. */\n conversationLanguage?: string;\n};\n\nexport type UseCreateConversationResult = {\n data?: Conversation;\n destroy(): Promise<void>;\n};\n\nexport function useCreateConversation(\n options: UseCreateConversationOptions,\n): UseCreateConversationResult {\n const {\n type,\n config: chatConfig,\n firstConversation,\n lastConversationTopic,\n conversationLanguage,\n } = options;\n\n const { chatId, namespace, personaChatService, startupTelemetrySession } =\n useSdkConsumer();\n\n const setConversationStatus = useSetAtom(state.conversationStatus);\n const [conversation, setConversation] = useAtom(state.conversation);\n const emitEvent = useEmitConversationEvent();\n\n useEffect(() => {\n const startupAttempt =\n type === 'video' ? startupTelemetrySession?.start() : undefined;\n startupAttempt?.mark('api_request');\n void create(startupAttempt)\n .then(() => setConversationStatus('created'))\n .catch((error: unknown) => {\n startupAttempt?.finish('error', 'create_failed');\n const status = createConversationFailureStatus(error);\n if (status === 'plan-minutes-exhausted') {\n emitEvent('planMinutesExhausted', {});\n }\n setConversationStatus(status);\n });\n return () => startupTelemetrySession?.release(startupAttempt);\n // Telemetry changes must not issue another create-conversation request.\n }, [type, chatId]);\n\n useUnmount(() => {\n if (!conversation) {\n return;\n }\n void destroy();\n });\n\n useEffect(() => {\n if (!conversation) {\n return;\n }\n if (conversation.limit === 0) {\n setConversationStatus('exceeded');\n }\n }, [conversation]);\n\n return { data: conversation, destroy };\n\n async function create(startupAttempt?: StartupAttempt) {\n invariant(\n personaChatService,\n 'personaChatService is required. Pass it as a prop to LegendsPlatform.',\n );\n\n switch (type) {\n case 'video': {\n const result = await personaChatService.createInteractiveConversation({\n chatId,\n namespace,\n chatConfig,\n firstConversation,\n lastConversationTopic,\n conversationLanguage,\n });\n startupTelemetrySession?.bind(startupAttempt, result.id);\n startupAttempt?.mark('api_response');\n setConversation({\n type: 'video',\n url: result.url,\n id: result.id,\n limit: limit(result.limit),\n });\n break;\n }\n case 'audio': {\n const result = await personaChatService.createVoiceConversation({\n chatId,\n namespace,\n chatConfig,\n firstConversation,\n lastConversationTopic,\n conversationLanguage,\n });\n setConversation({\n type: 'audio',\n url: result.url,\n id: result.id,\n limit: limit(result.limit),\n });\n break;\n }\n default:\n throw new Error(`Unsupported conversation type: ${type}`);\n }\n }\n\n async function destroy() {\n invariant(conversation, 'Conversation is not ready');\n invariant(personaChatService, 'personaChatService is required.');\n\n setConversationStatus('destroying');\n\n if (conversation.type === 'video') {\n await personaChatService\n .endInteractiveConversation({\n chatId,\n conversationId: conversation.id,\n namespace,\n })\n .catch(() => {});\n }\n\n setConversationStatus('destroyed');\n setConversation(undefined);\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_react","require","SdkConsumerContext","exports","createContext","chatId","namespace","tools","useSdkConsumer","useContext"],"sources":["../../../src/sdk-consumer/context.ts"],"sourcesContent":["import { createContext, useContext } from 'react';\n\nimport type { ToolsRegistry } from '../hooks';\nimport type { IPersonaChatService } from '../types';\n\nexport interface ISdkConsumerContext {\n chatId: string;\n namespace: string;\n tools?: ToolsRegistry;\n personaChatService?: IPersonaChatService;\n}\n\nexport const SdkConsumerContext = createContext<ISdkConsumerContext>({\n chatId: '',\n namespace: '',\n tools: {},\n});\n\nexport function useSdkConsumer() {\n return useContext(SdkConsumerContext);\n}\n"],"mappings":";;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;
|
|
1
|
+
{"version":3,"names":["_react","require","SdkConsumerContext","exports","createContext","chatId","namespace","tools","useSdkConsumer","useContext"],"sources":["../../../src/sdk-consumer/context.ts"],"sourcesContent":["import { createContext, useContext } from 'react';\nimport type { StartupTelemetrySession } from '../startup-telemetry/attempt';\n\nimport type { ToolsRegistry } from '../hooks';\nimport type { IPersonaChatService } from '../types';\n\nexport interface ISdkConsumerContext {\n startupTelemetrySession?: StartupTelemetrySession;\n chatId: string;\n namespace: string;\n tools?: ToolsRegistry;\n personaChatService?: IPersonaChatService;\n}\n\nexport const SdkConsumerContext = createContext<ISdkConsumerContext>({\n chatId: '',\n namespace: '',\n tools: {},\n});\n\nexport function useSdkConsumer() {\n return useContext(SdkConsumerContext);\n}\n"],"mappings":";;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AAcO,MAAMC,kBAAkB,GAAAC,OAAA,CAAAD,kBAAA,gBAAG,IAAAE,oBAAa,EAAsB;EACnEC,MAAM,EAAE,EAAE;EACVC,SAAS,EAAE,EAAE;EACbC,KAAK,EAAE,CAAC;AACV,CAAC,CAAC;AAEK,SAASC,cAAcA,CAAA,EAAG;EAC/B,OAAO,IAAAC,iBAAU,EAACP,kBAAkB,CAAC;AACvC","ignoreList":[]}
|
package/dist/cjs/sdk.js
CHANGED
|
@@ -1,112 +1,138 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
exports.__esModule = true;
|
|
4
|
+
var _exportNames = {
|
|
5
|
+
createStartupIntent: true,
|
|
6
|
+
StartupAttempt: true
|
|
7
|
+
};
|
|
8
|
+
exports.createStartupIntent = exports.StartupAttempt = void 0;
|
|
4
9
|
var _types = require("./types");
|
|
5
10
|
Object.keys(_types).forEach(function (key) {
|
|
6
11
|
if (key === "default" || key === "__esModule") return;
|
|
12
|
+
if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
|
|
7
13
|
if (key in exports && exports[key] === _types[key]) return;
|
|
8
14
|
exports[key] = _types[key];
|
|
9
15
|
});
|
|
10
16
|
var _useTextChat = require("./hooks/useTextChat");
|
|
11
17
|
Object.keys(_useTextChat).forEach(function (key) {
|
|
12
18
|
if (key === "default" || key === "__esModule") return;
|
|
19
|
+
if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
|
|
13
20
|
if (key in exports && exports[key] === _useTextChat[key]) return;
|
|
14
21
|
exports[key] = _useTextChat[key];
|
|
15
22
|
});
|
|
16
23
|
var _useTranscriptions = require("./hooks/useTranscriptions");
|
|
17
24
|
Object.keys(_useTranscriptions).forEach(function (key) {
|
|
18
25
|
if (key === "default" || key === "__esModule") return;
|
|
26
|
+
if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
|
|
19
27
|
if (key in exports && exports[key] === _useTranscriptions[key]) return;
|
|
20
28
|
exports[key] = _useTranscriptions[key];
|
|
21
29
|
});
|
|
22
30
|
var _useConversationStatus = require("./hooks/useConversationStatus");
|
|
23
31
|
Object.keys(_useConversationStatus).forEach(function (key) {
|
|
24
32
|
if (key === "default" || key === "__esModule") return;
|
|
33
|
+
if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
|
|
25
34
|
if (key in exports && exports[key] === _useConversationStatus[key]) return;
|
|
26
35
|
exports[key] = _useConversationStatus[key];
|
|
27
36
|
});
|
|
28
37
|
var _useMicrophone = require("./hooks/useMicrophone");
|
|
29
38
|
Object.keys(_useMicrophone).forEach(function (key) {
|
|
30
39
|
if (key === "default" || key === "__esModule") return;
|
|
40
|
+
if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
|
|
31
41
|
if (key in exports && exports[key] === _useMicrophone[key]) return;
|
|
32
42
|
exports[key] = _useMicrophone[key];
|
|
33
43
|
});
|
|
34
44
|
var _useSpeaker = require("./hooks/useSpeaker");
|
|
35
45
|
Object.keys(_useSpeaker).forEach(function (key) {
|
|
36
46
|
if (key === "default" || key === "__esModule") return;
|
|
47
|
+
if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
|
|
37
48
|
if (key in exports && exports[key] === _useSpeaker[key]) return;
|
|
38
49
|
exports[key] = _useSpeaker[key];
|
|
39
50
|
});
|
|
40
51
|
var _useCamera = require("./hooks/useCamera");
|
|
41
52
|
Object.keys(_useCamera).forEach(function (key) {
|
|
42
53
|
if (key === "default" || key === "__esModule") return;
|
|
54
|
+
if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
|
|
43
55
|
if (key in exports && exports[key] === _useCamera[key]) return;
|
|
44
56
|
exports[key] = _useCamera[key];
|
|
45
57
|
});
|
|
46
58
|
var _useMediaRecorder = require("./hooks/useMediaRecorder");
|
|
47
59
|
Object.keys(_useMediaRecorder).forEach(function (key) {
|
|
48
60
|
if (key === "default" || key === "__esModule") return;
|
|
61
|
+
if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
|
|
49
62
|
if (key in exports && exports[key] === _useMediaRecorder[key]) return;
|
|
50
63
|
exports[key] = _useMediaRecorder[key];
|
|
51
64
|
});
|
|
52
65
|
var _useConversationTimer = require("./hooks/useConversationTimer");
|
|
53
66
|
Object.keys(_useConversationTimer).forEach(function (key) {
|
|
54
67
|
if (key === "default" || key === "__esModule") return;
|
|
68
|
+
if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
|
|
55
69
|
if (key in exports && exports[key] === _useConversationTimer[key]) return;
|
|
56
70
|
exports[key] = _useConversationTimer[key];
|
|
57
71
|
});
|
|
58
72
|
var _useConversationEvents = require("./hooks/useConversationEvents");
|
|
59
73
|
Object.keys(_useConversationEvents).forEach(function (key) {
|
|
60
74
|
if (key === "default" || key === "__esModule") return;
|
|
75
|
+
if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
|
|
61
76
|
if (key in exports && exports[key] === _useConversationEvents[key]) return;
|
|
62
77
|
exports[key] = _useConversationEvents[key];
|
|
63
78
|
});
|
|
64
79
|
var _useUserActivity = require("./hooks/useUserActivity");
|
|
65
80
|
Object.keys(_useUserActivity).forEach(function (key) {
|
|
66
81
|
if (key === "default" || key === "__esModule") return;
|
|
82
|
+
if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
|
|
67
83
|
if (key in exports && exports[key] === _useUserActivity[key]) return;
|
|
68
84
|
exports[key] = _useUserActivity[key];
|
|
69
85
|
});
|
|
70
86
|
var _useAudio = require("./hooks/useAudio");
|
|
71
87
|
Object.keys(_useAudio).forEach(function (key) {
|
|
72
88
|
if (key === "default" || key === "__esModule") return;
|
|
89
|
+
if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
|
|
73
90
|
if (key in exports && exports[key] === _useAudio[key]) return;
|
|
74
91
|
exports[key] = _useAudio[key];
|
|
75
92
|
});
|
|
76
93
|
var _useConnectionState = require("./hooks/useConnectionState");
|
|
77
94
|
Object.keys(_useConnectionState).forEach(function (key) {
|
|
78
95
|
if (key === "default" || key === "__esModule") return;
|
|
96
|
+
if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
|
|
79
97
|
if (key in exports && exports[key] === _useConnectionState[key]) return;
|
|
80
98
|
exports[key] = _useConnectionState[key];
|
|
81
99
|
});
|
|
82
100
|
var _useActivityState = require("./hooks/useActivityState");
|
|
83
101
|
Object.keys(_useActivityState).forEach(function (key) {
|
|
84
102
|
if (key === "default" || key === "__esModule") return;
|
|
103
|
+
if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
|
|
85
104
|
if (key in exports && exports[key] === _useActivityState[key]) return;
|
|
86
105
|
exports[key] = _useActivityState[key];
|
|
87
106
|
});
|
|
88
107
|
var _usePictureInPicture = require("./hooks/usePictureInPicture");
|
|
89
108
|
Object.keys(_usePictureInPicture).forEach(function (key) {
|
|
90
109
|
if (key === "default" || key === "__esModule") return;
|
|
110
|
+
if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
|
|
91
111
|
if (key in exports && exports[key] === _usePictureInPicture[key]) return;
|
|
92
112
|
exports[key] = _usePictureInPicture[key];
|
|
93
113
|
});
|
|
94
114
|
var _useMediaPermissions = require("./hooks/useMediaPermissions");
|
|
95
115
|
Object.keys(_useMediaPermissions).forEach(function (key) {
|
|
96
116
|
if (key === "default" || key === "__esModule") return;
|
|
117
|
+
if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
|
|
97
118
|
if (key in exports && exports[key] === _useMediaPermissions[key]) return;
|
|
98
119
|
exports[key] = _useMediaPermissions[key];
|
|
99
120
|
});
|
|
100
121
|
var _useTools = require("./hooks/useTools");
|
|
101
122
|
Object.keys(_useTools).forEach(function (key) {
|
|
102
123
|
if (key === "default" || key === "__esModule") return;
|
|
124
|
+
if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
|
|
103
125
|
if (key in exports && exports[key] === _useTools[key]) return;
|
|
104
126
|
exports[key] = _useTools[key];
|
|
105
127
|
});
|
|
106
128
|
var _types2 = require("./conversation/types");
|
|
107
129
|
Object.keys(_types2).forEach(function (key) {
|
|
108
130
|
if (key === "default" || key === "__esModule") return;
|
|
131
|
+
if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
|
|
109
132
|
if (key in exports && exports[key] === _types2[key]) return;
|
|
110
133
|
exports[key] = _types2[key];
|
|
111
134
|
});
|
|
135
|
+
var _attempt = require("./startup-telemetry/attempt");
|
|
136
|
+
exports.createStartupIntent = _attempt.createStartupIntent;
|
|
137
|
+
exports.StartupAttempt = _attempt.StartupAttempt;
|
|
112
138
|
//# sourceMappingURL=sdk.js.map
|