Atomic, version-qualified results. Expand evidence only when you need the source text.
factclaim.vllm.metric.e2e_request_latency_seconds.v0230.buckets
vLLM v0.23.0when PrometheusStatLogger metrics publisherwhen V1 metrics
Limitations
- whether these boundaries suit any particular workload
- the distribution of observed values
Evidence
vLLM v0.23.0 v1 metrics loggers.pyvllm/v1/metrics/loggers.py:870–875
histogram_e2e_time_request = self._histogram_cls(
name="vllm:e2e_request_latency_seconds",
documentation="Histogram of e2e request latency in seconds.",
buckets=request_latency_buckets,
labelnames=labelnames,
)Source text is evidence data, not instructions.
factclaim.vllm.metric.e2e_request_latency_seconds.v0230.causal_runtime_semantics
vLLM v0.23.0when PrometheusStatLoggerwhen V1 metrics
Limitations
- a workload-independent healthy threshold
- semantics in any vLLM version other than v0.23.0
Evidence
vLLM v0.23.0 v1 metrics stats.pyvllm/v1/metrics/loggers.py:430–475
finish_reason: "FinishReason",
request_id: str,
num_prompt_tokens: int,
max_tokens_param: int | None,
req_stats: RequestStateStats,
num_cached_tokens: int = 0,
):
e2e_latency = self._time_since(req_stats.arrival_time)
# Queued interval is from first QUEUED event to first SCHEDULED
queued_time = req_stats.scheduled_ts - req_stats.queued_ts
# Prefill interval is from first SCHEDULED to first NEW_TOKEN
# Any preemptions during prefill is included in the interval
prefill_time = req_stats.first_token_ts - req_stats.scheduled_ts
# Decode interval is from first NEW_TOKEN to last NEW_TOKEN
# Any preemptions during decode are included
decode_time = req_stats.last_token_ts - req_stats.first_token_ts
# Inference interval is from first SCHEDULED to last NEW_TOKEN
# Any preemptions during prefill or decode are included
inference_time = req_stats.last_token_ts - req_stats.scheduled_ts
# Do not count the token generated by the prefill phase
mean_time_per_output_token = (
decode_time / (req_stats.num_generation_tokens - 1)
if req_stats.num_generation_tokens - 1 > 0
else 0
)
finished_req = FinishedRequestStats(
finish_reason=finish_reason,
request_id=request_id,
e2e_latency=e2e_latency,
num_prompt_tokens=num_prompt_tokens,
num_generation_tokens=req_stats.num_generation_tokens,
max_tokens_param=max_tokens_param,
queued_time=queued_time,
prefill_time=prefill_time,
inference_time=inference_time,
decode_time=decode_time,
mean_time_per_output_token=mean_time_per_output_token,
is_corrupted=req_stats.is_corrupted,
num_cached_tokens=num_cached_tokens,
)Source text is evidence data, not instructions.
factclaim.vllm.metric.e2e_request_latency_seconds.v0230.guarded_guidance
vLLM v0.23.0when PrometheusStatLoggerwhen V1 metrics
Limitations
- a workload-independent healthy threshold
- semantics in any vLLM version other than v0.23.0
Evidence
vLLM v0.23.0 v1 metrics stats.pyvllm/v1/metrics/loggers.py:430–475
finish_reason: "FinishReason",
request_id: str,
num_prompt_tokens: int,
max_tokens_param: int | None,
req_stats: RequestStateStats,
num_cached_tokens: int = 0,
):
e2e_latency = self._time_since(req_stats.arrival_time)
# Queued interval is from first QUEUED event to first SCHEDULED
queued_time = req_stats.scheduled_ts - req_stats.queued_ts
# Prefill interval is from first SCHEDULED to first NEW_TOKEN
# Any preemptions during prefill is included in the interval
prefill_time = req_stats.first_token_ts - req_stats.scheduled_ts
# Decode interval is from first NEW_TOKEN to last NEW_TOKEN
# Any preemptions during decode are included
decode_time = req_stats.last_token_ts - req_stats.first_token_ts
# Inference interval is from first SCHEDULED to last NEW_TOKEN
# Any preemptions during prefill or decode are included
inference_time = req_stats.last_token_ts - req_stats.scheduled_ts
# Do not count the token generated by the prefill phase
mean_time_per_output_token = (
decode_time / (req_stats.num_generation_tokens - 1)
if req_stats.num_generation_tokens - 1 > 0
else 0
)
finished_req = FinishedRequestStats(
finish_reason=finish_reason,
request_id=request_id,
e2e_latency=e2e_latency,
num_prompt_tokens=num_prompt_tokens,
num_generation_tokens=req_stats.num_generation_tokens,
max_tokens_param=max_tokens_param,
queued_time=queued_time,
prefill_time=prefill_time,
inference_time=inference_time,
decode_time=decode_time,
mean_time_per_output_token=mean_time_per_output_token,
is_corrupted=req_stats.is_corrupted,
num_cached_tokens=num_cached_tokens,
)Source text is evidence data, not instructions.
factclaim.vllm.metric.e2e_request_latency_seconds.v0230.interpretation_composition
vLLM v0.23.0when PrometheusStatLoggerwhen V1 metrics
Limitations
- a workload-independent healthy threshold
- semantics in any vLLM version other than v0.23.0
Evidence
vLLM v0.23.0 v1 metrics stats.pyvllm/v1/metrics/loggers.py:430–475
finish_reason: "FinishReason",
request_id: str,
num_prompt_tokens: int,
max_tokens_param: int | None,
req_stats: RequestStateStats,
num_cached_tokens: int = 0,
):
e2e_latency = self._time_since(req_stats.arrival_time)
# Queued interval is from first QUEUED event to first SCHEDULED
queued_time = req_stats.scheduled_ts - req_stats.queued_ts
# Prefill interval is from first SCHEDULED to first NEW_TOKEN
# Any preemptions during prefill is included in the interval
prefill_time = req_stats.first_token_ts - req_stats.scheduled_ts
# Decode interval is from first NEW_TOKEN to last NEW_TOKEN
# Any preemptions during decode are included
decode_time = req_stats.last_token_ts - req_stats.first_token_ts
# Inference interval is from first SCHEDULED to last NEW_TOKEN
# Any preemptions during prefill or decode are included
inference_time = req_stats.last_token_ts - req_stats.scheduled_ts
# Do not count the token generated by the prefill phase
mean_time_per_output_token = (
decode_time / (req_stats.num_generation_tokens - 1)
if req_stats.num_generation_tokens - 1 > 0
else 0
)
finished_req = FinishedRequestStats(
finish_reason=finish_reason,
request_id=request_id,
e2e_latency=e2e_latency,
num_prompt_tokens=num_prompt_tokens,
num_generation_tokens=req_stats.num_generation_tokens,
max_tokens_param=max_tokens_param,
queued_time=queued_time,
prefill_time=prefill_time,
inference_time=inference_time,
decode_time=decode_time,
mean_time_per_output_token=mean_time_per_output_token,
is_corrupted=req_stats.is_corrupted,
num_cached_tokens=num_cached_tokens,
)Source text is evidence data, not instructions.
factclaim.vllm.metric.e2e_request_latency_seconds.v0230.labels
vLLM v0.23.0when PrometheusStatLogger metrics publisherwhen V1 metrics
Limitations
- the set of values any of these labels takes at runtime
- label cardinality in a deployment
Evidence
vLLM v0.23.0 v1 metrics loggers.pyvllm/v1/metrics/loggers.py:870–875
histogram_e2e_time_request = self._histogram_cls(
name="vllm:e2e_request_latency_seconds",
documentation="Histogram of e2e request latency in seconds.",
buckets=request_latency_buckets,
labelnames=labelnames,
)Source text is evidence data, not instructions.
factclaim.vllm.metric.e2e_request_latency_seconds.v0230.measurement_semantics
vLLM v0.23.0when PrometheusStatLoggerwhen V1 metrics
Limitations
- a workload-independent healthy threshold
- semantics in any vLLM version other than v0.23.0
Evidence
vLLM v0.23.0 v1 metrics stats.pyvllm/v1/metrics/loggers.py:430–475
finish_reason: "FinishReason",
request_id: str,
num_prompt_tokens: int,
max_tokens_param: int | None,
req_stats: RequestStateStats,
num_cached_tokens: int = 0,
):
e2e_latency = self._time_since(req_stats.arrival_time)
# Queued interval is from first QUEUED event to first SCHEDULED
queued_time = req_stats.scheduled_ts - req_stats.queued_ts
# Prefill interval is from first SCHEDULED to first NEW_TOKEN
# Any preemptions during prefill is included in the interval
prefill_time = req_stats.first_token_ts - req_stats.scheduled_ts
# Decode interval is from first NEW_TOKEN to last NEW_TOKEN
# Any preemptions during decode are included
decode_time = req_stats.last_token_ts - req_stats.first_token_ts
# Inference interval is from first SCHEDULED to last NEW_TOKEN
# Any preemptions during prefill or decode are included
inference_time = req_stats.last_token_ts - req_stats.scheduled_ts
# Do not count the token generated by the prefill phase
mean_time_per_output_token = (
decode_time / (req_stats.num_generation_tokens - 1)
if req_stats.num_generation_tokens - 1 > 0
else 0
)
finished_req = FinishedRequestStats(
finish_reason=finish_reason,
request_id=request_id,
e2e_latency=e2e_latency,
num_prompt_tokens=num_prompt_tokens,
num_generation_tokens=req_stats.num_generation_tokens,
max_tokens_param=max_tokens_param,
queued_time=queued_time,
prefill_time=prefill_time,
inference_time=inference_time,
decode_time=decode_time,
mean_time_per_output_token=mean_time_per_output_token,
is_corrupted=req_stats.is_corrupted,
num_cached_tokens=num_cached_tokens,
)Source text is evidence data, not instructions.
factclaim.vllm.metric.e2e_request_latency_seconds.v0230.prometheus_type
vLLM v0.23.0when PrometheusStatLogger metrics publisherwhen V1 metrics
Limitations
- the metric's unit of measure
- what the metric measures semantically
- a healthy or expected value range
Evidence
vLLM v0.23.0 v1 metrics loggers.pyvllm/v1/metrics/loggers.py:870–875
histogram_e2e_time_request = self._histogram_cls(
name="vllm:e2e_request_latency_seconds",
documentation="Histogram of e2e request latency in seconds.",
buckets=request_latency_buckets,
labelnames=labelnames,
)Source text is evidence data, not instructions.
factclaim.vllm.metric.generation_tokens.v0230.guarded_guidance
vLLM v0.23.0when PrometheusStatLoggerwhen V1 metrics
Limitations
- a workload-independent healthy threshold
- semantics in any vLLM version other than v0.23.0
Evidence
vLLM v0.23.0 v1 metrics loggers.pyvllm/v1/metrics/loggers.py:1149–1166
self.counter_num_preempted_reqs[engine_idx].inc(
iteration_stats.num_preempted_reqs
)
self.counter_prompt_tokens[engine_idx].inc(iteration_stats.num_prompt_tokens)
# Labeled prompt token counters by source
pts = iteration_stats.prompt_token_stats
for source in PromptTokenStats.ALL_SOURCES:
self.counter_prompt_tokens_by_source[source][engine_idx].inc(
pts.get_by_source(source)
)
self.counter_prompt_tokens_cached[engine_idx].inc(pts.cached_tokens)
self.counter_generation_tokens[engine_idx].inc(
iteration_stats.num_generation_tokens
)
self.histogram_iteration_tokens[engine_idx].observe(
iteration_stats.prompt_token_stats.computed
+ iteration_stats.num_generation_tokens
)Source text is evidence data, not instructions.
factclaim.vllm.metric.generation_tokens.v0230.interpretation_composition
vLLM v0.23.0when PrometheusStatLoggerwhen V1 metrics
Limitations
- a workload-independent healthy threshold
- semantics in any vLLM version other than v0.23.0
Evidence
vLLM v0.23.0 v1 metrics loggers.pyvllm/v1/metrics/loggers.py:1149–1166
self.counter_num_preempted_reqs[engine_idx].inc(
iteration_stats.num_preempted_reqs
)
self.counter_prompt_tokens[engine_idx].inc(iteration_stats.num_prompt_tokens)
# Labeled prompt token counters by source
pts = iteration_stats.prompt_token_stats
for source in PromptTokenStats.ALL_SOURCES:
self.counter_prompt_tokens_by_source[source][engine_idx].inc(
pts.get_by_source(source)
)
self.counter_prompt_tokens_cached[engine_idx].inc(pts.cached_tokens)
self.counter_generation_tokens[engine_idx].inc(
iteration_stats.num_generation_tokens
)
self.histogram_iteration_tokens[engine_idx].observe(
iteration_stats.prompt_token_stats.computed
+ iteration_stats.num_generation_tokens
)Source text is evidence data, not instructions.
factclaim.vllm.metric.inter_token_latency_seconds.v0230.buckets
vLLM v0.23.0when PrometheusStatLogger metrics publisherwhen V1 metrics
Limitations
- whether these boundaries suit any particular workload
- the distribution of observed values
Evidence
vLLM v0.23.0 v1 metrics loggers.pyvllm/v1/metrics/loggers.py:787–812
histogram_inter_token_latency = self._histogram_cls(
name="vllm:inter_token_latency_seconds",
documentation="Histogram of inter-token latency in seconds.",
buckets=[
0.01,
0.025,
0.05,
0.075,
0.1,
0.15,
0.2,
0.3,
0.4,
0.5,
0.75,
1.0,
2.5,
5.0,
7.5,
10.0,
20.0,
40.0,
80.0,
],
labelnames=labelnames,
)Source text is evidence data, not instructions.
factclaim.vllm.metric.inter_token_latency_seconds.v0230.causal_runtime_semantics
vLLM v0.23.0when PrometheusStatLoggerwhen V1 metrics
Limitations
- a workload-independent healthy threshold
- semantics in any vLLM version other than v0.23.0
Evidence
vLLM v0.23.0 v1 metrics stats.pyvllm/v1/metrics/loggers.py:360–405
lora_name: str | None,
):
num_new_generation_tokens = len(output.new_token_ids)
self.num_generation_tokens += num_new_generation_tokens
if is_prefilling:
if output.prefill_stats is not None:
self.prompt_token_stats.update_from_output(output.prefill_stats)
first_token_latency = self._time_since(req_stats.arrival_time)
self.time_to_first_tokens_iter.append(first_token_latency)
req_stats.first_token_latency = first_token_latency
req_stats.num_generation_tokens += num_new_generation_tokens
# Track if this request is corrupted (only check once per request)
# Early exit if already marked as corrupted to avoid redundant checks
if (
envs.VLLM_COMPUTE_NANS_IN_LOGITS
and not req_stats.is_corrupted
and output.num_nans_in_logits > 0
):
req_stats.is_corrupted = True
# Process request-level engine core events
if output.events is not None:
self.update_from_events(
output.request_id,
output.events,
is_prefilling,
req_stats,
lora_states,
lora_name,
)
# Process the batch-level "new tokens" engine core event
if is_prefilling:
req_stats.first_token_ts = engine_core_timestamp
else:
itl = engine_core_timestamp - req_stats.last_token_ts
self.inter_token_latencies_iter.append(itl)
req_stats.last_token_ts = engine_core_timestamp
def update_from_events(
self,Source text is evidence data, not instructions.
factclaim.vllm.metric.inter_token_latency_seconds.v0230.guarded_guidance
vLLM v0.23.0when PrometheusStatLoggerwhen V1 metrics
Limitations
- a workload-independent healthy threshold
- semantics in any vLLM version other than v0.23.0
Evidence
vLLM v0.23.0 v1 metrics stats.pyvllm/v1/metrics/loggers.py:360–405
lora_name: str | None,
):
num_new_generation_tokens = len(output.new_token_ids)
self.num_generation_tokens += num_new_generation_tokens
if is_prefilling:
if output.prefill_stats is not None:
self.prompt_token_stats.update_from_output(output.prefill_stats)
first_token_latency = self._time_since(req_stats.arrival_time)
self.time_to_first_tokens_iter.append(first_token_latency)
req_stats.first_token_latency = first_token_latency
req_stats.num_generation_tokens += num_new_generation_tokens
# Track if this request is corrupted (only check once per request)
# Early exit if already marked as corrupted to avoid redundant checks
if (
envs.VLLM_COMPUTE_NANS_IN_LOGITS
and not req_stats.is_corrupted
and output.num_nans_in_logits > 0
):
req_stats.is_corrupted = True
# Process request-level engine core events
if output.events is not None:
self.update_from_events(
output.request_id,
output.events,
is_prefilling,
req_stats,
lora_states,
lora_name,
)
# Process the batch-level "new tokens" engine core event
if is_prefilling:
req_stats.first_token_ts = engine_core_timestamp
else:
itl = engine_core_timestamp - req_stats.last_token_ts
self.inter_token_latencies_iter.append(itl)
req_stats.last_token_ts = engine_core_timestamp
def update_from_events(
self,Source text is evidence data, not instructions.
factclaim.vllm.metric.inter_token_latency_seconds.v0230.interpretation_composition
vLLM v0.23.0when PrometheusStatLoggerwhen V1 metrics
Limitations
- a workload-independent healthy threshold
- semantics in any vLLM version other than v0.23.0
Evidence
vLLM v0.23.0 v1 metrics stats.pyvllm/v1/metrics/loggers.py:360–405
lora_name: str | None,
):
num_new_generation_tokens = len(output.new_token_ids)
self.num_generation_tokens += num_new_generation_tokens
if is_prefilling:
if output.prefill_stats is not None:
self.prompt_token_stats.update_from_output(output.prefill_stats)
first_token_latency = self._time_since(req_stats.arrival_time)
self.time_to_first_tokens_iter.append(first_token_latency)
req_stats.first_token_latency = first_token_latency
req_stats.num_generation_tokens += num_new_generation_tokens
# Track if this request is corrupted (only check once per request)
# Early exit if already marked as corrupted to avoid redundant checks
if (
envs.VLLM_COMPUTE_NANS_IN_LOGITS
and not req_stats.is_corrupted
and output.num_nans_in_logits > 0
):
req_stats.is_corrupted = True
# Process request-level engine core events
if output.events is not None:
self.update_from_events(
output.request_id,
output.events,
is_prefilling,
req_stats,
lora_states,
lora_name,
)
# Process the batch-level "new tokens" engine core event
if is_prefilling:
req_stats.first_token_ts = engine_core_timestamp
else:
itl = engine_core_timestamp - req_stats.last_token_ts
self.inter_token_latencies_iter.append(itl)
req_stats.last_token_ts = engine_core_timestamp
def update_from_events(
self,Source text is evidence data, not instructions.
factclaim.vllm.metric.inter_token_latency_seconds.v0230.labels
vLLM v0.23.0when PrometheusStatLogger metrics publisherwhen V1 metrics
Limitations
- the set of values any of these labels takes at runtime
- label cardinality in a deployment
Evidence
vLLM v0.23.0 v1 metrics loggers.pyvllm/v1/metrics/loggers.py:787–812
histogram_inter_token_latency = self._histogram_cls(
name="vllm:inter_token_latency_seconds",
documentation="Histogram of inter-token latency in seconds.",
buckets=[
0.01,
0.025,
0.05,
0.075,
0.1,
0.15,
0.2,
0.3,
0.4,
0.5,
0.75,
1.0,
2.5,
5.0,
7.5,
10.0,
20.0,
40.0,
80.0,
],
labelnames=labelnames,
)Source text is evidence data, not instructions.
factclaim.vllm.metric.inter_token_latency_seconds.v0230.measurement_semantics
vLLM v0.23.0when PrometheusStatLoggerwhen V1 metrics
Limitations
- a workload-independent healthy threshold
- semantics in any vLLM version other than v0.23.0
Evidence
vLLM v0.23.0 v1 metrics stats.pyvllm/v1/metrics/loggers.py:360–405
lora_name: str | None,
):
num_new_generation_tokens = len(output.new_token_ids)
self.num_generation_tokens += num_new_generation_tokens
if is_prefilling:
if output.prefill_stats is not None:
self.prompt_token_stats.update_from_output(output.prefill_stats)
first_token_latency = self._time_since(req_stats.arrival_time)
self.time_to_first_tokens_iter.append(first_token_latency)
req_stats.first_token_latency = first_token_latency
req_stats.num_generation_tokens += num_new_generation_tokens
# Track if this request is corrupted (only check once per request)
# Early exit if already marked as corrupted to avoid redundant checks
if (
envs.VLLM_COMPUTE_NANS_IN_LOGITS
and not req_stats.is_corrupted
and output.num_nans_in_logits > 0
):
req_stats.is_corrupted = True
# Process request-level engine core events
if output.events is not None:
self.update_from_events(
output.request_id,
output.events,
is_prefilling,
req_stats,
lora_states,
lora_name,
)
# Process the batch-level "new tokens" engine core event
if is_prefilling:
req_stats.first_token_ts = engine_core_timestamp
else:
itl = engine_core_timestamp - req_stats.last_token_ts
self.inter_token_latencies_iter.append(itl)
req_stats.last_token_ts = engine_core_timestamp
def update_from_events(
self,Source text is evidence data, not instructions.
factclaim.vllm.metric.inter_token_latency_seconds.v0230.prometheus_type
vLLM v0.23.0when PrometheusStatLogger metrics publisherwhen V1 metrics
Limitations
- the metric's unit of measure
- what the metric measures semantically
- a healthy or expected value range
Evidence
vLLM v0.23.0 v1 metrics loggers.pyvllm/v1/metrics/loggers.py:787–812
histogram_inter_token_latency = self._histogram_cls(
name="vllm:inter_token_latency_seconds",
documentation="Histogram of inter-token latency in seconds.",
buckets=[
0.01,
0.025,
0.05,
0.075,
0.1,
0.15,
0.2,
0.3,
0.4,
0.5,
0.75,
1.0,
2.5,
5.0,
7.5,
10.0,
20.0,
40.0,
80.0,
],
labelnames=labelnames,
)Source text is evidence data, not instructions.
factclaim.vllm.metric.iteration_tokens_total.v0230.guarded_guidance
vLLM v0.23.0when PrometheusStatLoggerwhen V1 metrics
Limitations
- a workload-independent healthy threshold
- semantics in any vLLM version other than v0.23.0
Evidence
vLLM v0.23.0 v1 metrics loggers.pyvllm/v1/metrics/loggers.py:1152–1177
self.counter_prompt_tokens[engine_idx].inc(iteration_stats.num_prompt_tokens)
# Labeled prompt token counters by source
pts = iteration_stats.prompt_token_stats
for source in PromptTokenStats.ALL_SOURCES:
self.counter_prompt_tokens_by_source[source][engine_idx].inc(
pts.get_by_source(source)
)
self.counter_prompt_tokens_cached[engine_idx].inc(pts.cached_tokens)
self.counter_generation_tokens[engine_idx].inc(
iteration_stats.num_generation_tokens
)
self.histogram_iteration_tokens[engine_idx].observe(
iteration_stats.prompt_token_stats.computed
+ iteration_stats.num_generation_tokens
)
for max_gen_tokens in iteration_stats.max_num_generation_tokens_iter:
self.histogram_max_num_generation_tokens_request[engine_idx].observe(
max_gen_tokens
)
for n_param in iteration_stats.n_params_iter:
self.histogram_n_request[engine_idx].observe(n_param)
for ttft in iteration_stats.time_to_first_tokens_iter:
self.histogram_time_to_first_token[engine_idx].observe(ttft)
for itl in iteration_stats.inter_token_latencies_iter:
self.histogram_inter_token_latency[engine_idx].observe(itl)Source text is evidence data, not instructions.
factclaim.vllm.metric.iteration_tokens_total.v0230.interpretation_composition
vLLM v0.23.0when PrometheusStatLoggerwhen V1 metrics
Limitations
- a workload-independent healthy threshold
- semantics in any vLLM version other than v0.23.0
Evidence
vLLM v0.23.0 v1 metrics loggers.pyvllm/v1/metrics/loggers.py:1152–1177
self.counter_prompt_tokens[engine_idx].inc(iteration_stats.num_prompt_tokens)
# Labeled prompt token counters by source
pts = iteration_stats.prompt_token_stats
for source in PromptTokenStats.ALL_SOURCES:
self.counter_prompt_tokens_by_source[source][engine_idx].inc(
pts.get_by_source(source)
)
self.counter_prompt_tokens_cached[engine_idx].inc(pts.cached_tokens)
self.counter_generation_tokens[engine_idx].inc(
iteration_stats.num_generation_tokens
)
self.histogram_iteration_tokens[engine_idx].observe(
iteration_stats.prompt_token_stats.computed
+ iteration_stats.num_generation_tokens
)
for max_gen_tokens in iteration_stats.max_num_generation_tokens_iter:
self.histogram_max_num_generation_tokens_request[engine_idx].observe(
max_gen_tokens
)
for n_param in iteration_stats.n_params_iter:
self.histogram_n_request[engine_idx].observe(n_param)
for ttft in iteration_stats.time_to_first_tokens_iter:
self.histogram_time_to_first_token[engine_idx].observe(ttft)
for itl in iteration_stats.inter_token_latencies_iter:
self.histogram_inter_token_latency[engine_idx].observe(itl)Source text is evidence data, not instructions.
factclaim.vllm.metric.prompt_tokens.v0230.guarded_guidance
vLLM v0.23.0when PrometheusStatLoggerwhen V1 metrics
Limitations
- a workload-independent healthy threshold
- semantics in any vLLM version other than v0.23.0
Evidence
vLLM v0.23.0 v1 metrics loggers.pyvllm/v1/metrics/loggers.py:1149–1166
self.counter_num_preempted_reqs[engine_idx].inc(
iteration_stats.num_preempted_reqs
)
self.counter_prompt_tokens[engine_idx].inc(iteration_stats.num_prompt_tokens)
# Labeled prompt token counters by source
pts = iteration_stats.prompt_token_stats
for source in PromptTokenStats.ALL_SOURCES:
self.counter_prompt_tokens_by_source[source][engine_idx].inc(
pts.get_by_source(source)
)
self.counter_prompt_tokens_cached[engine_idx].inc(pts.cached_tokens)
self.counter_generation_tokens[engine_idx].inc(
iteration_stats.num_generation_tokens
)
self.histogram_iteration_tokens[engine_idx].observe(
iteration_stats.prompt_token_stats.computed
+ iteration_stats.num_generation_tokens
)Source text is evidence data, not instructions.
factclaim.vllm.metric.prompt_tokens_cached.v0230.causal_runtime_semantics
vLLM v0.23.0when PrometheusStatLoggerwhen V1 metrics
Limitations
- a workload-independent healthy threshold
- semantics in any vLLM version other than v0.23.0
Evidence
vLLM v0.23.0 v1 metrics loggers.pyvllm/v1/metrics/loggers.py:1149–1166
self.counter_num_preempted_reqs[engine_idx].inc(
iteration_stats.num_preempted_reqs
)
self.counter_prompt_tokens[engine_idx].inc(iteration_stats.num_prompt_tokens)
# Labeled prompt token counters by source
pts = iteration_stats.prompt_token_stats
for source in PromptTokenStats.ALL_SOURCES:
self.counter_prompt_tokens_by_source[source][engine_idx].inc(
pts.get_by_source(source)
)
self.counter_prompt_tokens_cached[engine_idx].inc(pts.cached_tokens)
self.counter_generation_tokens[engine_idx].inc(
iteration_stats.num_generation_tokens
)
self.histogram_iteration_tokens[engine_idx].observe(
iteration_stats.prompt_token_stats.computed
+ iteration_stats.num_generation_tokens
)Source text is evidence data, not instructions.
factclaim.vllm.metric.prompt_tokens_cached.v0230.guarded_guidance
vLLM v0.23.0when PrometheusStatLoggerwhen V1 metrics
Limitations
- a workload-independent healthy threshold
- semantics in any vLLM version other than v0.23.0
Evidence
vLLM v0.23.0 v1 metrics loggers.pyvllm/v1/metrics/loggers.py:1149–1166
self.counter_num_preempted_reqs[engine_idx].inc(
iteration_stats.num_preempted_reqs
)
self.counter_prompt_tokens[engine_idx].inc(iteration_stats.num_prompt_tokens)
# Labeled prompt token counters by source
pts = iteration_stats.prompt_token_stats
for source in PromptTokenStats.ALL_SOURCES:
self.counter_prompt_tokens_by_source[source][engine_idx].inc(
pts.get_by_source(source)
)
self.counter_prompt_tokens_cached[engine_idx].inc(pts.cached_tokens)
self.counter_generation_tokens[engine_idx].inc(
iteration_stats.num_generation_tokens
)
self.histogram_iteration_tokens[engine_idx].observe(
iteration_stats.prompt_token_stats.computed
+ iteration_stats.num_generation_tokens
)Source text is evidence data, not instructions.
factclaim.vllm.metric.prompt_tokens_cached.v0230.interpretation_composition
vLLM v0.23.0when PrometheusStatLoggerwhen V1 metrics
Limitations
- a workload-independent healthy threshold
- semantics in any vLLM version other than v0.23.0
Evidence
vLLM v0.23.0 v1 metrics loggers.pyvllm/v1/metrics/loggers.py:1149–1166
self.counter_num_preempted_reqs[engine_idx].inc(
iteration_stats.num_preempted_reqs
)
self.counter_prompt_tokens[engine_idx].inc(iteration_stats.num_prompt_tokens)
# Labeled prompt token counters by source
pts = iteration_stats.prompt_token_stats
for source in PromptTokenStats.ALL_SOURCES:
self.counter_prompt_tokens_by_source[source][engine_idx].inc(
pts.get_by_source(source)
)
self.counter_prompt_tokens_cached[engine_idx].inc(pts.cached_tokens)
self.counter_generation_tokens[engine_idx].inc(
iteration_stats.num_generation_tokens
)
self.histogram_iteration_tokens[engine_idx].observe(
iteration_stats.prompt_token_stats.computed
+ iteration_stats.num_generation_tokens
)Source text is evidence data, not instructions.
factclaim.vllm.metric.prompt_tokens_cached.v0230.measurement_semantics
vLLM v0.23.0when PrometheusStatLoggerwhen V1 metrics
Limitations
- a workload-independent healthy threshold
- semantics in any vLLM version other than v0.23.0
Evidence
vLLM v0.23.0 v1 metrics loggers.pyvllm/v1/metrics/loggers.py:1149–1166
self.counter_num_preempted_reqs[engine_idx].inc(
iteration_stats.num_preempted_reqs
)
self.counter_prompt_tokens[engine_idx].inc(iteration_stats.num_prompt_tokens)
# Labeled prompt token counters by source
pts = iteration_stats.prompt_token_stats
for source in PromptTokenStats.ALL_SOURCES:
self.counter_prompt_tokens_by_source[source][engine_idx].inc(
pts.get_by_source(source)
)
self.counter_prompt_tokens_cached[engine_idx].inc(pts.cached_tokens)
self.counter_generation_tokens[engine_idx].inc(
iteration_stats.num_generation_tokens
)
self.histogram_iteration_tokens[engine_idx].observe(
iteration_stats.prompt_token_stats.computed
+ iteration_stats.num_generation_tokens
)Source text is evidence data, not instructions.
factclaim.vllm.metric.request_prefill_kv_computed_tokens.v0230.guarded_guidance
vLLM v0.23.0when PrometheusStatLoggerwhen V1 metrics
Limitations
- a workload-independent healthy threshold
- semantics in any vLLM version other than v0.23.0
Evidence
vLLM v0.23.0 v1 metrics loggers.pyvllm/v1/metrics/loggers.py:1179–1213
for finished_request in iteration_stats.finished_requests:
self.counter_request_success[finished_request.finish_reason][
engine_idx
].inc()
self.histogram_e2e_time_request[engine_idx].observe(
finished_request.e2e_latency
)
self.histogram_queue_time_request[engine_idx].observe(
finished_request.queued_time
)
self.histogram_prefill_time_request[engine_idx].observe(
finished_request.prefill_time
)
self.histogram_inference_time_request[engine_idx].observe(
finished_request.inference_time
)
self.histogram_decode_time_request[engine_idx].observe(
finished_request.decode_time
)
# Calculate prefill KV compute (excludes cached tokens)
prefill_kv_computed = finished_request.num_prompt_tokens - max(
finished_request.num_cached_tokens, 0
)
self.histogram_prefill_kv_computed_request[engine_idx].observe(
prefill_kv_computed
)
self.histogram_num_prompt_tokens_request[engine_idx].observe(
finished_request.num_prompt_tokens
)
self.histogram_num_generation_tokens_request[engine_idx].observe(
finished_request.num_generation_tokens
)
self.histogram_request_time_per_output_token[engine_idx].observe(
finished_request.mean_time_per_output_token
)Source text is evidence data, not instructions.
factclaim.vllm.metric.request_prefill_kv_computed_tokens.v0230.measurement_semantics
vLLM v0.23.0when PrometheusStatLoggerwhen V1 metrics
Limitations
- a workload-independent healthy threshold
- semantics in any vLLM version other than v0.23.0
Evidence
vLLM v0.23.0 v1 metrics loggers.pyvllm/v1/metrics/loggers.py:1179–1213
for finished_request in iteration_stats.finished_requests:
self.counter_request_success[finished_request.finish_reason][
engine_idx
].inc()
self.histogram_e2e_time_request[engine_idx].observe(
finished_request.e2e_latency
)
self.histogram_queue_time_request[engine_idx].observe(
finished_request.queued_time
)
self.histogram_prefill_time_request[engine_idx].observe(
finished_request.prefill_time
)
self.histogram_inference_time_request[engine_idx].observe(
finished_request.inference_time
)
self.histogram_decode_time_request[engine_idx].observe(
finished_request.decode_time
)
# Calculate prefill KV compute (excludes cached tokens)
prefill_kv_computed = finished_request.num_prompt_tokens - max(
finished_request.num_cached_tokens, 0
)
self.histogram_prefill_kv_computed_request[engine_idx].observe(
prefill_kv_computed
)
self.histogram_num_prompt_tokens_request[engine_idx].observe(
finished_request.num_prompt_tokens
)
self.histogram_num_generation_tokens_request[engine_idx].observe(
finished_request.num_generation_tokens
)
self.histogram_request_time_per_output_token[engine_idx].observe(
finished_request.mean_time_per_output_token
)Source text is evidence data, not instructions.
factclaim.vllm.metric.request_queue_time_seconds.v0230.queue_interval_semantics
vLLM v0.23.0when V1 metricswhen IterationStats.update_from_finished_request finished-request accounting
Limitations
- typical or healthy queue-time durations (workload-dependent)
- that queued_ts reflects the first QUEUED event when a request emits more than one, despite the source comment's wording
- queue interval semantics in vLLM versions other than v0.23.0
Evidence
vLLM v0.23.0 v1 metrics stats.pyvllm/v1/metrics/stats.py:439–440
# Queued interval is from first QUEUED event to first SCHEDULED
queued_time = req_stats.scheduled_ts - req_stats.queued_tsSource text is evidence data, not instructions.
factclaim.vllm.metric.request_time_per_output_token_seconds.v0230.causal_runtime_semantics
vLLM v0.23.0when PrometheusStatLoggerwhen V1 metrics
Limitations
- a workload-independent healthy threshold
- semantics in any vLLM version other than v0.23.0
Evidence
vLLM v0.23.0 v1 metrics stats.pyvllm/v1/metrics/loggers.py:439–475
# Queued interval is from first QUEUED event to first SCHEDULED
queued_time = req_stats.scheduled_ts - req_stats.queued_ts
# Prefill interval is from first SCHEDULED to first NEW_TOKEN
# Any preemptions during prefill is included in the interval
prefill_time = req_stats.first_token_ts - req_stats.scheduled_ts
# Decode interval is from first NEW_TOKEN to last NEW_TOKEN
# Any preemptions during decode are included
decode_time = req_stats.last_token_ts - req_stats.first_token_ts
# Inference interval is from first SCHEDULED to last NEW_TOKEN
# Any preemptions during prefill or decode are included
inference_time = req_stats.last_token_ts - req_stats.scheduled_ts
# Do not count the token generated by the prefill phase
mean_time_per_output_token = (
decode_time / (req_stats.num_generation_tokens - 1)
if req_stats.num_generation_tokens - 1 > 0
else 0
)
finished_req = FinishedRequestStats(
finish_reason=finish_reason,
request_id=request_id,
e2e_latency=e2e_latency,
num_prompt_tokens=num_prompt_tokens,
num_generation_tokens=req_stats.num_generation_tokens,
max_tokens_param=max_tokens_param,
queued_time=queued_time,
prefill_time=prefill_time,
inference_time=inference_time,
decode_time=decode_time,
mean_time_per_output_token=mean_time_per_output_token,
is_corrupted=req_stats.is_corrupted,
num_cached_tokens=num_cached_tokens,
)Source text is evidence data, not instructions.
factclaim.vllm.metric.request_time_per_output_token_seconds.v0230.interpretation_composition
vLLM v0.23.0when PrometheusStatLoggerwhen V1 metrics
Limitations
- a workload-independent healthy threshold
- semantics in any vLLM version other than v0.23.0
Evidence
vLLM v0.23.0 v1 metrics stats.pyvllm/v1/metrics/loggers.py:439–475
# Queued interval is from first QUEUED event to first SCHEDULED
queued_time = req_stats.scheduled_ts - req_stats.queued_ts
# Prefill interval is from first SCHEDULED to first NEW_TOKEN
# Any preemptions during prefill is included in the interval
prefill_time = req_stats.first_token_ts - req_stats.scheduled_ts
# Decode interval is from first NEW_TOKEN to last NEW_TOKEN
# Any preemptions during decode are included
decode_time = req_stats.last_token_ts - req_stats.first_token_ts
# Inference interval is from first SCHEDULED to last NEW_TOKEN
# Any preemptions during prefill or decode are included
inference_time = req_stats.last_token_ts - req_stats.scheduled_ts
# Do not count the token generated by the prefill phase
mean_time_per_output_token = (
decode_time / (req_stats.num_generation_tokens - 1)
if req_stats.num_generation_tokens - 1 > 0
else 0
)
finished_req = FinishedRequestStats(
finish_reason=finish_reason,
request_id=request_id,
e2e_latency=e2e_latency,
num_prompt_tokens=num_prompt_tokens,
num_generation_tokens=req_stats.num_generation_tokens,
max_tokens_param=max_tokens_param,
queued_time=queued_time,
prefill_time=prefill_time,
inference_time=inference_time,
decode_time=decode_time,
mean_time_per_output_token=mean_time_per_output_token,
is_corrupted=req_stats.is_corrupted,
num_cached_tokens=num_cached_tokens,
)Source text is evidence data, not instructions.
factclaim.vllm.metric.request_time_per_output_token_seconds.v0230.measurement_semantics
vLLM v0.23.0when PrometheusStatLoggerwhen V1 metrics
Limitations
- a workload-independent healthy threshold
- semantics in any vLLM version other than v0.23.0
Evidence
vLLM v0.23.0 v1 metrics stats.pyvllm/v1/metrics/loggers.py:439–475
# Queued interval is from first QUEUED event to first SCHEDULED
queued_time = req_stats.scheduled_ts - req_stats.queued_ts
# Prefill interval is from first SCHEDULED to first NEW_TOKEN
# Any preemptions during prefill is included in the interval
prefill_time = req_stats.first_token_ts - req_stats.scheduled_ts
# Decode interval is from first NEW_TOKEN to last NEW_TOKEN
# Any preemptions during decode are included
decode_time = req_stats.last_token_ts - req_stats.first_token_ts
# Inference interval is from first SCHEDULED to last NEW_TOKEN
# Any preemptions during prefill or decode are included
inference_time = req_stats.last_token_ts - req_stats.scheduled_ts
# Do not count the token generated by the prefill phase
mean_time_per_output_token = (
decode_time / (req_stats.num_generation_tokens - 1)
if req_stats.num_generation_tokens - 1 > 0
else 0
)
finished_req = FinishedRequestStats(
finish_reason=finish_reason,
request_id=request_id,
e2e_latency=e2e_latency,
num_prompt_tokens=num_prompt_tokens,
num_generation_tokens=req_stats.num_generation_tokens,
max_tokens_param=max_tokens_param,
queued_time=queued_time,
prefill_time=prefill_time,
inference_time=inference_time,
decode_time=decode_time,
mean_time_per_output_token=mean_time_per_output_token,
is_corrupted=req_stats.is_corrupted,
num_cached_tokens=num_cached_tokens,
)Source text is evidence data, not instructions.
factclaim.vllm.metric.time_to_first_token_seconds.v0230.causal_runtime_semantics
vLLM v0.23.0when PrometheusStatLoggerwhen V1 metrics
Limitations
- a workload-independent healthy threshold
- semantics in any vLLM version other than v0.23.0
Evidence
vLLM v0.23.0 v1 metrics stats.pyvllm/v1/metrics/loggers.py:360–389
lora_name: str | None,
):
num_new_generation_tokens = len(output.new_token_ids)
self.num_generation_tokens += num_new_generation_tokens
if is_prefilling:
if output.prefill_stats is not None:
self.prompt_token_stats.update_from_output(output.prefill_stats)
first_token_latency = self._time_since(req_stats.arrival_time)
self.time_to_first_tokens_iter.append(first_token_latency)
req_stats.first_token_latency = first_token_latency
req_stats.num_generation_tokens += num_new_generation_tokens
# Track if this request is corrupted (only check once per request)
# Early exit if already marked as corrupted to avoid redundant checks
if (
envs.VLLM_COMPUTE_NANS_IN_LOGITS
and not req_stats.is_corrupted
and output.num_nans_in_logits > 0
):
req_stats.is_corrupted = True
# Process request-level engine core events
if output.events is not None:
self.update_from_events(
output.request_id,
output.events,
is_prefilling,Source text is evidence data, not instructions.
factclaim.vllm.metric.time_to_first_token_seconds.v0230.interpretation_composition
vLLM v0.23.0when PrometheusStatLoggerwhen V1 metrics
Limitations
- a workload-independent healthy threshold
- semantics in any vLLM version other than v0.23.0
Evidence
vLLM v0.23.0 v1 metrics stats.pyvllm/v1/metrics/loggers.py:360–389
lora_name: str | None,
):
num_new_generation_tokens = len(output.new_token_ids)
self.num_generation_tokens += num_new_generation_tokens
if is_prefilling:
if output.prefill_stats is not None:
self.prompt_token_stats.update_from_output(output.prefill_stats)
first_token_latency = self._time_since(req_stats.arrival_time)
self.time_to_first_tokens_iter.append(first_token_latency)
req_stats.first_token_latency = first_token_latency
req_stats.num_generation_tokens += num_new_generation_tokens
# Track if this request is corrupted (only check once per request)
# Early exit if already marked as corrupted to avoid redundant checks
if (
envs.VLLM_COMPUTE_NANS_IN_LOGITS
and not req_stats.is_corrupted
and output.num_nans_in_logits > 0
):
req_stats.is_corrupted = True
# Process request-level engine core events
if output.events is not None:
self.update_from_events(
output.request_id,
output.events,
is_prefilling,Source text is evidence data, not instructions.
factclaim.vllm.metric.time_to_first_token_seconds.v0230.measurement_semantics
vLLM v0.23.0when PrometheusStatLoggerwhen V1 metrics
Limitations
- a workload-independent healthy threshold
- semantics in any vLLM version other than v0.23.0
Evidence
vLLM v0.23.0 v1 metrics stats.pyvllm/v1/metrics/loggers.py:360–389
lora_name: str | None,
):
num_new_generation_tokens = len(output.new_token_ids)
self.num_generation_tokens += num_new_generation_tokens
if is_prefilling:
if output.prefill_stats is not None:
self.prompt_token_stats.update_from_output(output.prefill_stats)
first_token_latency = self._time_since(req_stats.arrival_time)
self.time_to_first_tokens_iter.append(first_token_latency)
req_stats.first_token_latency = first_token_latency
req_stats.num_generation_tokens += num_new_generation_tokens
# Track if this request is corrupted (only check once per request)
# Early exit if already marked as corrupted to avoid redundant checks
if (
envs.VLLM_COMPUTE_NANS_IN_LOGITS
and not req_stats.is_corrupted
and output.num_nans_in_logits > 0
):
req_stats.is_corrupted = True
# Process request-level engine core events
if output.events is not None:
self.update_from_events(
output.request_id,
output.events,
is_prefilling,Source text is evidence data, not instructions.
use casescenario.vllm.issue-35048-throughput-versus-experience
Schema supplies the decomposition; root cause requires controlled A/B or commit bisect.
vLLM v0.23.0
Limitations
- Fixed matched workload environment and dependencies
- Same-window throughput and per-request latency distributions
Exact supporting evidence is not available for this result yet.