"""Testes da identidade real do embedder. O bug que estes testes impedem: o modelo configurado falha ao carregar, o código cai num embedder determinístico sem semântica, e `/api/status` continua reportando o nome do modelo configurado. O operador vê "MiniLM" enquanto a busca é bag-of-hashes — exatamente a falha que passou despercebida com torch 2.5.1 + transformers 5.x. """ from __future__ import annotations import sys from pathlib import Path sys.path.insert(0, str(Path(__file__).resolve().parents[1])) from app.embedding import HashEmbedder, SentenceTransformerEmbedder # noqa: E402 def test_hash_embedder_reports_itself_as_hash(): """O nome precisa deixar óbvio que não há semântica nenhuma.""" embedder = HashEmbedder(dimensions=32) assert "hash" in embedder.name.lower() def test_hash_embedder_name_is_not_a_model_name(): embedder = HashEmbedder(dimensions=32) assert "minilm" not in embedder.name.lower() assert "e5" not in embedder.name.lower() def test_sentence_transformer_embedder_reports_the_model_name(): class FakeModel: def get_sentence_embedding_dimension(self) -> int: return 8 embedder = SentenceTransformerEmbedder( "modelo-exemplo", module=_FakeModule(FakeModel()) ) assert embedder.name == "modelo-exemplo" class _FakeModule: """Dublê do módulo sentence_transformers, para não baixar modelo em teste.""" def __init__(self, model): self._model = model def SentenceTransformer(self, *args, **kwargs): # noqa: N802 - imita a API return self._model