SuperAI_Forecast / backend /test_env_example_contract.py
Thang6822
Update HF Space deployment
4106e0f
from __future__ import annotations
import unittest
from pathlib import Path
class EnvExampleContractTests(unittest.TestCase):
@classmethod
def setUpClass(cls) -> None:
cls.env_example = (Path(__file__).resolve().parent.parent / ".env.example").read_text(
encoding="utf-8",
)
def test_env_example_includes_required_runtime_keys(self) -> None:
self.assertIn("ADMIN_TOKEN=replace-with-a-long-random-secret", self.env_example)
self.assertIn("HOST=127.0.0.1", self.env_example)
self.assertIn("PORT=8000", self.env_example)
self.assertIn("AIFORECAST_START_WITH_WINDOWS=true", self.env_example)
self.assertIn("DEFAULT_FORECAST_CONTEXT_LENGTH=384", self.env_example)
self.assertIn("ALLOWED_FORECAST_CONTEXT_LENGTHS=128,256,384,512", self.env_example)
self.assertIn("FORECAST_WORKER_IDLE_TTL_MS=120000", self.env_example)
def test_env_example_includes_model_and_provider_placeholders(self) -> None:
self.assertIn("PRELOAD_TIMESFM=false", self.env_example)
self.assertIn("PRELOAD_KRONOS=false", self.env_example)
self.assertIn("PRELOAD_CHRONOS=false", self.env_example)
self.assertIn("TORCH_NUM_THREADS=2", self.env_example)
self.assertIn("TORCH_NUM_INTEROP_THREADS=1", self.env_example)
self.assertIn("OMP_NUM_THREADS=2", self.env_example)
self.assertIn("MKL_NUM_THREADS=2", self.env_example)
self.assertIn("TIMESFM_MODEL_HF_ID=google/timesfm-2.5-200m-pytorch", self.env_example)
self.assertIn("KRONOS_MODEL_HF_ID=NeoQuasar/Kronos-base", self.env_example)
self.assertIn("CHRONOS_MODEL_HF_ID=amazon/chronos-2", self.env_example)
self.assertIn("TWELVEDATA_API_KEY=", self.env_example)
self.assertIn("FINNHUB_API_KEY=", self.env_example)
self.assertIn("BINANCE_API_KEY=", self.env_example)
self.assertIn("BYBIT_API_KEY=", self.env_example)
if __name__ == "__main__":
unittest.main()