|
|
|
|
|
"""Singleton pattern for model loading |
|
|
|
|
|
This loader provides a clean interface for getting the detector instance. |
|
|
Uses singleton pattern to ensure models are loaded only once. |
|
|
""" |
|
|
import logging |
|
|
|
|
|
logger = logging.getLogger(__name__) |
|
|
|
|
|
_detector_instance = None |
|
|
|
|
|
def get_stutter_detector(): |
|
|
""" |
|
|
Get or create singleton AdvancedStutterDetector instance. |
|
|
|
|
|
This ensures models are loaded only once and reused across requests. |
|
|
|
|
|
Returns: |
|
|
AdvancedStutterDetector: The singleton detector instance |
|
|
|
|
|
Raises: |
|
|
ImportError: If the detector class cannot be imported |
|
|
""" |
|
|
global _detector_instance |
|
|
|
|
|
if _detector_instance is None: |
|
|
try: |
|
|
from .detect_stuttering import AdvancedStutterDetector |
|
|
logger.info("π Initializing detector instance (first call)...") |
|
|
_detector_instance = AdvancedStutterDetector() |
|
|
logger.info("β
Detector instance created successfully") |
|
|
except ImportError as e: |
|
|
logger.error(f"β Failed to import AdvancedStutterDetector: {e}") |
|
|
raise ImportError("No StutterDetector implementation available in detect_stuttering.py") from e |
|
|
except Exception as e: |
|
|
logger.error(f"β Failed to create detector instance: {e}") |
|
|
raise |
|
|
|
|
|
return _detector_instance |
|
|
|
|
|
def reset_detector(): |
|
|
""" |
|
|
Reset the singleton instance (useful for testing or reloading models). |
|
|
|
|
|
Note: This will force reloading of models on next get_stutter_detector() call. |
|
|
""" |
|
|
global _detector_instance |
|
|
_detector_instance = None |
|
|
logger.info("π Detector instance reset") |
|
|
|
|
|
|