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 = {
    'completion_tokens': choice['completion_tokens'],
    'raw_body_text': decodedResponse['raw_body_text'],
    'tokens_prompt': decodedResponse['tokens_prompt'],
    'total_tokens': decodedResponse['total_tokens'],
    'openai_id': decodedResponse['openai_id'],
  };

  return extraData;
}