myagent-ai 1.15.98 → 1.15.99

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/package.json +1 -1
  2. package/web/tts_handler.py +32 -20
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "myagent-ai",
3
- "version": "1.15.98",
3
+ "version": "1.15.99",
4
4
  "description": "本地桌面端执行型AI助手 - Open Interpreter 风格 | Local Desktop Execution-Oriented AI Assistant",
5
5
  "main": "main.py",
6
6
  "bin": {
@@ -152,28 +152,40 @@ async def synthesize(
152
152
  all_audio += cache_path.read_bytes()
153
153
  continue
154
154
 
155
- # 调用 edge-tts
156
- try:
157
- communicate = edge_tts.Communicate(chunk, voice, rate=speed)
158
- audio_data = b""
159
- async for chunk_data in communicate.stream():
160
- if chunk_data["type"] == "audio":
161
- audio_data += chunk_data["data"]
162
-
163
- if not audio_data:
164
- logger.warning(f"TTS 块 {i} 生成空音频")
165
- continue
166
-
167
- # 写入缓存
155
+ # 调用 edge-tts(最多重试 2 次)
156
+ max_retries = 2
157
+ for attempt in range(max_retries):
168
158
  try:
169
- cache_path.write_bytes(audio_data)
159
+ communicate = edge_tts.Communicate(chunk, voice, rate=speed)
160
+ audio_data = b""
161
+ async for chunk_data in communicate.stream():
162
+ if chunk_data["type"] == "audio":
163
+ audio_data += chunk_data["data"]
164
+
165
+ if not audio_data:
166
+ logger.warning(f"TTS 块 {i} 生成空音频 (重试 {attempt + 1}/{max_retries})")
167
+ if attempt < max_retries - 1:
168
+ await asyncio.sleep(0.5)
169
+ continue
170
+ else:
171
+ break
172
+
173
+ # 写入缓存
174
+ try:
175
+ cache_path.write_bytes(audio_data)
176
+ except Exception as e:
177
+ logger.debug(f"TTS 缓存写入失败: {e}")
178
+
179
+ all_audio += audio_data
180
+ break
170
181
  except Exception as e:
171
- logger.debug(f"TTS 缓存写入失败: {e}")
172
-
173
- all_audio += audio_data
174
- except Exception as e:
175
- logger.error(f"TTS 合成失败 (块 {i}): {e}")
176
- raise RuntimeError(f"语音合成失败: {e}") from e
182
+ logger.warning(f"TTS 合成失败 (块 {i}, 重试 {attempt + 1}/{max_retries}): {e}")
183
+ if attempt < max_retries - 1:
184
+ await asyncio.sleep(0.5)
185
+ else:
186
+ logger.error(f"TTS 合成最终失败 (块 {i}): {e}")
187
+ # raise,跳过这个块继续合成后面的
188
+ break
177
189
 
178
190
  if not all_audio:
179
191
  raise RuntimeError("语音合成结果为空")