embedding.py 1.26 KB
"""
Embedding provider - HTTP service (vllm reserved).

Returns text/image encoders configured via services_config.
"""

from __future__ import annotations

from config.services_config import get_embedding_config, get_embedding_base_url


def create_embedding_provider() -> "EmbeddingProvider":
    """Create embedding provider from services config."""
    cfg = get_embedding_config()
    provider = (cfg.provider or "http").strip().lower()
    if provider == "vllm":
        import logging
        logging.getLogger(__name__).warning("embedding provider 'vllm' is reserved, using HTTP.")
    return EmbeddingProvider()


class EmbeddingProvider:
    """
    Provides text and image encoders. Both use HTTP embedding service
    configured via services_config.
    """

    def __init__(self) -> None:
        self._base_url = get_embedding_base_url()

    @property
    def text_encoder(self):
        """Lazy-created text encoder (BgeEncoder)."""
        from embeddings.text_encoder import BgeEncoder
        return BgeEncoder(service_url=self._base_url)

    @property
    def image_encoder(self):
        """Lazy-created image encoder (CLIPImageEncoder)."""
        from embeddings.image_encoder import CLIPImageEncoder
        return CLIPImageEncoder(service_url=self._base_url)