124 lines
3.2 KiB
Python
124 lines
3.2 KiB
Python
"""Dependency injection and service lifecycle management."""
|
|
|
|
from functools import lru_cache
|
|
|
|
from capa_de_integracion.services.rag import (
|
|
EchoRAGService,
|
|
HTTPRAGService,
|
|
RAGServiceBase,
|
|
)
|
|
|
|
from .config import Settings, settings
|
|
from .services import (
|
|
ConversationManagerService,
|
|
DLPService,
|
|
NotificationManagerService,
|
|
QuickReplyContentService,
|
|
QuickReplySessionService,
|
|
)
|
|
from .services.storage import FirestoreService, RedisService
|
|
|
|
|
|
@lru_cache(maxsize=1)
|
|
def get_redis_service() -> RedisService:
|
|
"""Get Redis service instance."""
|
|
return RedisService(settings)
|
|
|
|
|
|
@lru_cache(maxsize=1)
|
|
def get_firestore_service() -> FirestoreService:
|
|
"""Get Firestore service instance."""
|
|
return FirestoreService(settings)
|
|
|
|
|
|
@lru_cache(maxsize=1)
|
|
def get_dlp_service() -> DLPService:
|
|
"""Get DLP service instance."""
|
|
return DLPService(settings)
|
|
|
|
|
|
@lru_cache(maxsize=1)
|
|
def get_quick_reply_content_service() -> QuickReplyContentService:
|
|
"""Get quick reply content service instance."""
|
|
return QuickReplyContentService(settings)
|
|
|
|
|
|
@lru_cache(maxsize=1)
|
|
def get_quick_reply_session_service() -> QuickReplySessionService:
|
|
"""Get quick reply session service instance."""
|
|
return QuickReplySessionService(
|
|
redis_service=get_redis_service(),
|
|
firestore_service=get_firestore_service(),
|
|
quick_reply_content_service=get_quick_reply_content_service(),
|
|
)
|
|
|
|
|
|
@lru_cache(maxsize=1)
|
|
def get_notification_manager() -> NotificationManagerService:
|
|
"""Get notification manager instance."""
|
|
return NotificationManagerService(
|
|
settings,
|
|
redis_service=get_redis_service(),
|
|
firestore_service=get_firestore_service(),
|
|
dlp_service=get_dlp_service(),
|
|
)
|
|
|
|
|
|
@lru_cache(maxsize=1)
|
|
def get_rag_service() -> RAGServiceBase:
|
|
"""Get RAG service instance."""
|
|
if settings.rag_echo_enabled:
|
|
return EchoRAGService()
|
|
return HTTPRAGService(
|
|
endpoint_url=settings.rag_endpoint_url,
|
|
max_connections=100,
|
|
max_keepalive_connections=20,
|
|
timeout=30.0,
|
|
)
|
|
|
|
|
|
@lru_cache(maxsize=1)
|
|
def get_conversation_manager() -> ConversationManagerService:
|
|
"""Get conversation manager instance."""
|
|
return ConversationManagerService(
|
|
settings,
|
|
redis_service=get_redis_service(),
|
|
firestore_service=get_firestore_service(),
|
|
dlp_service=get_dlp_service(),
|
|
rag_service=get_rag_service(),
|
|
)
|
|
|
|
|
|
# Lifecycle management functions
|
|
|
|
|
|
def init_services(settings: Settings) -> None:
|
|
"""Initialize services (placeholder for compatibility)."""
|
|
# Services are lazy-loaded via lru_cache, no explicit init needed
|
|
|
|
|
|
async def startup_services() -> None:
|
|
"""Connect to external services on startup."""
|
|
# Connect to Redis
|
|
redis = get_redis_service()
|
|
await redis.connect()
|
|
|
|
|
|
async def shutdown_services() -> None:
|
|
"""Close all service connections on shutdown."""
|
|
# Close Redis
|
|
redis = get_redis_service()
|
|
await redis.close()
|
|
|
|
# Close Firestore
|
|
firestore = get_firestore_service()
|
|
await firestore.close()
|
|
|
|
# Close DLP
|
|
dlp = get_dlp_service()
|
|
await dlp.close()
|
|
|
|
# Close RAG
|
|
rag = get_rag_service()
|
|
await rag.close()
|