|
11 | 11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12 | 12 | # See the License for the specific language governing permissions and
|
13 | 13 | # limitations under the License.
|
14 |
| - |
| 14 | +import functools |
15 | 15 | import importlib.util
|
16 | 16 | import logging
|
17 | 17 | import operator as op
|
|
95 | 95 | except ImportError:
|
96 | 96 | _openvino_available = False
|
97 | 97 |
|
98 |
| -_openvino_tokenizers_available = importlib.util.find_spec("openvino_tokenizers") is not None and _openvino_available |
99 |
| -_openvino_tokenizers_version = "N/A" |
100 |
| -if _openvino_tokenizers_available: |
101 |
| - try: |
102 |
| - _openvino_tokenizers_version = importlib_metadata.version("openvino_tokenizers") |
103 |
| - except importlib_metadata.PackageNotFoundError: |
104 |
| - _openvino_tokenizers_available = False |
105 |
| - |
106 |
| -if _openvino_tokenizers_available and _openvino_tokenizers_version != "N/A": |
107 |
| - _compatible_openvino_version = next( |
108 |
| - ( |
109 |
| - requirement.split("==")[-1] |
110 |
| - for requirement in importlib_metadata.requires("openvino-tokenizers") |
111 |
| - if requirement.startswith("openvino==") |
112 |
| - ), |
113 |
| - "", |
114 |
| - ) |
115 |
| - _openvino_tokenizers_available = _compatible_openvino_version == ov_major_version |
116 |
| - if not _openvino_tokenizers_available: |
117 |
| - logger.warning( |
118 |
| - "OpenVINO Tokenizer version is not compatible with OpenVINO version. " |
119 |
| - f"Installed OpenVINO version: {ov_major_version}," |
120 |
| - f"OpenVINO Tokenizers requires {_compatible_openvino_version}. " |
121 |
| - f"OpenVINO Tokenizers models will not be added during export." |
122 |
| - ) |
123 |
| - |
124 | 98 | _nncf_available = importlib.util.find_spec("nncf") is not None
|
125 | 99 | _nncf_version = "N/A"
|
126 | 100 | if _nncf_available:
|
@@ -196,8 +170,81 @@ def is_openvino_available():
|
196 | 170 | return _openvino_available
|
197 | 171 |
|
198 | 172 |
|
| 173 | +@functools.lru_cache(1) |
199 | 174 | def is_openvino_tokenizers_available():
|
200 |
| - return _openvino_tokenizers_available |
| 175 | + if not is_openvino_available(): |
| 176 | + return False |
| 177 | + |
| 178 | + if importlib.util.find_spec("openvino_tokenizers") is None: |
| 179 | + logger.info( |
| 180 | + "OpenVINO Tokenizers is not available. To deploy models in production " |
| 181 | + "with C++ code, please follow installation instructions: " |
| 182 | + "https://github.com/openvinotoolkit/openvino_tokenizers?tab=readme-ov-file#installation\n" |
| 183 | + ) |
| 184 | + return False |
| 185 | + |
| 186 | + try: |
| 187 | + pip_metadata_version = importlib_metadata.version("openvino") |
| 188 | + except importlib_metadata.PackageNotFoundError: |
| 189 | + pip_metadata_version = False |
| 190 | + try: |
| 191 | + pip_metadata_version = importlib_metadata.version("openvino-nightly") |
| 192 | + is_nightly = True |
| 193 | + except importlib_metadata.PackageNotFoundError: |
| 194 | + is_nightly = False |
| 195 | + |
| 196 | + try: |
| 197 | + import openvino_tokenizers |
| 198 | + |
| 199 | + openvino_tokenizers._get_factory() |
| 200 | + except RuntimeError: |
| 201 | + tokenizers_version = openvino_tokenizers.__version__ |
| 202 | + |
| 203 | + if tokenizers_version == "0.0.0.0": |
| 204 | + try: |
| 205 | + tokenizers_version = importlib_metadata.version("openvino_tokenizers") or tokenizers_version |
| 206 | + except importlib_metadata.PackageNotFoundError: |
| 207 | + pass |
| 208 | + message = ( |
| 209 | + "OpenVINO and OpenVINO Tokenizers versions are not binary compatible.\n" |
| 210 | + f"OpenVINO version: {_openvino_version}\n" |
| 211 | + f"OpenVINO Tokenizers version: {tokenizers_version}\n" |
| 212 | + "First 3 numbers should be the same. Update OpenVINO Tokenizers to compatible version. " |
| 213 | + ) |
| 214 | + if not pip_metadata_version: |
| 215 | + message += ( |
| 216 | + "For archive installation of OpenVINO try to build OpenVINO Tokenizers from source: " |
| 217 | + "https://github.com/openvinotoolkit/openvino_tokenizers/tree/master?tab=readme-ov-file" |
| 218 | + "#build-and-install-from-source" |
| 219 | + ) |
| 220 | + if sys.platform == "linux": |
| 221 | + message += ( |
| 222 | + "\nThe PyPI version of OpenVINO Tokenizers is built on CentOS and may not be compatible with other " |
| 223 | + "Linux distributions; rebuild OpenVINO Tokenizers from source." |
| 224 | + ) |
| 225 | + else: |
| 226 | + message += ( |
| 227 | + "It is recommended to use the same day builds for pre-release version. " |
| 228 | + "To install both OpenVINO and OpenVINO Tokenizers release version perform:\n" |
| 229 | + ) |
| 230 | + if is_nightly: |
| 231 | + message += "pip uninstall -y openvino-nightly && " |
| 232 | + message += "pip install --force-reinstall openvino openvino-tokenizers\n" |
| 233 | + if is_nightly: |
| 234 | + message += ( |
| 235 | + "openvino-nightly package will be deprecated in the future - use pre-release drops instead. " |
| 236 | + ) |
| 237 | + message += "To update both OpenVINO and OpenVINO Tokenizers to the latest pre-release version perform:\n" |
| 238 | + if is_nightly: |
| 239 | + message += "pip uninstall -y openvino-nightly && " |
| 240 | + message += ( |
| 241 | + "pip install --pre -U openvino openvino-tokenizers " |
| 242 | + "--extra-index-url https://storage.openvinotoolkit.org/simple/wheels/nightly" |
| 243 | + ) |
| 244 | + logger.warning(message) |
| 245 | + return False |
| 246 | + |
| 247 | + return True |
201 | 248 |
|
202 | 249 |
|
203 | 250 | def is_nncf_available():
|
|
0 commit comments