feat: add embedder with local/API dual mode
This commit is contained in:
@@ -0,0 +1,51 @@
|
||||
"""嵌入模型测试."""
|
||||
import pytest
|
||||
|
||||
from src.core.config import EmbedConfig
|
||||
from src.core.embedder import Embedder, create_embedder
|
||||
|
||||
|
||||
class TestEmbedder:
|
||||
"""Embedder 单元测试.
|
||||
|
||||
注意:本地模型测试需要下载 sentence-transformers 模型(约 100MB),
|
||||
首次运行耗时较长。API 模式测试使用 mock 避免网络依赖。
|
||||
"""
|
||||
|
||||
@pytest.fixture
|
||||
def local_config(self):
|
||||
return EmbedConfig(mode="local")
|
||||
|
||||
def test_create_local_embedder(self, local_config):
|
||||
"""创建本地嵌入器,验证维度正确."""
|
||||
embedder = create_embedder(local_config)
|
||||
assert embedder.dimension > 0
|
||||
assert isinstance(embedder.dimension, int)
|
||||
|
||||
def test_embed_single_text(self, local_config):
|
||||
"""嵌入单条文本返回正确维度向量."""
|
||||
embedder = create_embedder(local_config)
|
||||
result = embedder.embed(["你好世界"])
|
||||
assert len(result) == 1
|
||||
assert len(result[0]) == embedder.dimension
|
||||
assert all(isinstance(v, float) for v in result[0])
|
||||
|
||||
def test_embed_multiple_texts(self, local_config):
|
||||
"""嵌入多条文本返回对应数量的向量."""
|
||||
embedder = create_embedder(local_config)
|
||||
texts = ["第一段文本", "第二段文本", "第三段文本"]
|
||||
result = embedder.embed(texts)
|
||||
assert len(result) == 3
|
||||
for vec in result:
|
||||
assert len(vec) == embedder.dimension
|
||||
|
||||
def test_embed_empty_list_raises(self, local_config):
|
||||
"""空列表应抛出异常."""
|
||||
embedder = create_embedder(local_config)
|
||||
with pytest.raises(ValueError):
|
||||
embedder.embed([])
|
||||
|
||||
def test_create_embedder_from_factory_function(self, local_config):
|
||||
"""工厂函数正确创建 Embedder 实例."""
|
||||
embedder = create_embedder(local_config)
|
||||
assert isinstance(embedder, Embedder)
|
||||
Reference in New Issue
Block a user