""" Unified service configuration accessors. This module is now a thin adapter over ``config.loader.get_app_config`` and contains no independent parsing or precedence logic. """ from __future__ import annotations import os from typing import Any, Dict, Tuple from config.loader import get_app_config from config.schema import EmbeddingServiceConfig, RerankServiceConfig, TranslationServiceConfig def get_translation_config() -> Dict[str, Any]: return get_app_config().services.translation.as_dict() def get_embedding_config() -> EmbeddingServiceConfig: return get_app_config().services.embedding def get_rerank_config() -> RerankServiceConfig: return get_app_config().services.rerank def get_translation_base_url() -> str: return get_app_config().services.translation.endpoint def get_translation_cache_config() -> Dict[str, Any]: return dict(get_app_config().services.translation.cache) def get_embedding_text_base_url() -> str: provider_cfg = get_app_config().services.embedding.get_provider_config() base = provider_cfg.get("text_base_url") if not base: raise ValueError("Embedding text base_url is not configured") return str(base).rstrip("/") def get_embedding_image_base_url() -> str: provider_cfg = get_app_config().services.embedding.get_provider_config() base = provider_cfg.get("image_base_url") if not base: raise ValueError("Embedding image base_url is not configured") return str(base).rstrip("/") def get_embedding_backend_config() -> Tuple[str, Dict[str, Any]]: cfg = get_app_config().services.embedding return cfg.backend, cfg.get_backend_config() def get_embedding_image_backend_config() -> Tuple[str, Dict[str, Any]]: cfg = get_app_config().services.embedding return cfg.image_backend, cfg.get_image_backend_config() def get_rerank_backend_config() -> Tuple[str, Dict[str, Any]]: cfg = get_app_config().services.rerank backend = str(os.getenv("RERANK_BACKEND") or cfg.backend).strip() if backend != cfg.backend: backend_cfg = cfg.backends.get(backend) if backend_cfg is None: raise ValueError(f"Unknown rerank backend override from RERANK_BACKEND: {backend!r}") return backend, dict(backend_cfg) return cfg.backend, cfg.get_backend_config() def get_rerank_base_url() -> str: provider_cfg = get_app_config().services.rerank.get_provider_config() base = provider_cfg.get("service_url") or provider_cfg.get("base_url") if not base: raise ValueError("Rerank service URL is not configured") return str(base).rstrip("/") def get_rerank_service_url() -> str: return get_rerank_base_url()