perf: Prewarm LiveAvatar browser sessions - #16
Conversation
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
|
本轮 review 已逐项核对:
验证:129 tests passed,lint passed,production build passed(仅保留已有 ONNX dynamic-require warning)。真实 cloud template 的 |
|
更新:routing 已合入,本 PR 已基于最新 lex-main 恢复并完成重新移植与测试;当前分支是正式候选,不再是撤下状态。 |
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
|
Claude finished @jiejuncai-ly's task in 5m 13s —— View job Review 结论有条件通过 (说明:本次沙箱环境无 问题及建议
残余风险:未能在本地跑通 142 项前端测试与 production build,建议在 CI 结果( |
|
针对本轮 review 的三条 P2,逐项确认如下:
补充:当前 |
|
Claude finished @jiejuncai-ly's task in 3m 26s —— View job 任务清单
(说明:沙箱环境无 Review 结论通过 本轮新增提交
未发现需要阻塞合并的问题。残余风险:
|
lanyue-llk
left a comment
There was a problem hiding this comment.
Review / Verify 结论
代码 Review:通过(无 P0/P1)
需求 Verify:有条件通过——代码路径和自动化验证已达标,但“真实首屏视频与人脸检测等待确实缩短”仍必须以 Internal Sandbox 的 HIL(prewarm → Start → 首帧 → 人脸检测 → release → 再次分配)作为最终证据,当前静态审查和单测不能替代这一项。
1. 设计目标与技术方案
方案能够实现目标,关键契约是闭合的:
POST /api/session/prewarm只在LIVEAVATAR_RUNTIME_MODE=sandbox暴露,使用 Gateway 注入的 secret,并且 identity 全部取服务端环境变量;成功后一次性消费,失败只在超时操作真正 settle 后释放 guard。- prewarm 依次完成 Room、worker readiness、dispatch readiness;最终 readiness 同时要求
agentSessionReady、room_audio_input、room_video_input,但不要求浏览器视频轨道已经发布,符合“先预热进程/participant,首帧后再发视频”的目标。 - Start 使用
LIVEAVATAR_VOICE_SESSION_ID对齐预热 identity;只有存在sandboxId时才并行启动 managed local input 与 dispatch,本地 browser/xunfei 仍保持旧串行路径,兼容边界清楚。 - 配套 lex-voice livekit-examples#226 的实际实现已核对:Browser video runner 可以提前启动,但
RoomInputPublisher只有收到并成功转换第一个有效 frame 后才创建/发布room_video,因此不会在 prewarm 阶段发布空/绿色轨道。 - 45s 总预算、30s worker 上限与配套 Gateway 60s 外层预算一致;失败响应仅返回 phase/timings,详细错误留在服务端日志,Gateway 负责 fail-closed 清理 Room/Sandbox。
2. 实际运行、兼容性与变更范围
- dispatch route 的协议和默认 8s 行为保留;prewarm 是新增的 Sandbox-only 能力,没有改变非 Sandbox 主链路。
agentSessionReady对旧 template 不做兼容是有意的 fail-closed 迁移,不应静默降级;必须遵守“前端 + template + Gateway”部署顺序,反向部署时先关闭 prewarm。- 相对 API/asset URL、logo、font、VAD base path 的修改都服务于根路径、Gateway
/s/<slug>与 CubeSandbox/proxy/4003/三类入口;结合 Gateway 的 cookie/referer session routing 后路径语义成立,没有发现跨主题修改 primebot 等业务逻辑。 - observability 的启动事件缓冲与阶段 marker 用于量化本次优化,属于主题内必要改动。
3. 非阻塞的简化建议
- [P2]
app/api/session/session-dispatch-service.ts已达 743 行。 目前把普通 dispatch、in-flight 去重、prewarm 三阶段编排、deadline/cancel 和 LiveKit cleanup 放在一个文件中。逻辑本身有测试保护,但这是本 PR 唯一明显的超大实现文件。建议按稳定职责拆成 regular dispatch coordinator、prewarm orchestrator、deadline/cleanup helpers;保持当前函数式接口即可,强行增加类层次不会更简单。 - [P2]
lib/session-dispatch-readiness.ts:47-58在 video-ready 分支前后重复检查requireRoomInputParticipantsReady && !hasReadyRoomInputParticipants(...),可以先统一验证 room input participants,再单独验证 video track,减少分支和重复。
4. 验证证据
- 独立 head
85acae5快照本地执行:157/157 tests 通过。 - ESLint、Prettier check、Next production build 通过;build 只有既有 onnxruntime 动态 require warning。
git diff --check通过。- GitHub 最新
test与claudechecks 均为 pass。
因此:代码可以合并,但需求验收状态应在 Internal HIL 完成前保持“有条件通过”,不要把 CI pass 等同于真实延迟目标已经验证。
|
已核对最新 LinkAI review:本轮无 P0/P1,两个 P2 都是非阻塞维护建议,暂不扩大本 PR 范围。PR body 已补充真实验收边界:自动化验证已通过,prewarm 的最终延迟效果将在前后端合并并重建正式 Internal template 后完成 HIL。 |
Goal
在 Sandbox 用户点击 Start 前完成 LiveKit Room、Agent session、
room_audio_input和room_video_input预热,并让 Start 复用已建立的 Session,缩短首屏视频与人脸检测等待。本 PR 与 lex-voice#226 配套。
Design
Server prewarm
POST /api/session/prewarm,使用 Gateway 注入的单 Sandbox、一次性 secret 授权。agentSessionReady、room_audio_input和room_video_input;不要求浏览器视频首帧已发布。LIVEAVATAR_RUNTIME_MODE=sandbox下存在,非 Sandbox 返回 404。Browser Start
sandboxId时,本地媒体与 dispatch 并行启动并复用 prewarm Session。room_video,避免绿色或无效首帧。Paths and timeout
/s/<slug>和 CubeSandbox/proxy/4003/前缀。0.0.0.0:4003,同时提供 UI 和 prewarm API;不依赖ui_proxy或4103。45s,Agent worker readiness 上限30s;Gateway 外层默认预算必须大于该总预算并保留网络余量。Validation
GitHub Actions 的 tests、lint、format check 和 Next production build 均通过;测试覆盖 Sandbox/非 Sandbox 分支、一次性授权、readiness、超时取消、路径前缀和失败清理。
Internal Gateway 的基础 create、claim、RTC、release 和 Room cleanup 链路已经完成 HIL。本 PR 的 prewarm 延迟目标仍需在前后端合并、正式 Internal template 重建后,按
prewarm -> Start -> 首帧 -> 人脸检测 -> release -> 再次分配完成最终 HIL;CI 通过不替代该验收。Rollout
本次只构建和验证 Internal Sandbox template。Online 继续作为后续客户目标,但原 HK Sandbox 已撤下;新的非 HK Online Sandbox 接入并通过 HIL 后,再把本 PR 的前端产物纳入 Online template。
49999与4003。