129 lines
4.5 KiB
Python
129 lines
4.5 KiB
Python
# Copyright (C) 2018-2025 Intel Corporation
|
|
# SPDX-License-Identifier: Apache-2.0
|
|
|
|
import argparse
|
|
import numbers
|
|
import os
|
|
from openvino import get_version as get_rt_version # pylint: disable=no-name-in-module,import-error
|
|
from openvino.tools.ovc.cli_parser import get_params_with_paths_list
|
|
from openvino.tools.ovc.telemetry_params import telemetry_params
|
|
from openvino.tools.ovc.utils import check_values_equal
|
|
|
|
try:
|
|
import openvino_telemetry as tm
|
|
from openvino_telemetry.backend import backend_ga4
|
|
except ImportError:
|
|
import openvino.tools.ovc.telemetry_stub as tm
|
|
|
|
|
|
def is_optimum():
|
|
import traceback
|
|
for frame_summary in traceback.extract_stack():
|
|
if os.path.join("optimum", "intel") in frame_summary.filename or \
|
|
os.path.join("optimum", "exporters", "openvino") in frame_summary.filename:
|
|
return True
|
|
return False
|
|
|
|
def is_torch_compile():
|
|
import traceback
|
|
for line in traceback.format_stack():
|
|
if os.path.join("torch", "_dynamo", "backends", "registry.py") in line:
|
|
return True
|
|
return False
|
|
|
|
def is_keras3():
|
|
import traceback
|
|
for line in traceback.format_stack():
|
|
if os.path.join("keras", "src", "backend", "openvino") in line:
|
|
return True
|
|
return False
|
|
|
|
def init_ovc_telemetry(app_name='OVC', app_version=None):
|
|
app_version = app_version if app_version is not None else get_rt_version()
|
|
return init_telemetry_class(tid=get_tid(),
|
|
app_name=app_name,
|
|
app_version=app_version,
|
|
backend='ga4',
|
|
enable_opt_in_dialog=False,
|
|
disable_in_ci=True
|
|
)
|
|
|
|
|
|
def init_telemetry_class(tid,
|
|
app_name,
|
|
app_version,
|
|
backend,
|
|
enable_opt_in_dialog,
|
|
disable_in_ci):
|
|
# Init telemetry class
|
|
telemetry = tm.Telemetry(tid=tid,
|
|
app_name=app_name,
|
|
app_version=app_version,
|
|
backend=backend,
|
|
enable_opt_in_dialog=enable_opt_in_dialog,
|
|
disable_in_ci=disable_in_ci)
|
|
|
|
# Telemetry is a singleton class and if it was already initialized in another tool
|
|
# some parameters will be incorrect, including app_name.
|
|
# In this case we need to force reinitialisation of telemetry.
|
|
if hasattr(telemetry, "backend") and telemetry.backend.app_name != app_name:
|
|
telemetry.init(tid=tid,
|
|
app_name=app_name,
|
|
app_version=app_version,
|
|
backend=backend,
|
|
enable_opt_in_dialog=enable_opt_in_dialog,
|
|
disable_in_ci=disable_in_ci)
|
|
return telemetry
|
|
|
|
|
|
def send_framework_info(framework: str):
|
|
"""
|
|
This function sends information about used framework.
|
|
:param framework: framework name.
|
|
"""
|
|
t = tm.Telemetry()
|
|
t.send_event('ovc', 'framework', framework)
|
|
|
|
|
|
def get_tid():
|
|
"""
|
|
This function returns the ID of the database to send telemetry.
|
|
"""
|
|
return telemetry_params['TID']
|
|
|
|
|
|
def send_conversion_result(conversion_result: str, need_shutdown=False):
|
|
t = tm.Telemetry()
|
|
t.send_event('ovc', 'conversion_result', conversion_result)
|
|
t.end_session('ovc')
|
|
if need_shutdown:
|
|
t.force_shutdown(1.0)
|
|
|
|
|
|
def arg_to_str(arg):
|
|
# This method converts to string only known types, otherwise returns string with name of the type
|
|
from openvino import PartialShape, Shape, Type, Layout # pylint: disable=no-name-in-module,import-error
|
|
if isinstance(arg, (PartialShape, Shape, Type, Layout)):
|
|
return str(arg)
|
|
if isinstance(arg, (str, numbers.Number, bool)):
|
|
return str(arg)
|
|
return str(type(arg))
|
|
|
|
|
|
def send_params_info(params: dict):
|
|
"""
|
|
This function sends information about used command line parameters.
|
|
:param params: command-line parameters dictionary.
|
|
"""
|
|
t = tm.Telemetry()
|
|
params_with_paths = get_params_with_paths_list()
|
|
for key, value in params.items():
|
|
if key in params_with_paths:
|
|
# If command line argument value is a directory or a path to file it is not sent
|
|
# as it may contain confidential information. "1" value is used instead.
|
|
param_str = key + ":" + str(1)
|
|
else:
|
|
param_str = key + ":" + arg_to_str(value)
|
|
|
|
t.send_event('ovc', 'cli_parameters', param_str)
|