@mirai/core 0.4.517 → 0.4.518
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.
|
@@ -120,7 +120,7 @@ const useOpenAiRealtimeSession = () => {
|
|
|
120
120
|
const fingerprint = localStorage.getItem('MIRAI:FINGERPRINT');
|
|
121
121
|
try {
|
|
122
122
|
const sessionResponse = await (0, _dataSources.request)({
|
|
123
|
-
endpoint: "/
|
|
123
|
+
endpoint: "/audio/session?fingerprint=".concat(fingerprint, "&hotelId=").concat(isChain ? '' : hotelId !== null && hotelId !== void 0 ? hotelId : '', "&chainId=").concat(isChain ? chainId !== null && chainId !== void 0 ? chainId : '' : ''),
|
|
124
124
|
hostname: process.env.SERVICE_SYNAPSE,
|
|
125
125
|
method: 'GET'
|
|
126
126
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useOpenAiRealtimeSession.js","names":["_dataSources","require","_react","_helpers","_lobby","useOpenAiRealtimeSession","audioElementRef","useRef","audioContextRef","peerConnectionRef","dataChannelRef","localStreamRef","localAudioTrackRef","microphoneEnabledRef","pendingIntroRef","introResponseIdRef","pendingMcpRef","pendingMcpCallIdRef","pendingUserTranscriptRef","inputSourceRef","outputSourceRef","inputFrequencyDataRef","outputFrequencyDataRef","audioAnalyzersRef","inputAnalyser","outputAnalyser","getInputByteFrequencyData","getOutputByteFrequencyData","cleanupRealtimeSession","useCallback","shouldSignal","arguments","length","undefined","dataChannel","current","readyState","send","JSON","stringify","type","close","peerConnection","getSenders","forEach","sender","track","stop","localStream","getTracks","srcObject","disconnect","audioContext","enableMicrophone","enabled","resumeMcpIfNeeded","outputCallId","pendingCallId","channel","startSession","_ref","assistant_name","chainId","hotelId","isChain","locale","setIsConnecting","setReady","fingerprint","localStorage","getItem","sessionResponse","request","endpoint","concat","hostname","process","env","SERVICE_SYNAPSE","method","ephemeralKey","value","RTCPeerConnection","document","createElement","autoplay","ontrack","_ref2","streams","remoteStream","createMediaStreamSource","connect","mediaStream","navigator","mediaDevices","getUserMedia","audio","echoCancellation","noiseSuppression","autoGainControl","channelCount","sampleRate","getAudioTracks","AudioContextConstructor","globalThis","AudioContext","webkitAudioContext","Error","state","resume","createAnalyser","fftSize","Uint8Array","frequencyBinCount","getByteFrequencyData","inputSource","applyConstraints","addTrack","createDataChannel","addEventListener","Event","publish","EVENT","METRICS","id","localeHint","introductionMessage","response","instructions","event","_payload$item","_payload$item2","_payload$item5","_payload$item8","payload","parse","data","item","response_id","_payload$item3","_payload$item4","call_id","_payload$item6","_payload$item7","_payload$item9","_payload$item0","_payload$item1","mcp_call_id","name","url","window","location","href","_payload$transcript","transcript","trim","_payload$transcript2","input","activeLocale","chatId","ensureChatId","channelId","session","createChatMessage","author","body","meta","error","message","text","agent","offer","createOffer","setLocalDescription","sdpResponse","fetch","sdp","headers","Authorization","ok","answer","setRemoteDescription","endSession","audioAnalyzers","exports"],"sources":["../../../../../../src/components/Chat/components/Aura/hooks/useOpenAiRealtimeSession.js"],"sourcesContent":["import { Event, request } from '@mirai/data-sources';\nimport { useCallback, useRef } from 'react';\n\nimport { EVENT } from '../../../../helpers';\nimport { createChatMessage, ensureChatId } from '../../../services/lobby.service';\n\nconst useOpenAiRealtimeSession = () => {\n const audioElementRef = useRef(null);\n const audioContextRef = useRef(null);\n const peerConnectionRef = useRef(null);\n const dataChannelRef = useRef(null);\n const localStreamRef = useRef(null);\n const localAudioTrackRef = useRef(null);\n const microphoneEnabledRef = useRef(false);\n const pendingIntroRef = useRef(false);\n const introResponseIdRef = useRef(null);\n const pendingMcpRef = useRef(false);\n const pendingMcpCallIdRef = useRef(null);\n const pendingUserTranscriptRef = useRef('');\n const inputSourceRef = useRef(null);\n const outputSourceRef = useRef(null);\n const inputFrequencyDataRef = useRef(null);\n const outputFrequencyDataRef = useRef(null);\n const audioAnalyzersRef = useRef({\n inputAnalyser: null,\n outputAnalyser: null,\n getInputByteFrequencyData: () => null,\n getOutputByteFrequencyData: () => null,\n });\n\n const cleanupRealtimeSession = useCallback((shouldSignal = false) => {\n const dataChannel = dataChannelRef.current;\n if (dataChannel) {\n if (shouldSignal && dataChannel.readyState === 'open') {\n dataChannel.send(JSON.stringify({ type: 'session.close' }));\n }\n dataChannel.close();\n dataChannelRef.current = null;\n }\n\n const peerConnection = peerConnectionRef.current;\n if (peerConnection) {\n peerConnection.getSenders().forEach((sender) => {\n if (sender.track) sender.track.stop();\n });\n peerConnection.close();\n peerConnectionRef.current = null;\n }\n\n const localStream = localStreamRef.current;\n if (localStream) {\n localStream.getTracks().forEach((track) => track.stop());\n localStreamRef.current = null;\n }\n\n localAudioTrackRef.current = null;\n microphoneEnabledRef.current = false;\n pendingIntroRef.current = false;\n introResponseIdRef.current = null;\n pendingMcpRef.current = false;\n pendingMcpCallIdRef.current = null;\n\n if (audioElementRef.current) {\n audioElementRef.current.srcObject = null;\n audioElementRef.current = null;\n }\n\n if (inputSourceRef.current) {\n inputSourceRef.current.disconnect();\n inputSourceRef.current = null;\n }\n\n if (outputSourceRef.current) {\n outputSourceRef.current.disconnect();\n outputSourceRef.current = null;\n }\n\n audioAnalyzersRef.current.inputAnalyser = null;\n audioAnalyzersRef.current.outputAnalyser = null;\n audioAnalyzersRef.current.getInputByteFrequencyData = () => null;\n audioAnalyzersRef.current.getOutputByteFrequencyData = () => null;\n inputFrequencyDataRef.current = null;\n outputFrequencyDataRef.current = null;\n\n const audioContext = audioContextRef.current;\n if (audioContext) {\n audioContext.close();\n audioContextRef.current = null;\n }\n\n pendingUserTranscriptRef.current = '';\n }, []);\n\n const enableMicrophone = useCallback(() => {\n const track = localAudioTrackRef.current;\n if (!track || microphoneEnabledRef.current) return;\n track.enabled = true;\n microphoneEnabledRef.current = true;\n }, []);\n\n const resumeMcpIfNeeded = useCallback((outputCallId) => {\n if (!pendingMcpRef.current) return;\n const pendingCallId = pendingMcpCallIdRef.current;\n if (pendingCallId && outputCallId && pendingCallId !== outputCallId) return;\n const channel = dataChannelRef.current;\n if (channel && channel.readyState === 'open') {\n channel.send(JSON.stringify({ type: 'response.create' }));\n }\n pendingMcpRef.current = false;\n pendingMcpCallIdRef.current = null;\n }, []);\n\n const startSession = useCallback(\n async ({ assistant_name, chainId, hotelId, isChain, locale, setIsConnecting, setReady }) => {\n cleanupRealtimeSession();\n\n const fingerprint = localStorage.getItem('MIRAI:FINGERPRINT');\n\n try {\n const sessionResponse = await request({\n endpoint: `/voice/session?fingerprint=${fingerprint}&hotelId=${isChain ? '' : hotelId ?? ''}&chainId=${\n isChain ? chainId ?? '' : ''\n }`,\n hostname: process.env.SERVICE_SYNAPSE,\n method: 'GET',\n });\n\n const ephemeralKey = sessionResponse.value;\n const peerConnection = new RTCPeerConnection();\n peerConnectionRef.current = peerConnection;\n\n audioElementRef.current = document.createElement('audio');\n audioElementRef.current.autoplay = true;\n peerConnection.ontrack = ({ streams }) => {\n const [remoteStream] = streams;\n if (audioElementRef.current) {\n audioElementRef.current.srcObject = remoteStream || null;\n }\n if (!audioContextRef.current || !audioAnalyzersRef.current.outputAnalyser || !remoteStream) return;\n if (outputSourceRef.current) outputSourceRef.current.disconnect();\n outputSourceRef.current = audioContextRef.current.createMediaStreamSource(remoteStream);\n outputSourceRef.current.connect(audioAnalyzersRef.current.outputAnalyser);\n };\n\n const mediaStream = await navigator.mediaDevices.getUserMedia({\n audio: {\n echoCancellation: true,\n noiseSuppression: true,\n autoGainControl: true,\n channelCount: 1,\n sampleRate: 48000,\n },\n });\n\n localStreamRef.current = mediaStream;\n const [track] = mediaStream.getAudioTracks();\n\n const AudioContextConstructor = globalThis.AudioContext || globalThis.webkitAudioContext;\n if (!AudioContextConstructor) throw new Error('AudioContext not supported');\n const audioContext = new AudioContextConstructor();\n audioContextRef.current = audioContext;\n if (audioContext.state === 'suspended') await audioContext.resume();\n const inputAnalyser = audioContext.createAnalyser();\n const outputAnalyser = audioContext.createAnalyser();\n inputAnalyser.fftSize = 1024;\n outputAnalyser.fftSize = 1024;\n audioAnalyzersRef.current.inputAnalyser = inputAnalyser;\n audioAnalyzersRef.current.outputAnalyser = outputAnalyser;\n inputFrequencyDataRef.current = new Uint8Array(inputAnalyser.frequencyBinCount);\n outputFrequencyDataRef.current = new Uint8Array(outputAnalyser.frequencyBinCount);\n audioAnalyzersRef.current.getInputByteFrequencyData = () => {\n if (!audioAnalyzersRef.current.inputAnalyser || !inputFrequencyDataRef.current) return null;\n audioAnalyzersRef.current.inputAnalyser.getByteFrequencyData(inputFrequencyDataRef.current);\n return inputFrequencyDataRef.current;\n };\n audioAnalyzersRef.current.getOutputByteFrequencyData = () => {\n if (!audioAnalyzersRef.current.outputAnalyser || !outputFrequencyDataRef.current) return null;\n audioAnalyzersRef.current.outputAnalyser.getByteFrequencyData(outputFrequencyDataRef.current);\n return outputFrequencyDataRef.current;\n };\n\n const inputSource = audioContext.createMediaStreamSource(mediaStream);\n inputSourceRef.current = inputSource;\n inputSource.connect(inputAnalyser);\n\n if (track) {\n localAudioTrackRef.current = track;\n track.enabled = false;\n await track.applyConstraints({\n echoCancellation: true,\n noiseSuppression: true,\n autoGainControl: true,\n });\n peerConnection.addTrack(track, mediaStream);\n }\n\n const dataChannel = peerConnection.createDataChannel('oai-events');\n dataChannelRef.current = dataChannel;\n\n dataChannel.addEventListener('open', () => {\n pendingUserTranscriptRef.current = '';\n Event.publish(EVENT.METRICS, { id: 'AURA:START' });\n\n const localeHint = locale || 'en-US';\n const introductionMessage = `Respond in the language that matches the locale code \"${localeHint}\". Introduce yourself using the following sentence, translated into that language: \"Hello, I am ${assistant_name}, your virtual assistant. I can help you with information about our services and facilities. What would you like to know today?\"`;\n\n pendingIntroRef.current = true;\n introResponseIdRef.current = null;\n dataChannel.send(\n JSON.stringify({\n type: 'response.create',\n response: {\n instructions: introductionMessage,\n },\n }),\n );\n });\n\n dataChannel.addEventListener('message', async (event) => {\n const payload = JSON.parse(event.data);\n\n if (payload.type === 'response.output_item.added' && payload.item?.type === 'message') {\n if (pendingIntroRef.current && !introResponseIdRef.current && payload.response_id) {\n introResponseIdRef.current = payload.response_id;\n }\n }\n\n if (payload.type === 'output_audio_buffer.stopped') {\n if (\n pendingIntroRef.current &&\n introResponseIdRef.current &&\n payload.response_id === introResponseIdRef.current\n ) {\n enableMicrophone();\n pendingIntroRef.current = false;\n introResponseIdRef.current = null;\n }\n }\n\n if (payload.type === 'response.output_item.added' && payload.item?.type === 'mcp_call') {\n pendingMcpRef.current = true;\n pendingMcpCallIdRef.current = payload.item?.call_id || payload.item?.id || null;\n }\n\n if (payload.type === 'response.output_item.done' && payload.item?.type === 'mcp_call') {\n const outputCallId = payload.item?.call_id || payload.item?.id || null;\n resumeMcpIfNeeded(outputCallId);\n }\n\n if (payload.type === 'response.output_item.done' && payload.item?.type === 'mcp_call_output') {\n const outputCallId = payload.item?.call_id || payload.item?.mcp_call_id || payload.item?.id || null;\n resumeMcpIfNeeded(outputCallId);\n }\n\n if (payload.type === 'response.function_call_arguments.done' && payload.name === 'open_url') {\n const { url } = JSON.parse(payload.arguments);\n window.location.href = url;\n }\n\n if (payload.type === 'conversation.item.input_audio_transcription.completed') {\n const transcript = payload.transcript?.trim();\n if (transcript) pendingUserTranscriptRef.current += transcript;\n }\n\n if (payload.type === 'response.output_audio_transcript.done') {\n const transcript = payload.transcript?.trim();\n if (!transcript || !pendingUserTranscriptRef.current) return;\n\n const input = pendingUserTranscriptRef.current.trim();\n pendingUserTranscriptRef.current = '';\n\n const activeLocale = locale || 'en-US';\n\n if (hotelId) {\n try {\n const chatId = await ensureChatId({\n fingerprint,\n channelId: hotelId,\n session: { locale: activeLocale },\n });\n if (chatId) {\n await createChatMessage({ author: 'user', body: input, chatId, meta: { audio: true } });\n await createChatMessage({ author: 'ai', body: transcript, chatId, meta: { audio: true } });\n }\n } catch (error) {\n Event.publish(EVENT.METRICS, { id: 'AURA:ERROR', error: error?.message });\n }\n }\n\n Event.publish(EVENT.METRICS, {\n id: 'SYNAPSE_RESPONSE',\n fingerprint,\n text: transcript,\n input,\n agent: 'aura',\n locale: activeLocale,\n });\n }\n });\n\n const offer = await peerConnection.createOffer();\n await peerConnection.setLocalDescription(offer);\n\n const sdpResponse = await fetch('https://api.openai.com/v1/realtime/calls', {\n method: 'POST',\n body: offer.sdp,\n headers: {\n Authorization: `Bearer ${ephemeralKey}`,\n 'Content-Type': 'application/sdp',\n },\n });\n\n if (!sdpResponse.ok) throw new Error('Failed to establish OpenAI Realtime session');\n\n const answer = { type: 'answer', sdp: await sdpResponse.text() };\n\n await peerConnection.setRemoteDescription(answer);\n setReady(true);\n } catch (error) {\n Event.publish(EVENT.METRICS, { id: 'AURA:ERROR', error: error?.message });\n setReady(false);\n throw error;\n } finally {\n setIsConnecting(false);\n }\n },\n [cleanupRealtimeSession, enableMicrophone, resumeMcpIfNeeded],\n );\n\n const endSession = useCallback(() => {\n cleanupRealtimeSession(true);\n }, [cleanupRealtimeSession]);\n\n return { startSession, endSession, audioAnalyzers: audioAnalyzersRef.current };\n};\n\nexport { useOpenAiRealtimeSession };\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"useOpenAiRealtimeSession.js","names":["_dataSources","require","_react","_helpers","_lobby","useOpenAiRealtimeSession","audioElementRef","useRef","audioContextRef","peerConnectionRef","dataChannelRef","localStreamRef","localAudioTrackRef","microphoneEnabledRef","pendingIntroRef","introResponseIdRef","pendingMcpRef","pendingMcpCallIdRef","pendingUserTranscriptRef","inputSourceRef","outputSourceRef","inputFrequencyDataRef","outputFrequencyDataRef","audioAnalyzersRef","inputAnalyser","outputAnalyser","getInputByteFrequencyData","getOutputByteFrequencyData","cleanupRealtimeSession","useCallback","shouldSignal","arguments","length","undefined","dataChannel","current","readyState","send","JSON","stringify","type","close","peerConnection","getSenders","forEach","sender","track","stop","localStream","getTracks","srcObject","disconnect","audioContext","enableMicrophone","enabled","resumeMcpIfNeeded","outputCallId","pendingCallId","channel","startSession","_ref","assistant_name","chainId","hotelId","isChain","locale","setIsConnecting","setReady","fingerprint","localStorage","getItem","sessionResponse","request","endpoint","concat","hostname","process","env","SERVICE_SYNAPSE","method","ephemeralKey","value","RTCPeerConnection","document","createElement","autoplay","ontrack","_ref2","streams","remoteStream","createMediaStreamSource","connect","mediaStream","navigator","mediaDevices","getUserMedia","audio","echoCancellation","noiseSuppression","autoGainControl","channelCount","sampleRate","getAudioTracks","AudioContextConstructor","globalThis","AudioContext","webkitAudioContext","Error","state","resume","createAnalyser","fftSize","Uint8Array","frequencyBinCount","getByteFrequencyData","inputSource","applyConstraints","addTrack","createDataChannel","addEventListener","Event","publish","EVENT","METRICS","id","localeHint","introductionMessage","response","instructions","event","_payload$item","_payload$item2","_payload$item5","_payload$item8","payload","parse","data","item","response_id","_payload$item3","_payload$item4","call_id","_payload$item6","_payload$item7","_payload$item9","_payload$item0","_payload$item1","mcp_call_id","name","url","window","location","href","_payload$transcript","transcript","trim","_payload$transcript2","input","activeLocale","chatId","ensureChatId","channelId","session","createChatMessage","author","body","meta","error","message","text","agent","offer","createOffer","setLocalDescription","sdpResponse","fetch","sdp","headers","Authorization","ok","answer","setRemoteDescription","endSession","audioAnalyzers","exports"],"sources":["../../../../../../src/components/Chat/components/Aura/hooks/useOpenAiRealtimeSession.js"],"sourcesContent":["import { Event, request } from '@mirai/data-sources';\nimport { useCallback, useRef } from 'react';\n\nimport { EVENT } from '../../../../helpers';\nimport { createChatMessage, ensureChatId } from '../../../services/lobby.service';\n\nconst useOpenAiRealtimeSession = () => {\n const audioElementRef = useRef(null);\n const audioContextRef = useRef(null);\n const peerConnectionRef = useRef(null);\n const dataChannelRef = useRef(null);\n const localStreamRef = useRef(null);\n const localAudioTrackRef = useRef(null);\n const microphoneEnabledRef = useRef(false);\n const pendingIntroRef = useRef(false);\n const introResponseIdRef = useRef(null);\n const pendingMcpRef = useRef(false);\n const pendingMcpCallIdRef = useRef(null);\n const pendingUserTranscriptRef = useRef('');\n const inputSourceRef = useRef(null);\n const outputSourceRef = useRef(null);\n const inputFrequencyDataRef = useRef(null);\n const outputFrequencyDataRef = useRef(null);\n const audioAnalyzersRef = useRef({\n inputAnalyser: null,\n outputAnalyser: null,\n getInputByteFrequencyData: () => null,\n getOutputByteFrequencyData: () => null,\n });\n\n const cleanupRealtimeSession = useCallback((shouldSignal = false) => {\n const dataChannel = dataChannelRef.current;\n if (dataChannel) {\n if (shouldSignal && dataChannel.readyState === 'open') {\n dataChannel.send(JSON.stringify({ type: 'session.close' }));\n }\n dataChannel.close();\n dataChannelRef.current = null;\n }\n\n const peerConnection = peerConnectionRef.current;\n if (peerConnection) {\n peerConnection.getSenders().forEach((sender) => {\n if (sender.track) sender.track.stop();\n });\n peerConnection.close();\n peerConnectionRef.current = null;\n }\n\n const localStream = localStreamRef.current;\n if (localStream) {\n localStream.getTracks().forEach((track) => track.stop());\n localStreamRef.current = null;\n }\n\n localAudioTrackRef.current = null;\n microphoneEnabledRef.current = false;\n pendingIntroRef.current = false;\n introResponseIdRef.current = null;\n pendingMcpRef.current = false;\n pendingMcpCallIdRef.current = null;\n\n if (audioElementRef.current) {\n audioElementRef.current.srcObject = null;\n audioElementRef.current = null;\n }\n\n if (inputSourceRef.current) {\n inputSourceRef.current.disconnect();\n inputSourceRef.current = null;\n }\n\n if (outputSourceRef.current) {\n outputSourceRef.current.disconnect();\n outputSourceRef.current = null;\n }\n\n audioAnalyzersRef.current.inputAnalyser = null;\n audioAnalyzersRef.current.outputAnalyser = null;\n audioAnalyzersRef.current.getInputByteFrequencyData = () => null;\n audioAnalyzersRef.current.getOutputByteFrequencyData = () => null;\n inputFrequencyDataRef.current = null;\n outputFrequencyDataRef.current = null;\n\n const audioContext = audioContextRef.current;\n if (audioContext) {\n audioContext.close();\n audioContextRef.current = null;\n }\n\n pendingUserTranscriptRef.current = '';\n }, []);\n\n const enableMicrophone = useCallback(() => {\n const track = localAudioTrackRef.current;\n if (!track || microphoneEnabledRef.current) return;\n track.enabled = true;\n microphoneEnabledRef.current = true;\n }, []);\n\n const resumeMcpIfNeeded = useCallback((outputCallId) => {\n if (!pendingMcpRef.current) return;\n const pendingCallId = pendingMcpCallIdRef.current;\n if (pendingCallId && outputCallId && pendingCallId !== outputCallId) return;\n const channel = dataChannelRef.current;\n if (channel && channel.readyState === 'open') {\n channel.send(JSON.stringify({ type: 'response.create' }));\n }\n pendingMcpRef.current = false;\n pendingMcpCallIdRef.current = null;\n }, []);\n\n const startSession = useCallback(\n async ({ assistant_name, chainId, hotelId, isChain, locale, setIsConnecting, setReady }) => {\n cleanupRealtimeSession();\n\n const fingerprint = localStorage.getItem('MIRAI:FINGERPRINT');\n\n try {\n const sessionResponse = await request({\n endpoint: `/audio/session?fingerprint=${fingerprint}&hotelId=${isChain ? '' : hotelId ?? ''}&chainId=${\n isChain ? chainId ?? '' : ''\n }`,\n hostname: process.env.SERVICE_SYNAPSE,\n method: 'GET',\n });\n\n const ephemeralKey = sessionResponse.value;\n const peerConnection = new RTCPeerConnection();\n peerConnectionRef.current = peerConnection;\n\n audioElementRef.current = document.createElement('audio');\n audioElementRef.current.autoplay = true;\n peerConnection.ontrack = ({ streams }) => {\n const [remoteStream] = streams;\n if (audioElementRef.current) {\n audioElementRef.current.srcObject = remoteStream || null;\n }\n if (!audioContextRef.current || !audioAnalyzersRef.current.outputAnalyser || !remoteStream) return;\n if (outputSourceRef.current) outputSourceRef.current.disconnect();\n outputSourceRef.current = audioContextRef.current.createMediaStreamSource(remoteStream);\n outputSourceRef.current.connect(audioAnalyzersRef.current.outputAnalyser);\n };\n\n const mediaStream = await navigator.mediaDevices.getUserMedia({\n audio: {\n echoCancellation: true,\n noiseSuppression: true,\n autoGainControl: true,\n channelCount: 1,\n sampleRate: 48000,\n },\n });\n\n localStreamRef.current = mediaStream;\n const [track] = mediaStream.getAudioTracks();\n\n const AudioContextConstructor = globalThis.AudioContext || globalThis.webkitAudioContext;\n if (!AudioContextConstructor) throw new Error('AudioContext not supported');\n const audioContext = new AudioContextConstructor();\n audioContextRef.current = audioContext;\n if (audioContext.state === 'suspended') await audioContext.resume();\n const inputAnalyser = audioContext.createAnalyser();\n const outputAnalyser = audioContext.createAnalyser();\n inputAnalyser.fftSize = 1024;\n outputAnalyser.fftSize = 1024;\n audioAnalyzersRef.current.inputAnalyser = inputAnalyser;\n audioAnalyzersRef.current.outputAnalyser = outputAnalyser;\n inputFrequencyDataRef.current = new Uint8Array(inputAnalyser.frequencyBinCount);\n outputFrequencyDataRef.current = new Uint8Array(outputAnalyser.frequencyBinCount);\n audioAnalyzersRef.current.getInputByteFrequencyData = () => {\n if (!audioAnalyzersRef.current.inputAnalyser || !inputFrequencyDataRef.current) return null;\n audioAnalyzersRef.current.inputAnalyser.getByteFrequencyData(inputFrequencyDataRef.current);\n return inputFrequencyDataRef.current;\n };\n audioAnalyzersRef.current.getOutputByteFrequencyData = () => {\n if (!audioAnalyzersRef.current.outputAnalyser || !outputFrequencyDataRef.current) return null;\n audioAnalyzersRef.current.outputAnalyser.getByteFrequencyData(outputFrequencyDataRef.current);\n return outputFrequencyDataRef.current;\n };\n\n const inputSource = audioContext.createMediaStreamSource(mediaStream);\n inputSourceRef.current = inputSource;\n inputSource.connect(inputAnalyser);\n\n if (track) {\n localAudioTrackRef.current = track;\n track.enabled = false;\n await track.applyConstraints({\n echoCancellation: true,\n noiseSuppression: true,\n autoGainControl: true,\n });\n peerConnection.addTrack(track, mediaStream);\n }\n\n const dataChannel = peerConnection.createDataChannel('oai-events');\n dataChannelRef.current = dataChannel;\n\n dataChannel.addEventListener('open', () => {\n pendingUserTranscriptRef.current = '';\n Event.publish(EVENT.METRICS, { id: 'AURA:START' });\n\n const localeHint = locale || 'en-US';\n const introductionMessage = `Respond in the language that matches the locale code \"${localeHint}\". Introduce yourself using the following sentence, translated into that language: \"Hello, I am ${assistant_name}, your virtual assistant. I can help you with information about our services and facilities. What would you like to know today?\"`;\n\n pendingIntroRef.current = true;\n introResponseIdRef.current = null;\n dataChannel.send(\n JSON.stringify({\n type: 'response.create',\n response: {\n instructions: introductionMessage,\n },\n }),\n );\n });\n\n dataChannel.addEventListener('message', async (event) => {\n const payload = JSON.parse(event.data);\n\n if (payload.type === 'response.output_item.added' && payload.item?.type === 'message') {\n if (pendingIntroRef.current && !introResponseIdRef.current && payload.response_id) {\n introResponseIdRef.current = payload.response_id;\n }\n }\n\n if (payload.type === 'output_audio_buffer.stopped') {\n if (\n pendingIntroRef.current &&\n introResponseIdRef.current &&\n payload.response_id === introResponseIdRef.current\n ) {\n enableMicrophone();\n pendingIntroRef.current = false;\n introResponseIdRef.current = null;\n }\n }\n\n if (payload.type === 'response.output_item.added' && payload.item?.type === 'mcp_call') {\n pendingMcpRef.current = true;\n pendingMcpCallIdRef.current = payload.item?.call_id || payload.item?.id || null;\n }\n\n if (payload.type === 'response.output_item.done' && payload.item?.type === 'mcp_call') {\n const outputCallId = payload.item?.call_id || payload.item?.id || null;\n resumeMcpIfNeeded(outputCallId);\n }\n\n if (payload.type === 'response.output_item.done' && payload.item?.type === 'mcp_call_output') {\n const outputCallId = payload.item?.call_id || payload.item?.mcp_call_id || payload.item?.id || null;\n resumeMcpIfNeeded(outputCallId);\n }\n\n if (payload.type === 'response.function_call_arguments.done' && payload.name === 'open_url') {\n const { url } = JSON.parse(payload.arguments);\n window.location.href = url;\n }\n\n if (payload.type === 'conversation.item.input_audio_transcription.completed') {\n const transcript = payload.transcript?.trim();\n if (transcript) pendingUserTranscriptRef.current += transcript;\n }\n\n if (payload.type === 'response.output_audio_transcript.done') {\n const transcript = payload.transcript?.trim();\n if (!transcript || !pendingUserTranscriptRef.current) return;\n\n const input = pendingUserTranscriptRef.current.trim();\n pendingUserTranscriptRef.current = '';\n\n const activeLocale = locale || 'en-US';\n\n if (hotelId) {\n try {\n const chatId = await ensureChatId({\n fingerprint,\n channelId: hotelId,\n session: { locale: activeLocale },\n });\n if (chatId) {\n await createChatMessage({ author: 'user', body: input, chatId, meta: { audio: true } });\n await createChatMessage({ author: 'ai', body: transcript, chatId, meta: { audio: true } });\n }\n } catch (error) {\n Event.publish(EVENT.METRICS, { id: 'AURA:ERROR', error: error?.message });\n }\n }\n\n Event.publish(EVENT.METRICS, {\n id: 'SYNAPSE_RESPONSE',\n fingerprint,\n text: transcript,\n input,\n agent: 'aura',\n locale: activeLocale,\n });\n }\n });\n\n const offer = await peerConnection.createOffer();\n await peerConnection.setLocalDescription(offer);\n\n const sdpResponse = await fetch('https://api.openai.com/v1/realtime/calls', {\n method: 'POST',\n body: offer.sdp,\n headers: {\n Authorization: `Bearer ${ephemeralKey}`,\n 'Content-Type': 'application/sdp',\n },\n });\n\n if (!sdpResponse.ok) throw new Error('Failed to establish OpenAI Realtime session');\n\n const answer = { type: 'answer', sdp: await sdpResponse.text() };\n\n await peerConnection.setRemoteDescription(answer);\n setReady(true);\n } catch (error) {\n Event.publish(EVENT.METRICS, { id: 'AURA:ERROR', error: error?.message });\n setReady(false);\n throw error;\n } finally {\n setIsConnecting(false);\n }\n },\n [cleanupRealtimeSession, enableMicrophone, resumeMcpIfNeeded],\n );\n\n const endSession = useCallback(() => {\n cleanupRealtimeSession(true);\n }, [cleanupRealtimeSession]);\n\n return { startSession, endSession, audioAnalyzers: audioAnalyzersRef.current };\n};\n\nexport { useOpenAiRealtimeSession };\n"],"mappings":"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","ignoreList":[]}
|