11from collections .abc import Iterable
2+ from functools import cache
23from pathlib import Path
3- from typing import Annotated , Any , Literal , Optional , Union
4+ from typing import Annotated , Any , Literal , Optional , TypeVar , Union
45
56from datasets import Dataset , DatasetDict , IterableDataset , IterableDatasetDict
67from pydantic import BeforeValidator , Field , NonNegativeInt , PositiveFloat , PositiveInt
1314from guidellm .objects .pydantic import StandardBaseModel
1415from guidellm .scheduler .strategy import StrategyType
1516
16- __ALL__ = ["Scenario" , "GenerativeTextScenario" ]
17+ __ALL__ = ["Scenario" , "GenerativeTextScenario" , "get_builtin_scenarios" ]
18+
19+ SCENARIO_DIR = Path (__file__ ).parent / "scenarios/"
20+
21+
22+ @cache
23+ def get_builtin_scenarios () -> list [str ]:
24+ return [p .stem for p in SCENARIO_DIR .glob ("*.json" )]
1725
1826
1927def parse_float_list (value : Union [str , float , list [float ]]) -> list [float ]:
@@ -32,9 +40,21 @@ def parse_float_list(value: Union[str, float, list[float]]) -> list[float]:
3240 ) from err
3341
3442
43+ T = TypeVar ("T" , bound = "Scenario" )
44+
45+
3546class Scenario (StandardBaseModel ):
3647 target : str
3748
49+ @classmethod
50+ def from_builtin (cls : type [T ], name : str , overrides : Optional [dict ] = None ) -> T :
51+ filename = SCENARIO_DIR / f"{ name } .json"
52+
53+ if not filename .is_file ():
54+ raise ValueError (f"{ name } is not a vaild builtin scenario" )
55+
56+ return cls .from_file (filename , overrides )
57+
3858
3959class GenerativeTextScenario (Scenario ):
4060 # FIXME: This solves an issue with Pydantic and class types
0 commit comments