1
1
import random
2
2
from collections import defaultdict
3
3
from math import ceil
4
- from typing import List , Optional , Tuple , TYPE_CHECKING
4
+ from typing import List , Optional , Tuple , TYPE_CHECKING , Union
5
5
6
6
from pydantic import BaseModel , computed_field
7
7
11
11
from guidellm .objects .statistics import DistributionSummary
12
12
13
13
class Bucket (BaseModel ):
14
- value : float
14
+ value : Union [ float , int ]
15
15
count : int
16
16
17
17
@staticmethod
18
18
def from_data (
19
- data : List [float ],
19
+ data : Union [ List [float ], List [ int ] ],
20
20
bucket_width : Optional [float ] = None ,
21
21
n_buckets : Optional [int ] = None ,
22
22
) -> Tuple [List ["Bucket" ], float ]:
@@ -34,7 +34,7 @@ def from_data(
34
34
else :
35
35
n_buckets = ceil (range_v / bucket_width )
36
36
37
- bucket_counts = defaultdict (int )
37
+ bucket_counts : defaultdict [ Union [ float , int ], int ] = defaultdict (int )
38
38
for val in data :
39
39
idx = int ((val - min_v ) // bucket_width )
40
40
if idx >= n_buckets :
@@ -125,10 +125,10 @@ def from_benchmarks(cls, benchmarks: list["GenerativeBenchmark"]):
125
125
]
126
126
127
127
prompt_tokens = [
128
- req .prompt_tokens for bm in benchmarks for req in bm .requests .successful
128
+ float ( req .prompt_tokens ) for bm in benchmarks for req in bm .requests .successful
129
129
]
130
130
output_tokens = [
131
- req .output_tokens for bm in benchmarks for req in bm .requests .successful
131
+ float ( req .output_tokens ) for bm in benchmarks for req in bm .requests .successful
132
132
]
133
133
134
134
prompt_token_buckets , _prompt_token_bucket_width = Bucket .from_data (
@@ -184,7 +184,6 @@ class TabularDistributionSummary(DistributionSummary):
184
184
`percentile_rows` helper.
185
185
"""
186
186
187
- @computed_field
188
187
@property
189
188
def percentile_rows (self ) -> list [dict [str , float ]]:
190
189
rows = [
0 commit comments