Context
On the API side we've stood up a server-side endpointing eval to measure and improve pFinishedSpeaking (the float the finishedSpeaking decorator returns on each /transcribe response). The missing piece was a non-circular ground-truth label for "did the user actually finish their turn?", which the extension now provides via the turn-outcome emitter shipped in #505 (POST /turn-outcome, carrying user_resumed, last_sequence_number, submitted_at, last_speech_ended_at).
We now have the first real data — 40 auto-submitted turns from live sessions — and before we invest in recalibrating pFinishedSpeaking, we need to understand how (or whether) the extension actually consumes that score when deciding to submit a turn. The eval is only meaningful if model improvements would change endpointing behavior.
What the data shows
Two findings that we can't interpret without knowing the client's submit logic:
1. Submits are decorrelated from pFinishedSpeaking. 48% of the utterances that drove an auto-submit had pFinishedSpeaking ≤ 0.40 — i.e. the model was actively signalling "not finished." If the submit were gated on a p ≥ threshold test, almost every submit would sit at p ≥ 0.8. Instead they're spread across the whole range. Several are clearly mid-sentence fragments the model correctly scored ~0.2 ("of", "start this", "So one of the…"), yet they were submitted and the user then resumed speaking.
2. The submit delay doesn't look score-modulated. We measured the endpointing wait as submitted_at − last_speech_ended_at per turn:
submit-driving p |
n |
mean wait |
median wait |
| low (≤0.4) |
18 |
1.65s |
1.35s |
| high (≥0.8) |
22 |
1.95s |
1.15s |
Pearson r(p, wait) = +0.11 — essentially uncorrelated (slightly positive). The working hypothesis on our side was that the extension waits something like max_delay * (1 - pFinishedSpeaking), which would predict a strong negative correlation (low p → long wait). The data doesn't show that; the wait is ~flat regardless of the score.
Questions
- What actually triggers the auto-submit of a transcribed turn — a Silero-VAD silence timeout, a
pFinishedSpeaking threshold, or some combination? If a combination, how are they weighted?
- Does
pFinishedSpeaking factor into the submit decision or its timing at all today? If so, what's the formula (is our max_delay * (1 - p) guess close)? If not, is it currently informational only?
- For the turn-outcome signal's
last_sequence_number — is it the utterance whose pFinishedSpeaking drove the submit decision, or just the last /transcribe response received in the turn? These can differ: if a low-confidence trailing fragment arrives right around submit time, last_sequence_number may point at it rather than at the utterance the decision was actually based on — which would explain both findings above, and would mean our eval is joining the wrong score to each turn.
The answer determines whether the right next step is model work (recalibrate pFinishedSpeaking), client work (adjust the submit policy), or a fix to which sequence number the turn-outcome reports. Not urgent — we just don't want to optimize a signal the product isn't listening to. Thanks!
Context
On the API side we've stood up a server-side endpointing eval to measure and improve
pFinishedSpeaking(the float thefinishedSpeakingdecorator returns on each/transcriberesponse). The missing piece was a non-circular ground-truth label for "did the user actually finish their turn?", which the extension now provides via the turn-outcome emitter shipped in #505 (POST /turn-outcome, carryinguser_resumed,last_sequence_number,submitted_at,last_speech_ended_at).We now have the first real data — 40 auto-submitted turns from live sessions — and before we invest in recalibrating
pFinishedSpeaking, we need to understand how (or whether) the extension actually consumes that score when deciding to submit a turn. The eval is only meaningful if model improvements would change endpointing behavior.What the data shows
Two findings that we can't interpret without knowing the client's submit logic:
1. Submits are decorrelated from
pFinishedSpeaking. 48% of the utterances that drove an auto-submit hadpFinishedSpeaking ≤ 0.40— i.e. the model was actively signalling "not finished." If the submit were gated on ap ≥ thresholdtest, almost every submit would sit atp ≥ 0.8. Instead they're spread across the whole range. Several are clearly mid-sentence fragments the model correctly scored ~0.2 ("of", "start this", "So one of the…"), yet they were submitted and the user then resumed speaking.2. The submit delay doesn't look score-modulated. We measured the endpointing wait as
submitted_at − last_speech_ended_atper turn:pPearson
r(p, wait) = +0.11— essentially uncorrelated (slightly positive). The working hypothesis on our side was that the extension waits something likemax_delay * (1 - pFinishedSpeaking), which would predict a strong negative correlation (low p → long wait). The data doesn't show that; the wait is ~flat regardless of the score.Questions
pFinishedSpeakingthreshold, or some combination? If a combination, how are they weighted?pFinishedSpeakingfactor into the submit decision or its timing at all today? If so, what's the formula (is ourmax_delay * (1 - p)guess close)? If not, is it currently informational only?last_sequence_number— is it the utterance whosepFinishedSpeakingdrove the submit decision, or just the last/transcriberesponse received in the turn? These can differ: if a low-confidence trailing fragment arrives right around submit time,last_sequence_numbermay point at it rather than at the utterance the decision was actually based on — which would explain both findings above, and would mean our eval is joining the wrong score to each turn.The answer determines whether the right next step is model work (recalibrate
pFinishedSpeaking), client work (adjust the submit policy), or a fix to which sequence number the turn-outcome reports. Not urgent — we just don't want to optimize a signal the product isn't listening to. Thanks!