@wix/legends-platform-sdk 1.24.0 → 1.25.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/README.md +21 -3
- package/dist/cjs/hooks/useConversation/livekit/constants.js +3 -1
- package/dist/cjs/hooks/useConversation/livekit/constants.js.map +1 -1
- package/dist/cjs/hooks/useConversation/livekit/types.js.map +1 -1
- package/dist/cjs/hooks/useConversation/livekit/useConversation.js +34 -6
- package/dist/cjs/hooks/useConversation/livekit/useConversation.js.map +1 -1
- package/dist/cjs/hooks/useConversation/livekit/utils/dataChannel.js +0 -4
- package/dist/cjs/hooks/useConversation/livekit/utils/dataChannel.js.map +1 -1
- package/dist/cjs/hooks/useConversation/livekit/utils/index.js +10 -4
- package/dist/cjs/hooks/useConversation/livekit/utils/index.js.map +1 -1
- package/dist/cjs/hooks/useConversation/livekit/utils/rpc.js +16 -0
- package/dist/cjs/hooks/useConversation/livekit/utils/rpc.js.map +1 -0
- package/dist/cjs/hooks/useConversation/livekit/utils/toolDefinitions.js +22 -0
- package/dist/cjs/hooks/useConversation/livekit/utils/toolDefinitions.js.map +1 -0
- package/dist/cjs/hooks/useTools/index.js.map +1 -1
- package/dist/cjs/hooks/useTools/model/types.js.map +1 -1
- package/dist/cjs/hooks/useTools/runtime/executeToolCall.js +2 -1
- package/dist/cjs/hooks/useTools/runtime/executeToolCall.js.map +1 -1
- package/dist/cjs/hooks/useTools/runtime/useToolCallingRuntime.js +10 -1
- package/dist/cjs/hooks/useTools/runtime/useToolCallingRuntime.js.map +1 -1
- package/dist/esm/hooks/useConversation/livekit/constants.js +2 -0
- package/dist/esm/hooks/useConversation/livekit/constants.js.map +1 -1
- package/dist/esm/hooks/useConversation/livekit/types.js.map +1 -1
- package/dist/esm/hooks/useConversation/livekit/useConversation.js +37 -8
- package/dist/esm/hooks/useConversation/livekit/useConversation.js.map +1 -1
- package/dist/esm/hooks/useConversation/livekit/utils/dataChannel.js +0 -3
- package/dist/esm/hooks/useConversation/livekit/utils/dataChannel.js.map +1 -1
- package/dist/esm/hooks/useConversation/livekit/utils/index.js +2 -1
- package/dist/esm/hooks/useConversation/livekit/utils/index.js.map +1 -1
- package/dist/esm/hooks/useConversation/livekit/utils/rpc.js +12 -0
- package/dist/esm/hooks/useConversation/livekit/utils/rpc.js.map +1 -0
- package/dist/esm/hooks/useConversation/livekit/utils/toolDefinitions.js +20 -0
- package/dist/esm/hooks/useConversation/livekit/utils/toolDefinitions.js.map +1 -0
- package/dist/esm/hooks/useTools/index.js.map +1 -1
- package/dist/esm/hooks/useTools/model/types.js.map +1 -1
- package/dist/esm/hooks/useTools/runtime/executeToolCall.js +2 -1
- package/dist/esm/hooks/useTools/runtime/executeToolCall.js.map +1 -1
- package/dist/esm/hooks/useTools/runtime/useToolCallingRuntime.js +10 -1
- package/dist/esm/hooks/useTools/runtime/useToolCallingRuntime.js.map +1 -1
- package/dist/types/hooks/useConversation/livekit/constants.d.ts +2 -0
- package/dist/types/hooks/useConversation/livekit/constants.d.ts.map +1 -1
- package/dist/types/hooks/useConversation/livekit/types.d.ts +4 -14
- package/dist/types/hooks/useConversation/livekit/types.d.ts.map +1 -1
- package/dist/types/hooks/useConversation/livekit/useConversation.d.ts.map +1 -1
- package/dist/types/hooks/useConversation/livekit/utils/dataChannel.d.ts +1 -2
- package/dist/types/hooks/useConversation/livekit/utils/dataChannel.d.ts.map +1 -1
- package/dist/types/hooks/useConversation/livekit/utils/index.d.ts +2 -1
- package/dist/types/hooks/useConversation/livekit/utils/index.d.ts.map +1 -1
- package/dist/types/hooks/useConversation/livekit/utils/rpc.d.ts +3 -0
- package/dist/types/hooks/useConversation/livekit/utils/rpc.d.ts.map +1 -0
- package/dist/types/hooks/useConversation/livekit/utils/toolDefinitions.d.ts +4 -0
- package/dist/types/hooks/useConversation/livekit/utils/toolDefinitions.d.ts.map +1 -0
- package/dist/types/hooks/useTools/index.d.ts +1 -1
- package/dist/types/hooks/useTools/index.d.ts.map +1 -1
- package/dist/types/hooks/useTools/model/types.d.ts +6 -1
- package/dist/types/hooks/useTools/model/types.d.ts.map +1 -1
- package/dist/types/hooks/useTools/runtime/executeToolCall.d.ts.map +1 -1
- package/dist/types/hooks/useTools/runtime/useToolCallingRuntime.d.ts +1 -0
- package/dist/types/hooks/useTools/runtime/useToolCallingRuntime.d.ts.map +1 -1
- package/package.json +2 -2
- package/dist/cjs/hooks/useConversation/livekit/utils/toolAdapter.js +0 -18
- package/dist/cjs/hooks/useConversation/livekit/utils/toolAdapter.js.map +0 -1
- package/dist/esm/hooks/useConversation/livekit/utils/toolAdapter.js +0 -14
- package/dist/esm/hooks/useConversation/livekit/utils/toolAdapter.js.map +0 -1
- package/dist/types/hooks/useConversation/livekit/utils/toolAdapter.d.ts +0 -4
- package/dist/types/hooks/useConversation/livekit/utils/toolAdapter.d.ts.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[],"sources":["../../../../../src/hooks/useConversation/livekit/types.ts"],"sourcesContent":["
|
|
1
|
+
{"version":3,"names":[],"sources":["../../../../../src/hooks/useConversation/livekit/types.ts"],"sourcesContent":["export type InactivityWarningData = {\n type: 'inactivity_warning';\n grace_period_sec: number;\n};\n\nexport type InactivityTimeoutData = {\n type: 'inactivity_timeout';\n};\n\nexport type TurnDetectionData = {\n createdAt: number;\n participantIdentity: string;\n sequence: number;\n source: string;\n state: 'listening' | 'speaking';\n turnDetectionStrategy: 'livekit_turn_detector' | 'silero_vad';\n type: string;\n version: number;\n participantKind: 'STANDARD' | 'AGENT';\n speechId?: string;\n};\n\nexport type ClientToolDefinition = {\n name: string;\n description: string;\n parameters: Record<string, unknown>;\n};\n"],"mappings":"","ignoreList":[]}
|
|
@@ -6,13 +6,15 @@ import { useLatest, useUpdateEffect } from 'react-use';
|
|
|
6
6
|
import { useEnsureRoom, useMediaDeviceSelect } from '@livekit/components-react';
|
|
7
7
|
import { useAtom, useAtomValue, useSetAtom } from 'jotai';
|
|
8
8
|
import { state } from '../../../conversation';
|
|
9
|
+
import { useSdkConsumer } from '../../../sdk-consumer';
|
|
9
10
|
import { useCreateConversation } from '../../useCreateConversation';
|
|
10
11
|
import { useSpeechActivityDetector } from '../../useSpeechActivityDetector';
|
|
11
12
|
import { useParticipantTrack, Source, getTrackStats, parseTrackStats } from '../../useParticipantTrack';
|
|
12
13
|
import { useEmitConversationEvent } from '../../useConversationEvents/useEmitConversationEvent';
|
|
13
14
|
import { useToolCallingRuntime } from '../../useTools/runtime/useToolCallingRuntime';
|
|
14
|
-
import {
|
|
15
|
-
import {
|
|
15
|
+
import { extractToolErrorMessage } from '../../useTools/utils/serialize';
|
|
16
|
+
import { checkIsTurnDetectionData, checkIsInactivityWarningData, checkIsInactivityTimeoutData, buildToolDefinitions, decodeDataPayload, findJoinedAgentParticipant, mergeTranscriptions, parseFunctionCallPayload, publishConversationDataMessage, safeStringify, shouldHandleParticipantConnected } from './utils';
|
|
17
|
+
import { ACOUSTIC_AGENT_HANGOVER_MS, ACOUSTIC_USER_HANGOVER_MS, ACOUSTIC_USER_THRESHOLD_RMS, EXECUTE_TOOL_RPC_METHOD, GET_TOOLS_RPC_METHOD } from './constants';
|
|
16
18
|
export function useConversation(_ref) {
|
|
17
19
|
var _conversation$data2;
|
|
18
20
|
let _ref$autoJoin = _ref.autoJoin,
|
|
@@ -40,8 +42,11 @@ export function useConversation(_ref) {
|
|
|
40
42
|
const _useAtom2 = useAtom(state.camera),
|
|
41
43
|
camera = _useAtom2[0],
|
|
42
44
|
setCamera = _useAtom2[1];
|
|
45
|
+
const _useSdkConsumer = useSdkConsumer(),
|
|
46
|
+
_useSdkConsumer$tools = _useSdkConsumer.tools,
|
|
47
|
+
toolsRegistry = _useSdkConsumer$tools === void 0 ? {} : _useSdkConsumer$tools;
|
|
43
48
|
const toolRuntime = useToolCallingRuntime();
|
|
44
|
-
const
|
|
49
|
+
const toolsRegistryRef = useLatest(toolsRegistry);
|
|
45
50
|
|
|
46
51
|
// for use in register/unregister room events
|
|
47
52
|
const conversationRef = useLatest(conversation.data);
|
|
@@ -307,13 +312,31 @@ export function useConversation(_ref) {
|
|
|
307
312
|
conversationId: (_conversationRef$curr5 = conversationRef.current) == null ? void 0 : _conversationRef$curr5.id
|
|
308
313
|
});
|
|
309
314
|
}
|
|
310
|
-
async function
|
|
311
|
-
|
|
315
|
+
async function handleGetToolsRpc() {
|
|
316
|
+
return JSON.stringify(buildToolDefinitions(toolsRegistryRef.current));
|
|
317
|
+
}
|
|
318
|
+
async function handleExecuteToolRpc(data) {
|
|
319
|
+
const call = parseFunctionCallPayload(data.payload);
|
|
320
|
+
if (!call) {
|
|
321
|
+
return JSON.stringify({
|
|
322
|
+
functionCallId: '',
|
|
323
|
+
result: '',
|
|
324
|
+
error: 'Malformed function call payload.'
|
|
325
|
+
});
|
|
326
|
+
}
|
|
327
|
+
try {
|
|
328
|
+
const _await$toolRuntimeRef = await toolRuntimeRef.current.executeToolCalls([call]),
|
|
329
|
+
result = _await$toolRuntimeRef[0];
|
|
330
|
+
return JSON.stringify(result);
|
|
331
|
+
} catch (error) {
|
|
332
|
+
return JSON.stringify({
|
|
333
|
+
functionCallId: call.functionCallId,
|
|
334
|
+
result: '',
|
|
335
|
+
error: extractToolErrorMessage(error)
|
|
336
|
+
});
|
|
337
|
+
}
|
|
312
338
|
}
|
|
313
339
|
const dataChannelHandlers = [{
|
|
314
|
-
guard: checkIsToolCallsData,
|
|
315
|
-
handle: handleToolCallsEvent
|
|
316
|
-
}, {
|
|
317
340
|
guard: checkIsTurnDetectionData,
|
|
318
341
|
handle: handleTurnDetectionEvent
|
|
319
342
|
}, {
|
|
@@ -458,8 +481,14 @@ export function useConversation(_ref) {
|
|
|
458
481
|
}
|
|
459
482
|
function registerRoomEvents() {
|
|
460
483
|
room.on('connected', handleConnectedEvent).on('encryptionError', handleEncryptionErrorEvent).on('disconnected', handleDisconnectedEvent).on('transcriptionReceived', handleTranscriptionReceivedEvent).on('participantConnected', handleParticipantConnectedEvent).on('participantDisconnected', handleParticipantDisconnectedEvent).on('dataReceived', handleDataReceivedEvent);
|
|
484
|
+
room.unregisterRpcMethod(GET_TOOLS_RPC_METHOD);
|
|
485
|
+
room.unregisterRpcMethod(EXECUTE_TOOL_RPC_METHOD);
|
|
486
|
+
room.registerRpcMethod(GET_TOOLS_RPC_METHOD, handleGetToolsRpc);
|
|
487
|
+
room.registerRpcMethod(EXECUTE_TOOL_RPC_METHOD, handleExecuteToolRpc);
|
|
461
488
|
}
|
|
462
489
|
function unregisterRoomEvents() {
|
|
490
|
+
room.unregisterRpcMethod(GET_TOOLS_RPC_METHOD);
|
|
491
|
+
room.unregisterRpcMethod(EXECUTE_TOOL_RPC_METHOD);
|
|
463
492
|
room.off('connected', handleConnectedEvent);
|
|
464
493
|
room.off('encryptionError', handleEncryptionErrorEvent);
|
|
465
494
|
room.off('disconnected', handleDisconnectedEvent);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["useEffect","useRef","DisconnectReason","setLogLevel","ParticipantKind","LogLevel","invariant","useTimer","useLatest","useUpdateEffect","useEnsureRoom","useMediaDeviceSelect","useAtom","useAtomValue","useSetAtom","state","useCreateConversation","useSpeechActivityDetector","useParticipantTrack","Source","getTrackStats","parseTrackStats","useEmitConversationEvent","useToolCallingRuntime","checkIsTurnDetectionData","checkIsInactivityWarningData","checkIsInactivityTimeoutData","checkIsToolCallsData","createLivekitToolAdapter","decodeDataPayload","findJoinedAgentParticipant","mergeTranscriptions","publishConversationDataMessage","safeStringify","shouldHandleParticipantConnected","ACOUSTIC_AGENT_HANGOVER_MS","ACOUSTIC_USER_HANGOVER_MS","ACOUSTIC_USER_THRESHOLD_RMS","useConversation","_ref","_conversation$data2","_ref$autoJoin","autoJoin","type","config","_ref$startWithMicroph","startWithMicrophone","_ref$startWithCamera","startWithCamera","firstConversation","lastConversationTopic","silent","conversation","room","speaker","_useAtom","microphone","setMicrophone","_useAtom2","camera","setCamera","toolRuntime","toolAdapter","conversationRef","data","toolRuntimeRef","_useAtom3","conversationStatus","setConversationStatus","_useAtom4","userConnectionState","setUserConnectionState","_useAtom5","joinedAt","setJoinedAt","_useMediaDeviceSelect","kind","setMicrophoneDeviceId","setActiveMediaDevice","_useMediaDeviceSelect2","setSpeakerDeviceId","_useMediaDeviceSelect3","requestPermissions","enabled","setCameraDeviceId","setTranscriptions","transcriptions","_useAtom6","agentConnectionState","setAgentConnectionState","setAgentActivityState","agentActivityState","setUserActivityState","userActivityState","emitEvent","inactivityTimeoutRef","acousticPhaseRef","acousticT0Ref","latestTurnMetadataRef","isConnectedRef","userCumulativeTrackStatsRef","undefined","agentCumulativeTrackStatsRef","userMicPublication","source","Microphone","agentMicPublication","timer","autoStart","onExpire","handleExpire","expiryTimestamp","Date","registerRoomEvents","unregisterRoomEvents","deviceId","localParticipant","setMicrophoneEnabled","setCameraEnabled","resolution","width","height","join","_conversation$data","limit","restart","getTime","_conversation$data3","url","URL","accessToken","searchParams","get","connect","remoteParticipant","handleAgentJoin","enableMediaDevices","error","console","handleTranscriptionReceivedEvent","segments","participant","map","s","id","message","text","AGENT","old","handleTurnDetectionEvent","_conversationRef$curr","conversationId","current","participantKind","eventState","turnDetectionStrategy","sequence","speechId","handleAcousticUserOnset","handleAcousticUserOffset","timestampMs","handleAcousticAgentOnset","_conversationRef$curr2","latencyMs","emitConversationTurnLatency","clientAcousticLatencyMs","_conversationRef$curr3","_await$Promise$all","Promise","all","userReport","agentReport","userStats","agentStats","cumulativeTrackStats","rttMs","roundTripTimeMs","jitterBufferDelayMs","userPacketsLost","packetsLost","agentPacketsLost","handleAcousticAgentOffset","onSpeechStart","onSpeechEnd","thresholdRms","hangoverMs","handleInactivityWarningEvent","_conversationRef$curr4","gracePeriodSec","grace_period_sec","handleInactivityTimeoutEvent","_data","_conversationRef$curr5","handleToolCallsEvent","resolveIncomingToolCalls","dataChannelHandlers","guard","handle","handleDataReceivedEvent","payload","decoded","_ref2","resolve","catch","handleConnectedEvent","_conversationRef$curr6","handleEncryptionErrorEvent","handleDisconnectedEvent","reason","CLIENT_INITIATED","ROOM_CLOSED","handleParticipantConnectedEvent","_conversationRef$curr7","handleParticipantDisconnectedEvent","_conversationRef$curr8","leave","_conversationRef$curr9","disconnect","_conversationRef$curr0","_conversationRef$curr1","interrupt","_conversationRef$curr10","dismissInactivity","send","attachments","_conversationRef$curr11","sendText","topic","attributes","on","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} 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 {\n InactivityWarningData,\n InactivityTimeoutData,\n TurnDetectionData,\n ToolCallsData,\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 {\n checkIsTurnDetectionData,\n checkIsInactivityWarningData,\n checkIsInactivityTimeoutData,\n checkIsToolCallsData,\n createLivekitToolAdapter,\n decodeDataPayload,\n findJoinedAgentParticipant,\n mergeTranscriptions,\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} from './constants';\n\nexport function useConversation({\n autoJoin = true,\n type,\n config,\n startWithMicrophone = false,\n startWithCamera = false,\n firstConversation,\n lastConversationTopic,\n}: UseConversationOptions): UseConversationResult {\n setLogLevel(LogLevel.silent);\n\n const conversation = useCreateConversation({\n type,\n config,\n firstConversation,\n lastConversationTopic,\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 toolRuntime = useToolCallingRuntime();\n const toolAdapter = createLivekitToolAdapter(room);\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 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 handleToolCallsEvent(data: ToolCallsData) {\n await toolRuntimeRef.current.resolveIncomingToolCalls(data, toolAdapter);\n }\n\n const dataChannelHandlers: {\n guard: (data: unknown) => boolean;\n handle: (data: unknown) => void | Promise<void>;\n }[] = [\n {\n guard: checkIsToolCallsData,\n handle: handleToolCallsEvent as (data: unknown) => 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(payload: Uint8Array) {\n const decoded = decodeDataPayload(payload);\n if (decoded === null) {\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 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 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 }\n\n function unregisterRoomEvents() {\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":["useEffect","useRef","DisconnectReason","setLogLevel","ParticipantKind","LogLevel","invariant","useTimer","useLatest","useUpdateEffect","useEnsureRoom","useMediaDeviceSelect","useAtom","useAtomValue","useSetAtom","state","useSdkConsumer","useCreateConversation","useSpeechActivityDetector","useParticipantTrack","Source","getTrackStats","parseTrackStats","useEmitConversationEvent","useToolCallingRuntime","extractToolErrorMessage","checkIsTurnDetectionData","checkIsInactivityWarningData","checkIsInactivityTimeoutData","buildToolDefinitions","decodeDataPayload","findJoinedAgentParticipant","mergeTranscriptions","parseFunctionCallPayload","publishConversationDataMessage","safeStringify","shouldHandleParticipantConnected","ACOUSTIC_AGENT_HANGOVER_MS","ACOUSTIC_USER_HANGOVER_MS","ACOUSTIC_USER_THRESHOLD_RMS","EXECUTE_TOOL_RPC_METHOD","GET_TOOLS_RPC_METHOD","useConversation","_ref","_conversation$data2","_ref$autoJoin","autoJoin","type","config","_ref$startWithMicroph","startWithMicrophone","_ref$startWithCamera","startWithCamera","firstConversation","lastConversationTopic","silent","conversation","room","speaker","_useAtom","microphone","setMicrophone","_useAtom2","camera","setCamera","_useSdkConsumer","_useSdkConsumer$tools","tools","toolsRegistry","toolRuntime","toolsRegistryRef","conversationRef","data","toolRuntimeRef","_useAtom3","conversationStatus","setConversationStatus","_useAtom4","userConnectionState","setUserConnectionState","_useAtom5","joinedAt","setJoinedAt","_useMediaDeviceSelect","kind","setMicrophoneDeviceId","setActiveMediaDevice","_useMediaDeviceSelect2","setSpeakerDeviceId","_useMediaDeviceSelect3","requestPermissions","enabled","setCameraDeviceId","setTranscriptions","transcriptions","_useAtom6","agentConnectionState","setAgentConnectionState","setAgentActivityState","agentActivityState","setUserActivityState","userActivityState","emitEvent","inactivityTimeoutRef","acousticPhaseRef","acousticT0Ref","latestTurnMetadataRef","isConnectedRef","userCumulativeTrackStatsRef","undefined","agentCumulativeTrackStatsRef","userMicPublication","source","Microphone","agentMicPublication","timer","autoStart","onExpire","handleExpire","expiryTimestamp","Date","registerRoomEvents","unregisterRoomEvents","deviceId","localParticipant","setMicrophoneEnabled","setCameraEnabled","resolution","width","height","join","_conversation$data","limit","restart","getTime","_conversation$data3","url","URL","accessToken","searchParams","get","connect","remoteParticipant","handleAgentJoin","enableMediaDevices","error","console","handleTranscriptionReceivedEvent","segments","participant","map","s","id","message","text","AGENT","old","handleTurnDetectionEvent","_conversationRef$curr","conversationId","current","participantKind","eventState","turnDetectionStrategy","sequence","speechId","handleAcousticUserOnset","handleAcousticUserOffset","timestampMs","handleAcousticAgentOnset","_conversationRef$curr2","latencyMs","emitConversationTurnLatency","clientAcousticLatencyMs","_conversationRef$curr3","_await$Promise$all","Promise","all","userReport","agentReport","userStats","agentStats","cumulativeTrackStats","rttMs","roundTripTimeMs","jitterBufferDelayMs","userPacketsLost","packetsLost","agentPacketsLost","handleAcousticAgentOffset","onSpeechStart","onSpeechEnd","thresholdRms","hangoverMs","handleInactivityWarningEvent","_conversationRef$curr4","gracePeriodSec","grace_period_sec","handleInactivityTimeoutEvent","_data","_conversationRef$curr5","handleGetToolsRpc","JSON","stringify","handleExecuteToolRpc","call","payload","functionCallId","result","_await$toolRuntimeRef","executeToolCalls","dataChannelHandlers","guard","handle","handleDataReceivedEvent","decoded","_ref2","resolve","catch","handleConnectedEvent","_conversationRef$curr6","handleEncryptionErrorEvent","handleDisconnectedEvent","reason","CLIENT_INITIATED","ROOM_CLOSED","handleParticipantConnectedEvent","_conversationRef$curr7","handleParticipantDisconnectedEvent","_conversationRef$curr8","leave","_conversationRef$curr9","disconnect","_conversationRef$curr0","_conversationRef$curr1","interrupt","_conversationRef$curr10","dismissInactivity","send","attachments","_conversationRef$curr11","sendText","topic","attributes","on","unregisterRpcMethod","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 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}: UseConversationOptions): UseConversationResult {\n setLogLevel(LogLevel.silent);\n\n const conversation = useCreateConversation({\n type,\n config,\n firstConversation,\n lastConversationTopic,\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 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(payload: Uint8Array) {\n const decoded = decodeDataPayload(payload);\n if (decoded === null) {\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 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 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":[]}
|
|
@@ -15,7 +15,4 @@ export function checkIsInactivityWarningData(data) {
|
|
|
15
15
|
export function checkIsInactivityTimeoutData(data) {
|
|
16
16
|
return typeof data === 'object' && data !== null && 'type' in data && data.type === 'inactivity_timeout';
|
|
17
17
|
}
|
|
18
|
-
export function checkIsToolCallsData(data) {
|
|
19
|
-
return typeof data === 'object' && data !== null && 'type' in data && data.type === 'tool_calls' && 'requestId' in data && typeof data.requestId === 'string' && 'functionCalls' in data && Array.isArray(data.functionCalls);
|
|
20
|
-
}
|
|
21
18
|
//# sourceMappingURL=dataChannel.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["decodeDataPayload","data","JSON","parse","TextDecoder","decode","error","console","checkIsTurnDetectionData","checkIsInactivityWarningData","type","grace_period_sec","checkIsInactivityTimeoutData"
|
|
1
|
+
{"version":3,"names":["decodeDataPayload","data","JSON","parse","TextDecoder","decode","error","console","checkIsTurnDetectionData","checkIsInactivityWarningData","type","grace_period_sec","checkIsInactivityTimeoutData"],"sources":["../../../../../../src/hooks/useConversation/livekit/utils/dataChannel.ts"],"sourcesContent":["import type {\n InactivityWarningData,\n InactivityTimeoutData,\n TurnDetectionData,\n} from '../types';\n\nexport function decodeDataPayload(data: Uint8Array): unknown {\n try {\n return JSON.parse(new TextDecoder().decode(data));\n } catch (error) {\n console.error('Failed to decode data received payload', error);\n return null;\n }\n}\n\nexport function checkIsTurnDetectionData(\n data: unknown,\n): data is TurnDetectionData {\n return (\n typeof data === 'object' &&\n data !== null &&\n 'participantKind' in data &&\n 'state' in data\n );\n}\n\nexport function checkIsInactivityWarningData(\n data: unknown,\n): data is InactivityWarningData {\n return (\n typeof data === 'object' &&\n data !== null &&\n 'type' in data &&\n (data as Record<string, unknown>).type === 'inactivity_warning' &&\n 'grace_period_sec' in data &&\n typeof (data as Record<string, unknown>).grace_period_sec === 'number'\n );\n}\n\nexport function checkIsInactivityTimeoutData(\n data: unknown,\n): data is InactivityTimeoutData {\n return (\n typeof data === 'object' &&\n data !== null &&\n 'type' in data &&\n (data as Record<string, unknown>).type === 'inactivity_timeout'\n );\n}\n"],"mappings":"AAMA,OAAO,SAASA,iBAAiBA,CAACC,IAAgB,EAAW;EAC3D,IAAI;IACF,OAAOC,IAAI,CAACC,KAAK,CAAC,IAAIC,WAAW,CAAC,CAAC,CAACC,MAAM,CAACJ,IAAI,CAAC,CAAC;EACnD,CAAC,CAAC,OAAOK,KAAK,EAAE;IACdC,OAAO,CAACD,KAAK,CAAC,wCAAwC,EAAEA,KAAK,CAAC;IAC9D,OAAO,IAAI;EACb;AACF;AAEA,OAAO,SAASE,wBAAwBA,CACtCP,IAAa,EACc;EAC3B,OACE,OAAOA,IAAI,KAAK,QAAQ,IACxBA,IAAI,KAAK,IAAI,IACb,iBAAiB,IAAIA,IAAI,IACzB,OAAO,IAAIA,IAAI;AAEnB;AAEA,OAAO,SAASQ,4BAA4BA,CAC1CR,IAAa,EACkB;EAC/B,OACE,OAAOA,IAAI,KAAK,QAAQ,IACxBA,IAAI,KAAK,IAAI,IACb,MAAM,IAAIA,IAAI,IACbA,IAAI,CAA6BS,IAAI,KAAK,oBAAoB,IAC/D,kBAAkB,IAAIT,IAAI,IAC1B,OAAQA,IAAI,CAA6BU,gBAAgB,KAAK,QAAQ;AAE1E;AAEA,OAAO,SAASC,4BAA4BA,CAC1CX,IAAa,EACkB;EAC/B,OACE,OAAOA,IAAI,KAAK,QAAQ,IACxBA,IAAI,KAAK,IAAI,IACb,MAAM,IAAIA,IAAI,IACbA,IAAI,CAA6BS,IAAI,KAAK,oBAAoB;AAEnE","ignoreList":[]}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
export * from './dataChannel';
|
|
2
2
|
export * from './messaging';
|
|
3
3
|
export * from './participants';
|
|
4
|
+
export * from './rpc';
|
|
4
5
|
export * from './serialization';
|
|
5
|
-
export * from './
|
|
6
|
+
export * from './toolDefinitions';
|
|
6
7
|
export * from './transcriptions';
|
|
7
8
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[],"sources":["../../../../../../src/hooks/useConversation/livekit/utils/index.ts"],"sourcesContent":["export * from './dataChannel';\nexport * from './messaging';\nexport * from './participants';\nexport * from './serialization';\nexport * from './
|
|
1
|
+
{"version":3,"names":[],"sources":["../../../../../../src/hooks/useConversation/livekit/utils/index.ts"],"sourcesContent":["export * from './dataChannel';\nexport * from './messaging';\nexport * from './participants';\nexport * from './rpc';\nexport * from './serialization';\nexport * from './toolDefinitions';\nexport * from './transcriptions';\n"],"mappings":"AAAA,cAAc,eAAe;AAC7B,cAAc,aAAa;AAC3B,cAAc,gBAAgB;AAC9B,cAAc,OAAO;AACrB,cAAc,iBAAiB;AAC/B,cAAc,mBAAmB;AACjC,cAAc,kBAAkB","ignoreList":[]}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
function isFunctionCall(value) {
|
|
2
|
+
return typeof value === 'object' && value !== null && 'functionCallId' in value && typeof value.functionCallId === 'string' && 'name' in value && typeof value.name === 'string';
|
|
3
|
+
}
|
|
4
|
+
export function parseFunctionCallPayload(payload) {
|
|
5
|
+
try {
|
|
6
|
+
const parsed = JSON.parse(payload);
|
|
7
|
+
return isFunctionCall(parsed) ? parsed : undefined;
|
|
8
|
+
} catch {
|
|
9
|
+
return undefined;
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=rpc.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["isFunctionCall","value","functionCallId","name","parseFunctionCallPayload","payload","parsed","JSON","parse","undefined"],"sources":["../../../../../../src/hooks/useConversation/livekit/utils/rpc.ts"],"sourcesContent":["import type { FunctionCall } from '../../../../types/service';\n\nfunction isFunctionCall(value: unknown): value is FunctionCall {\n return (\n typeof value === 'object' &&\n value !== null &&\n 'functionCallId' in value &&\n typeof value.functionCallId === 'string' &&\n 'name' in value &&\n typeof value.name === 'string'\n );\n}\n\nexport function parseFunctionCallPayload(\n payload: string,\n): FunctionCall | undefined {\n try {\n const parsed: unknown = JSON.parse(payload);\n return isFunctionCall(parsed) ? parsed : undefined;\n } catch {\n return undefined;\n }\n}\n"],"mappings":"AAEA,SAASA,cAAcA,CAACC,KAAc,EAAyB;EAC7D,OACE,OAAOA,KAAK,KAAK,QAAQ,IACzBA,KAAK,KAAK,IAAI,IACd,gBAAgB,IAAIA,KAAK,IACzB,OAAOA,KAAK,CAACC,cAAc,KAAK,QAAQ,IACxC,MAAM,IAAID,KAAK,IACf,OAAOA,KAAK,CAACE,IAAI,KAAK,QAAQ;AAElC;AAEA,OAAO,SAASC,wBAAwBA,CACtCC,OAAe,EACW;EAC1B,IAAI;IACF,MAAMC,MAAe,GAAGC,IAAI,CAACC,KAAK,CAACH,OAAO,CAAC;IAC3C,OAAOL,cAAc,CAACM,MAAM,CAAC,GAAGA,MAAM,GAAGG,SAAS;EACpD,CAAC,CAAC,MAAM;IACN,OAAOA,SAAS;EAClB;AACF","ignoreList":[]}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export function buildToolDefinitions(registry) {
|
|
2
|
+
const tools = [];
|
|
3
|
+
for (const _ref of Object.entries(registry)) {
|
|
4
|
+
const name = _ref[0];
|
|
5
|
+
const entry = _ref[1];
|
|
6
|
+
if (typeof entry === 'function') {
|
|
7
|
+
continue;
|
|
8
|
+
}
|
|
9
|
+
tools.push({
|
|
10
|
+
name,
|
|
11
|
+
description: entry.description ?? name,
|
|
12
|
+
parameters: entry.parameters ?? {
|
|
13
|
+
type: 'object',
|
|
14
|
+
properties: {}
|
|
15
|
+
}
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
return tools;
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=toolDefinitions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["buildToolDefinitions","registry","tools","_ref","Object","entries","name","entry","push","description","parameters","type","properties"],"sources":["../../../../../../src/hooks/useConversation/livekit/utils/toolDefinitions.ts"],"sourcesContent":["import type { ToolsRegistry } from '../../../useTools/model/types';\nimport type { ClientToolDefinition } from '../types';\n\nexport function buildToolDefinitions(\n registry: ToolsRegistry,\n): ClientToolDefinition[] {\n const tools: ClientToolDefinition[] = [];\n\n for (const [name, entry] of Object.entries(registry)) {\n if (typeof entry === 'function') {\n continue;\n }\n tools.push({\n name,\n description: entry.description ?? name,\n parameters: entry.parameters ?? { type: 'object', properties: {} },\n });\n }\n\n return tools;\n}\n"],"mappings":"AAGA,OAAO,SAASA,oBAAoBA,CAClCC,QAAuB,EACC;EACxB,MAAMC,KAA6B,GAAG,EAAE;EAExC,WAAAC,IAAA,IAA4BC,MAAM,CAACC,OAAO,CAACJ,QAAQ,CAAC,EAAE;IAAA,MAA1CK,IAAI,GAAAH,IAAA;IAAA,MAAEI,KAAK,GAAAJ,IAAA;IACrB,IAAI,OAAOI,KAAK,KAAK,UAAU,EAAE;MAC/B;IACF;IACAL,KAAK,CAACM,IAAI,CAAC;MACTF,IAAI;MACJG,WAAW,EAAEF,KAAK,CAACE,WAAW,IAAIH,IAAI;MACtCI,UAAU,EAAEH,KAAK,CAACG,UAAU,IAAI;QAAEC,IAAI,EAAE,QAAQ;QAAEC,UAAU,EAAE,CAAC;MAAE;IACnE,CAAC,CAAC;EACJ;EAEA,OAAOV,KAAK;AACd","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["useTools","ToolExecutionInProgressError"],"sources":["../../../../src/hooks/useTools/index.ts"],"sourcesContent":["export { useTools } from './public/useTools';\nexport { ToolExecutionInProgressError } from './model/errors';\nexport type {\n ToolArguments,\n ToolCallResult,\n ToolCallSnapshot,\n ToolCallStatus,\n ToolsRegistry,\n} from './model/types';\n"],"mappings":"AAAA,SAASA,QAAQ,QAAQ,mBAAmB;AAC5C,SAASC,4BAA4B,QAAQ,gBAAgB","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["useTools","ToolExecutionInProgressError"],"sources":["../../../../src/hooks/useTools/index.ts"],"sourcesContent":["export { useTools } from './public/useTools';\nexport { ToolExecutionInProgressError } from './model/errors';\nexport type {\n ToolArguments,\n ToolCallResult,\n ToolCallSnapshot,\n ToolCallStatus,\n ToolDefinition,\n ToolsRegistry,\n} from './model/types';\n"],"mappings":"AAAA,SAASA,QAAQ,QAAQ,mBAAmB;AAC5C,SAASC,4BAA4B,QAAQ,gBAAgB","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[],"sources":["../../../../../src/hooks/useTools/model/types.ts"],"sourcesContent":["import type { FunctionCall } from '../../../types/service';\n\nexport type ToolArguments = Record<string, unknown> | null;\n\nexport type ToolHandler = (\n arguments_?: ToolArguments,\n) => unknown | Promise<unknown>;\n\nexport type ToolsRegistry = Record<string, ToolHandler>;\n\nexport type ToolCallStatus = 'pending' | 'running' | 'completed';\n\nexport type ToolCallRequest = {\n id: string;\n name: string;\n arguments?: ToolArguments;\n};\n\nexport type ToolCallResult = {\n id: string;\n name: string;\n success: boolean;\n content: string;\n};\n\nexport type ToolCallSnapshot = {\n id: string;\n name: string;\n arguments: ToolArguments;\n status: ToolCallStatus;\n result: ToolCallResult | null;\n};\n\nexport type ToolCallSourceResponse = {\n functionCalls?: readonly FunctionCall[] | null;\n};\n"],"mappings":"","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":[],"sources":["../../../../../src/hooks/useTools/model/types.ts"],"sourcesContent":["import type { FunctionCall } from '../../../types/service';\n\nexport type ToolArguments = Record<string, unknown> | null;\n\nexport type ToolHandler = (\n arguments_?: ToolArguments,\n) => unknown | Promise<unknown>;\n\nexport type ToolDefinition = {\n description?: string;\n parameters?: Record<string, unknown>;\n handler: ToolHandler;\n};\n\nexport type ToolsRegistry = Record<string, ToolHandler | ToolDefinition>;\n\nexport type ToolCallStatus = 'pending' | 'running' | 'completed';\n\nexport type ToolCallRequest = {\n id: string;\n name: string;\n arguments?: ToolArguments;\n};\n\nexport type ToolCallResult = {\n id: string;\n name: string;\n success: boolean;\n content: string;\n};\n\nexport type ToolCallSnapshot = {\n id: string;\n name: string;\n arguments: ToolArguments;\n status: ToolCallStatus;\n result: ToolCallResult | null;\n};\n\nexport type ToolCallSourceResponse = {\n functionCalls?: readonly FunctionCall[] | null;\n};\n"],"mappings":"","ignoreList":[]}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { extractToolErrorMessage, serializeToolContent } from '../utils/serialize';
|
|
2
2
|
export async function executeToolCall(call, registry) {
|
|
3
|
-
const
|
|
3
|
+
const entry = registry[call.name];
|
|
4
|
+
const handler = typeof entry === 'function' ? entry : entry == null ? void 0 : entry.handler;
|
|
4
5
|
if (!handler) {
|
|
5
6
|
return {
|
|
6
7
|
id: call.id,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["extractToolErrorMessage","serializeToolContent","executeToolCall","call","registry","
|
|
1
|
+
{"version":3,"names":["extractToolErrorMessage","serializeToolContent","executeToolCall","call","registry","entry","name","handler","id","success","content","output","arguments","error"],"sources":["../../../../../src/hooks/useTools/runtime/executeToolCall.ts"],"sourcesContent":["import type {\n ToolCallRequest,\n ToolCallResult,\n ToolsRegistry,\n} from '../model/types';\nimport {\n extractToolErrorMessage,\n serializeToolContent,\n} from '../utils/serialize';\n\nexport async function executeToolCall(\n call: ToolCallRequest,\n registry: ToolsRegistry,\n): Promise<ToolCallResult> {\n const entry = registry[call.name];\n const handler = typeof entry === 'function' ? entry : entry?.handler;\n\n if (!handler) {\n return {\n id: call.id,\n name: call.name,\n success: false,\n content: `Tool \"${call.name}\" is not registered.`,\n };\n }\n\n try {\n const output = await handler(call.arguments ?? null);\n\n return {\n id: call.id,\n name: call.name,\n success: true,\n content: serializeToolContent(output),\n };\n } catch (error) {\n return {\n id: call.id,\n name: call.name,\n success: false,\n content: extractToolErrorMessage(error),\n };\n }\n}\n"],"mappings":"AAKA,SACEA,uBAAuB,EACvBC,oBAAoB,QACf,oBAAoB;AAE3B,OAAO,eAAeC,eAAeA,CACnCC,IAAqB,EACrBC,QAAuB,EACE;EACzB,MAAMC,KAAK,GAAGD,QAAQ,CAACD,IAAI,CAACG,IAAI,CAAC;EACjC,MAAMC,OAAO,GAAG,OAAOF,KAAK,KAAK,UAAU,GAAGA,KAAK,GAAGA,KAAK,oBAALA,KAAK,CAAEE,OAAO;EAEpE,IAAI,CAACA,OAAO,EAAE;IACZ,OAAO;MACLC,EAAE,EAAEL,IAAI,CAACK,EAAE;MACXF,IAAI,EAAEH,IAAI,CAACG,IAAI;MACfG,OAAO,EAAE,KAAK;MACdC,OAAO,EAAE,SAASP,IAAI,CAACG,IAAI;IAC7B,CAAC;EACH;EAEA,IAAI;IACF,MAAMK,MAAM,GAAG,MAAMJ,OAAO,CAACJ,IAAI,CAACS,SAAS,IAAI,IAAI,CAAC;IAEpD,OAAO;MACLJ,EAAE,EAAEL,IAAI,CAACK,EAAE;MACXF,IAAI,EAAEH,IAAI,CAACG,IAAI;MACfG,OAAO,EAAE,IAAI;MACbC,OAAO,EAAET,oBAAoB,CAACU,MAAM;IACtC,CAAC;EACH,CAAC,CAAC,OAAOE,KAAK,EAAE;IACd,OAAO;MACLL,EAAE,EAAEL,IAAI,CAACK,EAAE;MACXF,IAAI,EAAEH,IAAI,CAACG,IAAI;MACfG,OAAO,EAAE,KAAK;MACdC,OAAO,EAAEV,uBAAuB,CAACa,KAAK;IACxC,CAAC;EACH;AACF","ignoreList":[]}
|
|
@@ -3,6 +3,7 @@ import { useSetAtom } from 'jotai';
|
|
|
3
3
|
import { appendToolCallsAtom, markToolCallCompletedAtom, markToolCallRunningAtom } from '../store/state';
|
|
4
4
|
import { useSdkConsumer } from '../../../sdk-consumer';
|
|
5
5
|
import { createToolRuntimeSession } from './createToolRuntimeSession';
|
|
6
|
+
import { executeToolCallBatch } from './executeToolCallBatch';
|
|
6
7
|
export function useToolCallingRuntime() {
|
|
7
8
|
const _useSdkConsumer = useSdkConsumer(),
|
|
8
9
|
_useSdkConsumer$tools = _useSdkConsumer.tools,
|
|
@@ -49,10 +50,18 @@ export function useToolCallingRuntime() {
|
|
|
49
50
|
observer
|
|
50
51
|
});
|
|
51
52
|
}
|
|
53
|
+
function executeToolCalls(functionCalls) {
|
|
54
|
+
return executeToolCallBatch({
|
|
55
|
+
functionCalls,
|
|
56
|
+
registry,
|
|
57
|
+
observer
|
|
58
|
+
});
|
|
59
|
+
}
|
|
52
60
|
return {
|
|
53
61
|
isRunning,
|
|
54
62
|
resolveResponseToolCalls,
|
|
55
|
-
resolveIncomingToolCalls
|
|
63
|
+
resolveIncomingToolCalls,
|
|
64
|
+
executeToolCalls
|
|
56
65
|
};
|
|
57
66
|
}
|
|
58
67
|
//# sourceMappingURL=useToolCallingRuntime.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["useState","useSetAtom","appendToolCallsAtom","markToolCallCompletedAtom","markToolCallRunningAtom","useSdkConsumer","createToolRuntimeSession","useToolCallingRuntime","_useSdkConsumer","_useSdkConsumer$tools","tools","registry","appendCalls","markRunning","markCompleted","_useState","isRunning","setIsRunning","observer","onBatchDiscovered","calls","onCallStarted","callId","onCallCompleted","result","id","_useState2","onRunningChange","nextIsRunning","session","resolveResponseToolCalls","initialResponse","continueWithResults","resolveIncomingToolCalls","envelope","adapter"],"sources":["../../../../../src/hooks/useTools/runtime/useToolCallingRuntime.ts"],"sourcesContent":["import type { FunctionCallResult } from '../../../types';\nimport { useState } from 'react';\nimport { useSetAtom } from 'jotai';\n\nimport type { ToolCallSourceResponse } from '../model/types';\nimport {\n appendToolCallsAtom,\n markToolCallCompletedAtom,\n markToolCallRunningAtom,\n} from '../store/state';\nimport { useSdkConsumer } from '../../../sdk-consumer';\nimport { createToolRuntimeSession } from './createToolRuntimeSession';\nimport type {\n ToolCallEnvelope,\n ToolRuntimeAdapter,\n ToolRuntimeObserver,\n ToolRuntimeSession,\n} from './types';\n\nexport function useToolCallingRuntime<\n TResponse extends ToolCallSourceResponse,\n>() {\n const { tools: registry = {} } = useSdkConsumer();\n const appendCalls = useSetAtom(appendToolCallsAtom);\n const markRunning = useSetAtom(markToolCallRunningAtom);\n const markCompleted = useSetAtom(markToolCallCompletedAtom);\n const [isRunning, setIsRunning] = useState(false);\n\n const observer: ToolRuntimeObserver = {\n onBatchDiscovered(calls) {\n appendCalls(calls);\n },\n onCallStarted(callId) {\n markRunning(callId);\n },\n onCallCompleted(callId, result) {\n markCompleted({ id: callId, result });\n },\n };\n\n const [session] = useState<ToolRuntimeSession<TResponse>>(() =>\n createToolRuntimeSession<TResponse>({\n onRunningChange(nextIsRunning) {\n setIsRunning(nextIsRunning);\n },\n }),\n );\n\n function resolveResponseToolCalls(\n initialResponse: TResponse,\n continueWithResults: (results: FunctionCallResult[]) => Promise<TResponse>,\n ) {\n return session.resolveResponseToolCalls({\n initialResponse,\n continueWithResults,\n registry,\n observer,\n });\n }\n\n function resolveIncomingToolCalls(\n envelope: ToolCallEnvelope,\n adapter: ToolRuntimeAdapter,\n ) {\n return session.resolveIncomingToolCalls({\n envelope,\n adapter,\n registry,\n observer,\n });\n }\n\n return {\n isRunning,\n resolveResponseToolCalls,\n resolveIncomingToolCalls,\n };\n}\n"],"mappings":"AACA,SAASA,QAAQ,QAAQ,OAAO;AAChC,SAASC,UAAU,QAAQ,OAAO;AAGlC,SACEC,mBAAmB,EACnBC,yBAAyB,EACzBC,uBAAuB,QAClB,gBAAgB;AACvB,SAASC,cAAc,QAAQ,uBAAuB;AACtD,SAASC,wBAAwB,QAAQ,4BAA4B;
|
|
1
|
+
{"version":3,"names":["useState","useSetAtom","appendToolCallsAtom","markToolCallCompletedAtom","markToolCallRunningAtom","useSdkConsumer","createToolRuntimeSession","executeToolCallBatch","useToolCallingRuntime","_useSdkConsumer","_useSdkConsumer$tools","tools","registry","appendCalls","markRunning","markCompleted","_useState","isRunning","setIsRunning","observer","onBatchDiscovered","calls","onCallStarted","callId","onCallCompleted","result","id","_useState2","onRunningChange","nextIsRunning","session","resolveResponseToolCalls","initialResponse","continueWithResults","resolveIncomingToolCalls","envelope","adapter","executeToolCalls","functionCalls"],"sources":["../../../../../src/hooks/useTools/runtime/useToolCallingRuntime.ts"],"sourcesContent":["import type { FunctionCallResult } from '../../../types';\nimport { useState } from 'react';\nimport { useSetAtom } from 'jotai';\n\nimport type { ToolCallSourceResponse } from '../model/types';\nimport {\n appendToolCallsAtom,\n markToolCallCompletedAtom,\n markToolCallRunningAtom,\n} from '../store/state';\nimport { useSdkConsumer } from '../../../sdk-consumer';\nimport { createToolRuntimeSession } from './createToolRuntimeSession';\nimport { executeToolCallBatch } from './executeToolCallBatch';\nimport type {\n ToolCallEnvelope,\n ToolRuntimeAdapter,\n ToolRuntimeObserver,\n ToolRuntimeSession,\n} from './types';\n\nexport function useToolCallingRuntime<\n TResponse extends ToolCallSourceResponse,\n>() {\n const { tools: registry = {} } = useSdkConsumer();\n const appendCalls = useSetAtom(appendToolCallsAtom);\n const markRunning = useSetAtom(markToolCallRunningAtom);\n const markCompleted = useSetAtom(markToolCallCompletedAtom);\n const [isRunning, setIsRunning] = useState(false);\n\n const observer: ToolRuntimeObserver = {\n onBatchDiscovered(calls) {\n appendCalls(calls);\n },\n onCallStarted(callId) {\n markRunning(callId);\n },\n onCallCompleted(callId, result) {\n markCompleted({ id: callId, result });\n },\n };\n\n const [session] = useState<ToolRuntimeSession<TResponse>>(() =>\n createToolRuntimeSession<TResponse>({\n onRunningChange(nextIsRunning) {\n setIsRunning(nextIsRunning);\n },\n }),\n );\n\n function resolveResponseToolCalls(\n initialResponse: TResponse,\n continueWithResults: (results: FunctionCallResult[]) => Promise<TResponse>,\n ) {\n return session.resolveResponseToolCalls({\n initialResponse,\n continueWithResults,\n registry,\n observer,\n });\n }\n\n function resolveIncomingToolCalls(\n envelope: ToolCallEnvelope,\n adapter: ToolRuntimeAdapter,\n ) {\n return session.resolveIncomingToolCalls({\n envelope,\n adapter,\n registry,\n observer,\n });\n }\n\n function executeToolCalls(functionCalls: ToolCallEnvelope['functionCalls']) {\n return executeToolCallBatch({ functionCalls, registry, observer });\n }\n\n return {\n isRunning,\n resolveResponseToolCalls,\n resolveIncomingToolCalls,\n executeToolCalls,\n };\n}\n"],"mappings":"AACA,SAASA,QAAQ,QAAQ,OAAO;AAChC,SAASC,UAAU,QAAQ,OAAO;AAGlC,SACEC,mBAAmB,EACnBC,yBAAyB,EACzBC,uBAAuB,QAClB,gBAAgB;AACvB,SAASC,cAAc,QAAQ,uBAAuB;AACtD,SAASC,wBAAwB,QAAQ,4BAA4B;AACrE,SAASC,oBAAoB,QAAQ,wBAAwB;AAQ7D,OAAO,SAASC,qBAAqBA,CAAA,EAEjC;EACF,MAAAC,eAAA,GAAiCJ,cAAc,CAAC,CAAC;IAAAK,qBAAA,GAAAD,eAAA,CAAzCE,KAAK;IAAEC,QAAQ,GAAAF,qBAAA,cAAG,CAAC,CAAC,GAAAA,qBAAA;EAC5B,MAAMG,WAAW,GAAGZ,UAAU,CAACC,mBAAmB,CAAC;EACnD,MAAMY,WAAW,GAAGb,UAAU,CAACG,uBAAuB,CAAC;EACvD,MAAMW,aAAa,GAAGd,UAAU,CAACE,yBAAyB,CAAC;EAC3D,MAAAa,SAAA,GAAkChB,QAAQ,CAAC,KAAK,CAAC;IAA1CiB,SAAS,GAAAD,SAAA;IAAEE,YAAY,GAAAF,SAAA;EAE9B,MAAMG,QAA6B,GAAG;IACpCC,iBAAiBA,CAACC,KAAK,EAAE;MACvBR,WAAW,CAACQ,KAAK,CAAC;IACpB,CAAC;IACDC,aAAaA,CAACC,MAAM,EAAE;MACpBT,WAAW,CAACS,MAAM,CAAC;IACrB,CAAC;IACDC,eAAeA,CAACD,MAAM,EAAEE,MAAM,EAAE;MAC9BV,aAAa,CAAC;QAAEW,EAAE,EAAEH,MAAM;QAAEE;MAAO,CAAC,CAAC;IACvC;EACF,CAAC;EAED,MAAAE,UAAA,GAAkB3B,QAAQ,CAAgC,MACxDM,wBAAwB,CAAY;MAClCsB,eAAeA,CAACC,aAAa,EAAE;QAC7BX,YAAY,CAACW,aAAa,CAAC;MAC7B;IACF,CAAC,CACH,CAAC;IANMC,OAAO,GAAAH,UAAA;EAQd,SAASI,wBAAwBA,CAC/BC,eAA0B,EAC1BC,mBAA0E,EAC1E;IACA,OAAOH,OAAO,CAACC,wBAAwB,CAAC;MACtCC,eAAe;MACfC,mBAAmB;MACnBrB,QAAQ;MACRO;IACF,CAAC,CAAC;EACJ;EAEA,SAASe,wBAAwBA,CAC/BC,QAA0B,EAC1BC,OAA2B,EAC3B;IACA,OAAON,OAAO,CAACI,wBAAwB,CAAC;MACtCC,QAAQ;MACRC,OAAO;MACPxB,QAAQ;MACRO;IACF,CAAC,CAAC;EACJ;EAEA,SAASkB,gBAAgBA,CAACC,aAAgD,EAAE;IAC1E,OAAO/B,oBAAoB,CAAC;MAAE+B,aAAa;MAAE1B,QAAQ;MAAEO;IAAS,CAAC,CAAC;EACpE;EAEA,OAAO;IACLF,SAAS;IACTc,wBAAwB;IACxBG,wBAAwB;IACxBG;EACF,CAAC;AACH","ignoreList":[]}
|
|
@@ -4,4 +4,6 @@ export declare const SPEAKING_STATE_EVENT_MAP: Record<TurnDetectionData['partici
|
|
|
4
4
|
export declare const ACOUSTIC_USER_THRESHOLD_RMS = 0.025;
|
|
5
5
|
export declare const ACOUSTIC_USER_HANGOVER_MS = 400;
|
|
6
6
|
export declare const ACOUSTIC_AGENT_HANGOVER_MS = 900;
|
|
7
|
+
export declare const GET_TOOLS_RPC_METHOD = "get_tools";
|
|
8
|
+
export declare const EXECUTE_TOOL_RPC_METHOD = "execute_tool";
|
|
7
9
|
//# sourceMappingURL=constants.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../../../src/hooks/useConversation/livekit/constants.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AACjD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAErE,eAAO,MAAM,wBAAwB,EAAE,MAAM,CAC3C,iBAAiB,CAAC,iBAAiB,CAAC,EACpC,MAAM,CAAC,iBAAiB,CAAC,OAAO,CAAC,EAAE,iBAAiB,CAAC,CAUtD,CAAC;AAEF,eAAO,MAAM,2BAA2B,QAAQ,CAAC;AACjD,eAAO,MAAM,yBAAyB,MAAM,CAAC;AAC7C,eAAO,MAAM,0BAA0B,MAAM,CAAC"}
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../../../src/hooks/useConversation/livekit/constants.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AACjD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAErE,eAAO,MAAM,wBAAwB,EAAE,MAAM,CAC3C,iBAAiB,CAAC,iBAAiB,CAAC,EACpC,MAAM,CAAC,iBAAiB,CAAC,OAAO,CAAC,EAAE,iBAAiB,CAAC,CAUtD,CAAC;AAEF,eAAO,MAAM,2BAA2B,QAAQ,CAAC;AACjD,eAAO,MAAM,yBAAyB,MAAM,CAAC;AAC7C,eAAO,MAAM,0BAA0B,MAAM,CAAC;AAE9C,eAAO,MAAM,oBAAoB,cAAc,CAAC;AAChD,eAAO,MAAM,uBAAuB,iBAAiB,CAAC"}
|
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
import type { FunctionCall, FunctionCallResult } from '../../../types/service';
|
|
2
|
-
import type { ToolCallEnvelope, ToolRuntimeAdapter } from '../../useTools/runtime/types';
|
|
3
1
|
export type InactivityWarningData = {
|
|
4
2
|
type: 'inactivity_warning';
|
|
5
3
|
grace_period_sec: number;
|
|
@@ -7,9 +5,6 @@ export type InactivityWarningData = {
|
|
|
7
5
|
export type InactivityTimeoutData = {
|
|
8
6
|
type: 'inactivity_timeout';
|
|
9
7
|
};
|
|
10
|
-
export type ToolRuntimeLike = {
|
|
11
|
-
handleIncoming(envelope: ToolCallEnvelope, adapter: ToolRuntimeAdapter): Promise<void>;
|
|
12
|
-
};
|
|
13
8
|
export type TurnDetectionData = {
|
|
14
9
|
createdAt: number;
|
|
15
10
|
participantIdentity: string;
|
|
@@ -22,14 +17,9 @@ export type TurnDetectionData = {
|
|
|
22
17
|
participantKind: 'STANDARD' | 'AGENT';
|
|
23
18
|
speechId?: string;
|
|
24
19
|
};
|
|
25
|
-
export type
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
};
|
|
30
|
-
export type ToolResultsData = {
|
|
31
|
-
type: 'tool_results';
|
|
32
|
-
requestId: string;
|
|
33
|
-
functionCallResults: FunctionCallResult[];
|
|
20
|
+
export type ClientToolDefinition = {
|
|
21
|
+
name: string;
|
|
22
|
+
description: string;
|
|
23
|
+
parameters: Record<string, unknown>;
|
|
34
24
|
};
|
|
35
25
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../src/hooks/useConversation/livekit/types.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../src/hooks/useConversation/livekit/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,qBAAqB,GAAG;IAClC,IAAI,EAAE,oBAAoB,CAAC;IAC3B,gBAAgB,EAAE,MAAM,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG;IAClC,IAAI,EAAE,oBAAoB,CAAC;CAC5B,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,WAAW,GAAG,UAAU,CAAC;IAChC,qBAAqB,EAAE,uBAAuB,GAAG,YAAY,CAAC;IAC9D,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,eAAe,EAAE,UAAU,GAAG,OAAO,CAAC;IACtC,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACrC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useConversation.d.ts","sourceRoot":"","sources":["../../../../../src/hooks/useConversation/livekit/useConversation.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"useConversation.d.ts","sourceRoot":"","sources":["../../../../../src/hooks/useConversation/livekit/useConversation.ts"],"names":[],"mappings":"AAqBA,OAAO,KAAK,EACV,qBAAqB,EACrB,sBAAsB,EAEvB,MAAM,UAAU,CAAC;AA0ClB,wBAAgB,eAAe,CAAC,EAC9B,QAAe,EACf,IAAI,EACJ,MAAM,EACN,mBAA2B,EAC3B,eAAuB,EACvB,iBAAiB,EACjB,qBAAqB,GACtB,EAAE,sBAAsB,GAAG,qBAAqB,CA+hBhD"}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
import type { InactivityWarningData, InactivityTimeoutData,
|
|
1
|
+
import type { InactivityWarningData, InactivityTimeoutData, TurnDetectionData } from '../types';
|
|
2
2
|
export declare function decodeDataPayload(data: Uint8Array): unknown;
|
|
3
3
|
export declare function checkIsTurnDetectionData(data: unknown): data is TurnDetectionData;
|
|
4
4
|
export declare function checkIsInactivityWarningData(data: unknown): data is InactivityWarningData;
|
|
5
5
|
export declare function checkIsInactivityTimeoutData(data: unknown): data is InactivityTimeoutData;
|
|
6
|
-
export declare function checkIsToolCallsData(data: unknown): data is ToolCallsData;
|
|
7
6
|
//# sourceMappingURL=dataChannel.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dataChannel.d.ts","sourceRoot":"","sources":["../../../../../../src/hooks/useConversation/livekit/utils/dataChannel.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,qBAAqB,EACrB,qBAAqB,EACrB,
|
|
1
|
+
{"version":3,"file":"dataChannel.d.ts","sourceRoot":"","sources":["../../../../../../src/hooks/useConversation/livekit/utils/dataChannel.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,qBAAqB,EACrB,qBAAqB,EACrB,iBAAiB,EAClB,MAAM,UAAU,CAAC;AAElB,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAO3D;AAED,wBAAgB,wBAAwB,CACtC,IAAI,EAAE,OAAO,GACZ,IAAI,IAAI,iBAAiB,CAO3B;AAED,wBAAgB,4BAA4B,CAC1C,IAAI,EAAE,OAAO,GACZ,IAAI,IAAI,qBAAqB,CAS/B;AAED,wBAAgB,4BAA4B,CAC1C,IAAI,EAAE,OAAO,GACZ,IAAI,IAAI,qBAAqB,CAO/B"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
export * from './dataChannel';
|
|
2
2
|
export * from './messaging';
|
|
3
3
|
export * from './participants';
|
|
4
|
+
export * from './rpc';
|
|
4
5
|
export * from './serialization';
|
|
5
|
-
export * from './
|
|
6
|
+
export * from './toolDefinitions';
|
|
6
7
|
export * from './transcriptions';
|
|
7
8
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../src/hooks/useConversation/livekit/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,iBAAiB,CAAC;AAChC,cAAc,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../src/hooks/useConversation/livekit/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,OAAO,CAAC;AACtB,cAAc,iBAAiB,CAAC;AAChC,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rpc.d.ts","sourceRoot":"","sources":["../../../../../../src/hooks/useConversation/livekit/utils/rpc.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAa9D,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,MAAM,GACd,YAAY,GAAG,SAAS,CAO1B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"toolDefinitions.d.ts","sourceRoot":"","sources":["../../../../../../src/hooks/useConversation/livekit/utils/toolDefinitions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAC;AAErD,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,aAAa,GACtB,oBAAoB,EAAE,CAexB"}
|