[{"data":1,"prerenderedAt":566},["ShallowReactive",2],{"navigation_docs":3,"-reference-cli":134,"-reference-cli-surround":561},[4,25,60,75,104],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":6},"Getting started",false,"\u002Fgetting-started","1.getting-started",[10,15,20],{"title":11,"path":12,"stem":13,"icon":14},"Introduction","\u002Fgetting-started\u002Fintroduction","1.getting-started\u002F1.introduction","i-lucide-house",{"title":16,"path":17,"stem":18,"icon":19},"How it works","\u002Fgetting-started\u002Fhow-it-works","1.getting-started\u002F2.how-it-works","i-lucide-workflow",{"title":21,"path":22,"stem":23,"icon":24},"Quickstart","\u002Fgetting-started\u002Fquickstart","1.getting-started\u002F3.quickstart","i-lucide-rocket",{"title":26,"icon":6,"path":27,"stem":28,"children":29,"page":6},"Install on rented GPUs","\u002Finstall","2.install",[30,35,40,45,50,55],{"title":31,"path":32,"stem":33,"icon":34},"Overview","\u002Finstall\u002Foverview","2.install\u002F1.overview","i-lucide-map",{"title":36,"path":37,"stem":38,"icon":39},"Set up the ico host","\u002Finstall\u002Fico-host","2.install\u002F2.ico-host","i-lucide-database",{"title":41,"path":42,"stem":43,"icon":44},"Set up the GPU machines","\u002Finstall\u002Fgpu-machines","2.install\u002F3.gpu-machines","i-lucide-cpu",{"title":46,"path":47,"stem":48,"icon":49},"Send traffic through the gateway","\u002Finstall\u002Fsend-traffic","2.install\u002F4.send-traffic","i-lucide-route",{"title":51,"path":52,"stem":53,"icon":54},"Check the install","\u002Finstall\u002Fcheck","2.install\u002F5.check","i-lucide-circle-check",{"title":56,"path":57,"stem":58,"icon":59},"Install help","\u002Finstall\u002Finstall-help","2.install\u002F6.install-help","i-lucide-life-buoy",{"title":61,"icon":6,"path":62,"stem":63,"children":64,"page":6},"The report","\u002Freport","3.report",[65,70],{"title":66,"path":67,"stem":68,"icon":69},"Read the report","\u002Freport\u002Fread-the-report","3.report\u002F1.read-the-report","i-lucide-file-chart-column",{"title":71,"path":72,"stem":73,"icon":74},"How costs are counted","\u002Freport\u002Fhow-costs-are-counted","3.report\u002F2.how-costs-are-counted","i-lucide-calculator",{"title":76,"icon":6,"path":77,"stem":78,"children":79,"page":6},"The replay lab","\u002Freplay","4.replay",[80,84,89,94,99],{"title":31,"path":81,"stem":82,"icon":83},"\u002Freplay\u002Foverview","4.replay\u002F1.overview","i-lucide-flask-conical",{"title":85,"path":86,"stem":87,"icon":88},"Run a replay","\u002Freplay\u002Frun-a-replay","4.replay\u002F2.run-a-replay","i-lucide-play",{"title":90,"path":91,"stem":92,"icon":93},"Launchers","\u002Freplay\u002Flaunchers","4.replay\u002F3.launchers","i-lucide-power",{"title":95,"path":96,"stem":97,"icon":98},"Sweep files","\u002Freplay\u002Fsweep-file","4.replay\u002F4.sweep-file","i-lucide-list-checks",{"title":100,"path":101,"stem":102,"icon":103},"What a replay cannot tell you yet","\u002Freplay\u002Flimits","4.replay\u002F5.limits","i-lucide-triangle-alert",{"title":105,"icon":6,"path":106,"stem":107,"children":108,"page":6},"Reference","\u002Freference","5.reference",[109,114,119,124,129],{"title":110,"path":111,"stem":112,"icon":113},"Configuration","\u002Freference\u002Fconfiguration","5.reference\u002F1.configuration","i-lucide-settings",{"title":115,"path":116,"stem":117,"icon":118},"CLI","\u002Freference\u002Fcli","5.reference\u002F2.cli","i-lucide-square-terminal",{"title":120,"path":121,"stem":122,"icon":123},"Gateway","\u002Freference\u002Fgateway","5.reference\u002F3.gateway","i-lucide-split",{"title":125,"path":126,"stem":127,"icon":128},"Stored data","\u002Freference\u002Fdata","5.reference\u002F4.data","i-lucide-table",{"title":130,"path":131,"stem":132,"icon":133},"Privacy and security","\u002Freference\u002Fsecurity","5.reference\u002F5.security","i-lucide-shield-check",{"id":135,"title":115,"body":136,"description":554,"extension":555,"links":556,"meta":557,"navigation":558,"path":116,"seo":559,"stem":117,"__hash__":560},"docs\u002F5.reference\u002F2.cli.md",{"type":137,"value":138,"toc":547},"minimark",[139,163,178,185,188,229,235,241,311,317,322,333],[140,141,142,146,147,150,151,154,155,158,159,162],"p",{},[143,144,145],"code",{},"ico"," is the Python package in the repository's ",[143,148,149],{},"py\u002F"," folder. It is installed in the collector's image, so on the ico host it runs with ",[143,152,153],{},"docker compose exec collector ico ...",". Anywhere else, install it with ",[143,156,157],{},"uv sync"," or ",[143,160,161],{},"pip install .\u002Fpy",".",[140,164,165,166,169,170,173,174,177],{},"Every command takes ",[143,167,168],{},"--config FILE",", the config file to read (default: ",[143,171,172],{},"$ICO_CONFIG",", else ",[143,175,176],{},"\u002Fetc\u002Fico\u002Fconfig.yaml",").",[179,180,182],"h2",{"id":181},"ico-collector",[143,183,184],{},"ico collector",[140,186,187],{},"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.",[189,190,191,207],"table",{},[192,193,194],"thead",{},[195,196,197,201,204],"tr",{},[198,199,200],"th",{},"Option",[198,202,203],{},"Default",[198,205,206],{},"Meaning",[208,209,210],"tbody",{},[195,211,212,218,226],{},[213,214,215],"td",{},[143,216,217],{},"--schema-dir DIR",[213,219,220,173,223],{},[143,221,222],{},"$ICO_SCHEMA_DIR",[143,224,225],{},"\u002Fopt\u002Fico\u002Fschema",[213,227,228],{},"The ClickHouse migrations to apply.",[179,230,232],{"id":231},"ico-report",[143,233,234],{},"ico report",[140,236,237,238,162],{},"Writes the cost and waste report as one static HTML file. See ",[239,240,66],"a",{"href":67},[189,242,243,253],{},[192,244,245],{},[195,246,247,249,251],{},[198,248,200],{},[198,250,203],{},[198,252,206],{},[208,254,255,279,292],{},[195,256,257,262,267],{},[213,258,259],{},[143,260,261],{},"--window TEXT",[213,263,264],{},[143,265,266],{},"24h",[213,268,269,270,273,274,273,276,162],{},"How far back the report looks: ",[143,271,272],{},"90m",", ",[143,275,266],{},[143,277,278],{},"7d",[195,280,281,286,289],{},[213,282,283],{},[143,284,285],{},"--until TEXT",[213,287,288],{},"now",[213,290,291],{},"Where the window ends, an ISO time, UTC unless it says otherwise.",[195,293,294,299,304],{},[213,295,296],{},[143,297,298],{},"--out FILE",[213,300,301],{},[143,302,303],{},"report.html",[213,305,306,307,310],{},"The file to write; ",[143,308,309],{},"-"," for standard output.",[179,312,314],{"id":313},"ico-replay",[143,315,316],{},"ico replay",[140,318,319,320,162],{},"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 ",[239,321,85],{"href":86},[140,323,324,325,328,329,332],{},"Needs ",[143,326,327],{},"ICO_ADMIN_TOKEN"," and ",[143,330,331],{},"ICO_CLICKHOUSE_PASSWORD"," in the environment.",[189,334,335,345],{},[192,336,337],{},[195,338,339,341,343],{},[198,340,200],{},[198,342,203],{},[198,344,206],{},[208,346,347,360,375,389,400,416,431,446,459,471,487,502,517,532],{},[195,348,349,354,357],{},[213,350,351],{},[143,352,353],{},"--replica TEXT",[213,355,356],{},"required",[213,358,359],{},"The replica to drain and test.",[195,361,362,367,369],{},[213,363,364],{},[143,365,366],{},"--configs FILE",[213,368,356],{},[213,370,371,372,162],{},"The ",[239,373,374],{"href":96},"sweep file",[195,376,377,381,386],{},[213,378,379],{},[143,380,261],{},[213,382,383],{},[143,384,385],{},"1h",[213,387,388],{},"How far back the recorded traffic is taken from.",[195,390,391,395,397],{},[213,392,393],{},[143,394,285],{},[213,396,288],{},[213,398,399],{},"Where that window ends.",[195,401,402,407,410],{},[213,403,404],{},[143,405,406],{},"--slo TEXT",[213,408,409],{},"from the config",[213,411,412,413,162],{},"Latency limits, like ",[143,414,415],{},"ttft_p95=500ms,itl_p95=50ms",[195,417,418,423,428],{},[213,419,420],{},[143,421,422],{},"--budget TEXT",[213,424,425],{},[143,426,427],{},"45m",[213,429,430],{},"The most the whole run may take, restore included.",[195,432,433,438,443],{},[213,434,435],{},[143,436,437],{},"--min-saving TEXT",[213,439,440],{},[143,441,442],{},"10%",[213,444,445],{},"How much cheaper than the current config a config must measure to be recommended.",[195,447,448,453,456],{},[213,449,450],{},[143,451,452],{},"--single-replica",[213,454,455],{},"off",[213,457,458],{},"Go ahead although this replica is the only one serving its model.",[195,460,461,466,468],{},[213,462,463],{},[143,464,465],{},"--yes",[213,467,455],{},[213,469,470],{},"Do not wait for a yes after the plan.",[195,472,473,478,484],{},[213,474,475],{},[143,476,477],{},"--replica-url TEXT",[213,479,480,481],{},"the replica's ",[143,482,483],{},"url",[213,485,486],{},"Where this machine reaches the engine.",[195,488,489,494,499],{},[213,490,491],{},[143,492,493],{},"--sample-requests N",[213,495,496],{},[143,497,498],{},"300",[213,500,501],{},"How many consecutive recorded requests the replay is built from.",[195,503,504,509,514],{},[213,505,506],{},[143,507,508],{},"--health-timeout TEXT",[213,510,511],{},[143,512,513],{},"15m",[213,515,516],{},"The longest an engine may take to come up after a restart.",[195,518,519,524,529],{},[213,520,521],{},[143,522,523],{},"--step-seconds N",[213,525,526],{},[143,527,528],{},"15",[213,530,531],{},"How long the load stays at each rate.",[195,533,534,539,544],{},[213,535,536],{},[143,537,538],{},"--min-step-requests N",[213,540,541],{},[143,542,543],{},"40",[213,545,546],{},"The fewest requests a rate is judged on, however low the rate.",{"title":548,"searchDepth":549,"depth":549,"links":550},"",2,[551,552,553],{"id":181,"depth":549,"text":184},{"id":231,"depth":549,"text":234},{"id":313,"depth":549,"text":316},"The ico command and its options.","md",null,{},{"icon":118},{"title":115,"description":554},"EQdHJ4-HR4toPS1nbj-tzsBBJcZkHknapO_8EGv8Z-A",[562,564],{"title":110,"path":111,"stem":112,"description":563,"icon":113,"children":-1},"Every key of the YAML config file, its default, and which part of ico reads it.",{"title":120,"path":121,"stem":122,"description":565,"icon":123,"children":-1},"What the gateway proxies, records and exposes.",1792165824834]