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 {
  int index = 0;
  while (queries.length > compactQueriesTo) {
    String out = queries.removeLast();
    index %= queries.length;
    queries[index] += ", $out";
  }

  int resultsPerQuery = (maxTokens / queries.length).floor();
  if (resultsPerQuery < 1) {
    throw Exception(
      "Not enough tokens to process queries: $maxTokens / ${queries.length} < 1. Either increase max results or reduce compactQueriesTo below maxResults!",
    );
  }

  return (await Future.wait(
        queries.map((q) => query(q, maxResults: maxResults)),
      ))
      .fold(
        VectorSpaceResult(results: []),
        (previousValue, element) => previousValue.mergeWith(element),
      )
      .baked(maxTokens: maxTokens, maxResults: maxResults);
}