embedInputs method

Future<List<List<double>>> embedInputs({
  1. required String model,
  2. required List<Content> contents,
  3. int? dimensions,
  4. String? inputType,
  5. List<String>? modality,
  6. NvidiaEmbeddingEncodingFormat? encodingFormat,
  7. NvidiaEmbeddingTruncate? truncate,
})

Implementation

Future<List<List<double>>> embedInputs({
  required String model,
  required List<Content> contents,
  int? dimensions,
  String? inputType,
  List<String>? modality,
  NvidiaEmbeddingEncodingFormat? encodingFormat,
  NvidiaEmbeddingTruncate? truncate,
}) async {
  List<NvidiaEmbeddingValue> embeddingValues =
      contents.map(_toEmbeddingValue).toList();
  String resolvedModality = _resolveModality(
    values: embeddingValues,
    modality: modality,
  );
  String resolvedInputType =
      inputType ?? _defaultInputType(resolvedModality);
  Uri uri = _buildUri('/embeddings');
  http.Response response = await http.post(
    uri,
    headers: <String, String>{
      'Authorization': 'Bearer $apiKey',
      'Content-Type': 'application/json',
      'Accept': 'application/json',
    },
    body: jsonEncode({
      'input': embeddingValues.map((NvidiaEmbeddingValue i) => i.input).toList(),
      'model': model,
      'input_type': resolvedInputType,
      'modality': [resolvedModality],
      'encoding_format':
          (encodingFormat ?? embeddingEncodingFormat).wireValue,
      'truncate': (truncate ?? embeddingTruncate).wireValue,
      if (dimensions != null) 'dimensions': dimensions,
    }),
  );

  if (response.statusCode == 202) {
    throw NvidiaApiException(
      statusCode: response.statusCode,
      message:
          'NVIDIA embeddings returned 202 pending status. Polling pending requests is not implemented.',
      responseBody: response.body,
    );
  }

  if (response.statusCode < 200 || response.statusCode >= 300) {
    throw NvidiaApiException(
      statusCode: response.statusCode,
      message: 'NVIDIA embeddings request failed.',
      responseBody: response.body,
    );
  }

  Object? decoded = jsonDecode(response.body);
  Map<String, dynamic> body = _requireMap(decoded);
  Object? dataValue = body['data'];

  if (dataValue is! List) {
    throw NvidiaApiException(
      statusCode: response.statusCode,
      message:
          'Expected NVIDIA embeddings response to contain a data array.',
      responseBody: response.body,
    );
  }

  return dataValue.map(_parseEmbedding).toList();
}