From 800c96c47969210df5ac12e5e22091e928c9b6b0 Mon Sep 17 00:00:00 2001 From: EvanWu <850123119@qq.com> Date: Mon, 11 Aug 2025 10:59:17 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=A2=9E=E5=8A=A0=E6=B5=81=E5=BC=8F?= =?UTF-8?q?=E8=AF=AD=E9=9F=B3=E5=90=88=E6=88=90=E9=94=99=E8=AF=AF=E5=A4=84?= =?UTF-8?q?=E7=90=86=EF=BC=8C=E4=BC=98=E5=8C=96=E8=AF=B7=E6=B1=82=E8=B6=85?= =?UTF-8?q?=E6=97=B6=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/client/platforms/alibaba.ts | 30 ++++++++++++++++++------------ 1 file changed, 18 insertions(+), 12 deletions(-) diff --git a/app/client/platforms/alibaba.ts b/app/client/platforms/alibaba.ts index 4d2ca6232..fdca6f295 100644 --- a/app/client/platforms/alibaba.ts +++ b/app/client/platforms/alibaba.ts @@ -1,10 +1,5 @@ "use client"; -import { - ApiPath, - Alibaba, - ALIBABA_BASE_URL, - REQUEST_TIMEOUT_MS, -} from "@/app/constant"; +import { ApiPath, Alibaba, ALIBABA_BASE_URL } from "@/app/constant"; import { useAccessStore, useAppConfig, @@ -103,6 +98,9 @@ export class QwenApi implements LLMApi { } async *streamSpeech(options: SpeechOptions): AsyncGenerator { + if (!options.input || !options.model) { + throw new Error("Missing required parameters: input and model"); + } const requestPayload = { model: options.model, input: { @@ -129,7 +127,7 @@ export class QwenApi implements LLMApi { // make a fetch request const requestTimeoutId = setTimeout( () => controller.abort(), - REQUEST_TIMEOUT_MS, + getTimeoutMSByModel(options.model), ); const res = await fetch(speechPath, speechPayload); @@ -148,12 +146,20 @@ export class QwenApi implements LLMApi { buffer = lines.pop() || ""; for (const line of lines) { - if (line.startsWith("data:")) { - const data = line.slice(5); - const json = JSON.parse(data); - if (json.output?.audio?.data) { - yield this.PCMBase64ToAudioBuffer(json.output.audio.data); + const data = line.slice(5); + try { + if (line.startsWith("data:")) { + const json = JSON.parse(data); + if (json.output?.audio?.data) { + yield this.PCMBase64ToAudioBuffer(json.output.audio.data); + } } + } catch (parseError) { + console.warn( + "[StreamSpeech] Failed to parse SSE data:", + parseError, + ); + continue; } } }