Skip to content

feat(api-server): 接入 StepFun 流式 TTS - #2267

Draft
luoling8192 wants to merge 3 commits into
mainfrom
codex/feat-stepfun-streaming-tts
Draft

feat(api-server): 接入 StepFun 流式 TTS#2267
luoling8192 wants to merge 3 commits into
mainfrom
codex/feat-stepfun-streaming-tts

Conversation

@luoling8192

@luoling8192 luoling8192 commented Aug 12, 2026

Copy link
Copy Markdown
Member

用户路径

官方提供商配置将 StepFun 原生 WebSocket 流式 TTS 设为 available 后,客户端可以显式选择 StepFun 模型;设为 default 后才切换默认模型。AIRI 客户端继续使用既有 /api/v1/audio/speech/ws 协议。

设计

  • 会话层只负责客户端命令顺序、输入边界、Flux 预检与结算、日志和产品事件
  • StepFun 与 unSpeech 各自封装握手、协议状态机、命令缓冲、事件转换、超时和关闭
  • provider resolution、model visibility 和 resource id normalization 共享同一策略
  • rollout 明确区分 disabledavailabledefault,只有 default 会接管默认流量

变更

  • 接入 StepFun 原生双向流式 TTS,支持 Unicode 安全的 1000 字符分块、Base64 音频增量和 session correlation
  • 增加连接握手和完成阶段无进度超时,收到有效音频或控制进度时续期
  • cancel 和客户端断开立即终止上游,不等待配置、计费或日志 I/O
  • 结算只计算已成功发送给 provider 的文本,且上游 usage 不得低于已接受字符数
  • 区分 completed、cancelled、failed、blocked,对应 200、499、5xx、402 和独立产品事件
  • 增加 20,000 字符、512 文本帧硬上限,以及分段 Flux 可负担性检查
  • 严格校验 StepFun canonical model、voice、response format、配置重复项和密钥 AAD 上下文

验证

  • pnpm exec vitest run server/apps/api/src/routes/audio-speech-ws/route.test.ts server/apps/api/src/services/adapters/config-kv.test.ts server/apps/api/src/services/domain/admin/router-config/tests/admin-router-config.test.ts server/apps/api/src/routes/openai/v1/route.test.ts server/apps/api/src/services/domain/product-events.test.ts,5 files / 144 tests passed
  • pnpm -F @proj-airi/api-server typecheck,通过
  • pnpm lint,0 errors,7 条既有无关 warnings
  • git diff --check,通过
  • gpt-5.6-sol high reasoning 独立复审两轮,最终 no findings
  • CI 的 Lint、Type Check、全部 Build Test、Check Provenance、Prepare preview 和 autofix 均通过
  • CI Unit Test 连续两次仅失败于既有 packages/stage-ui BroadcastChannel/context bridge 用例,6 failed / 631 passed;本次 server TTS 目标测试没有失败

未验证

  • 尚未使用真实 StepFun 凭据执行上游 WebSocket smoke、首包延迟和音质 A/B
  • 本地完整 pnpm typecheck 仍受 fresh worktree 中 server-shared@proj-airi/plugin-protocol/types 构建产物依赖影响;CI Type Check 与本次 API workspace typecheck 均已通过
  • CI 尚未全绿,剩余失败限定在上述与本次改动无关的 Stage UI Unit Test,本 PR 未扩大范围修改该协议测试
  • 配置默认仍为 disabled,尚未切换生产默认提供商

@luoling8192
luoling8192 force-pushed the codex/feat-stepfun-streaming-tts branch from b2e370c to 9f7cf78 Compare August 12, 2026 12:19
@github-actions

github-actions Bot commented Aug 12, 2026

Copy link
Copy Markdown
Contributor

⏳ Approval required for deploying to Cloudflare Workers (Preview) for stage-web.

Name Link
🔭 Waiting for approval For maintainers, approve here

Hey, maintainers, kindly take some time to review and approve this deployment when you are available. Thank you! 🙏

@luoling8192
luoling8192 force-pushed the codex/feat-stepfun-streaming-tts branch from 74a9fc9 to cbf3e8c Compare August 12, 2026 14:49
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant