simpleQuery method

  1. @override
Future<String> simpleQuery({
  1. String? model,
  2. List<Message> history = const [],
  3. Duration? delay,
  4. required String prompt,
  5. String? system,
  6. String role = 'user',
  7. List<Context>? contexts,
})
override

Implementation

@override
Future<String> simpleQuery({
  String? model,
  List<Message> history = const [],
  Duration? delay,
  required String prompt,
  String? system,
  String role = 'user',
  List<Context>? contexts,
}) async {
  await Future.delayed(delay ?? this.delay ?? const Duration(milliseconds: 300));
  final contextMessage = buildPrompt(prompt: prompt, contexts: contexts);
  final data = {
    'model': model ?? _model,
    "stop": [],
    //"stream": true,
    //"stream_options": {"include_usage": true, "continuous_usage_stats": true},
    "top_p": 1,
    "max_tokens": 1000,
    "temperature": 1,
    "presence_penalty": 1,
    "frequency_penalty": 1,
    'messages': [
      if (system != null) {'role': 'system', 'content': system},
      ...history.map((message) => {'role': message.type, 'content': message.content}),
      {'role': 'user', 'content': prompt + contextMessage},
    ],
  };

  try {
    logRequest(data);

    final response = await _dio.post('/chat/completions', data: data);

    logResponse(response.data);

    final choices = response.data['choices'];
    if (choices != null && choices.isNotEmpty) {
      return choices[0]['message']['content'] as String;
    } else {
      throw Exception('No response from ChatGPT API.');
    }
  } on DioException catch (e) {
    logError(e);
    throw Exception('Failed to fetch response: ${e.response?.data ?? e.message}');
  }
}