from __future__ import annotations from datetime import datetime from gibil.classes.models import PowerForecastRun from gibil.classes.oracle.config import EnergyForecastConfig from gibil.classes.predictors.usage_daily import DailyUsageOracle from gibil.classes.sigen.store import SigenStore class SequenceUsageOracle: """Forecasts load from recent sequence state when a trained model exists.""" model_version = "sequence_usage_tcn_v1" def __init__( self, sigen_store: SigenStore, config: EnergyForecastConfig, ) -> None: self.sigen_store = sigen_store self.config = config self.fallback = DailyUsageOracle(sigen_store=sigen_store, config=config) def forecast( self, target_times: list[datetime], issued_at: datetime | None = None, ) -> PowerForecastRun: # The sequence model scaffold is present, but production should remain # deterministic until we have a trained artifact and evaluation history. return self.fallback.forecast(target_times=target_times, issued_at=issued_at)