searchSimilar method

  1. @override
Future<List<RetrievalResult>> searchSimilar({
  1. required String query,
  2. int topK = 5,
  3. double threshold = 0.0,
  4. Filter? filter,
})
override

Search for similar documents.

filter is an optional payload predicate. Honored on every native platform (qdrant-edge backend). Silently ignored on Web (the wa-sqlite store has no payload filtering); passing a non-empty filter on Web returns the same hits as filter: null and never throws.

Implementation

@override
Future<List<RetrievalResult>> searchSimilar({
  required String query,
  int topK = 5,
  double threshold = 0.0,
  Filter? filter,
}) async {
  if (_initializedEmbeddingModel == null) {
    throw StateError(
      'No embedding model is active. addDocument(content:) and '
      'searchSimilar(query:) auto-embed text, which requires an embedding '
      'model. Install and activate one with FlutterGemma.installEmbedder(...) '
      '(or modelManager.setActiveModel) before calling these methods — or '
      'pass a precomputed vector to addDocumentWithEmbedding(embedding:).',
    );
  }

  // Generate query embedding and search
  final queryEmbedding =
      await _initializedEmbeddingModel!.generateEmbedding(query);
  return await ServiceRegistry.instance.vectorStoreRepository.searchSimilar(
    queryEmbedding: queryEmbedding,
    topK: topK,
    threshold: threshold,
    filter: filter,
  );
}