# cli

Python API: `luxonis_ml.telemetry.cli`

CLI instrumentation adapters for telemetry.

This package wraps the commands of a command-line application. An instrumented command emits one `cli_command` event per run, if
telemetry stays enabled. Use
[instrument_typer](https://docs.luxonis.com/software-v3/ai-inference/model-source/training/luxonis-ml/luxonis-ml-api-reference/telemetry/cli/typer.md)
for a Typer app and
[instrument_cyclopts](https://docs.luxonis.com/software-v3/ai-inference/model-source/training/luxonis-ml/luxonis-ml-api-reference/telemetry/cli/cyclopts.md)
for a Cyclopts app. Both walk the app recursively, so they cover the commands of every sub-app. The Cyclopts adapter skips the
generated help and version callbacks. `exclude_commands` and
[skip_telemetry](https://docs.luxonis.com/software-v3/ai-inference/model-source/training/luxonis-ml/luxonis-ml-api-reference/telemetry/cli/shared.md)
leave more commands uninstrumented.

By default, an instrumented command reports its name, a success flag, and its duration in milliseconds. `include_system_metadata`
adds the system fields, but only when the client holds a system context provider. Pass
`system_context_providers=[system_context_provider]` to
[Telemetry](https://docs.luxonis.com/software-v3/ai-inference/model-source/training/luxonis-ml/luxonis-ml-api-reference/telemetry/client.md)
first. Argument values stay local unless the caller names them in an `allowlist`.

> **Example**
> Instrument a Typer app and keep every argument value local.

```python
import typer
from luxonis_ml.telemetry import Telemetry
from luxonis_ml.telemetry.cli import instrument_typer

app = typer.Typer()
telemetry = Telemetry("luxonis_ml")

instrument_typer(app, telemetry)
```

> **Note**
> This package imports each adapter module on first use, so a Typer application never loads the Cyclopts adapter. Cyclopts is a base dependency of LuxonisML. Typer is not, so install it yourself before you call [instrument_typer](https://docs.luxonis.com/software-v3/ai-inference/model-source/training/luxonis-ml/luxonis-ml-api-reference/telemetry/cli/typer.md).

> **See Also**
> [skip_telemetry](https://docs.luxonis.com/software-v3/ai-inference/model-source/training/luxonis-ml/luxonis-ml-api-reference/telemetry/cli/shared.md) to exclude one command callback.

## Child Pages

 * [cyclopts](https://docs.luxonis.com/software-v3/ai-inference/model-source/training/luxonis-ml/luxonis-ml-api-reference/telemetry/cli/cyclopts.md)
 * [shared](https://docs.luxonis.com/software-v3/ai-inference/model-source/training/luxonis-ml/luxonis-ml-api-reference/telemetry/cli/shared.md)
 * [typer](https://docs.luxonis.com/software-v3/ai-inference/model-source/training/luxonis-ml/luxonis-ml-api-reference/telemetry/cli/typer.md)

## Functions

### getattr

```python
def __getattr__(name: str) -> Any:
```

Lazily import optional CLI adapters so their deps stay optional.
