sendMessageNonStreaming method

Future<Map<String, dynamic>> sendMessageNonStreaming(
  1. String text
)

Implementation

Future<Map<String, dynamic>> sendMessageNonStreaming(String text) async {
  final response = await http.Client()
      .post(url, headers: _getHeaders(), body: _getBody(text, false));

  dynamic decodedResponse;
  if (response.contentLength != null) {
    decodedResponse = jsonDecode(utf8.decode(response.bodyBytes)) as Map;
  }

  final statusCode = response.statusCode;
  if (!(statusCode >= 200 && statusCode < 300)) {
    if (decodedResponse != null) {
      final errorMessage = decodedResponse["error"]["message"] as String;
      throw Exception("($statusCode) $errorMessage");
    }
    throw Exception(
        "($statusCode) Bad response ${response.reasonPhrase ?? ""}");
  }

  final choices = decodedResponse["choices"] as List;
  final choice = choices[0] as Map;
  final content = choice["message"]["content"] as String;
  final extraData = {
    'id': decodedResponse['id'],
    'object': decodedResponse['object'],
    'created': decodedResponse['created'],
    'model': decodedResponse['model'],
    'usage': decodedResponse['usage'],
    'content': content,
  };

  return extraData;
}