-
Notifications
You must be signed in to change notification settings - Fork 16
Expand file tree
/
Copy pathdynamic_data_loader.py
More file actions
38 lines (30 loc) · 1.41 KB
/
dynamic_data_loader.py
File metadata and controls
38 lines (30 loc) · 1.41 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
from collections.abc import Callable, Sequence
from dataclasses import dataclass
from eval_protocol.data_loader.models import (
DataLoaderResult,
DataLoaderVariant,
EvaluationDataLoader,
)
from eval_protocol.models import EvaluationRow
@dataclass(kw_only=True)
class DynamicDataLoader(EvaluationDataLoader):
"""Data loader for dynamic data generation."""
generators: Sequence[Callable[[], list[EvaluationRow]]]
"""Dynamic data generation functions. These callables are invoked each time data
needs to be loaded, allowing for dynamic data generation, lazy loading, or data that
changes between evaluation runs. Each function should return a list of EvaluationRow
objects. This is useful for scenarios like generating test data on-the-fly, loading
data from external sources, or creating data with randomized elements for robust testing."""
def variants(self) -> Sequence[DataLoaderVariant]:
variants: Sequence[DataLoaderVariant] = []
for generator in self.generators:
def _load() -> DataLoaderResult:
resolved_rows = generator()
return DataLoaderResult(
rows=resolved_rows,
type=self.__class__.__name__,
variant_id=generator.__name__,
variant_description=generator.__doc__,
)
variants.append(_load)
return variants