from __future__ import annotations from dataclasses import dataclass from gibil.classes.predictors.usage_sequence_dataset import ( UsageSequenceDatasetBuilder, UsageSequenceScaleConfig, ) @dataclass(frozen=True) class UsageHybridModelShape: """Describes the fixed-plus-token sequence model input contract.""" past_scales: tuple[UsageSequenceScaleConfig, ...] past_fixed_features: tuple[str, ...] future_fixed_features: tuple[str, ...] future_steps: int quantiles: tuple[float, ...] = (0.10, 0.50, 0.90) @classmethod def from_dataset_builder( cls, builder: UsageSequenceDatasetBuilder, ) -> "UsageHybridModelShape": return cls( past_scales=builder.config.past_scales, past_fixed_features=tuple(builder.past_feature_names), future_fixed_features=tuple(builder.future_feature_names), future_steps=builder.future_steps, ) @property def output_width(self) -> int: return self.future_steps * len(self.quantiles)