Repository navigation
feat(serving): open-loop LiveKit V1.1-warm scenario (calls arrive by the clock) - #40
Draft
cognaiger9 wants to merge 2 commits into
Draft
cognaiger9 wants to merge 2 commits into
cognaiger9 wants to merge 2 commits into
Conversation
|
Thanks for the contribution!
中文感谢你的贡献!
|
…the clock) custom-agentic-livekit111868-v1.1-warm-openloop: conc = target concurrent calls. serve_generic.sh rewrites the fetched trace (utils/serving/livekit_openloop.py): calls open as a seeded Poisson process at conc / 127 s per second, 180 s ramp, arrivals stop 300 s before the end; each call keeps its logged gaps after the previous reply. aiperf replays it in fixed_schedule mode with the session cap lifted to 4 x conc and a 10 s client timeout, so every server receives the same calls per hour. Brings over from bench/gemma4-livekit-dyn-swa-arms what the scenario needs: the V1.1-warm trace and plan lock entries and utils/serving/livekit_ttft.py (+ test), which now also scores only the calls opened in the window from openloop.json, maps replayed calls (<room>~k) to the plan and adds TTFS for 5 s turns. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
cognaiger9
force-pushed
the
bench/gemma4-livekit-voice-openloop
branch
from
October 23, 2026 07:52
828f6a7 to
5c0d334
Compare
cognaiger9
changed the base branch from
bench/gemma4-livekit-dyn-swa-arms
to
vng-benchmark
October 23, 2026 07:52
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
An open-loop variant of the LiveKit 111868 V1.1-warm scenario, so a voice-agent benchmark compares servers at the
same load. Today's lane replay starts a lane's next call the moment its previous call ends, and sends each turn the
logged gap after the previous reply ends: a faster server shortens every call and receives more calls per hour at
the same
conc, which hides its latency gain.Here
conc= target mean concurrent calls, and calls arrive by the clock:scenarios/custom-agentic-livekit111868-v1.1-warm-openloop.yaml: aiperffixed_schedule, 10 s client timeout,1980 s phase (120 s ramp + 1800 s scored + 60 s tail).
utils/serving/livekit_openloop.py: rewrites the fetched V1.1-warm trace before aiperf runs. Calls open as aseeded Poisson process at
conc / 127 sper second (127 s = the trace's mean call length at production replyspeed), with a linear ramp; arrivals stop 60 s before the end. Each call keeps its logged gaps after the previous
reply. Calls are reused once all 671 are used: replay k is
<room>~kwith aplay<k>marker at the start of itsfirst user message, so its own context is cold again while the shared system prompt still hits.
benchmark_lib.sh/serve_generic.sh:*-openloopscenarios run the rewrite after the dataset fetch(
openloop_trace), writeopenloop.json(arrivals, scoring window) to the run dir, and lift aiperf's session capto
4 x conc(--concurrencycaps open sessions in fixed_schedule mode, which would delay arrivals).Settings can be overridden from the serving YAML
env:(IX_OPENLOOP_CALL_DURATION_S,_RAMP_S,_TAIL_S,_SEED).utils/serving/livekit_ttft.py: keeps only calls opened inside the scoring window, maps<room>~kto the plan,and adds TTFS (TTFT + 11 chunks) for 5 s turns.
serving/gemma4-livekit-1gpu-v11-openloop.yaml: example, the 1-GPU prod vLLM arm (gemma4-livekit-1gpu-v1) at conc 8/16/32.bench/gemma4-livekit-dyn-swa-arms(not yet on this branch): the V1.1-warm trace and plan lockentries, and
utils/serving/livekit_ttft.py+ its test. Merging that branch later will touch the same lines inlock.yamland those two files.Testing
utils/test_serving_livekit_openloop.py(new): same seed gives the same trace; openings carry arrival times andlater turns keep their gaps; replays are renamed and marked; arrival rate and scoring window; duration read from
the scenario;
openloop_tracerewrites the dataset andbuild_replay_cmd_yamlpasses--concurrency 32at conc 8.utils/test_serving_livekit_ttft.py: open-loop window, replayed call ids, TTFS line.test_serving_livekit_*,test_serving_replay,test_serving_to_matrix,test_serving_schema,test_serving_fetch_dataset: 160 pass; the 2test_serving_schemarunner-message failures are the same onvng-benchmarkwithout this PR.build_replay_cmd_yamllaunches it: phasefixed_schedule, autoOffset, duration 1980, concurrency 4 x conc, endpoint timeout 10 s, sequential sampling.e2e-tests.yml.🤖 Generated with Claude Code