retrieve method

Future<DVSemanticRetrieval<T>> retrieve(
  1. String question, {
  2. int limit = 8,
  3. DVSearchMode mode = DVSearchMode.semantic,
  4. Map<String, String> where = const <String, String>{},
})

The rows an AI feature needs, filtered by the caller's own policies and without sensitive fields.

Implementation

Future<DVSemanticRetrieval<T>> retrieve(
  String question, {
  int limit = 8,
  DVSearchMode mode = DVSearchMode.semantic,
  Map<String, String> where = const <String, String>{},
}) async {
  final Map<String, Object?> Function(T)? asData = toJson;
  if (asData == null) {
    throw StateError('retrieve needs toJson on the index "$name"');
  }
  final DVSemanticPage<T> page =
      await query(question, mode: mode, limit: limit, where: where);
  return DVSemanticRetrieval<T>(
    hits: page.hits,
    bounded: page.bounded,
    rows: <Map<String, Object?>>[
      for (final DVSemanticHit<T> hit in page.hits)
        <String, Object?>{
          for (final MapEntry<String, Object?> entry
              in asData(hit.record).entries)
            if (!sensitiveFields.contains(entry.key)) entry.key: entry.value,
        },
    ],
  );
}