feat(embeddings): add native embed_batch to 5 embedders (LMStudio, Together, HuggingFace, VertexAI, GoogleGenAI) (#5609)
This commit is contained in:
@@ -58,3 +58,62 @@ def test_config_initialization(config):
|
||||
assert embedder.config.api_key == "dummy_api_key"
|
||||
assert embedder.config.model == "test_model"
|
||||
assert embedder.config.embedding_dims == 786
|
||||
|
||||
|
||||
def test_embed_batch_single_call(mock_genai, config):
|
||||
emb0 = type("Embedding", (), {"values": [0.1, 0.2, 0.3]})()
|
||||
emb1 = type("Embedding", (), {"values": [0.4, 0.5, 0.6]})()
|
||||
mock_genai.return_value = type("Response", (), {"embeddings": [emb0, emb1]})()
|
||||
|
||||
embedder = GoogleGenAIEmbedding(config)
|
||||
|
||||
texts = ["First text.", "Second text."]
|
||||
result = embedder.embed_batch(texts)
|
||||
|
||||
mock_genai.assert_called_once_with(model="test_model", contents=texts, config=ANY)
|
||||
assert result == [[0.1, 0.2, 0.3], [0.4, 0.5, 0.6]]
|
||||
|
||||
|
||||
def test_embed_batch_empty_list(mock_genai, config):
|
||||
embedder = GoogleGenAIEmbedding(config)
|
||||
|
||||
result = embedder.embed_batch([])
|
||||
|
||||
assert result == []
|
||||
mock_genai.assert_not_called()
|
||||
|
||||
|
||||
def test_embed_batch_count_mismatch_raises(mock_genai, config):
|
||||
emb0 = type("Embedding", (), {"values": [0.1, 0.2, 0.3]})()
|
||||
mock_genai.return_value = type("Response", (), {"embeddings": [emb0]})()
|
||||
|
||||
embedder = GoogleGenAIEmbedding(config)
|
||||
|
||||
with pytest.raises(ValueError, match="returned 1 embeddings for 2 texts"):
|
||||
embedder.embed_batch(["first text", "second text"])
|
||||
|
||||
|
||||
def test_embed_batch_chunks_over_100_texts(mock_genai, config):
|
||||
def make_chunk_response(**kwargs):
|
||||
chunk = kwargs["contents"]
|
||||
emb = type("Embedding", (), {"values": [0.1, 0.2]})
|
||||
return type("Response", (), {"embeddings": [emb() for _ in chunk]})()
|
||||
|
||||
mock_genai.side_effect = make_chunk_response
|
||||
|
||||
embedder = GoogleGenAIEmbedding(config)
|
||||
texts = [f"text {i}" for i in range(150)]
|
||||
result = embedder.embed_batch(texts)
|
||||
|
||||
assert mock_genai.call_count == 2
|
||||
assert len(result) == 150
|
||||
|
||||
|
||||
def test_embed_batch_strips_newlines(mock_genai, config):
|
||||
emb0 = type("Embedding", (), {"values": [0.1, 0.2, 0.3]})()
|
||||
mock_genai.return_value = type("Response", (), {"embeddings": [emb0]})()
|
||||
|
||||
embedder = GoogleGenAIEmbedding(config)
|
||||
embedder.embed_batch(["line one\nline two"])
|
||||
|
||||
mock_genai.assert_called_once_with(model="test_model", contents=["line one line two"], config=ANY)
|
||||
|
||||
Reference in New Issue
Block a user