from app.shared.nlp.embeddings.mock import MockEmbeddingProvider from app.shared.nlp.embeddings.base import EmbeddingProvider from app.shared.nlp.embeddings.cached import CachedEmbeddingProvider from app.shared.cache.memory import SimpleTTLCache def test_mock_embedding_provider_is_deterministic() -> None: provider = MockEmbeddingProvider() first = provider.embed_text("lugares tranquilos para cenar") second = provider.embed_text("lugares tranquilos para cenar") assert first == second assert len(first) == provider.dimension class RecordingBatchProvider(EmbeddingProvider): def __init__(self) -> None: self.batches: list[list[str]] = [] def embed_text(self, text: str) -> list[float]: raise AssertionError("batch cache should use embed_batch for misses") def embed_batch(self, texts: list[str]) -> list[list[float]]: self.batches.append(list(texts)) return [[float(len(text))] for text in texts] def test_cached_provider_batches_unique_misses_and_preserves_order() -> None: inner = RecordingBatchProvider() provider = CachedEmbeddingProvider(inner, SimpleTTLCache()) first = provider.embed_batch(["donas", "cafe", "donas"]) second = provider.embed_batch(["cafe", "parque"]) assert first == [[5.0], [4.0], [5.0]] assert second == [[4.0], [6.0]] assert inner.batches == [["donas", "cafe"], ["parque"]]