complete method
Sends a completion request to generate text
request - The completion request parameters
Returns the generated completion text or throws an LLMError
Implementation
@override
Future<CompletionResponse> complete(CompletionRequest request) async {
  if (config.baseUrl.isEmpty) {
    throw const InvalidRequestError('Missing Ollama base URL');
  }
  try {
    final requestBody = _buildRequestBody(request);
    final responseData =
        await client.postJson(completionEndpoint, requestBody);
    return _parseResponse(responseData);
  } on DioException catch (e) {
    throw DioErrorHandler.handleDioError(e, 'Ollama');
  } catch (e) {
    throw GenericError('Unexpected error: $e');
  }
}