From 9f6c088ecc759a64d6cbaddf7a3e3bfdd2400cf0 Mon Sep 17 00:00:00 2001 From: xiaoxia Date: Sat, 11 Jul 2026 13:41:09 +0800 Subject: [PATCH] style: format packages/application/cosyvoice_service.py with black 26.5.1 --- packages/application/cosyvoice_service.py | 71 ++++++++--------------- 1 file changed, 23 insertions(+), 48 deletions(-) diff --git a/packages/application/cosyvoice_service.py b/packages/application/cosyvoice_service.py index 10f5e7cb5..1a5a200ed 100755 --- a/packages/application/cosyvoice_service.py +++ b/packages/application/cosyvoice_service.py @@ -121,9 +121,7 @@ class CosyVoiceService: self._api_key = api_key or settings.cosyvoice_api_key self._base_url = base_url or settings.cosyvoice_base_url self._model = model or settings.cosyvoice_model - self._clone_model = clone_model or getattr( - settings, "cosyvoice_clone_model", "voice-enrollment" - ) + self._clone_model = clone_model or getattr(settings, "cosyvoice_clone_model", "voice-enrollment") self._audio_url_signer = audio_url_signer # base_url 规范化:去掉末尾的路径残留(兼容旧版配置) @@ -134,11 +132,11 @@ class CosyVoiceService: # 截取到 /api/v1 为止 idx = self._base_url.find("/api/v1") if idx >= 0: - self._base_url = self._base_url[:idx + len("/api/v1")] + self._base_url = self._base_url[: idx + len("/api/v1")] logger.warning( - "[CosyVoice Config] base_url包含旧版text2audio路径,已自动修正: " - "%s -> %s", - old_url, self._base_url, + "[CosyVoice Config] base_url包含旧版text2audio路径,已自动修正: " "%s -> %s", + old_url, + self._base_url, ) self._client = http_client or httpx.Client( @@ -236,8 +234,7 @@ class CosyVoiceService: if self._audio_url_signer: try: signed_audio_url = self._audio_url_signer(audio_url) - logger.info("音频URL已预签名: original=%s signed_prefix=%s", - audio_url[:80], signed_audio_url[:80]) + logger.info("音频URL已预签名: original=%s signed_prefix=%s", audio_url[:80], signed_audio_url[:80]) except Exception as e: logger.warning("音频URL预签名失败,使用原始URL: %s", e) @@ -358,9 +355,7 @@ class CosyVoiceService: while attempts < self.CLONE_MAX_POLL_ATTEMPTS: elapsed = time.time() - start_time if elapsed > timeout: - raise CosyVoiceTimeoutError( - f"音色克隆任务超时({timeout}秒): voice_id={voice_id}" - ) + raise CosyVoiceTimeoutError(f"音色克隆任务超时({timeout}秒): voice_id={voice_id}") result = self.query_voice_status(voice_id) status = result.get("status", "").upper() @@ -368,9 +363,7 @@ class CosyVoiceService: if status == "OK": return {"voice_id": voice_id} elif status == "UNDEPLOYED": - raise CosyVoiceError( - f"音色克隆任务失败(审核未通过): voice_id={voice_id}" - ) + raise CosyVoiceError(f"音色克隆任务失败(审核未通过): voice_id={voice_id}") elif status in ("DEPLOYING", "PENDING", "PROCESSING", ""): # 继续轮询 time.sleep(self.CLONE_POLL_INTERVAL) @@ -380,9 +373,7 @@ class CosyVoiceService: time.sleep(self.CLONE_POLL_INTERVAL) attempts += 1 - raise CosyVoiceTimeoutError( - f"音色克隆任务轮询次数超限: voice_id={voice_id}" - ) + raise CosyVoiceTimeoutError(f"音色克隆任务轮询次数超限: voice_id={voice_id}") def clone_voice( self, @@ -497,9 +488,7 @@ class CosyVoiceService: request_id = response.get("request_id", "") if not audio_url: - raise CosyVoiceError( - f"CosyVoice API 未返回 audio_url: {response}" - ) + raise CosyVoiceError(f"CosyVoice API 未返回 audio_url: {response}") return { "task_id": "", # 同步接口无 task_id,兼容旧接口 @@ -509,9 +498,7 @@ class CosyVoiceService: "request_id": request_id, } - def poll_synthesize_task( - self, task_id: str, timeout: float = 120.0 - ) -> dict: + def poll_synthesize_task(self, task_id: str, timeout: float = 120.0) -> dict: """轮询合成任务(同步接口无需轮询,保留兼容). CosyVoice SpeechSynthesizer 非流式接口是同步的, @@ -520,10 +507,7 @@ class CosyVoiceService: Raises: CosyVoiceError: 同步接口无需轮询 """ - raise CosyVoiceError( - "CosyVoice 非流式合成接口是同步的,无需轮询. " - "请直接使用 submit_synthesize_task()." - ) + raise CosyVoiceError("CosyVoice 非流式合成接口是同步的,无需轮询. " "请直接使用 submit_synthesize_task().") def synthesize_speech( self, @@ -626,15 +610,17 @@ class CosyVoiceService: # DEBUG: 打印完整请求信息,用于排查418错误 import json as json_lib + safe_headers = {k: v for k, v in headers.items()} if "Authorization" in safe_headers: token = safe_headers["Authorization"] if len(token) > 20: safe_headers["Authorization"] = token[:13] + "..." + token[-4:] logger.info( - "[CosyVoice Debug] 请求详情: " - "method=%s, url=%s, headers=%s, body=%s", - method, url, safe_headers, + "[CosyVoice Debug] 请求详情: " "method=%s, url=%s, headers=%s, body=%s", + method, + url, + safe_headers, json_lib.dumps(json, ensure_ascii=False) if json else "None", ) @@ -652,8 +638,7 @@ class CosyVoiceService: # DEBUG: 打印响应状态和完整响应体 logger.info( - "[CosyVoice Debug] 响应详情: " - "status=%d, body=%s", + "[CosyVoice Debug] 响应详情: " "status=%d, body=%s", response.status_code, response.text[:2000], # 最多2000字符,避免日志过大 ) @@ -662,9 +647,7 @@ class CosyVoiceService: if response.status_code == 200: return response.json() elif response.status_code in (401, 403): - raise CosyVoiceAuthError( - f"CosyVoice API 认证失败: HTTP {response.status_code}" - ) + raise CosyVoiceAuthError(f"CosyVoice API 认证失败: HTTP {response.status_code}") elif response.status_code == 400: # 客户端错误,不重试 body_text = response.text @@ -672,19 +655,12 @@ class CosyVoiceService: body = response.json() code = body.get("code", "") message = body.get("message", "") - raise CosyVoiceError( - f"CosyVoice API 参数错误: HTTP 400, " - f"code={code}, message={message}" - ) + raise CosyVoiceError(f"CosyVoice API 参数错误: HTTP 400, " f"code={code}, message={message}") except ValueError: - raise CosyVoiceError( - f"CosyVoice API 调用失败: HTTP 400, body={body_text}" - ) + raise CosyVoiceError(f"CosyVoice API 调用失败: HTTP 400, body={body_text}") elif response.status_code >= 500: # 服务端错误,可重试 - last_error = CosyVoiceError( - f"CosyVoice API 服务端错误: HTTP {response.status_code}" - ) + last_error = CosyVoiceError(f"CosyVoice API 服务端错误: HTTP {response.status_code}") logger.warning( "CosyVoice API 失败 (尝试 %d/%d): HTTP %d", attempt + 1, @@ -694,8 +670,7 @@ class CosyVoiceService: else: # 其他客户端错误,不重试 raise CosyVoiceError( - f"CosyVoice API 调用失败: HTTP {response.status_code}, " - f"body={response.text}" + f"CosyVoice API 调用失败: HTTP {response.status_code}, " f"body={response.text}" ) except httpx.TimeoutException as e: