feat: Add frontend observability probes#12
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.
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 里剩下的 3 个 P2,本轮暂不继续修改,理由如下:
本 PR 这轮已经修掉两个 P1,并且 |
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.
lanyue-llk
left a comment
There was a problem hiding this comment.
Review 结论:建议先修再合。整体 observability 协议、浏览器输入 VAD、真实 <audio> 播放链路接入、开关门控和清理路径这轮看下来基本是成立的;但 session/stop 新增的 room-input stop 逻辑把非当前输入源的服务也带上了,会造成跨设备副作用。
- [P1]
app/api/session/stop/route.ts:175-198:resolveRoomInputStopUrls()只根据INPUT_SOURCE判断要 stop 哪些 room-input URL,导致两个不兼容仓库现有配置语义的行为:
INPUT_SOURCE=primebot时会 POSTPRIMEBOT_INPUT_PARTICIPANT_URL/stop,但app-config.ts里SERVER_ROOM_INPUT_DEVICES只有xunfei/generic,现有测试也明确写了 “frontend keeps primebot on the non-server room input path”。这个 PR 等于给 primebot 增加了新的 room-input stop 副作用。INPUT_SOURCE=mixed时会把 xunfei/generic/primebot 三类 URL 全部加入候选。实测在ROOM_AUDIO_INPUT_DEVICE=xunfei、ROOM_VISION_INPUT_DEVICE=browser、ROOM_OUTPUT_DEVICE=browser且三个 URL env 都存在时,stop route 会同时 POSThttp://xunfei.local/stop、http://generic.local/stop、http://primebot.local/stop。这会停止本 session 根本没选用的 generic/primebot 服务。
这属于和本 PR 主题相邻但不应扩散的 lifecycle 改动:浏览器 observability 不应该让 primebot 或未选中的 mixed role 服务被额外 stop。建议这里复用/对齐 resolveInputDeviceConfig 的语义,只对实际选中的 audio/vision role 且属于 server room input 的设备生成 stop URL;primebot 除非产品语义明确改成 server room input,否则不要纳入 room_input stop。请同时补测试覆盖 INPUT_SOURCE=primebot 不调用 PRIMEBOT_INPUT_PARTICIPANT_URL,以及 mixed 只 stop 当前选中的 server role URL。
验证:已同步最新 PR head 3df5f8655c560585454986edd0142dbeb87b44b5。本地直接运行 ./node_modules/.bin/tsx --test tests/*.test.mjs 通过(101 passed)、./node_modules/.bin/eslint . 通过、./node_modules/.bin/tsc --noEmit --pretty false 通过、./node_modules/.bin/next build 通过(仍有 onnxruntime-web 的静态分析 warning,当前不阻塞)。Codex runtime 下的 pnpm test/lint 会先触发 pnpm 11 的 ignored-builds 策略,未进入脚本本体,所以使用了 direct bin 验证。
其余逐文件看下来,chat 空转写过滤、video preview helper、VAD 本地资产同步、FilteredAudioRenderer 内真实播放观测这几块都和本 PR 主题相关,没有发现需要阻塞合并的额外问题。
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
|
Claude finished @jinfeng66's task in 2m 12s —— View job Todo
Review 结论通过 本轮新增的 3 个 commit(
之前两轮 P1(远端播放事件语义、 问题及建议未发现需要阻塞合并的问题。残余风险:作者在评论中已说明保留的 3 个 P2( |
Stale review on an old commit; requested changes have been addressed in later commits and the latest automated review on eac6132 passes.
变更概述
这个 PR 在前端加入可开关的观测事件采集,把浏览器端的输入音频、远端播放音频、房间连接和后端输出 marker 统一成前端可发布的数据包,供 LexVoice 后端按同一 session/room 维度关联分析。
主要改动
1. 前端观测协议与音频活动检测
lib/observability.ts,定义前端观测事件、LiveKit data packet 发布和后端 marker 解析。lib/frontend-audio-observer.ts,检测音频活动起止、尾帧和媒体轨道播放状态。2. LiveKit 会话链路接入
hooks/useBrowserSourceClient.ts、hooks/useRoom.ts和components/app/app.tsx中发布浏览器输入、房间连接和远端播放观测事件。components/livekit/remote-audio-playback-observer.tsx,观察 agent 远端音频播放情况。3. 前端边界与测试覆盖
影响说明
OBSERVABILITY_ENABLED控制;关闭时不会发布前端观测事件。Verification
pnpm test✅ passed: 92 tests passedpnpm lint✅ passed: eslint completed with exit 0git diff --check origin/lex-main..HEAD✅ passed: no output