@wix/legends-platform-sdk 1.31.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/README.md +3 -0
- 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 +28 -16
- package/dist/cjs/hooks/useConversation/livekit/useConversation.js.map +1 -1
- package/dist/cjs/hooks/useCreateConversation/useCreateConversation.js +17 -6
- 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/services/FetchPersonaChatService.js +10 -2
- package/dist/cjs/services/FetchPersonaChatService.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/cjs/types/service.js.map +1 -1
- 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 +28 -16
- package/dist/esm/hooks/useConversation/livekit/useConversation.js.map +1 -1
- package/dist/esm/hooks/useCreateConversation/useCreateConversation.js +17 -6
- 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/services/FetchPersonaChatService.js +10 -2
- package/dist/esm/services/FetchPersonaChatService.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/esm/types/service.js.map +1 -1
- 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 +1 -1
- package/dist/types/hooks/useConversation/livekit/useConversation.d.ts.map +1 -1
- package/dist/types/hooks/useCreateConversation/useCreateConversation.d.ts +2 -0
- 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/services/FetchPersonaChatService.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/dist/types/types/service.d.ts +2 -0
- package/dist/types/types/service.d.ts.map +1 -1
- package/package.json +2 -2
|
@@ -1 +1 @@
|
|
|
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","checkIsCreditExhaustedMessage","checkIsConversationLimitReachedMessage","checkIsPlanMinutesExhaustedMessage","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","creditExhaustedRef","conversationLimitReachedRef","planMinutesExhaustedRef","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","_participant","_kind","topic","decoded","_conversationRef$curr6","_conversationRef$curr7","_conversationRef$curr8","_ref2","resolve","catch","handleConnectedEvent","_conversationRef$curr9","handleEncryptionErrorEvent","handleDisconnectedEvent","reason","CLIENT_INITIATED","ROOM_CLOSED","handleParticipantConnectedEvent","_conversationRef$curr0","handleParticipantDisconnectedEvent","_conversationRef$curr1","leave","_conversationRef$curr10","disconnect","_conversationRef$curr11","_conversationRef$curr12","interrupt","_conversationRef$curr13","dismissInactivity","send","attachments","_conversationRef$curr14","sendText","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 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}: 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 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":["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","checkIsCreditExhaustedMessage","checkIsConversationLimitReachedMessage","checkIsPlanMinutesExhaustedMessage","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","conversationLanguage","silent","conversation","room","speaker","_useAtom","microphone","setMicrophone","_useAtom2","camera","setCamera","_useSdkConsumer","_useSdkConsumer$tools","tools","toolsRegistry","startupTelemetrySession","toolRuntime","toolsRegistryRef","startupSessionRef","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","creditExhaustedRef","conversationLimitReachedRef","planMinutesExhaustedRef","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","_startupTelemetrySess","_startupTelemetrySess2","id","mark","connect","remoteParticipant","handleAgentJoin","enableMediaDevices","error","_startupTelemetrySess3","finish","console","handleTranscriptionReceivedEvent","segments","participant","map","s","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","_participant","_kind","topic","decoded","_conversationRef$curr6","_conversationRef$curr7","_conversationRef$curr8","_ref2","resolve","catch","handleConnectedEvent","_conversationRef$curr9","handleEncryptionErrorEvent","handleDisconnectedEvent","reason","_startupSessionRef$cu","_conversationRef$curr0","CLIENT_INITIATED","ROOM_CLOSED","handleParticipantConnectedEvent","_startupSessionRef$cu2","_conversationRef$curr1","_conversationRef$curr10","handleParticipantDisconnectedEvent","_conversationRef$curr11","leave","_conversationRef$curr12","disconnect","_conversationRef$curr13","_conversationRef$curr14","interrupt","_conversationRef$curr15","dismissInactivity","send","attachments","_conversationRef$curr16","sendText","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 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":[]}
|
|
@@ -11,24 +11,31 @@ export function useCreateConversation(options) {
|
|
|
11
11
|
const type = options.type,
|
|
12
12
|
chatConfig = options.config,
|
|
13
13
|
firstConversation = options.firstConversation,
|
|
14
|
-
lastConversationTopic = options.lastConversationTopic
|
|
14
|
+
lastConversationTopic = options.lastConversationTopic,
|
|
15
|
+
conversationLanguage = options.conversationLanguage;
|
|
15
16
|
const _useSdkConsumer = useSdkConsumer(),
|
|
16
17
|
chatId = _useSdkConsumer.chatId,
|
|
17
18
|
namespace = _useSdkConsumer.namespace,
|
|
18
|
-
personaChatService = _useSdkConsumer.personaChatService
|
|
19
|
+
personaChatService = _useSdkConsumer.personaChatService,
|
|
20
|
+
startupTelemetrySession = _useSdkConsumer.startupTelemetrySession;
|
|
19
21
|
const setConversationStatus = useSetAtom(state.conversationStatus);
|
|
20
22
|
const _useAtom = useAtom(state.conversation),
|
|
21
23
|
conversation = _useAtom[0],
|
|
22
24
|
setConversation = _useAtom[1];
|
|
23
25
|
const emitEvent = useEmitConversationEvent();
|
|
24
26
|
useEffect(() => {
|
|
25
|
-
|
|
27
|
+
const startupAttempt = type === 'video' ? startupTelemetrySession == null ? void 0 : startupTelemetrySession.start() : undefined;
|
|
28
|
+
startupAttempt == null || startupAttempt.mark('api_request');
|
|
29
|
+
void create(startupAttempt).then(() => setConversationStatus('created')).catch(error => {
|
|
30
|
+
startupAttempt == null || startupAttempt.finish('error', 'create_failed');
|
|
26
31
|
const status = createConversationFailureStatus(error);
|
|
27
32
|
if (status === 'plan-minutes-exhausted') {
|
|
28
33
|
emitEvent('planMinutesExhausted', {});
|
|
29
34
|
}
|
|
30
35
|
setConversationStatus(status);
|
|
31
36
|
});
|
|
37
|
+
return () => startupTelemetrySession == null ? void 0 : startupTelemetrySession.release(startupAttempt);
|
|
38
|
+
// Telemetry changes must not issue another create-conversation request.
|
|
32
39
|
}, [type, chatId]);
|
|
33
40
|
useUnmount(() => {
|
|
34
41
|
if (!conversation) {
|
|
@@ -48,7 +55,7 @@ export function useCreateConversation(options) {
|
|
|
48
55
|
data: conversation,
|
|
49
56
|
destroy
|
|
50
57
|
};
|
|
51
|
-
async function create() {
|
|
58
|
+
async function create(startupAttempt) {
|
|
52
59
|
invariant(personaChatService, 'personaChatService is required. Pass it as a prop to LegendsPlatform.');
|
|
53
60
|
switch (type) {
|
|
54
61
|
case 'video':
|
|
@@ -58,8 +65,11 @@ export function useCreateConversation(options) {
|
|
|
58
65
|
namespace,
|
|
59
66
|
chatConfig,
|
|
60
67
|
firstConversation,
|
|
61
|
-
lastConversationTopic
|
|
68
|
+
lastConversationTopic,
|
|
69
|
+
conversationLanguage
|
|
62
70
|
});
|
|
71
|
+
startupTelemetrySession == null || startupTelemetrySession.bind(startupAttempt, result.id);
|
|
72
|
+
startupAttempt == null || startupAttempt.mark('api_response');
|
|
63
73
|
setConversation({
|
|
64
74
|
type: 'video',
|
|
65
75
|
url: result.url,
|
|
@@ -75,7 +85,8 @@ export function useCreateConversation(options) {
|
|
|
75
85
|
namespace,
|
|
76
86
|
chatConfig,
|
|
77
87
|
firstConversation,
|
|
78
|
-
lastConversationTopic
|
|
88
|
+
lastConversationTopic,
|
|
89
|
+
conversationLanguage
|
|
79
90
|
});
|
|
80
91
|
setConversation({
|
|
81
92
|
type: 'audio',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["invariant","useEffect","useAtom","useSetAtom","useUnmount","state","useSdkConsumer","useEmitConversationEvent","createConversationFailureStatus","limit","useCreateConversation","options","type","chatConfig","config","firstConversation","lastConversationTopic","_useSdkConsumer","chatId","namespace","personaChatService","setConversationStatus","conversationStatus","_useAtom","conversation","setConversation","emitEvent","create","then","catch","error","status","destroy","data","result","createInteractiveConversation","
|
|
1
|
+
{"version":3,"names":["invariant","useEffect","useAtom","useSetAtom","useUnmount","state","useSdkConsumer","useEmitConversationEvent","createConversationFailureStatus","limit","useCreateConversation","options","type","chatConfig","config","firstConversation","lastConversationTopic","conversationLanguage","_useSdkConsumer","chatId","namespace","personaChatService","startupTelemetrySession","setConversationStatus","conversationStatus","_useAtom","conversation","setConversation","emitEvent","startupAttempt","start","undefined","mark","create","then","catch","error","finish","status","release","destroy","data","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":["createContext","useContext","SdkConsumerContext","chatId","namespace","tools","useSdkConsumer"],"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,SAASA,aAAa,EAAEC,UAAU,QAAQ,OAAO;
|
|
1
|
+
{"version":3,"names":["createContext","useContext","SdkConsumerContext","chatId","namespace","tools","useSdkConsumer"],"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,SAASA,aAAa,EAAEC,UAAU,QAAQ,OAAO;AAcjD,OAAO,MAAMC,kBAAkB,gBAAGF,aAAa,CAAsB;EACnEG,MAAM,EAAE,EAAE;EACVC,SAAS,EAAE,EAAE;EACbC,KAAK,EAAE,CAAC;AACV,CAAC,CAAC;AAEF,OAAO,SAASC,cAAcA,CAAA,EAAG;EAC/B,OAAOL,UAAU,CAACC,kBAAkB,CAAC;AACvC","ignoreList":[]}
|
package/dist/esm/sdk.js
CHANGED
|
@@ -16,4 +16,5 @@ export * from './hooks/usePictureInPicture';
|
|
|
16
16
|
export * from './hooks/useMediaPermissions';
|
|
17
17
|
export * from './hooks/useTools';
|
|
18
18
|
export * from './conversation/types';
|
|
19
|
+
export { createStartupIntent, StartupAttempt } from './startup-telemetry/attempt';
|
|
19
20
|
//# sourceMappingURL=sdk.js.map
|
package/dist/esm/sdk.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[],"sources":["../../src/sdk.ts"],"sourcesContent":["export * from './types';\n\nexport * from './hooks/useTextChat';\nexport * from './hooks/useTranscriptions';\nexport * from './hooks/useConversationStatus';\nexport * from './hooks/useMicrophone';\nexport * from './hooks/useSpeaker';\nexport * from './hooks/useCamera';\nexport * from './hooks/useMediaRecorder';\nexport * from './hooks/useConversationTimer';\nexport * from './hooks/useConversationEvents';\nexport * from './hooks/useUserActivity';\nexport * from './hooks/useAudio';\nexport * from './hooks/useConnectionState';\nexport * from './hooks/useActivityState';\nexport * from './hooks/usePictureInPicture';\nexport * from './hooks/useMediaPermissions';\nexport * from './hooks/useTools';\n\nexport * from './conversation/types';\n"],"mappings":"AAAA,cAAc,SAAS;AAEvB,cAAc,qBAAqB;AACnC,cAAc,2BAA2B;AACzC,cAAc,+BAA+B;AAC7C,cAAc,uBAAuB;AACrC,cAAc,oBAAoB;AAClC,cAAc,mBAAmB;AACjC,cAAc,0BAA0B;AACxC,cAAc,8BAA8B;AAC5C,cAAc,+BAA+B;AAC7C,cAAc,yBAAyB;AACvC,cAAc,kBAAkB;AAChC,cAAc,4BAA4B;AAC1C,cAAc,0BAA0B;AACxC,cAAc,6BAA6B;AAC3C,cAAc,6BAA6B;AAC3C,cAAc,kBAAkB;AAEhC,cAAc,sBAAsB","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["createStartupIntent","StartupAttempt"],"sources":["../../src/sdk.ts"],"sourcesContent":["export * from './types';\n\nexport * from './hooks/useTextChat';\nexport * from './hooks/useTranscriptions';\nexport * from './hooks/useConversationStatus';\nexport * from './hooks/useMicrophone';\nexport * from './hooks/useSpeaker';\nexport * from './hooks/useCamera';\nexport * from './hooks/useMediaRecorder';\nexport * from './hooks/useConversationTimer';\nexport * from './hooks/useConversationEvents';\nexport * from './hooks/useUserActivity';\nexport * from './hooks/useAudio';\nexport * from './hooks/useConnectionState';\nexport * from './hooks/useActivityState';\nexport * from './hooks/usePictureInPicture';\nexport * from './hooks/useMediaPermissions';\nexport * from './hooks/useTools';\n\nexport * from './conversation/types';\n\nexport {\n createStartupIntent,\n StartupAttempt,\n} from './startup-telemetry/attempt';\nexport type {\n StartupIntent,\n StartupReport,\n StartupTelemetryOptions,\n} from './startup-telemetry/attempt';\n"],"mappings":"AAAA,cAAc,SAAS;AAEvB,cAAc,qBAAqB;AACnC,cAAc,2BAA2B;AACzC,cAAc,+BAA+B;AAC7C,cAAc,uBAAuB;AACrC,cAAc,oBAAoB;AAClC,cAAc,mBAAmB;AACjC,cAAc,0BAA0B;AACxC,cAAc,8BAA8B;AAC5C,cAAc,+BAA+B;AAC7C,cAAc,yBAAyB;AACvC,cAAc,kBAAkB;AAChC,cAAc,4BAA4B;AAC1C,cAAc,0BAA0B;AACxC,cAAc,6BAA6B;AAC3C,cAAc,6BAA6B;AAC3C,cAAc,kBAAkB;AAEhC,cAAc,sBAAsB;AAEpC,SACEA,mBAAmB,EACnBC,cAAc,QACT,6BAA6B","ignoreList":[]}
|
|
@@ -41,11 +41,15 @@ export class FetchPersonaChatService {
|
|
|
41
41
|
async createVoiceConversation(params) {
|
|
42
42
|
const chatId = params.chatId,
|
|
43
43
|
namespace = params.namespace,
|
|
44
|
-
chatConfig = params.chatConfig
|
|
44
|
+
chatConfig = params.chatConfig,
|
|
45
|
+
conversationLanguage = params.conversationLanguage;
|
|
45
46
|
const data = await this.post(`/_api/persona-chat-service/v1/chats/${chatId}/create-voice-conversation`, {
|
|
46
47
|
namespace,
|
|
47
48
|
...(chatConfig ? {
|
|
48
49
|
chatConfig
|
|
50
|
+
} : {}),
|
|
51
|
+
...(conversationLanguage !== undefined ? {
|
|
52
|
+
conversationLanguage
|
|
49
53
|
} : {})
|
|
50
54
|
});
|
|
51
55
|
return {
|
|
@@ -57,11 +61,15 @@ export class FetchPersonaChatService {
|
|
|
57
61
|
async createInteractiveConversation(params) {
|
|
58
62
|
const chatId = params.chatId,
|
|
59
63
|
namespace = params.namespace,
|
|
60
|
-
chatConfig = params.chatConfig
|
|
64
|
+
chatConfig = params.chatConfig,
|
|
65
|
+
conversationLanguage = params.conversationLanguage;
|
|
61
66
|
const data = await this.post(`/_api/persona-chat-service/v1/chats/${chatId}/create-interactive-conversation`, {
|
|
62
67
|
namespace,
|
|
63
68
|
...(chatConfig ? {
|
|
64
69
|
chatConfig
|
|
70
|
+
} : {}),
|
|
71
|
+
...(conversationLanguage !== undefined ? {
|
|
72
|
+
conversationLanguage
|
|
65
73
|
} : {})
|
|
66
74
|
});
|
|
67
75
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["HttpError","BASE_URL","resolveLimitMs","limitation","undefined","type","limit","FetchPersonaChatService","constructor","apiKey","_defineProperty","headers","Authorization","post","path","body","response","fetch","method","JSON","stringify","ok","text","catch","status","parseJson","json","createVoiceConversation","params","chatId","namespace","chatConfig","data","url","conversationUrl","id","interactiveConversationId","createInteractiveConversation","endInteractiveConversation","conversationId","sendChatMessage","message","functionCallResults","attachments","queryChatMessages","_data$pagingMetadata","_params$limit","cursor","query","cursorPaging","messages","chatMessages","map","m","content","role","createdAt","nextCursor","pagingMetadata","cursors","next","parse"],"sources":["../../../src/services/FetchPersonaChatService.ts"],"sourcesContent":["import { HttpError } from '../types/http';\nimport type {\n IPersonaChatService,\n CreateConversationParams,\n ConversationResult,\n EndConversationParams,\n SendMessageParams,\n QueryMessagesParams,\n QueryMessagesResult,\n FunctionCall,\n ChatMessage,\n Limitation,\n} from '../types';\n\nconst BASE_URL = 'https://www.wixapis.com';\n\nfunction resolveLimitMs(limitation?: Limitation): number | undefined {\n if (!limitation) {\n return undefined;\n }\n switch (limitation.type) {\n case 'MINUTES':\n return (limitation.limit ?? 0) * 60 * 1000;\n case 'SECONDS':\n return (limitation.limit ?? 0) * 1000;\n case 'TOKENS':\n default:\n return 0;\n }\n}\n\nexport class FetchPersonaChatService implements IPersonaChatService {\n private readonly apiKey: string;\n\n constructor(apiKey: string) {\n this.apiKey = apiKey;\n }\n\n private headers(): Record<string, string> {\n return {\n 'Content-Type': 'application/json',\n Authorization: `Api-Key ${this.apiKey}`,\n };\n }\n\n private async post<T>(path: string, body: unknown): Promise<T> {\n const response = await fetch(`${BASE_URL}${path}`, {\n method: 'POST',\n headers: this.headers(),\n body: JSON.stringify(body),\n });\n\n if (!response.ok) {\n const text = await response.text().catch(() => '');\n throw new HttpError(\n response.status,\n `Request failed: ${response.status} ${text}`,\n parseJson(text),\n );\n }\n\n return response.json() as Promise<T>;\n }\n\n async createVoiceConversation(\n params: CreateConversationParams,\n ): Promise<ConversationResult> {\n const { chatId, namespace, chatConfig } = params;\n\n const data = await this.post<{\n conversationUrl?: string;\n interactiveConversationId?: string;\n limitation?: Limitation;\n }>(\n `/_api/persona-chat-service/v1/chats/${chatId}/create-voice-conversation`,\n {\n namespace,\n ...(chatConfig ? { chatConfig } : {}),\n },\n );\n\n return {\n url: data.conversationUrl ?? '',\n id: data.interactiveConversationId ?? '',\n limit: resolveLimitMs(data.limitation),\n };\n }\n\n async createInteractiveConversation(\n params: CreateConversationParams,\n ): Promise<ConversationResult> {\n const { chatId, namespace, chatConfig } = params;\n\n const data = await this.post<{\n conversationUrl?: string;\n interactiveConversationId?: string;\n limitation?: Limitation;\n }>(\n `/_api/persona-chat-service/v1/chats/${chatId}/create-interactive-conversation`,\n {\n namespace,\n ...(chatConfig ? { chatConfig } : {}),\n },\n );\n\n return {\n url: data.conversationUrl ?? '',\n id: data.interactiveConversationId ?? '',\n limit: resolveLimitMs(data.limitation),\n };\n }\n\n async endInteractiveConversation(\n params: EndConversationParams,\n ): Promise<void> {\n const { chatId, conversationId, namespace } = params;\n\n await this.post(\n `/_api/persona-chat-service/v1/chats/${chatId}/end-interactive-conversation`,\n { namespace, interactiveConversationId: conversationId },\n ).catch(() => {\n // best-effort\n });\n }\n\n async sendChatMessage(\n params: SendMessageParams,\n ): Promise<{ functionCalls?: FunctionCall[]; messages?: ChatMessage[] }> {\n const {\n chatId,\n namespace,\n message,\n functionCallResults,\n chatConfig,\n attachments,\n } = params;\n\n return this.post<{\n functionCalls?: FunctionCall[];\n messages?: ChatMessage[];\n }>(`/_api/persona-chat-service/v1/chats/${chatId}/messages`, {\n namespace,\n message,\n ...(functionCallResults ? { functionCallResults } : {}),\n ...(chatConfig ? { chatConfig } : {}),\n ...(attachments ? { attachments } : {}),\n });\n }\n\n async queryChatMessages(\n params: QueryMessagesParams,\n ): Promise<QueryMessagesResult> {\n const { chatId, namespace, limit = 100, cursor } = params;\n\n const data = await this.post<{\n chatMessages?: {\n id: string;\n content: string;\n role: string;\n createdAt?: string;\n }[];\n pagingMetadata?: { cursors?: { next?: string } };\n }>(`/_api/persona-chat-service/v1/chats/${chatId}/messages/query`, {\n namespace,\n query: { cursorPaging: { limit, ...(cursor ? { cursor } : {}) } },\n });\n\n return {\n messages: (data.chatMessages ?? []).map((m) => ({\n id: m.id,\n content: m.content,\n role: m.role as 'USER' | 'ASSISTANT',\n createdAt: m.createdAt,\n })),\n nextCursor: data.pagingMetadata?.cursors?.next,\n };\n }\n}\n\nfunction parseJson(text: string): unknown {\n try {\n return JSON.parse(text);\n } catch {\n return undefined;\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["HttpError","BASE_URL","resolveLimitMs","limitation","undefined","type","limit","FetchPersonaChatService","constructor","apiKey","_defineProperty","headers","Authorization","post","path","body","response","fetch","method","JSON","stringify","ok","text","catch","status","parseJson","json","createVoiceConversation","params","chatId","namespace","chatConfig","conversationLanguage","data","url","conversationUrl","id","interactiveConversationId","createInteractiveConversation","endInteractiveConversation","conversationId","sendChatMessage","message","functionCallResults","attachments","queryChatMessages","_data$pagingMetadata","_params$limit","cursor","query","cursorPaging","messages","chatMessages","map","m","content","role","createdAt","nextCursor","pagingMetadata","cursors","next","parse"],"sources":["../../../src/services/FetchPersonaChatService.ts"],"sourcesContent":["import { HttpError } from '../types/http';\nimport type {\n IPersonaChatService,\n CreateConversationParams,\n ConversationResult,\n EndConversationParams,\n SendMessageParams,\n QueryMessagesParams,\n QueryMessagesResult,\n FunctionCall,\n ChatMessage,\n Limitation,\n} from '../types';\n\nconst BASE_URL = 'https://www.wixapis.com';\n\nfunction resolveLimitMs(limitation?: Limitation): number | undefined {\n if (!limitation) {\n return undefined;\n }\n switch (limitation.type) {\n case 'MINUTES':\n return (limitation.limit ?? 0) * 60 * 1000;\n case 'SECONDS':\n return (limitation.limit ?? 0) * 1000;\n case 'TOKENS':\n default:\n return 0;\n }\n}\n\nexport class FetchPersonaChatService implements IPersonaChatService {\n private readonly apiKey: string;\n\n constructor(apiKey: string) {\n this.apiKey = apiKey;\n }\n\n private headers(): Record<string, string> {\n return {\n 'Content-Type': 'application/json',\n Authorization: `Api-Key ${this.apiKey}`,\n };\n }\n\n private async post<T>(path: string, body: unknown): Promise<T> {\n const response = await fetch(`${BASE_URL}${path}`, {\n method: 'POST',\n headers: this.headers(),\n body: JSON.stringify(body),\n });\n\n if (!response.ok) {\n const text = await response.text().catch(() => '');\n throw new HttpError(\n response.status,\n `Request failed: ${response.status} ${text}`,\n parseJson(text),\n );\n }\n\n return response.json() as Promise<T>;\n }\n\n async createVoiceConversation(\n params: CreateConversationParams,\n ): Promise<ConversationResult> {\n const { chatId, namespace, chatConfig, conversationLanguage } = params;\n\n const data = await this.post<{\n conversationUrl?: string;\n interactiveConversationId?: string;\n limitation?: Limitation;\n }>(\n `/_api/persona-chat-service/v1/chats/${chatId}/create-voice-conversation`,\n {\n namespace,\n ...(chatConfig ? { chatConfig } : {}),\n ...(conversationLanguage !== undefined ? { conversationLanguage } : {}),\n },\n );\n\n return {\n url: data.conversationUrl ?? '',\n id: data.interactiveConversationId ?? '',\n limit: resolveLimitMs(data.limitation),\n };\n }\n\n async createInteractiveConversation(\n params: CreateConversationParams,\n ): Promise<ConversationResult> {\n const { chatId, namespace, chatConfig, conversationLanguage } = params;\n\n const data = await this.post<{\n conversationUrl?: string;\n interactiveConversationId?: string;\n limitation?: Limitation;\n }>(\n `/_api/persona-chat-service/v1/chats/${chatId}/create-interactive-conversation`,\n {\n namespace,\n ...(chatConfig ? { chatConfig } : {}),\n ...(conversationLanguage !== undefined ? { conversationLanguage } : {}),\n },\n );\n\n return {\n url: data.conversationUrl ?? '',\n id: data.interactiveConversationId ?? '',\n limit: resolveLimitMs(data.limitation),\n };\n }\n\n async endInteractiveConversation(\n params: EndConversationParams,\n ): Promise<void> {\n const { chatId, conversationId, namespace } = params;\n\n await this.post(\n `/_api/persona-chat-service/v1/chats/${chatId}/end-interactive-conversation`,\n { namespace, interactiveConversationId: conversationId },\n ).catch(() => {\n // best-effort\n });\n }\n\n async sendChatMessage(\n params: SendMessageParams,\n ): Promise<{ functionCalls?: FunctionCall[]; messages?: ChatMessage[] }> {\n const {\n chatId,\n namespace,\n message,\n functionCallResults,\n chatConfig,\n attachments,\n } = params;\n\n return this.post<{\n functionCalls?: FunctionCall[];\n messages?: ChatMessage[];\n }>(`/_api/persona-chat-service/v1/chats/${chatId}/messages`, {\n namespace,\n message,\n ...(functionCallResults ? { functionCallResults } : {}),\n ...(chatConfig ? { chatConfig } : {}),\n ...(attachments ? { attachments } : {}),\n });\n }\n\n async queryChatMessages(\n params: QueryMessagesParams,\n ): Promise<QueryMessagesResult> {\n const { chatId, namespace, limit = 100, cursor } = params;\n\n const data = await this.post<{\n chatMessages?: {\n id: string;\n content: string;\n role: string;\n createdAt?: string;\n }[];\n pagingMetadata?: { cursors?: { next?: string } };\n }>(`/_api/persona-chat-service/v1/chats/${chatId}/messages/query`, {\n namespace,\n query: { cursorPaging: { limit, ...(cursor ? { cursor } : {}) } },\n });\n\n return {\n messages: (data.chatMessages ?? []).map((m) => ({\n id: m.id,\n content: m.content,\n role: m.role as 'USER' | 'ASSISTANT',\n createdAt: m.createdAt,\n })),\n nextCursor: data.pagingMetadata?.cursors?.next,\n };\n }\n}\n\nfunction parseJson(text: string): unknown {\n try {\n return JSON.parse(text);\n } catch {\n return undefined;\n }\n}\n"],"mappings":"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","ignoreList":[]}
|