getNewChatCompletion static method

Future<(GroqResponse, GroqUsage, GroqRateLimitInformation)> getNewChatCompletion({
  1. required String apiKey,
  2. required GroqMessage prompt,
  3. required GroqChat chat,
})

Returns a new chat instance with the given model id

Implementation

static Future<(GroqResponse, GroqUsage, GroqRateLimitInformation)>
    getNewChatCompletion({
  required String apiKey,
  required GroqMessage prompt,
  required GroqChat chat,
}) async {
  final Map<String, dynamic> jsonMap = {};
  List<Map<String, dynamic>> messages = [];
  List<GroqConversationItem> allMessages = chat.allMessages;
  if (chat.allMessages.length > chat.settings.maxConversationalMemoryLength) {
    allMessages.removeRange(
        0, allMessages.length - chat.settings.maxConversationalMemoryLength);
  }
  for (final message in allMessages) {
    messages.add(message.request.toJson());
    messages.add(message.response!.choices.first.messageData.toJson());
  }
  messages.add(prompt.toJson());
  jsonMap['messages'] = messages;
  jsonMap['model'] = chat.model;
  jsonMap.addAll(chat.settings.toJson());
  final response = await AuthHttp.post(
      url: _chatCompletionUrl, apiKey: apiKey, body: jsonMap);
  //Rate Limit information
  final rateLimitInfo =
      GroqParser.rateLimitInformationFromHeaders(response.headers);
  if (response.statusCode < 300) {
    final Map<String, dynamic> jsonData =
        json.decode(utf8.decode(response.bodyBytes, allowMalformed: true));
    final GroqResponse groqResponse =
        GroqParser.groqResponseFromJson(jsonData);
    final GroqUsage groqUsage =
        GroqParser.groqUsageFromChatJson(jsonData["usage"]);
    return (groqResponse, groqUsage, rateLimitInfo);
  } else if (response.statusCode == 429) {
    throw GroqRateLimitException(
      retryAfter: Duration(
        seconds: int.tryParse(response.headers['retry-after'] ?? '0') ?? 0,
      ),
    );
  } else {
    throw GroqException.fromResponse(response);
  }
}