Co-authored-by: multica-agent <github@multica.ai> ## HEL-877 交付摘要(R5 后台施工,未部署未合并) - 新独立模块 src/cybergril/voice/:专属 livekit worker(agent_name=cybergril-voice-agent,复用 .12 FunASR/CosyVoice/silero 底座,不 fork 不另搭平台,无第二人格/记忆,不直连 LLM);llm_chat_api 适配器与文字前端 real.ts 同协议走 POST /api/chat(epoch 409 有界重同步、SSE 分片、turn_id 幂等、打断即断流);/api/voice/session 建房+专属派发+短时限 token 全服务端(密钥不进浏览器;缺配置/无档案/TTS 停机诚实拒绝;capabilities.voice 不伪造);receipt 仅在 SDK 真实播放完成后确认(打断/失败/φ 轮/旧 epoch 全 fail-closed)。 - 部署草案:/opt/voice-agent-cybergril 目录、worker 健康端口 8082、HTTP 8360 + HTTPS 8361 同进程双入口(deploy/voice/serve_dual_8360_8361.py,共用同一状态/锁)、启动顺序含 TTS GPU≥6GB 前置与回滚;本卡未执行任何启停。契约(开关/字幕/失败/打断/挂断 + CG-011 主动开口接缝)见 docs/runbook-hel877-voice.md §3。 - 自测(零真实请求):281 pytest 全过(含语音 25 例:socket 级打断断流、SSE 边界、重放零调用、文字/语音同门互打断、回执全负例、token 房间隔离);scripts/verify_hel877_voice_chain.py 8/8;.12 agent venv(livekit-agents 1.8.8)真 SDK 检查 8/8(stdin-only 零写入零网络);双端口同进程本地冒烟通过;ruff 干净;需求检查双目标通过(含 handoff-HEL-877.json)。 - 施工中总工 HEL-874(e978e87)推上同分支,本卡已完整并入,不覆盖并行成果。未验证如实列明:端到端语音(TTS 停机/GPU 3.9GB<5.6GB)、真 LiveKit server 的 dispatch/delete、移动端实机——待接线/审核卡真机验收,未经真实验收不称 R5 完成。
30 lines
1.3 KiB
Bash
30 lines
1.3 KiB
Bash
#!/usr/bin/env bash
|
||
# CyberGril 专属语音 worker 运维脚本草案(HEL-877,本卡未执行)。
|
||
# 用法: bash /opt/voice-agent-cybergril/restart_cybergril.sh [stop|status]
|
||
# 边界: 只管本 worker(python -m cybergril.voice.worker),绝不匹配通用
|
||
# worker 的 `agent.py start`,不动 /opt/voice-agent 与 8090/8081。
|
||
set -u
|
||
BASE=/opt/voice-agent-cybergril
|
||
cd "$BASE"
|
||
VENV=/opt/voice-agent/agent/venv # 复用已装 livekit-agents 1.8.8 的 venv
|
||
PAT='cybergril.voice.worker start' # 精确匹配本 worker 命令行
|
||
|
||
for p in $(pgrep -f "$PAT"); do kill "$p" 2>/dev/null; done
|
||
sleep 2
|
||
for p in $(pgrep -f "$PAT"); do kill -9 "$p" 2>/dev/null; done
|
||
|
||
if [ "${1:-}" = "stop" ]; then echo "cybergril voice worker stopped"; exit 0; fi
|
||
if [ "${1:-}" = "status" ]; then
|
||
pgrep -af "$PAT" || echo "not running"
|
||
curl -s --max-time 3 "http://127.0.0.1:${CYBERGRIL_WORKER_HEALTH_PORT:-8082}/" \
|
||
&& echo " <- health" || echo "health port not answering"
|
||
exit 0
|
||
fi
|
||
|
||
set -a; source "$BASE/.env"; set +a
|
||
PYTHONPATH="$BASE" nohup "$VENV/bin/python" -m cybergril.voice.worker start > worker.log 2>&1 &
|
||
echo "cybergril voice worker starting (pid $!)"
|
||
sleep 18
|
||
grep -m1 "registered worker" worker.log >/dev/null && echo "OK: worker registered" \
|
||
|| { echo "FAIL:"; tail -5 worker.log; exit 1; }
|