Coverage for src/lite_agent/utils/metrics.py: 82%
17 statements
« prev ^ index » next coverage.py v7.10.5, created at 2025-08-25 22:58 +0900
« prev ^ index » next coverage.py v7.10.5, created at 2025-08-25 22:58 +0900
1from datetime import datetime
4class TimingMetrics:
5 """Utility class for calculating timing metrics in LLM responses."""
7 @staticmethod
8 def calculate_latency_ms(start_time: datetime | None, first_output_time: datetime | None) -> int | None:
9 """Calculate latency from start to first output.
11 Args:
12 start_time: When the request started
13 first_output_time: When the first output was received
15 Returns:
16 Latency in milliseconds, or None if either time is missing
17 """
18 if start_time is None or first_output_time is None:
19 return None
20 return int((first_output_time - start_time).total_seconds() * 1000)
22 @staticmethod
23 def calculate_output_time_ms(first_output_time: datetime | None, output_complete_time: datetime | None) -> int | None:
24 """Calculate time from first output to completion.
26 Args:
27 first_output_time: When the first output was received
28 output_complete_time: When output was completed
30 Returns:
31 Output time in milliseconds, or None if either time is missing
32 """
33 if first_output_time is None or output_complete_time is None:
34 return None
35 return int((output_complete_time - first_output_time).total_seconds() * 1000)
37 @staticmethod
38 def calculate_total_time_ms(start_time: datetime | None, output_complete_time: datetime | None) -> int | None:
39 """Calculate total time from start to completion.
41 Args:
42 start_time: When the request started
43 output_complete_time: When output was completed
45 Returns:
46 Total time in milliseconds, or None if either time is missing
47 """
48 if start_time is None or output_complete_time is None:
49 return None
50 return int((output_complete_time - start_time).total_seconds() * 1000)