import logging import threading import typing from .client import CortexSearchClient, CortexSearchConfig from .exceptions import * from .filters import * _lock = threading.Lock() _client: CortexSearchClient | None = None def init_cortex_search( config: CortexSearchConfig, logger_factory: typing.Callable[[], logging.Logger | None] | None = None, ) -> None: """Initialize the Cortex Search client singleton.""" global _client with _lock: if _client is None: _client = CortexSearchClient(config, logger_factory) def get_client() -> CortexSearchClient: """Return the initialized Cortex Search client singleton. Raises: RuntimeError: If ``init_cortex_search`` has not been called yet. """ if _client is None: raise RuntimeError( 'Cortex Search client is not initialized. Call init_cortex_search() first.' ) return _client