|
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
|
|
85 | 85 | except ImportError:
|
86 | 86 | _openvino_available = False
|
87 | 87 |
|
88 |
| -_openvino_tokenizers_available = importlib.util.find_spec("openvino_tokenizers") is not None and _openvino_available |
89 |
| -_openvino_tokenizers_version = "N/A" |
90 |
| -if _openvino_tokenizers_available: |
91 |
| - try: |
92 |
| - _openvino_tokenizers_version = importlib_metadata.version("openvino_tokenizers") |
93 |
| - except importlib_metadata.PackageNotFoundError: |
94 |
| - _openvino_tokenizers_available = False |
95 |
| - |
96 |
| -if _openvino_tokenizers_available and _openvino_tokenizers_version != "N/A": |
97 |
| - _is_ovt_dev_version = "dev" in _openvino_tokenizers_version |
98 |
| - _ov_version = importlib_metadata.version("openvino") |
99 |
| - _is_ov_dev_version = "dev" in _ov_version |
100 |
| - if _is_ovt_dev_version: |
101 |
| - _compatible_openvino_major_version, _, _dev_date = _openvino_tokenizers_version.rsplit(".", 2) |
102 |
| - _compatible_ov_version = _compatible_openvino_major_version + "." + _dev_date |
103 |
| - _compatible_ovt_version = _ov_version.replace("dev", "0.dev") |
104 |
| - else: |
105 |
| - _compatible_ov_version = _openvino_tokenizers_version.rsplit(".", 1)[0] |
106 |
| - _compatible_ovt_version = _ov_version + ".0" |
107 |
| - |
108 |
| - _openvino_tokenizers_available = _ov_version == _compatible_ov_version |
109 |
| - |
110 |
| - if not _openvino_tokenizers_available: |
111 |
| - _update_ov_command = ( |
112 |
| - f"pip install {'--pre' if _is_ovt_dev_version else ''} -U openvino=={_compatible_ov_version} " |
113 |
| - + ( |
114 |
| - "--extra-index-url https://storage.openvinotoolkit.org/simple/wheels/nightly" |
115 |
| - if _is_ovt_dev_version |
116 |
| - else "" |
117 |
| - ) |
118 |
| - ).strip() |
119 |
| - _update_ovt_command = ( |
120 |
| - f"pip install {'--pre' if _is_ov_dev_version else ''} -U openvino-tokenizers=={_compatible_ovt_version} " |
121 |
| - + ( |
122 |
| - "--extra-index-url https://storage.openvinotoolkit.org/simple/wheels/nightly" |
123 |
| - if _is_ov_dev_version |
124 |
| - else "" |
125 |
| - ) |
126 |
| - ).strip() |
127 |
| - logger.warning( |
128 |
| - "OpenVINO Tokenizer version is not compatible with OpenVINO version. " |
129 |
| - f"Installed OpenVINO version: {_ov_version}, " |
130 |
| - f"OpenVINO Tokenizers requires {_compatible_ov_version}. " |
131 |
| - "OpenVINO Tokenizers models will not be added during export. " |
132 |
| - f"Update OpenVINO with \n{_update_ov_command}\n" |
133 |
| - f"Or update OpenVINO Tokenizers with \n{_update_ovt_command}" |
134 |
| - ) |
135 |
| - |
136 | 88 | _nncf_available = importlib.util.find_spec("nncf") is not None
|
137 | 89 | _nncf_version = "N/A"
|
138 | 90 | if _nncf_available:
|
@@ -204,7 +156,85 @@ def is_openvino_available():
|
204 | 156 | return _openvino_available
|
205 | 157 |
|
206 | 158 |
|
| 159 | +def _create_pip_update_command(package_name: str, compatible_version: str, is_dev_version: bool = False) -> str: |
| 160 | + return " ".join( |
| 161 | + filter( |
| 162 | + None, |
| 163 | + ( |
| 164 | + "pip install", |
| 165 | + "--pre" if is_dev_version else "", |
| 166 | + "-U", |
| 167 | + f"{package_name}=={compatible_version}", |
| 168 | + "--extra-index-url https://storage.openvinotoolkit.org/simple/wheels/nightly" |
| 169 | + if is_dev_version |
| 170 | + else "", |
| 171 | + ), |
| 172 | + ) |
| 173 | + ) |
| 174 | + |
| 175 | + |
| 176 | +@functools.lru_cache(1) |
207 | 177 | def is_openvino_tokenizers_available():
|
| 178 | + _openvino_tokenizers_available = ( |
| 179 | + importlib.util.find_spec("openvino_tokenizers") is not None and _openvino_available |
| 180 | + ) |
| 181 | + _openvino_tokenizers_version = "N/A" |
| 182 | + if _openvino_tokenizers_available: |
| 183 | + try: |
| 184 | + _openvino_tokenizers_version = importlib_metadata.version("openvino_tokenizers") |
| 185 | + except importlib_metadata.PackageNotFoundError: |
| 186 | + return False |
| 187 | + |
| 188 | + if _openvino_available and _openvino_tokenizers_available and _openvino_tokenizers_version != "N/A": |
| 189 | + _is_ovt_dev_version = "dev" in _openvino_tokenizers_version |
| 190 | + try: |
| 191 | + _ov_version = importlib_metadata.version("openvino") |
| 192 | + except importlib_metadata.PackageNotFoundError: |
| 193 | + try: |
| 194 | + _ov_version = importlib_metadata.version("openvino-nightly") |
| 195 | + except importlib_metadata.PackageNotFoundError: |
| 196 | + _ov_version = _openvino_version |
| 197 | + |
| 198 | + _is_ov_dev_version = "dev" in _ov_version |
| 199 | + if _is_ovt_dev_version: |
| 200 | + _compatible_openvino_major_version, _, _dev_date = _openvino_tokenizers_version.rsplit(".", 2) |
| 201 | + _compatible_ov_version = _compatible_openvino_major_version + "." + _dev_date |
| 202 | + _compatible_ovt_version = _ov_version.replace("dev", "0.dev") |
| 203 | + else: |
| 204 | + _compatible_openvino_major_version = _openvino_tokenizers_version.rsplit(".", 1)[0] |
| 205 | + _compatible_ov_version = _compatible_openvino_major_version |
| 206 | + if _is_ov_dev_version: |
| 207 | + _compatible_ovt_version = _ov_version.replace("dev", "0.dev") |
| 208 | + else: |
| 209 | + _compatible_ovt_version = _ov_version + ".0" |
| 210 | + |
| 211 | + _update_ov_command = _create_pip_update_command( |
| 212 | + "openvino", _compatible_ov_version, is_dev_version=_is_ovt_dev_version |
| 213 | + ) |
| 214 | + _update_ovt_command = _create_pip_update_command( |
| 215 | + "openvino-tokenizers", _compatible_ovt_version, is_dev_version=_is_ov_dev_version |
| 216 | + ) |
| 217 | + |
| 218 | + _openvino_tokenizers_available = _ov_version.startswith(_compatible_openvino_major_version) |
| 219 | + |
| 220 | + if not _openvino_tokenizers_available: |
| 221 | + logger.warning( |
| 222 | + "OpenVINO Tokenizers version is not compatible with OpenVINO version. " |
| 223 | + f"Installed OpenVINO version: {_ov_version}, " |
| 224 | + f"OpenVINO Tokenizers requires {_compatible_ov_version}. " |
| 225 | + "OpenVINO Tokenizers models will not be added during export. " |
| 226 | + f"Update OpenVINO with \n{_update_ov_command}\n" |
| 227 | + f"Or update OpenVINO Tokenizers with \n{_update_ovt_command}" |
| 228 | + ) |
| 229 | + elif _ov_version != _compatible_ov_version: |
| 230 | + logger.info( |
| 231 | + "OpenVINO Tokenizers version is not aligned with OpenVINO version. " |
| 232 | + f"Installed OpenVINO version: {_ov_version}, " |
| 233 | + f"OpenVINO Tokenizers version: {_compatible_ov_version}. " |
| 234 | + "If you didn't get OpenVINO Tokenizer after model conversion " |
| 235 | + f"try to align libraries versions with one of two commands:\n{_update_ov_command}\n" |
| 236 | + f"Or\n{_update_ovt_command}" |
| 237 | + ) |
208 | 238 | return _openvino_tokenizers_available
|
209 | 239 |
|
210 | 240 |
|
|
0 commit comments