This commit is contained in:
Xin Wang
2026-02-06 07:52:54 +08:00

View File

@@ -94,10 +94,12 @@ class WavFileClient:
self.bytes_sent = 0 self.bytes_sent = 0
self.bytes_received = 0 self.bytes_received = 0
# TTFB tracking # TTFB tracking (per response)
self.send_start_time = None self.send_start_time = None
self.first_audio_received = False self.response_start_time = None # set on each trackStart
self.ttfb_ms = None self.waiting_for_first_audio = False
self.ttfb_ms = None # last TTFB for summary
self.ttfb_list = [] # TTFB for each response
# State tracking # State tracking
self.track_started = False self.track_started = False
@@ -241,11 +243,13 @@ class WavFileClient:
self.bytes_received += len(message) self.bytes_received += len(message)
self.received_audio.extend(message) self.received_audio.extend(message)
# Calculate TTFB on first audio # Calculate TTFB on first audio of each response
if not self.first_audio_received and self.send_start_time: if self.waiting_for_first_audio and self.response_start_time is not None:
self.ttfb_ms = (time.time() - self.send_start_time) * 1000 ttfb_ms = (time.time() - self.response_start_time) * 1000
self.first_audio_received = True self.ttfb_ms = ttfb_ms
self.log_event("", f"[TTFB] First audio latency: {self.ttfb_ms:.0f}ms") self.ttfb_list.append(ttfb_ms)
self.waiting_for_first_audio = False
self.log_event("", f"[TTFB] First audio latency: {ttfb_ms:.0f}ms")
# Log progress # Log progress
duration_ms = len(message) / (self.sample_rate * 2) * 1000 duration_ms = len(message) / (self.sample_rate * 2) * 1000
@@ -306,6 +310,8 @@ class WavFileClient:
self.log_event("", f"LLM: {text}") self.log_event("", f"LLM: {text}")
elif event_type == "trackStart": elif event_type == "trackStart":
self.track_started = True self.track_started = True
self.response_start_time = time.time()
self.waiting_for_first_audio = True
self.log_event("", "Bot started speaking") self.log_event("", "Bot started speaking")
elif event_type == "trackEnd": elif event_type == "trackEnd":
self.track_ended = True self.track_ended = True
@@ -413,8 +419,11 @@ class WavFileClient:
print(f" Output file: {self.output_file}") print(f" Output file: {self.output_file}")
print(f" Bytes sent: {self.bytes_sent / 1024:.1f} KB") print(f" Bytes sent: {self.bytes_sent / 1024:.1f} KB")
print(f" Bytes received: {self.bytes_received / 1024:.1f} KB") print(f" Bytes received: {self.bytes_received / 1024:.1f} KB")
if self.ttfb_ms: if self.ttfb_list:
print(f" TTFB: {self.ttfb_ms:.0f} ms") if len(self.ttfb_list) == 1:
print(f" TTFB: {self.ttfb_list[0]:.0f} ms")
else:
print(f" TTFB (per response): {', '.join(f'{t:.0f}ms' for t in self.ttfb_list)}")
if self.received_audio: if self.received_audio:
duration = len(self.received_audio) / (self.sample_rate * 2) duration = len(self.received_audio) / (self.sample_rate * 2)
print(f" Response duration: {duration:.2f}s") print(f" Response duration: {duration:.2f}s")