fix(voice): CloneVoice 的 200-with-message 泄漏收口到 dashscopeOKBodyError
M41 同族的最后一条缺口:HTTP 200 的响应里用顶层 message 报业务失败,而这句话 是上游自由文本 —— create_voice 的 input.url 是参考音频的公开地址(可能是预签名 URL,带凭据),上游报错常把它原样回显。 - ERROR 只留「打到了、但 200 是个业务失败」这个形状事实 + 体积摘要; message 原文不进 error,code/type 若真的带回来也只以令牌形态出镜 - errors.Is(err, ErrProviderFailed) 不变(熔断口径不动) - 用例断言失败仍被识别、且 error 文本里搜不到哨兵正文
This commit is contained in:
1 parent
66dda084cd
commit
9e88605cc8
3 files changed
+54
-1
No files matched your search
@@ -325,7 +325,10 @@ func (d *DashscopeCloner) CloneVoice(ctx context.Context, referenceURL, prefix s
|
||||
return "", fmt.Errorf("voice: %w: decode: %v", ErrProviderFailed, err)
|
||||
}
|
||||
if resp.Message != "" {
|
||||
return "", fmt.Errorf("voice: %w: %s", ErrProviderFailed, resp.Message)
|
||||
// 200 + 非空 message 是 DashScope 的「业务级失败」形状。message 原文是
|
||||
// 上游自由文本(可能回显参考音频的预签名 URL),因此只留形状事实与摘要
|
||||
// (见 dashscopeOKBodyError),不拼原文。
|
||||
return "", dashscopeOKBodyError(d.endpoint, body)
|
||||
}
|
||||
if resp.Output.VoiceID == "" {
|
||||
return "", fmt.Errorf("voice: %w: no voice_id in response", ErrProviderFailed)
|
||||
|
||||
Reference in new issue
Block a user