from __future__ import annotations from typing import Any, Dict, Optional, Tuple from fastapi import Request from app.services.converter_service import ConverterService from app.services.embeddings_service import EmbeddingService from app.services.extraction_service import ExtractionService from app.services.text_cleaner_service import TextCleanerService from app.services.scheduler_service import SchedulerService from app.services.vector_store_service import VectorStoreService _converter_service = ConverterService() _extraction_service = ExtractionService() _text_cleaner_service = TextCleanerService() def get_text_cleaner_service() -> TextCleanerService: return _text_cleaner_service def get_converter_service() -> ConverterService: return _converter_service def get_extraction_service() -> ExtractionService: return _extraction_service def get_embeddings_service() -> EmbeddingService: from app.api.server import _embedding_service return _embedding_service def get_vector_store_service() -> VectorStoreService: from app.api.server import _vector_store_service return _vector_store_service def get_scheduler_service() -> SchedulerService: from app.api.server import _scheduler_service return _scheduler_service def get_redis_scripts(request: Request) -> Tuple[Optional[Any], Dict[str, str]]: """Extract Redis client and Lua scripts from app state. Consolidates the repeated pattern: redis = getattr(request.app.state, "redis", None) scripts = getattr(request.app.state, "scripts", None) """ return ( getattr(request.app.state, "redis", None), getattr(request.app.state, "scripts", {}), )