queryAll method
Implementation
Future<VectorSpaceResult> queryAll(
List<String> queries, {
int maxResults = 100,
int compactQueriesTo = 10,
int maxTokens = 50000,
}) async {
if (queries.isEmpty) return const VectorSpaceResult(results: []);
if (compactQueriesTo < 1) {
throw ArgumentError.value(
compactQueriesTo,
'compactQueriesTo',
'compactQueriesTo must be at least 1.',
);
}
List<String> compactedQueries = queries.compactedTo(compactQueriesTo);
int resultsPerQuery = (maxTokens / compactedQueries.length).floor();
if (resultsPerQuery < 1) {
throw Exception(
"Not enough tokens to process queries: $maxTokens / ${compactedQueries.length} < 1. Either increase max results or reduce compactQueriesTo below maxResults!",
);
}
List<VectorSpaceResult> queryResults = await Future.wait(
compactedQueries.map(
(query) => this.query(query, maxResults: maxResults),
),
);
return queryResults
.fold(
const VectorSpaceResult(results: <VectorResult>[]),
(VectorSpaceResult previousValue, VectorSpaceResult element) =>
previousValue.mergeWith(element),
)
.baked(maxTokens: maxTokens, maxResults: maxResults);
}