[文档、验收与归档]:完成真实运行说明和OpenSpec归档,包含README、最终门禁和主规范更新

This commit is contained in:
mkbk
2026-06-17 20:17:04 +08:00
parent 4b7cd18a0f
commit 445eebeaec
15 changed files with 320 additions and 143 deletions
+23 -8
View File
@@ -1,6 +1,7 @@
from __future__ import annotations
import math
import base64
import json
import socket
import struct
@@ -166,12 +167,12 @@ class CloudTtsProvider:
)
payload = {
"model": self.config.tts_model,
"input": clean,
"voice": self.config.tts_voice,
"response_format": "mp3",
"messages": [{"role": "assistant", "content": clean}],
"audio": {"format": "wav", "voice": self.config.tts_voice},
"stream": False,
}
request = urllib.request.Request(
self.config.api_url("/v1/audio/speech"),
self.config.api_url("/v1/chat/completions"),
data=json.dumps(payload).encode("utf-8"),
headers={
"Authorization": f"Bearer {self.config.llm_api_key}",
@@ -181,7 +182,7 @@ class CloudTtsProvider:
)
try:
with self.urlopen(request, timeout=self.timeout_s) as response:
data = response.read()
payload = json.loads(response.read().decode("utf-8"))
except urllib.error.HTTPError as exc:
raise ProviderError(
ErrorCode.TTS_SYNTHESIS_FAILED,
@@ -190,7 +191,7 @@ class CloudTtsProvider:
"newapi-tts",
"tts",
) from exc
except (urllib.error.URLError, TimeoutError, socket.timeout) as exc:
except (urllib.error.URLError, TimeoutError, socket.timeout, json.JSONDecodeError) as exc:
raise ProviderError(
ErrorCode.TTS_SYNTHESIS_FAILED,
f"cloud TTS request failed: {exc}",
@@ -198,7 +199,11 @@ class CloudTtsProvider:
"newapi-tts",
"tts",
) from exc
if not data:
choices = payload.get("choices") or []
message = (choices[0].get("message") if choices else {}) or {}
audio = message.get("audio") or {}
encoded = audio.get("data")
if not encoded:
raise ProviderError(
ErrorCode.TTS_EMPTY_AUDIO,
"cloud TTS returned empty audio",
@@ -206,4 +211,14 @@ class CloudTtsProvider:
"newapi-tts",
"tts",
)
return AudioSegment(data, 16000, 1, 0, max(120, len(clean) * 45), {"text": clean, "format": "mp3"})
try:
data = base64.b64decode(encoded)
except (TypeError, ValueError) as exc:
raise ProviderError(
ErrorCode.TTS_SYNTHESIS_FAILED,
f"cloud TTS returned invalid base64 audio: {exc}",
True,
"newapi-tts",
"tts",
) from exc
return AudioSegment(data, 24000, 1, 0, max(120, len(clean) * 45), {"text": clean, "format": "wav"})