feat: add metrics

This commit is contained in:
Soulter
2026-01-17 21:44:13 +08:00
parent dcd699d733
commit e92b103fd0
3 changed files with 19 additions and 12 deletions
+4 -2
View File
@@ -258,8 +258,10 @@ async def run_live_agent(
chain=[
Json(
data={
"duration": tts_duration,
"first_frame_time": tts_first_frame_time,
"tts_total_time": tts_duration,
"tts_first_frame_time": tts_first_frame_time,
"tts": tts_provider.meta().type,
"chat_model": agent_runner.provider.get_model(),
}
)
],
+5 -6
View File
@@ -222,6 +222,10 @@ class LiveChatRoute(Route):
await websocket.send_json({"t": "error", "data": "语音识别服务未配置"})
return
await websocket.send_json(
{"t": "metrics", "data": {"stt": stt_provider.meta().type}}
)
user_text = await stt_provider.get_text(audio_path)
if not user_text:
logger.warning("[Live Chat] STT 识别结果为空")
@@ -314,12 +318,7 @@ class LiveChatRoute(Route):
await websocket.send_json(
{
"t": "metrics",
"data": {
"tts_total_time": stats.get("duration", 0),
"tts_first_frame_time": stats.get(
"first_frame_time", 0
),
},
"data": stats,
}
)
except Exception as e:
+10 -4
View File
@@ -22,19 +22,22 @@
<div class="metrics-container" v-if="Object.keys(metrics).length > 0">
<span v-if="metrics.wav_assemble_time">WAV Assemble: {{ (metrics.wav_assemble_time * 1000).toFixed(0)
}}ms</span>
}}ms</span>
<span v-if="metrics.llm_ttft">LLM First Token Latency: {{ (metrics.llm_ttft * 1000).toFixed(0)
}}ms</span>
}}ms</span>
<span v-if="metrics.llm_total_time">LLM Total Latency: {{ (metrics.llm_total_time * 1000).toFixed(0)
}}ms</span>
}}ms</span>
<span v-if="metrics.tts_first_frame_time">TTS First Frame Latency: {{ (metrics.tts_first_frame_time *
1000).toFixed(0) }}ms</span>
<span v-if="metrics.tts_total_time">TTS Total Larency: {{ (metrics.tts_total_time * 1000).toFixed(0)
}}ms</span>
}}ms</span>
<span v-if="metrics.speak_to_first_frame">Speak -> First TTS Frame: {{ (metrics.speak_to_first_frame *
1000).toFixed(0) }}ms</span>
<span v-if="metrics.wav_to_tts_total_time">Speak -> End: {{ (metrics.wav_to_tts_total_time *
1000).toFixed(0) }}ms</span>
<span v-if="metrics.stt">STT Provider: {{ metrics.stt }}</span>
<span v-if="metrics.tts">TTS Provider: {{ metrics.tts }}</span>
<span v-if="metrics.chat_model">Chat Model: {{ metrics.chat_model }}</span>
</div>
</div>
</div>
@@ -93,6 +96,9 @@ interface LiveMetrics {
tts_first_frame_time?: number;
tts_total_time?: number;
wav_to_tts_total_time?: number;
stt?: string;
tts?: string;
chat_model?: string;
}
const metrics = ref<LiveMetrics>({});