Spaces:
Sleeping
Sleeping
File size: 3,168 Bytes
49f0cfb dc1b199 49f0cfb dc1b199 49f0cfb dc1b199 49f0cfb dc1b199 49f0cfb dc1b199 49f0cfb dc1b199 49f0cfb dc1b199 faa8fb3 49f0cfb dc1b199 49f0cfb dc1b199 49f0cfb dc1b199 faa8fb3 49f0cfb dc1b199 49f0cfb dc1b199 49f0cfb 7d37f11 49f0cfb 7d37f11 49f0cfb 7d37f11 49f0cfb 7d37f11 49f0cfb | 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 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | """Unit tests for the LangChain embedding factory.
LangChain experiment branch: the factory now returns a
``langchain_core.embeddings.Embeddings`` object instead of the custom
``EmbeddingClient`` interface.
"""
import pytest
from langchain_core.embeddings import Embeddings
def test_factory_returns_embeddings_object(monkeypatch: pytest.MonkeyPatch) -> None:
"""get_embedding_client() must return a LangChain Embeddings object."""
import app.embeddings.factory as _factory
monkeypatch.setattr(_factory, "_instance", None)
client = _factory.get_embedding_client()
assert isinstance(client, Embeddings)
def test_factory_singleton(monkeypatch: pytest.MonkeyPatch) -> None:
"""get_embedding_client() must return the same instance on repeated calls."""
import app.embeddings.factory as _factory
monkeypatch.setattr(_factory, "_instance", None)
c1 = _factory.get_embedding_client()
c2 = _factory.get_embedding_client()
assert c1 is c2, "Factory returned a different instance on second call"
def test_factory_openai_when_key_set(monkeypatch: pytest.MonkeyPatch) -> None:
"""Factory should use OpenAIEmbeddings when openai_api_key is non-empty."""
from langchain_openai import OpenAIEmbeddings
import app.embeddings.factory as _factory
monkeypatch.setattr(_factory, "_instance", None)
fake_settings = type("S", (), {"openai_api_key": "sk-test", "embedding_model": "text-embedding-3-small"})()
monkeypatch.setattr(_factory, "settings", fake_settings)
client = _factory.get_embedding_client()
assert isinstance(client, OpenAIEmbeddings)
def test_factory_huggingface_without_key(monkeypatch: pytest.MonkeyPatch) -> None:
"""Factory should fall back to HuggingFaceEmbeddings when no OpenAI key is set."""
from langchain_huggingface import HuggingFaceEmbeddings
import app.embeddings.factory as _factory
monkeypatch.setattr(_factory, "_instance", None)
fake_settings = type("S", (), {"openai_api_key": "", "local_embedding_model": "all-MiniLM-L6-v2"})()
monkeypatch.setattr(_factory, "settings", fake_settings)
client = _factory.get_embedding_client()
assert isinstance(client, HuggingFaceEmbeddings)
def test_embeddings_embed_query_returns_vector(monkeypatch: pytest.MonkeyPatch) -> None:
"""embed_query() should return a non-empty list of floats."""
import app.embeddings.factory as _factory
monkeypatch.setattr(_factory, "_instance", None)
client = _factory.get_embedding_client()
vec = client.embed_query("The property is a Victorian terrace.")
assert isinstance(vec, list)
assert len(vec) > 0
assert all(isinstance(v, float) for v in vec)
def test_embeddings_embed_documents_batch(monkeypatch: pytest.MonkeyPatch) -> None:
"""embed_documents() should return one vector per input text."""
import app.embeddings.factory as _factory
monkeypatch.setattr(_factory, "_instance", None)
client = _factory.get_embedding_client()
texts = ["first sentence", "second sentence", "third sentence"]
vecs = client.embed_documents(texts)
assert len(vecs) == 3
assert all(len(v) > 0 for v in vecs)
|