queryAll method

Future<VectorSpaceResult> queryAll(
  1. List<String> queries, {
  2. int maxResults = 100,
  3. int compactQueriesTo = 10,
  4. int maxTokens = 50000,
})

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);
}