@shvm/vani-client 0.0.2

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.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/shared/constants/models.ts","../src/headless/adapters/blobUrl.ts","../src/headless/machine/clientMachine.ts","../src/headless/utils/webSocketUrl.ts","../src/headless/hooks/useVoiceSession.ts"],"names":["sessionId"],"mappings":"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","file":"index.js","sourcesContent":["export const STT_MODELS = [\"@cf/openai/whisper\", \"@cf/openai/whisper-tiny-en\"] as const;\nexport type STTModelId = (typeof STT_MODELS)[number];\n\nexport const LLM_MODELS = [\n \"@cf/meta/llama-3.1-8b-instruct\",\n \"@cf/meta/llama-3-8b-instruct\",\n \"@cf/meta/llama-2-7b-chat-int8\",\n \"@cf/mistral/mistral-7b-instruct-v0.1\",\n] as const;\nexport type LLMModelId = (typeof LLM_MODELS)[number];\n\nexport const TTS_MODELS = [\"@cf/deepgram/aura-2-en\", \"@cf/deepgram/aura-1\"] as const;\nexport type TTSModelId = (typeof TTS_MODELS)[number];\n\nexport const TTS_MODEL_VOICES = {\n \"@cf/deepgram/aura-2-en\": [\"asteria\", \"luna\", \"arcas\", \"athena\", \"helios\", \"orpheus\", \"perseus\", \"angus\"],\n \"@cf/deepgram/aura-1\": [\n \"asteria\",\n \"luna\",\n \"stella\",\n \"athena\",\n \"hera\",\n \"orion\",\n \"arcas\",\n \"perseus\",\n \"angus\",\n \"orpheus\",\n \"helios\",\n \"zeus\",\n ],\n} as const satisfies Record<TTSModelId, readonly string[]>;\n\nexport type TtsVoiceForModel<T extends TTSModelId> = (typeof TTS_MODEL_VOICES)[T][number];\nexport type TtsVoiceId = (typeof TTS_MODEL_VOICES)[TTSModelId][number];\n\n","export function createBlobUrl(blob: Blob): string | undefined {\n try {\n if (typeof URL === \"undefined\") return undefined;\n if (typeof URL.createObjectURL !== \"function\") return undefined;\n return URL.createObjectURL(blob);\n } catch {\n return undefined;\n }\n}\n\n","import { assign, fromCallback, setup } from \"xstate\";\nimport { createBlobUrl } from \"../adapters/blobUrl\";\nimport type { ClientMessage, SessionStatus, VoiceStatus } from \"../../shared/types/voice\";\n\nexport const socketActor = fromCallback(() => {\n return () => { };\n});\n\nexport const audioActor = fromCallback(() => {\n return () => { };\n});\n\nexport interface DebugEvent {\n id: string;\n type: \"state_change\" | \"socket_event\" | \"audio_input\" | \"audio_output\" | \"transcript\" | \"llm_token\" | \"error\";\n timestamp: number;\n details: unknown;\n blobUrl?: string;\n}\n\nexport interface ClientContext {\n status: VoiceStatus;\n serverStatus: SessionStatus;\n transcript: ClientMessage[];\n history: DebugEvent[];\n error: string | null;\n isPlaying: boolean;\n}\n\n// --- Events ---\n\nexport type ClientEvent =\n | { type: \"CONNECT\" }\n | { type: \"DISCONNECT\" }\n | { type: \"CONNECTED\" }\n | { type: \"SET_ERROR\"; error: string }\n | { type: \"SERVER_STATE_CHANGE\"; status: SessionStatus }\n | { type: \"START_LISTENING\" }\n | { type: \"STOP_LISTENING\" }\n | { type: \"ADD_MESSAGE\"; role: ClientMessage[\"role\"]; content: string }\n | { type: \"AUDIO_PLAYBACK_START\" }\n | { type: \"AUDIO_PLAYBACK_END\" }\n | { type: \"LOG_EVENT\"; eventType: DebugEvent[\"type\"]; details: unknown; blob?: Blob }\n | { type: \"TIMEOUT\" }\n | { type: \"CANCEL\" }\n | { type: \"TOOL_CALL_START\"; toolName: string }\n | { type: \"TOOL_CALL_END\"; toolName: string };\n\n\n// --- Machine ---\n\nexport const clientMachine = setup({\n types: {\n context: {} as ClientContext,\n events: {} as ClientEvent,\n },\n actions: {\n setStatusConfig: assign({\n status: () => \"connecting\",\n }),\n setConnected: assign({\n status: () => \"idle\",\n history: ({ context }) => [\n ...context.history,\n {\n id: Math.random().toString(36).slice(2),\n type: \"socket_event\" as const,\n timestamp: Date.now(),\n details: { status: \"connected\" },\n },\n ],\n }),\n setDisconnected: assign({\n status: () => \"disconnected\",\n history: ({ context }) => [\n ...context.history,\n {\n id: Math.random().toString(36).slice(2),\n type: \"socket_event\" as const,\n timestamp: Date.now(),\n details: { status: \"disconnected\" },\n },\n ],\n }),\n setError: assign({\n status: () => \"error\",\n error: ({ event }) => (event.type === \"SET_ERROR\" ? event.error : null),\n history: ({ context, event }) => [\n ...context.history,\n {\n id: Math.random().toString(36).slice(2),\n type: \"error\" as const,\n timestamp: Date.now(),\n details: { message: event.type === \"SET_ERROR\" ? event.error : \"Unknown error\" },\n },\n ],\n }),\n updateServerStatus: assign({\n serverStatus: ({ context, event }) => (event.type === \"SERVER_STATE_CHANGE\" ? event.status : context.serverStatus),\n history: ({ context, event }) => {\n if (event.type !== \"SERVER_STATE_CHANGE\") return context.history;\n return [\n ...context.history,\n {\n id: Math.random().toString(36).slice(2),\n type: \"state_change\" as const,\n timestamp: Date.now(),\n details: { from: context.serverStatus, to: event.status, source: \"server\" },\n },\n ];\n },\n }),\n setPlaying: assign({\n isPlaying: ({ event }) => event.type === \"AUDIO_PLAYBACK_START\",\n }),\n addMessage: assign({\n transcript: ({ context, event }) => {\n if (event.type !== \"ADD_MESSAGE\") return context.transcript;\n return [\n ...context.transcript,\n {\n id: Math.random().toString(36).slice(2),\n role: event.role,\n content: event.content,\n timestamp: Date.now(),\n },\n ];\n },\n history: ({ context, event }) => {\n if (event.type !== \"ADD_MESSAGE\") return context.history;\n return [\n ...context.history,\n {\n id: Math.random().toString(36).slice(2),\n type: \"transcript\" as const,\n timestamp: Date.now(),\n details: { role: event.role, text: event.content },\n },\n ];\n },\n }),\n logEvent: assign({\n history: ({ context, event }) => {\n if (event.type !== \"LOG_EVENT\") return context.history;\n return [\n ...context.history,\n {\n id: Math.random().toString(36).slice(2),\n type: event.eventType,\n timestamp: Date.now(),\n details: event.details,\n blobUrl: event.blob ? createBlobUrl(event.blob) : undefined,\n },\n ];\n },\n }),\n addToolCallStart: assign({\n transcript: ({ context, event }) => {\n if (event.type !== \"TOOL_CALL_START\") return context.transcript;\n const newTranscript = [...context.transcript];\n if (newTranscript.length === 0 || newTranscript[newTranscript.length - 1].role !== \"assistant\") {\n newTranscript.push({\n id: Math.random().toString(36).slice(2),\n role: \"assistant\",\n content: \"\",\n timestamp: Date.now(),\n toolCalls: []\n });\n }\n\n const lastMsg = newTranscript[newTranscript.length - 1];\n lastMsg.toolCalls = lastMsg.toolCalls || [];\n lastMsg.toolCalls.push({ name: event.toolName, status: \"calling\" });\n return newTranscript;\n }\n }),\n addToolCallEnd: assign({\n transcript: ({ context, event }) => {\n if (event.type !== \"TOOL_CALL_END\") return context.transcript;\n const newTranscript = [...context.transcript];\n if (newTranscript.length > 0) {\n const lastMsg = newTranscript[newTranscript.length - 1];\n if (lastMsg.role === \"assistant\" && lastMsg.toolCalls) {\n const activeTool = lastMsg.toolCalls.slice().reverse().find((t: any) => t.name === event.toolName && t.status === 'calling');\n if (activeTool) activeTool.status = 'finished';\n }\n }\n return newTranscript;\n }\n }),\n clearError: assign({\n error: null,\n }),\n },\n guards: {\n isServerThinkingOrSpeaking: ({ context, event }) => {\n const status = event.type === \"SERVER_STATE_CHANGE\" ? event.status : context.serverStatus;\n return status === \"thinking\" || status === \"speaking\";\n },\n },\n}).createMachine({\n id: \"client\",\n initial: \"disconnected\",\n context: {\n status: \"disconnected\",\n serverStatus: \"idle\",\n transcript: [],\n history: [],\n error: null,\n isPlaying: false,\n },\n on: {\n LOG_EVENT: { actions: \"logEvent\" },\n ADD_MESSAGE: { actions: [\"addMessage\", \"clearError\"] },\n TOOL_CALL_START: { actions: \"addToolCallStart\" },\n TOOL_CALL_END: { actions: \"addToolCallEnd\" },\n SET_ERROR: { target: \".error\", actions: \"setError\" },\n DISCONNECT: { target: \".disconnected\", actions: \"setDisconnected\" },\n },\n states: {\n disconnected: {\n on: {\n CONNECT: { target: \"connecting\", actions: \"setStatusConfig\" },\n },\n },\n connecting: {\n on: {\n CONNECTED: { target: \"connected\", actions: \"setConnected\" },\n },\n },\n connected: {\n initial: \"idle\",\n states: {\n idle: {\n entry: assign({ status: \"idle\" }),\n on: {\n START_LISTENING: { target: \"#client.listening\", actions: \"clearError\" },\n AUDIO_PLAYBACK_START: { target: \"#client.speaking\", actions: \"setPlaying\" },\n SERVER_STATE_CHANGE: [\n {\n guard: \"isServerThinkingOrSpeaking\",\n target: \"processing\",\n actions: \"updateServerStatus\",\n },\n {\n actions: \"updateServerStatus\",\n },\n ],\n },\n },\n processing: {\n entry: assign({ status: \"processing\" }),\n after: {\n 20000: { target: \"idle\", actions: assign({ error: \"Server timed out. Interactions will reset.\" }) },\n },\n on: {\n CANCEL: { target: \"idle\", actions: \"clearError\" },\n START_LISTENING: { target: \"#client.listening\", actions: \"clearError\" },\n AUDIO_PLAYBACK_START: { target: \"#client.speaking\", actions: \"setPlaying\" },\n SERVER_STATE_CHANGE: [\n {\n guard: ({ event }) => event.status === \"listening\" || event.status === \"idle\",\n target: \"idle\",\n actions: \"updateServerStatus\",\n },\n {\n actions: \"updateServerStatus\",\n },\n ],\n },\n },\n },\n },\n listening: {\n entry: assign({ status: \"listening\" }),\n on: {\n STOP_LISTENING: { target: \"connected.processing\" },\n SERVER_STATE_CHANGE: { actions: \"updateServerStatus\" },\n },\n },\n speaking: {\n entry: assign({ status: \"speaking\" }),\n on: {\n AUDIO_PLAYBACK_END: {\n target: \"connected.idle\",\n actions: assign({ isPlaying: false }),\n },\n SERVER_STATE_CHANGE: { actions: \"updateServerStatus\" },\n },\n },\n error: {\n on: {\n CONNECT: { target: \"connecting\", actions: \"setStatusConfig\" },\n START_LISTENING: { target: \"listening\", actions: \"clearError\" },\n },\n },\n },\n});\n","export const DEFAULT_VOICE_SERVER_URL = \"https://shvm.in\";\n\nexport function buildVoiceWebSocketUrl({\n sessionId,\n serverUrl,\n wsPath,\n getWebSocketUrlOverride,\n}: {\n sessionId: string;\n serverUrl?: string;\n wsPath?: (sessionId: string) => string;\n getWebSocketUrlOverride?: (sessionId: string) => string;\n}) {\n if (getWebSocketUrlOverride) return getWebSocketUrlOverride(sessionId);\n\n const wsPathValue = wsPath ? wsPath(sessionId) : `/ws/${sessionId}`;\n const base = new URL(serverUrl ?? DEFAULT_VOICE_SERVER_URL);\n const protocol =\n base.protocol === \"https:\" ? \"wss:\" : base.protocol === \"http:\" ? \"ws:\" : base.protocol;\n base.protocol = protocol;\n return new URL(wsPathValue, base).toString();\n}\n\n","import { useEffect, useRef, useCallback } from 'react';\nimport { useMicVAD } from '@ricky0123/vad-react';\nimport * as ort from 'onnxruntime-web';\nimport { useActor } from '@xstate/react';\nimport { clientMachine, type ClientContext, type DebugEvent } from '../machine/clientMachine';\nimport type { ClientMessage, VoiceConfig, VoiceStatus } from '../../shared/types/voice';\nimport type { ServerToClientJson } from '../../shared/contracts/ws';\nimport { buildVoiceWebSocketUrl } from '../utils/webSocketUrl';\nexport type { VoiceStatus, ClientMessage as Message, DebugEvent, VoiceConfig };\n\n// --- Constants ---\nconst ONNX_WASM_BASE_PATH = 'https://cdn.jsdelivr.net/npm/onnxruntime-web@1.22.0/dist/';\nconst VAD_BASE_ASSET_PATH = 'https://cdn.jsdelivr.net/npm/@ricky0123/vad-web@0.0.29/dist/';\nconst VAD_MODEL_URL = 'https://cdn.jsdelivr.net/npm/@ricky0123/vad-web@0.0.29/dist/silero_vad_v5.onnx';\n\n// Set WASM paths for ONNX Runtime\nlet ortConfigured = false;\nfunction ensureOrtConfig() {\n if (ortConfigured) return;\n if (typeof window !== 'undefined') {\n ort.env.wasm.wasmPaths = ONNX_WASM_BASE_PATH;\n // Disable proxy to avoid dynamic import of worker scripts which Vite tries to optimize\n ort.env.wasm.proxy = false;\n // Avoid SIMD if it's causing issues, though usually SIMD is better\n // ort.env.wasm.simd = false; \n }\n ortConfigured = true;\n}\n\n// --- Types ---\n// Re-export types from machine if needed, or use them directly in UI\n\n\n\n\n// --- Hook ---\n\nexport interface UseVoiceSessionProps {\n onError?: (error: string) => void;\n onMessage?: (msg: { role: 'user' | 'assistant'; content: string }) => void;\n onFeedback?: (message: string) => void;\n initialTranscript?: ClientMessage[];\n config?: VoiceConfig;\n /**\n * Base server URL used to construct the websocket URL.\n * Examples:\n * - \"https://example.com\"\n * - \"wss://example.com\"\n *\n * Default: \"https://shvm.in\"\n */\n serverUrl?: string;\n /**\n * Full override for websocket URL construction. Takes precedence over `serverUrl`.\n */\n getWebSocketUrl?: (sessionId: string) => string;\n /**\n * Override session id for the websocket route (e.g. `/ws/:sessionId`).\n * If omitted, a random one is generated once per hook instance.\n */\n sessionId?: string;\n /**\n * Customizes the websocket path appended to the server base URL.\n * Default: `/ws/${sessionId}`\n */\n wsPath?: (sessionId: string) => string;\n}\n\nconst VAD_SAMPLE_RATE = 16000;\n\nfunction writeString(view: DataView, offset: number, text: string) {\n for (let i = 0; i < text.length; i += 1) {\n view.setUint8(offset + i, text.charCodeAt(i));\n }\n}\n\nfunction encodeWav(audio: Float32Array, sampleRate: number) {\n const buffer = new ArrayBuffer(44 + audio.length * 2);\n const view = new DataView(buffer);\n\n writeString(view, 0, 'RIFF');\n view.setUint32(4, 36 + audio.length * 2, true);\n writeString(view, 8, 'WAVE');\n writeString(view, 12, 'fmt ');\n view.setUint32(16, 16, true);\n view.setUint16(20, 1, true);\n view.setUint16(22, 1, true);\n view.setUint32(24, sampleRate, true);\n view.setUint32(28, sampleRate * 2, true);\n view.setUint16(32, 2, true);\n view.setUint16(34, 16, true);\n writeString(view, 36, 'data');\n view.setUint32(40, audio.length * 2, true);\n\n let offset = 44;\n for (let i = 0; i < audio.length; i += 1) {\n const sample = Math.max(-1, Math.min(1, audio[i]));\n view.setInt16(offset, sample < 0 ? sample * 0x8000 : sample * 0x7fff, true);\n offset += 2;\n }\n\n return buffer;\n}\n\nexport function useVoiceSession(props: UseVoiceSessionProps = {}) {\n const {\n onError,\n onMessage,\n onFeedback,\n initialTranscript,\n config,\n serverUrl,\n getWebSocketUrl: getWebSocketUrlOverride,\n sessionId,\n wsPath\n } = props;\n\n // Initialize ORT config lazily\n ensureOrtConfig();\n\n // 1. Initialize Machine\n const [snapshot, send, actorRef] = useActor(clientMachine);\n const state = snapshot.context as ClientContext;\n\n // Refs for callbacks/non-state logic\n const wsRef = useRef<WebSocket | null>(null);\n const audioContextRef = useRef<AudioContext | null>(null);\n const audioQueueRef = useRef<ArrayBuffer[]>([]);\n const isPlaybackLoopRunning = useRef(false);\n const onErrorCallbackRef = useRef(onError);\n const onMessageCallbackRef = useRef(onMessage);\n const onFeedbackCallbackRef = useRef(onFeedback);\n const configRef = useRef(config);\n const turnActiveRef = useRef(false);\n const lastVADErrorRef = useRef<string | null>(null);\n const hasSeededTranscriptRef = useRef(false);\n const sessionIdRef = useRef<string | null>(null);\n\n if (sessionIdRef.current === null) {\n sessionIdRef.current =\n sessionId ??\n (typeof crypto !== 'undefined' && 'randomUUID' in crypto\n ? // @ts-ignore\n crypto.randomUUID()\n : \"session-\" + Math.floor(Math.random() * 10000));\n }\n\n const buildWebSocketUrl = useCallback((activeSessionId: string) => {\n return buildVoiceWebSocketUrl({\n sessionId: activeSessionId,\n serverUrl,\n wsPath,\n getWebSocketUrlOverride,\n });\n }, [getWebSocketUrlOverride, serverUrl, wsPath]);\n\n // Sync refs\n useEffect(() => {\n onErrorCallbackRef.current = onError;\n onMessageCallbackRef.current = onMessage;\n onFeedbackCallbackRef.current = onFeedback;\n configRef.current = config;\n }, [onError, onMessage, onFeedback, config]);\n\n // Seed initial transcript once, if provided and machine is empty.\n useEffect(() => {\n if (hasSeededTranscriptRef.current) return;\n if (!initialTranscript || initialTranscript.length === 0) return;\n if (actorRef.getSnapshot().context.transcript.length > 0) {\n hasSeededTranscriptRef.current = true;\n return;\n }\n\n initialTranscript.forEach((msg) => {\n send({ type: 'ADD_MESSAGE', role: msg.role as any, content: msg.content });\n });\n\n hasSeededTranscriptRef.current = true;\n }, [actorRef, initialTranscript, send]);\n\n // ... (rest of hook)\n\n\n\n const initAudio = async () => {\n if (audioContextRef.current && audioContextRef.current.state !== 'closed') {\n if (audioContextRef.current.state === 'suspended') {\n await audioContextRef.current.resume();\n }\n return;\n }\n try {\n audioContextRef.current = new (window.AudioContext || (window as any).webkitAudioContext)({ sampleRate: 24000 });\n if (audioContextRef.current.state === 'suspended') {\n await audioContextRef.current.resume();\n }\n } catch (e: any) {\n console.error('[Voice] Audio init error:', e);\n const msg = 'Audio initialization failed: ' + e.message;\n console.error('[Voice] Sending SET_ERROR (Audio Init)', msg);\n send({ type: 'SET_ERROR', error: msg });\n // onError callback handled by effect\n throw e;\n }\n };\n\n const handleSpeechStart = useCallback(() => {\n const ws = wsRef.current;\n if (!ws || ws.readyState !== WebSocket.OPEN) return;\n if (turnActiveRef.current) return;\n\n // Use actorRef to get latest context synchronously in callback\n const currentContext = actorRef.getSnapshot().context;\n const status = currentContext.status;\n const error = currentContext.error;\n\n // On error, try to reset or recover.\n if (error) {\n // Optional reset logic\n }\n\n // No interruption handling. Turn-by-turn only.\n if (status === 'speaking' || status === 'processing') {\n console.log(\"[Voice] Busy, rejecting speech input (strict turn-by-turn).\");\n return;\n }\n\n if (status !== 'idle' && status !== 'listening' && status !== 'error') return;\n\n turnActiveRef.current = true;\n\n // Send start with config\n ws.send(JSON.stringify({\n type: 'start',\n config: configRef.current\n }));\n\n send({ type: 'START_LISTENING' });\n }, [actorRef, send]);\n\n const sendMessage = useCallback((text: string) => {\n const ws = wsRef.current;\n if (ws && ws.readyState === WebSocket.OPEN) {\n ws.send(JSON.stringify({ type: 'text.message', content: text }));\n send({ type: 'ADD_MESSAGE', role: 'user', content: text });\n send({ type: 'SERVER_STATE_CHANGE', status: 'speaking' }); // Assume server will process\n }\n }, [send]);\n\n const handleSpeechEnd = useCallback(async (audio: Float32Array) => {\n const ws = wsRef.current;\n if (!turnActiveRef.current) return;\n turnActiveRef.current = false;\n\n if (!ws || ws.readyState !== WebSocket.OPEN) {\n send({ type: 'SERVER_STATE_CHANGE', status: 'idle' });\n return;\n }\n\n // VAD sample rate is 16k\n const wavBuffer = encodeWav(audio, VAD_SAMPLE_RATE);\n const wavBlob = new Blob([wavBuffer], { type: 'audio/wav' });\n\n ws.send(wavBuffer);\n send({ type: 'LOG_EVENT', eventType: 'audio_input', details: { size: wavBuffer.byteLength }, blob: wavBlob });\n ws.send(JSON.stringify({ type: 'stop' }));\n send({ type: 'STOP_LISTENING' });\n }, [send]);\n\n\n\n const handleVADMisfire = useCallback(() => {\n if (!turnActiveRef.current) return;\n turnActiveRef.current = false;\n // Reset via server state simulation or dedicated event? \n // Logic was dispatch({ type: 'SERVER_STATE_CHANGE', status: 'idle' });\n // Keeping it consistent:\n send({ type: 'SERVER_STATE_CHANGE', status: 'idle' });\n }, [send]);\n\n const vad = useMicVAD({\n startOnLoad: false,\n onSpeechStart: handleSpeechStart,\n onSpeechEnd: handleSpeechEnd,\n onVADMisfire: handleVADMisfire,\n // @ts-expect-error\n workletURL: VAD_BASE_ASSET_PATH + 'vad.worklet.bundle.min.js',\n modelURL: VAD_MODEL_URL,\n onnxWASMBasePath: ONNX_WASM_BASE_PATH,\n baseAssetPath: VAD_BASE_ASSET_PATH,\n });\n\n useEffect(() => {\n if (!vad.errored) return;\n const message = typeof vad.errored === 'string'\n ? vad.errored\n // @ts-expect-error\n : vad.errored.message || 'VAD failed to load';\n if (lastVADErrorRef.current === message) return;\n lastVADErrorRef.current = message;\n console.error('[Voice] Sending SET_ERROR (VAD)', message);\n send({ type: 'SET_ERROR', error: message });\n }, [vad.errored, send]);\n\n useEffect(() => {\n const shouldListen = state.status === 'idle' || state.status === 'listening';\n if (shouldListen && !vad.listening && !vad.loading && !vad.errored) {\n vad.start();\n } else if (!shouldListen && vad.listening) {\n vad.pause();\n }\n }, [state.status, vad.listening, vad.loading, vad.errored, vad.start, vad.pause]);\n\n const connect = useCallback(() => {\n if (wsRef.current) wsRef.current.close();\n\n // Initialize AudioContext immediately to capture user gesture\n initAudio().catch(err => console.warn('[Voice] Early audio init failed', err));\n\n console.log('[Voice] Connect called');\n send({ type: 'CONNECT' });\n\n const sessionId = sessionIdRef.current || \"session-\" + Math.floor(Math.random() * 10000);\n const url = buildWebSocketUrl(sessionId);\n\n const ws = new WebSocket(url);\n wsRef.current = ws;\n\n ws.onopen = () => {\n send({ type: 'CONNECTED' });\n initAudio().catch(() => { });\n };\n\n ws.onmessage = async (event) => {\n if (event.data instanceof Blob) {\n const buf = await event.data.arrayBuffer();\n send({ type: 'LOG_EVENT', eventType: 'audio_output', details: { size: buf.byteLength }, blob: event.data });\n queueAudio(buf);\n return;\n }\n\n try {\n const data = JSON.parse(event.data) as ServerToClientJson;\n handleMessage(data);\n } catch (e) {\n console.error('[Voice] Parse error', e);\n }\n };\n\n ws.onclose = (e) => {\n console.log('[Voice] Closed', e.code);\n send({ type: 'DISCONNECT' }); // Use DISCONNECT event\n };\n\n ws.onerror = (e) => {\n console.error('[Voice] WS Error', e);\n send({ type: 'SET_ERROR', error: 'Connection failed: ' + (e instanceof ErrorEvent ? e.message : 'Unknown') });\n };\n }, [buildWebSocketUrl, send]);\n\n const handleMessage = (data: ServerToClientJson) => {\n // send({ type: 'LOG_EVENT', eventType: 'socket_event', details: data });\n switch (data.type) {\n case 'state':\n send({ type: 'SERVER_STATE_CHANGE', status: data.value });\n break;\n case 'transcript.final':\n send({ type: 'ADD_MESSAGE', role: 'user', content: data.text });\n onMessageCallbackRef.current?.({ role: 'user', content: data.text });\n break;\n case 'assistant.message':\n send({ type: 'ADD_MESSAGE', role: 'assistant', content: data.message.content });\n onMessageCallbackRef.current?.({ role: 'assistant', content: data.message.content });\n break;\n case 'assistant.partial':\n // Optional: Stream text token by token if needed\n break;\n case 'error':\n console.error('[Voice] Sending SET_ERROR (Server)', data.reason);\n send({ type: 'SET_ERROR', error: data.reason });\n break;\n case 'feedback':\n onFeedbackCallbackRef.current?.(data.message);\n break;\n case 'tool.call.start':\n send({ type: 'TOOL_CALL_START', toolName: data.toolName });\n break;\n case 'tool.call.end':\n send({ type: 'TOOL_CALL_END', toolName: data.toolName });\n break;\n }\n };\n\n\n const queueAudio = (buffer: ArrayBuffer) => {\n audioQueueRef.current.push(buffer);\n if (!isPlaybackLoopRunning.current) {\n playQueue();\n }\n };\n\n const playQueue = async () => {\n isPlaybackLoopRunning.current = true;\n\n while (audioQueueRef.current.length > 0) {\n send({ type: 'AUDIO_PLAYBACK_START' });\n\n const buffer = audioQueueRef.current.shift();\n if (!buffer) continue;\n\n try {\n const ctx = audioContextRef.current!;\n // Clone buffer for decoding\n const decoded = await ctx.decodeAudioData(buffer.slice(0));\n\n await new Promise<void>((resolve) => {\n const source = ctx.createBufferSource();\n source.buffer = decoded;\n source.connect(ctx.destination);\n source.onended = () => resolve();\n source.start(0);\n });\n\n } catch (e) {\n console.warn('[Voice] Decode failed, trying fallback', e);\n // Fallback\n try {\n const blob = new Blob([buffer], { type: 'audio/wav' }); // wav/mp3/etc\n const url = URL.createObjectURL(blob);\n const audio = new Audio(url);\n await new Promise<void>((resolve, reject) => {\n audio.onended = () => {\n URL.revokeObjectURL(url);\n resolve();\n };\n audio.onerror = reject;\n audio.play().catch(reject);\n });\n } catch (err) {\n console.error('[Voice] Playback failed completely', err);\n }\n }\n }\n\n send({ type: 'AUDIO_PLAYBACK_END' });\n isPlaybackLoopRunning.current = false;\n };\n\n const disconnect = useCallback(() => {\n if (wsRef.current) {\n wsRef.current.close();\n wsRef.current = null;\n }\n send({ type: 'DISCONNECT' });\n }, [send]);\n\n const cancel = useCallback(() => {\n const ws = wsRef.current;\n if (ws && ws.readyState === WebSocket.OPEN) {\n ws.send(JSON.stringify({ type: 'reset' }));\n }\n send({ type: 'CANCEL' });\n }, [send]);\n\n return {\n ...state,\n vadListening: vad.listening,\n vadLoading: vad.loading,\n vadErrored: vad.errored,\n userSpeaking: vad.userSpeaking,\n connect,\n disconnect,\n sendMessage,\n cancel\n };\n}\n"]}
@@ -0,0 +1,49 @@
1
+ import { V as VoiceConfig, e as SessionStatus } from '../voice-BwU4C7fN.js';
2
+ export { C as ChatRole, a as ClientMessage, L as LLMModelId, b as LLM_MODELS, S as STTModelId, c as STT_MODELS, d as ServerMessage, T as TTSModelId, f as TTS_MODELS, g as TTS_MODEL_VOICES, h as TtsVoiceForModel, i as TtsVoiceId, j as VoiceStatus } from '../voice-BwU4C7fN.js';
3
+
4
+ type ClientToServerJson = {
5
+ type: "start";
6
+ config?: VoiceConfig;
7
+ } | {
8
+ type: "stop";
9
+ } | {
10
+ type: "reset";
11
+ } | {
12
+ type: "text.message";
13
+ content: string;
14
+ };
15
+ type LegacyClientToServerJson = {
16
+ type: "text";
17
+ value: string;
18
+ };
19
+ type AnyClientToServerJson = ClientToServerJson | LegacyClientToServerJson;
20
+ type ServerToClientJson = {
21
+ type: "state";
22
+ value: SessionStatus;
23
+ } | {
24
+ type: "transcript.final";
25
+ text: string;
26
+ } | {
27
+ type: "assistant.message";
28
+ message: {
29
+ role: "assistant";
30
+ content: string;
31
+ };
32
+ } | {
33
+ type: "assistant.partial";
34
+ text: string;
35
+ } | {
36
+ type: "feedback";
37
+ message: string;
38
+ } | {
39
+ type: "error";
40
+ reason: string;
41
+ } | {
42
+ type: "tool.call.start";
43
+ toolName: string;
44
+ } | {
45
+ type: "tool.call.end";
46
+ toolName: string;
47
+ };
48
+
49
+ export { type AnyClientToServerJson, type ClientToServerJson, type LegacyClientToServerJson, type ServerToClientJson, SessionStatus, VoiceConfig };
@@ -0,0 +1,30 @@
1
+ // src/shared/constants/models.ts
2
+ var STT_MODELS = ["@cf/openai/whisper", "@cf/openai/whisper-tiny-en"];
3
+ var LLM_MODELS = [
4
+ "@cf/meta/llama-3.1-8b-instruct",
5
+ "@cf/meta/llama-3-8b-instruct",
6
+ "@cf/meta/llama-2-7b-chat-int8",
7
+ "@cf/mistral/mistral-7b-instruct-v0.1"
8
+ ];
9
+ var TTS_MODELS = ["@cf/deepgram/aura-2-en", "@cf/deepgram/aura-1"];
10
+ var TTS_MODEL_VOICES = {
11
+ "@cf/deepgram/aura-2-en": ["asteria", "luna", "arcas", "athena", "helios", "orpheus", "perseus", "angus"],
12
+ "@cf/deepgram/aura-1": [
13
+ "asteria",
14
+ "luna",
15
+ "stella",
16
+ "athena",
17
+ "hera",
18
+ "orion",
19
+ "arcas",
20
+ "perseus",
21
+ "angus",
22
+ "orpheus",
23
+ "helios",
24
+ "zeus"
25
+ ]
26
+ };
27
+
28
+ export { LLM_MODELS, STT_MODELS, TTS_MODELS, TTS_MODEL_VOICES };
29
+ //# sourceMappingURL=index.js.map
30
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/shared/constants/models.ts"],"names":[],"mappings":";AAAO,IAAM,UAAA,GAAa,CAAC,oBAAA,EAAsB,4BAA4B;AAGtE,IAAM,UAAA,GAAa;AAAA,EACxB,gCAAA;AAAA,EACA,8BAAA;AAAA,EACA,+BAAA;AAAA,EACA;AACF;AAGO,IAAM,UAAA,GAAa,CAAC,wBAAA,EAA0B,qBAAqB;AAGnE,IAAM,gBAAA,GAAmB;AAAA,EAC9B,wBAAA,EAA0B,CAAC,SAAA,EAAW,MAAA,EAAQ,SAAS,QAAA,EAAU,QAAA,EAAU,SAAA,EAAW,SAAA,EAAW,OAAO,CAAA;AAAA,EACxG,qBAAA,EAAuB;AAAA,IACrB,SAAA;AAAA,IACA,MAAA;AAAA,IACA,QAAA;AAAA,IACA,QAAA;AAAA,IACA,MAAA;AAAA,IACA,OAAA;AAAA,IACA,OAAA;AAAA,IACA,SAAA;AAAA,IACA,OAAA;AAAA,IACA,SAAA;AAAA,IACA,QAAA;AAAA,IACA;AAAA;AAEJ","file":"index.js","sourcesContent":["export const STT_MODELS = [\"@cf/openai/whisper\", \"@cf/openai/whisper-tiny-en\"] as const;\nexport type STTModelId = (typeof STT_MODELS)[number];\n\nexport const LLM_MODELS = [\n \"@cf/meta/llama-3.1-8b-instruct\",\n \"@cf/meta/llama-3-8b-instruct\",\n \"@cf/meta/llama-2-7b-chat-int8\",\n \"@cf/mistral/mistral-7b-instruct-v0.1\",\n] as const;\nexport type LLMModelId = (typeof LLM_MODELS)[number];\n\nexport const TTS_MODELS = [\"@cf/deepgram/aura-2-en\", \"@cf/deepgram/aura-1\"] as const;\nexport type TTSModelId = (typeof TTS_MODELS)[number];\n\nexport const TTS_MODEL_VOICES = {\n \"@cf/deepgram/aura-2-en\": [\"asteria\", \"luna\", \"arcas\", \"athena\", \"helios\", \"orpheus\", \"perseus\", \"angus\"],\n \"@cf/deepgram/aura-1\": [\n \"asteria\",\n \"luna\",\n \"stella\",\n \"athena\",\n \"hera\",\n \"orion\",\n \"arcas\",\n \"perseus\",\n \"angus\",\n \"orpheus\",\n \"helios\",\n \"zeus\",\n ],\n} as const satisfies Record<TTSModelId, readonly string[]>;\n\nexport type TtsVoiceForModel<T extends TTSModelId> = (typeof TTS_MODEL_VOICES)[T][number];\nexport type TtsVoiceId = (typeof TTS_MODEL_VOICES)[TTSModelId][number];\n\n"]}
@@ -0,0 +1,39 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import { DebugEvent } from '@shvm/vani-client/headless';
3
+ import { ClientMessage, VoiceConfig, VoiceStatus } from '@shvm/vani-client/shared';
4
+
5
+ interface VaniProps {
6
+ onError?: (error: string) => void;
7
+ onMessage?: (msg: {
8
+ role: "user" | "assistant";
9
+ content: string;
10
+ }) => void;
11
+ initialTranscript?: ClientMessage[];
12
+ defaultMode?: "full" | "pip";
13
+ mode?: "full" | "pip";
14
+ onModeChange?: (mode: "full" | "pip") => void;
15
+ initialConfig?: VoiceConfig;
16
+ /**
17
+ * Base server URL for websocket URL construction.
18
+ *
19
+ * Default: `https://shvm.in`
20
+ */
21
+ serverUrl?: string;
22
+ }
23
+ interface VaniViewProps {
24
+ status: VoiceStatus;
25
+ transcript: ClientMessage[];
26
+ history: DebugEvent[];
27
+ error: string | null;
28
+ connect: () => void;
29
+ cancel: () => void;
30
+ vadLoading: boolean;
31
+ onTogglePip?: () => void;
32
+ config?: VoiceConfig;
33
+ setConfig?: (config: VoiceConfig) => void;
34
+ feedback?: string | null;
35
+ }
36
+
37
+ declare function Vani(props: VaniProps): react_jsx_runtime.JSX.Element | null;
38
+
39
+ export { Vani, type VaniProps, type VaniViewProps };