From b6497dcc33cf5295562d5328a3b2605584e18fb9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=97=8D+85CD?= <50108258+kwaa@users.noreply.github.com> Date: Wed, 1 Oct 2025 14:46:36 +0800 Subject: [PATCH] perf: use shallow-ref for web audio api class (#623) * perf: use shallow-ref for web audio api class * Update packages/stage-ui/src/stores/audio.ts --- apps/realtime-audio/src/pages/index.vue | 10 ++++------ .../src/components/gadgets/AudioSpectrum.story.vue | 10 +++++----- .../scenarios/providers/TranscriptionPlayground.vue | 4 ++-- packages/stage-ui/src/composables/queues.ts | 8 ++++---- packages/stage-ui/src/stores/audio.ts | 7 +++---- 5 files changed, 18 insertions(+), 21 deletions(-) diff --git a/apps/realtime-audio/src/pages/index.vue b/apps/realtime-audio/src/pages/index.vue index 8ffe9b8bb..74ec81566 100644 --- a/apps/realtime-audio/src/pages/index.vue +++ b/apps/realtime-audio/src/pages/index.vue @@ -11,7 +11,7 @@ import type { import { useLocalStorage, useWebSocket } from '@vueuse/core' import { streamText } from '@xsai/stream-text' -import { computed, ref, toRaw, watch } from 'vue' +import { computed, ref, shallowRef, toRaw, watch } from 'vue' import { useQueue } from '../composables/queue' @@ -21,7 +21,7 @@ const model = useLocalStorage('settings/llm/model', 'openai/gpt-4o-mini') const sendingMessage = ref('') const messages = ref([]) const streamingMessage = ref({ role: 'assistant', content: '' }) -const audioContext = ref() +const audioContext = shallowRef() const voiceId = useLocalStorage('settings/voiceId', 'lNxY9WuCBCZCISASyJ55') const voiceApiKey = useLocalStorage('settings/voiceApiKey', '') @@ -46,16 +46,14 @@ async function handleChatSendMessage() { messages.value.push({ role: 'user', content: sendingMessage.value }) messages.value.push(streamingMessage.value) - const response = await streamText({ + const response = streamText({ baseURL: baseUrl.value, apiKey: apiKey.value, model: model.value, messages: messages.value.slice(0, messages.value.length - 1).map(msg => toRaw(msg)), }) - for await (const chunk of response.chunkStream) { - const text = chunk.choices[0].delta.content || '' - + for await (const text of response.textStream) { if (text !== '') { sendPayload({ 'xi-api-key': voiceApiKey.value, diff --git a/packages/stage-ui/src/components/gadgets/AudioSpectrum.story.vue b/packages/stage-ui/src/components/gadgets/AudioSpectrum.story.vue index cfe9ab391..4286cb467 100644 --- a/packages/stage-ui/src/components/gadgets/AudioSpectrum.story.vue +++ b/packages/stage-ui/src/components/gadgets/AudioSpectrum.story.vue @@ -1,14 +1,14 @@