Files

129 lines
4.5 KiB
Python
Raw Permalink Normal View History

# 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)