ico
Reference

CLI

The ico command and its options.

ico is the Python package in the repository's py/ folder. It is installed in the collector's image, so on the ico host it runs with docker compose exec collector ico .... Anywhere else, install it with uv sync or pip install ./py.

Every command takes --config FILE, the config file to read (default: $ICO_CONFIG, else /etc/ico/config.yaml).

ico collector

Receives gateway records and engine traces, scrapes engines and GPU exporters, and writes everything to ClickHouse. Applies ClickHouse's migrations at startup. The Compose deployment runs it for you.

OptionDefaultMeaning
--schema-dir DIR$ICO_SCHEMA_DIR, else /opt/ico/schemaThe ClickHouse migrations to apply.

ico report

Writes the cost and waste report as one static HTML file. See Read the report.

OptionDefaultMeaning
--window TEXT24hHow far back the report looks: 90m, 24h, 7d.
--until TEXTnowWhere the window ends, an ISO time, UTC unless it says otherwise.
--out FILEreport.htmlThe file to write; - for standard output.

ico replay

Tests engine configs on recorded traffic and names the cheapest that holds the latency limits, if it beats the current config by the margin. Run it on the GPU machine of the replica. See Run a replay.

Needs ICO_ADMIN_TOKEN and ICO_CLICKHOUSE_PASSWORD in the environment.

OptionDefaultMeaning
--replica TEXTrequiredThe replica to drain and test.
--configs FILErequiredThe sweep file.
--window TEXT1hHow far back the recorded traffic is taken from.
--until TEXTnowWhere that window ends.
--slo TEXTfrom the configLatency limits, like ttft_p95=500ms,itl_p95=50ms.
--budget TEXT45mThe most the whole run may take, restore included.
--min-saving TEXT10%How much cheaper than the current config a config must measure to be recommended.
--single-replicaoffGo ahead although this replica is the only one serving its model.
--yesoffDo not wait for a yes after the plan.
--replica-url TEXTthe replica's urlWhere this machine reaches the engine.
--sample-requests N300How many consecutive recorded requests the replay is built from.
--health-timeout TEXT15mThe longest an engine may take to come up after a restart.
--step-seconds N15How long the load stays at each rate.
--min-step-requests N40The fewest requests a rate is judged on, however low the rate.
Copyright © 2026