2626import msgspec .json
2727import msgspec .structs
2828
29+ from inference_endpoint .async_utils .services .metrics_aggregator .aggregator import (
30+ MetricCounterKey ,
31+ )
2932from inference_endpoint .async_utils .services .metrics_aggregator .registry import (
3033 build_token_series_dict ,
3134)
@@ -66,6 +69,16 @@ def place_early_stopping_percentiles(
6669 return out
6770
6871
72+ _FINISH_REASON_COUNTERS = (
73+ MetricCounterKey .TRACKED_FINISH_REASON_STOP ,
74+ MetricCounterKey .TRACKED_FINISH_REASON_LENGTH ,
75+ MetricCounterKey .TRACKED_FINISH_REASON_TOOL_CALLS ,
76+ MetricCounterKey .TRACKED_FINISH_REASON_CONTENT_FILTER ,
77+ MetricCounterKey .TRACKED_FINISH_REASON_FUNCTION_CALL ,
78+ MetricCounterKey .TRACKED_FINISH_REASON_OTHER ,
79+ )
80+
81+
6982def _series_to_metric_dict (stat : dict [str , Any ]) -> dict [str , Any ]:
7083 """Convert a series-stat dict into the shape ``display()`` expects.
7184
@@ -204,6 +217,7 @@ class Report(msgspec.Struct, frozen=True): # type: ignore[call-arg]
204217 # tokenizer unavailable).
205218 qps : float | None = None
206219 tps : float | None = None
220+ finish_reason_counts : dict [str , int ] = msgspec .field (default_factory = dict )
207221
208222 # Run configuration (load_pattern, warmup, and the scheduler/dataloader RNG
209223 # seeds), from config. Carried so result_summary.json is self-describing and a
@@ -325,6 +339,13 @@ def _series_dict(key: str) -> dict[str, Any]:
325339 # indicator in display().
326340 state = snap .get ("state" , "interrupted" )
327341 n_pending_tasks = snap .get ("n_pending_tasks" , 0 )
342+ finish_reason_prefix = "tracked_finish_reason_"
343+ finish_reason_counts = {
344+ reason .value .removeprefix (finish_reason_prefix ): int (
345+ counters .get (reason .value , 0 )
346+ )
347+ for reason in _FINISH_REASON_COUNTERS
348+ }
328349
329350 return cls (
330351 version = str (version_info .get ("version" , "unknown" )),
@@ -344,6 +365,7 @@ def _series_dict(key: str) -> dict[str, Any]:
344365 legacy_loadgen_window_duration_ns = legacy_loadgen_window_duration_ns ,
345366 qps = qps ,
346367 tps = tps ,
368+ finish_reason_counts = finish_reason_counts ,
347369 run_config = run_config ,
348370 )
349371
0 commit comments