embedding.py 1.16 KB
"""Embedding provider - HTTP service."""

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 != "http":
        raise ValueError(f"Unsupported embedding provider: {provider}")
    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 (TextEmbeddingEncoder)."""
        from embeddings.text_encoder import TextEmbeddingEncoder
        return TextEmbeddingEncoder(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)