from __future__ import annotations import hashlib from dataclasses import dataclass from pathlib import Path from typing import Any, Dict RULES_PATH = Path(__file__).with_name("AI_MODEL_RULES.md") @dataclass(frozen=True) class ForecastRuleDocument: path: str version: str content: str default_horizon: int recommended_context_length: int default_line_width: int def to_metadata(self) -> Dict[str, Any]: return { "path": self.path, "version": self.version, "default_horizon": self.default_horizon, "recommended_context_length": self.recommended_context_length, "default_line_width": self.default_line_width, } def load_forecast_rule_document(path: Path | None = None) -> ForecastRuleDocument: rules_path = path or RULES_PATH content = rules_path.read_text(encoding="utf-8").strip() version = hashlib.sha256(content.encode("utf-8")).hexdigest()[:12] return ForecastRuleDocument( path=str(rules_path), version=version, content=content, default_horizon=10, recommended_context_length=384, default_line_width=1, ) FORECAST_RULE_DOCUMENT = load_forecast_rule_document()