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 over the fields declared filterable via FilterSchema (qdrant-edge on native, sqlite-vec vec0 columns on native and web). A condition on an undeclared field is a no-op: passing such a filter 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,
  );
}