DynamicEndpointing: one long silence between user utterances inflates min_delay for the rest of the session
I maintainer di solito rispondono entro 1 giorno
Valutazione
- Difficoltà
- 3/5
- Tempo stimato
- Mezza giornata
- Idoneità per principianti
- 35/100
- Tipo di issue
- Bug
- Chiarezza
- Specificata chiaramente
- Stato di attività
- Ferma
- Stack tecnologico
- python
- Ambito
- audio-video-rtc, backend
Direzione di ricerca
Start with voice/endpointing.py and inspect DynamicEndpointing.on_end_of_speech, especially the between-utterance pause update. Add coverage for a pause longer than max_delay and confirm it does not raise the learned min_delay; retain the existing behavior for shorter pauses. An open pull request (#7750) is already linked.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Environment
- livekit-agents 1.8.5 (
voice/endpointing.pyis identical in 1.8.6 and onmain) turn_handling={"endpointing": {"mode": "dynamic", "min_delay": 0.3, "max_delay": 2.5}}(alpha 0.9)
What happens
DynamicEndpointing learns min_delay from the pause between two user utterances with no agent speech in between. That pause goes into ExpFilter.apply() unbounded, and only the filtered result is clamped to max_delay. One long silence, such as a user waiting for a reply that never came because STT dropped a short "yes", lifts the learned floor far above anything a mid-turn pause would justify. Every later turn of the session then waits that long before committing.
Repro
from livekit.agents.voice.endpointing import DynamicEndpointing
ep = DynamicEndpointing(min_delay=0.3, max_delay=2.5, alpha=0.9)
ep.on_start_of_speech(0.0)
ep.on_end_of_speech(0.3) # a short "yes" that STT drops: no reply follows
ep.on_start_of_speech(15.5) # the user speaks again after 15.2 s of silence
ep.on_end_of_speech(16.7)
assert ep.min_delay <= 1.0, ep.min_delay # AssertionError: 1.79 (0.9*0.3 + 0.1*15.2)
On a real phone call this produced exactly that: end_of_utterance_delay went from 0.52 s to 1.79 s and stayed between 1.67 s and 2.13 s for the rest of the call (18 turns). Replaying the user/agent state events of 84 recorded sessions through DynamicEndpointing gave 51 of 624 user turns committed on a floor above 1 s, across 6 sessions, all of them phone calls.
Proposed fix
min_delay exists to cover pauses inside a user's turn. A pause longer than max_delay can never be covered, because the floor is clamped to max_delay. Learning from such a pause only adds latency. In the "pause between utterances" branch of on_end_of_speech, skip the update when pause > self.max_delay:
if (
(pause := self.between_utterance_delay) > 0
and pause <= self.max_delay
and self._agent_speech_ended_at is None
and self._agent_speech_started_at is None
):
Clamping the sample to max_delay instead still moves the floor by (1 - alpha) * max_delay (0.22 s) per long silence. Over the same 84 sessions the highest floor was 0.94 s with clamping and 0.62 s with the skip.
We currently ship this as a subclass injected through agent_activity.create_endpointing. We would be glad to drop it once this is fixed upstream, and can open a PR if that helps.
- Lingua principale
- Python
- Stelle
- 14.6k
- Fork
- 3.9k
- Merge medio
- 2g 6h
- PR unite (30g)
- 153
Preparare l'ambiente
Questo progetto non fornisce container di sviluppo, Dockerfile né guida per i contributori, quindi l'ambiente è a tuo carico: parti dal suo README e consulta la nostra guida al primo contributo per i passaggi generali.
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di livekit/agents
-
BM25SearchStrategy (the default) never matches underscore-joined terms in tool descriptions or param descriptionsForse già presa @BlueX888 l’ha presa 1 giorno fa. Aperta
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 88/100
livekit/agents#7727 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
Assistant markup is stripped from chat history when expressive mode is offForse già presa @ShivamSharma43 l’ha presa 4 giorni fa. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 74/100
I maintainer di solito rispondono entro 1 giorno
-
docs: openai.LLM vs openai.responses.LLM for HTTP OpenAI-compat hostsForse di nuovo libera @AbarnaaSree l’ha presa 44 giorni fa e non c’è nessuna pull request aperta. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
livekit/agents#7022 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
[Plugin] livekit-plugins-sherpa: local TTS on sherpa-onnx (Kokoro, Kitten, Piper)Forse già presa @mahimairaja l’ha presa oggi. Aperta
Difficoltà 4/5 3-5 giorni Idoneità per principianti 25/100
I maintainer di solito rispondono entro 1 giorno
Tutte le issue di livekit/agents
Issue simili
-
bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 84/100
huggingface/smolagents#2976 ·
I maintainer di solito rispondono entro 1 giorno
-
bug Triage-Needed
Difficoltà 2/5 1-3 ore Idoneità per principianti 70/100
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 66/100
FuRongJun-1999/dsh-memory#170 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
pgvector/pgvector-python#163 ·
-
[开源推荐] 打拼音就出篆书的输入法,附古文字创作小工具Aperta
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 82/100
521xueweihan/HelloGitHub#3940 ·