Repository navigation
Conversation
…ics-report - the scheduler measures the prefill span itself (admission to the token sampled off the request's last prefill chunk) and ships it as a duration on that token's DetokenizeMsg: it is the one boundary a client timing SSE frames cannot see, and a duration keeps the wire free of any cross-process clock assumption - the remaining timings come off the raw ack stream, not the emitted GenEvents: a reasoning or tool-call parser holds text back, sometimes to the end of the stream, so an event-timed TTFT runs long, and acks are the one path the streaming and buffered generators share - cached_prompt_tokens reports the real prefix-cache hit whether or not --enable-cache-report is set; that flag governs the billing fields in usage, and gating the hit here would leave prefill_tokens_per_second computed over tokens that were never forwarded - decode_tokens_per_second divides by decode_tokens - 1, as vLLM's and sglang's serving benchmarks do: the first token falls out of prefill and spans no decode interval - served on /v1/chat/completions, /v1/messages and /v1/responses; /v1/completions does not go through the shared generation core and is left out Closes FlashML-org#503
…ics under --enable-metrics # Conflicts: # python/freetoken/scheduler/scheduler.py # python/freetoken/server/generation.py # python/freetoken/server/openai_api.py
…etrics timing reads Upstream FlashML-org#504 times the prefill span in Scheduler._prefill_start; the stubs from FlashML-org#222 and FlashML-org#505's tests build the scheduler without it. Assisted-by: Claude Opus 5.5
This was referenced Sep 24, 2026
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.
Stacked on #61. Merges upstream FlashML-org#504 (head
a76d9ec): opt-in per-request metrics (--enable-metrics): TTFT, prefill span, prefill/decode tok/s and the real prefix-cache hit, on chat, messages and responses. Off by default; the production launch script does not pass the flag.Merge: conflicts with #47 (FlashML-org#393) and #57 in
scheduler.py,generation.py,openai_api.py, all resolved as unions: the non-streaming chat response keeps #47'sn > 1choices, usage and reasoning-token count and gains themetricsblock (taken from the first choice); the streaming usage chunk keeps #47's shape and gainsmetrics. Two follow-ups:_RequestTimer.observereadsack.prefill_msdirectly; it now usesgetattr(ack, "prefill_ms", 0.0), matching how that loop already reads the other optional reply fields (inside the merge commit).aff74d9: the scheduler stubs in the fix(server): guarantee AbortMsg delivery on stream cancellation FlashML-org/FreeToken#222 and fix(scheduler): preserve pending hybrid checkpoint across prefill chunks FlashML-org/FreeToken#505 tests get the_prefill_startmap the PR's timing reads (22 tests failed without it).Testing (RTX 5080, production flags):
tests/server+tests/scheduler: 1004 passed after the follow-ups.metricskey and are otherwise unchanged.pytest tests/ -m "not slow"at the top of this stack (77d8d5c): 2446 passed, 206 skipped; the 4 failures are the known environment-only ones (3xtest_muse_glimmer_vision.pyon transformers 5.15.1,test_async_pull_coalescedneedingpytest-asyncio).🤖 Generated with Claude Code
https://claude.ai/code/session_01Bu6LgoxLR4wETqb7RPR2vt