Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
38 commits
Select commit Hold shift + click to select a range
fad52d8
Consolidate TelemetryCacheHandler to single lock
bmehta001 Apr 9, 2026
fe680ac
Fix concurrency issues in telemetry
bmehta001 Apr 9, 2026
8aa3d3d
Simplify telemetry cache and singleton patterns
bmehta001 Apr 9, 2026
166487c
Fix callback double-counting and multi-process cache overwrite
bmehta001 Apr 10, 2026
a6ff131
Track recipe telemetry in CI
bmehta001 May 4, 2026
15a5c31
Remove avoidable telemetry lint suppressions
bmehta001 May 4, 2026
eb524c7
Move service name handling into telemetry logger
bmehta001 May 4, 2026
862a9a1
Scope service-name cleanup to Olive usage
bmehta001 May 4, 2026
86d4d02
Revert unnecessary non-telemetry branch changes
bmehta001 May 4, 2026
99f0e17
Address PR review feedback on telemetry changes
bmehta001 May 4, 2026
788e91c
Remove low-value service-name telemetry test
bmehta001 May 4, 2026
06f1252
Address remaining GitHub Advanced Security comments
bmehta001 May 4, 2026
42dbce5
Simplify telemetry utils responsibilities
bmehta001 May 4, 2026
d948cd9
Store CI detection result once in telemetry init
bmehta001 May 4, 2026
1ff609a
Refine recipe telemetry semantics and config tracking
bmehta001 May 4, 2026
8987669
Replace package config hash with override values
bmehta001 May 4, 2026
ff60650
Guard Azure CI secret-dependent login steps
bmehta001 May 5, 2026
1cae73f
Revert Azure CI secret login guards
bmehta001 May 5, 2026
14130d4
Address telemetry review comments
bmehta001 May 5, 2026
d9247e2
Fix telemetry pipeline test regressions
bmehta001 May 5, 2026
befbb08
Log workflow exceptions as error telemetry
bmehta001 May 9, 2026
c90e653
Reduce CLI import churn
bmehta001 May 9, 2026
51d08fd
Simplify Docker recipe telemetry suppression
bmehta001 May 9, 2026
38f118c
Keep platform imports local
bmehta001 May 9, 2026
7427d75
Move recipe telemetry helpers out of runner
bmehta001 May 11, 2026
2b63059
Move recipe telemetry helpers to telemetry package
bmehta001 May 11, 2026
7585832
Make changes to integrate with Whisper recipes (#2450)
kunal-vaishnavi May 11, 2026
598589e
Fixed typo in DataLoader call in the documentation (#2419)
B-OURGER May 11, 2026
3962b3b
Mark auto-opt command as deprecated (#2442)
shaahji May 11, 2026
7119078
perf: use get_logits() to avoid massive GPU→CPU logits copy in ortgen…
justinchuby May 11, 2026
dd0728a
Bump python-multipart from 0.0.26 to 0.0.27 in /mcp (#2453)
dependabot[bot] May 11, 2026
05012ed
Add SimplifiedLayerNormToRMSNorm surgery (#2348)
unnim-qti May 12, 2026
a309970
Update model package cli to match latest schema (#2445)
xiaoyu-work May 20, 2026
991b05f
Bump idna from 3.11 to 3.15 in /mcp (#2467)
dependabot[bot] May 20, 2026
cc6eee6
Add QuantizeEmbeddingInt8 and ShareEmbeddingLmHead graph surgeries fo…
apsonawane May 21, 2026
7b2e509
Address simple telemetry review comments
bmehta001 May 21, 2026
4a91dda
Refine recipe telemetry metadata
bmehta001 May 22, 2026
23eb28c
Harden telemetry cache replay and flush wait
bmehta001 May 26, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion docs/Privacy.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,4 +13,4 @@ In addition, Olive may collect additional telemetry data such as:
- Performance data
- Exception information

Collection of this additional telemetry can be disabled by adding the `--disable_telemetry` flag to any Olive CLI command, or by setting the `OLIVE_DISABLE_TELEMETRY` environment variable to `1` before running. Telemetry is also automatically disabled when a CI/CD environment is detected (e.g., GitHub Actions, Azure Pipelines, Jenkins). If telemetry is enabled, but cannot be sent to Microsoft, it will be stored locally and sent when a connection is available. You can override the default cache location by setting the `OLIVE_TELEMETRY_CACHE_DIR` environment variable to a valid directory path.
Collection of this additional telemetry can be disabled by adding the `--disable_telemetry` flag to any Olive CLI command, or by setting the `OLIVE_DISABLE_TELEMETRY` environment variable to `1` before running. In CI/CD environments (e.g., GitHub Actions, Azure Pipelines, Jenkins), Olive suppresses the general heartbeat/action/error events and only emits the `OliveRecipe` event. The `OliveRecipe` event may include recipe metadata such as pass types, explicitly configured target settings, the host system type (including the default `LocalSystem` host) and any explicitly configured host accelerator settings, whether a custom package config was provided, a redacted snapshot of custom package-config overrides, and a redacted snapshot of explicitly supplied config overrides. Outside CI/CD environments, if telemetry is enabled but cannot be sent to Microsoft, it will be stored locally and sent when a connection is available. You can override the default cache location by setting the `OLIVE_TELEMETRY_CACHE_DIR` environment variable to a valid directory path.
2 changes: 1 addition & 1 deletion docs/source/how-to/extending/custom-scripts.md
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ class MyDataLoader:

@Registry.register_dataloader()
def my_dataloader(dataset, batch_size):
return MyDataloader(dataset, batch_size)
return MyDataLoader(dataset, batch_size)

@Registry.register_post_process()
def my_post_process(output):
Expand Down
12 changes: 6 additions & 6 deletions mcp/uv.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

10 changes: 8 additions & 2 deletions olive/cache.py
Original file line number Diff line number Diff line change
Expand Up @@ -439,13 +439,19 @@ def save_model(
else:
from olive.passes.onnx.common import resave_model

component_output_name = (
component_name
if Path(component_name).suffix == ".onnx"
else f"{component_name}.onnx"
)

resave_model(
ModelConfig.model_validate(component_model_json).create_model().model_path,
actual_output_dir / f"{component_name}.onnx",
actual_output_dir / component_output_name,
saved_external_files=saved_external_files,
)
component_model_json["config"][resource_name] = str(actual_output_dir)
component_model_json["config"]["onnx_file_name"] = f"{component_name}.onnx"
component_model_json["config"]["onnx_file_name"] = component_output_name

copied_components.append(component_model_json)

Expand Down
14 changes: 13 additions & 1 deletion olive/cli/auto_opt.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
# Copyright (c) Microsoft Corporation. All rights reserved.
# Licensed under the MIT License.
# --------------------------------------------------------------------------
import logging
from argparse import ArgumentParser
from collections import OrderedDict
from copy import deepcopy
Expand All @@ -25,13 +26,19 @@
from olive.package_config import OlivePackageConfig
from olive.telemetry import action

logger = logging.getLogger(__name__)


class AutoOptCommand(BaseOliveCLICommand):
@staticmethod
def register_subcommand(parser: ArgumentParser):
sub_parser = parser.add_parser(
"auto-opt",
help="Automatically optimize the performance of the input model.",
help=(
"Automatically optimize the performance of the input model.\n"
"**** DEPRECATION WARNING ****\n"
'"auto-opt" command is deprecated in favor of "optimize".'
),
)

# Model options
Expand Down Expand Up @@ -174,6 +181,11 @@ def register_subcommand(parser: ArgumentParser):

@action
def run(self):
logger.warning(
"**** DEPRECATION WARNING ****\n"
'"auto-opt" command is deprecated in favor of "optimize". Please switch to using "optimize".\n'
"Deprecated commands will be removed entirely in future release."
)
return self._run_workflow()

def _get_run_config(self, tempdir) -> dict:
Expand Down
13 changes: 12 additions & 1 deletion olive/cli/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -42,13 +42,24 @@ def _run_workflow(self):
if self.args.dry_run:
print("Dry run mode enabled. Configuration file is generated but no optimization is performed.")
return None
workflow_output = olive_run(run_config)
workflow_output = olive_run(run_config, recipe_telemetry_metadata=self._get_recipe_telemetry_metadata())
if not workflow_output.has_output_model():
print("No output model produced. Please check the log for details.")
else:
print(f"Model is saved at {self.args.output_path}")
return workflow_output

def _get_recipe_telemetry_metadata(self) -> dict[str, str]:
recipe_name = self.__class__.__name__
if recipe_name.endswith("Command"):
recipe_name = recipe_name[: -len("Command")]
return {
"recipe_name": recipe_name,
"recipe_command": recipe_name,
"recipe_source": "generated_cli",
"recipe_format": "generated",
}

@staticmethod
def _parse_extra_options(kv_items):
from onnxruntime_genai import __version__ as OrtGenaiVersion
Expand Down
Loading
Loading