File size: 1,600 Bytes
5b7955a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
"""Factory function to instantiate the configured embedder."""

from rag_engine.utils.logger import get_logger
from .base_embedder import BaseEmbedder

logger = get_logger(__name__)


def get_embedder(provider: str | None = None) -> BaseEmbedder:
    """Return an embedder instance for the requested provider.

    Parameters
    ----------
    provider : str | None
        One of ``"local"``, ``"jina"``, ``"openai"``, ``"cohere"``.
        Falls back to ``settings.embedding_provider`` when *None*.
    """
    from rag_engine.config.settings import settings

    if provider is None:
        provider = settings.embedding_provider

    provider = provider.strip().lower()

    if provider == "local":
        from .local_embedder import LocalEmbedder

        model_name = settings.embedding_model
        logger.info("Instantiating LocalEmbedder (model=%s)", model_name)
        return LocalEmbedder(model_name=model_name)

    if provider == "jina":
        from .jina_embedder import JinaEmbedder

        logger.info("Instantiating JinaEmbedder")
        return JinaEmbedder()

    if provider == "openai":
        raise NotImplementedError(
            "OpenAI embeddings skipped — use EMBEDDING_PROVIDER=local"
        )

    if provider == "cohere":
        raise NotImplementedError(
            "Cohere embeddings skipped — use EMBEDDING_PROVIDER=local"
        )

    # default fallback
    logger.warning(
        "Unknown embedding provider '%s' — falling back to LocalEmbedder",
        provider,
    )
    from .local_embedder import LocalEmbedder

    return LocalEmbedder()