retrieve method
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,
},
],
);
}