Coverage for node / src / stigmem_node / embedding / __init__.py: 100%
21 statements
« prev ^ index » next coverage.py v7.13.5, created at 2026-05-25 01:49 +0000
« prev ^ index » next coverage.py v7.13.5, created at 2026-05-25 01:49 +0000
1"""Embedding adapter factory — Phase 9 (spec §20 / design memo §2).
3Usage::
5 from stigmem_node.embedding import get_embedding_model
6 model = get_embedding_model(settings)
7 vectors = model.embed(["alice memory:role CEO"])
8"""
10from __future__ import annotations
12from typing import TYPE_CHECKING
14from .base import EmbeddingError, EmbeddingModel, Vector, compose_triple_text, l2_normalize
16if TYPE_CHECKING:
17 pass
19__all__ = [
20 "EmbeddingModel",
21 "EmbeddingError",
22 "Vector",
23 "compose_triple_text",
24 "l2_normalize",
25 "get_embedding_model",
26]
29def get_embedding_model(settings: object | None = None) -> EmbeddingModel:
30 """Return the configured EmbeddingModel instance.
32 Reads provider + model_id + dimension from *settings* (or the live
33 ``stigmem_node.settings.settings`` singleton when *settings* is None).
34 """
35 if settings is None:
36 from stigmem_node.settings import settings as _s
38 settings = _s
40 provider: str = getattr(settings, "embed_model_provider", "local")
41 model_id: str = getattr(settings, "embed_model_id", "nomic-embed-text-v1.5")
42 dimension: int = int(getattr(settings, "embed_dimension", 768))
44 if provider == "stub":
45 from .stub_adapter import StubEmbeddingModel
47 return StubEmbeddingModel(dim=dimension, model_id=model_id)
49 if provider == "openai":
50 api_key_env: str = getattr(settings, "embed_openai_api_key_env", "OPENAI_API_KEY")
51 from .openai_adapter import OpenAIEmbeddingModel
53 return OpenAIEmbeddingModel(
54 model_id=model_id,
55 api_key_env=api_key_env,
56 dimension=dimension,
57 )
59 # default: "local" → Ollama
60 ollama_url: str = getattr(settings, "embed_ollama_url", "http://localhost:11434")
61 from .local_adapter import OllamaEmbeddingModel
63 return OllamaEmbeddingModel(
64 model_id=model_id,
65 ollama_url=ollama_url,
66 dimension=dimension,
67 )