[{"data":1,"prerenderedAt":489},["ShallowReactive",2],{"navigation_docs":3,"-report-read-the-report":134,"-report-read-the-report-surround":484},[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":66,"body":136,"description":477,"extension":478,"links":479,"meta":480,"navigation":481,"path":67,"seo":482,"stem":68,"__hash__":483},"docs\u002F3.report\u002F1.read-the-report.md",{"type":137,"value":138,"toc":463},"minimark",[139,144,153,216,237,240,244,247,252,262,269,273,276,280,283,366,373,377,396,400,405,409,412,416,419,423,426,437,459],[140,141,143],"h2",{"id":142},"make-one","Make one",[145,146,147,148,152],"p",{},"On the ico host, from ",[149,150,151],"code",{},"deploy\u002F",":",[154,155,161],"pre",{"className":156,"code":157,"filename":158,"language":159,"meta":160,"style":160},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","docker compose exec collector ico report --window 24h --out \u002Ftmp\u002Freport.html\ndocker compose cp collector:\u002Ftmp\u002Freport.html report.html\n","ico host","bash","",[149,162,163,200],{"__ignoreMap":160},[164,165,168,172,176,179,182,185,188,191,194,197],"span",{"class":166,"line":167},"line",1,[164,169,171],{"class":170},"sBMFI","docker",[164,173,175],{"class":174},"sfazB"," compose",[164,177,178],{"class":174}," exec",[164,180,181],{"class":174}," collector",[164,183,184],{"class":174}," ico",[164,186,187],{"class":174}," report",[164,189,190],{"class":174}," --window",[164,192,193],{"class":174}," 24h",[164,195,196],{"class":174}," --out",[164,198,199],{"class":174}," \u002Ftmp\u002Freport.html\n",[164,201,203,205,207,210,213],{"class":166,"line":202},2,[164,204,171],{"class":170},[164,206,175],{"class":174},[164,208,209],{"class":174}," cp",[164,211,212],{"class":174}," collector:\u002Ftmp\u002Freport.html",[164,214,215],{"class":174}," report.html\n",[145,217,218,221,222,225,226,225,229,232,233,236],{},[149,219,220],{},"--window"," is how far back it looks (",[149,223,224],{},"90m",", ",[149,227,228],{},"24h",[149,230,231],{},"7d","), ending now or at ",[149,234,235],{},"--until",", an ISO time in UTC unless it says otherwise. The result is one HTML file with no scripts and nothing loaded from elsewhere: open it, mail it, attach it to a ticket.",[145,238,239],{},"Raw records are kept for 30 days, so a window can reach back that far.",[140,241,243],{"id":242},"what-it-says","What it says",[145,245,246],{},"The examples below come from a real run: 16 minutes of four simulated customers on one H100 SXM, rented at $3.99 an hour, serving Qwen3-8B with vLLM 0.31.",[248,249,251],"h3",{"id":250},"the-headline","The headline",[253,254,255],"blockquote",{},[145,256,257,261],{},[258,259,260],"strong",{},"$0.0366 per million tokens."," GPUs cost $1.05 in this window, and $0.0650 of it (6%) paid for time with nothing to serve. Another $0.0891 (9%) paid for compute cores that had nothing to run while requests were being served. Without idle time the same tokens would have cost $0.0344 per million.",[145,263,264,265,268],{},"Tokens are prompt and completion tokens together. The idle share is the first thing to look at: on rented GPUs, every idle hour is billed like a busy one. The second sentence appears where the GPUs report profiling counters: it is capacity paid for while serving and left unused, as with small batches. See ",[266,267,71],"a",{"href":72},".",[248,270,272],{"id":271},"cost-by-model","Cost by model",[145,274,275],{},"Each model carries the cost of the replicas that serve it, idle time included: GPU-hours, cost, serving share, idle cost and idle GPU-hours, tokens, and cost per million tokens.",[248,277,279],{"id":278},"cost-by-tenant","Cost by tenant",[145,281,282],{},"Each replica's cost, idle time included, split across the tenants it served by the work their requests took:",[284,285,286,306],"table",{},[287,288,289],"thead",{},[290,291,292,296,300,303],"tr",{},[293,294,295],"th",{},"Tenant",[293,297,299],{"align":298},"right","Requests",[293,301,302],{"align":298},"Share of cost",[293,304,305],{"align":298},"Per million tokens",[307,308,309,324,338,352],"tbody",{},[290,310,311,315,318,321],{},[312,313,314],"td",{},"meridian-freight (chat assistant)",[312,316,317],{"align":298},"6,140",[312,319,320],{"align":298},"40%",[312,322,323],{"align":298},"$0.0351",[290,325,326,329,332,335],{},[312,327,328],{},"orbit-analytics (research agent)",[312,330,331],{"align":298},"2,429",[312,333,334],{"align":298},"38%",[312,336,337],{"align":298},"$0.0769",[290,339,340,343,346,349],{},[312,341,342],{},"lumen-media (questions over documents)",[312,344,345],{"align":298},"4,868",[312,347,348],{"align":298},"22%",[312,350,351],{"align":298},"$0.0202",[290,353,354,357,360,363],{},[312,355,356],{},"daily-ledger (batch summaries)",[312,358,359],{"align":298},"360",[312,361,362],{"align":298},"\u003C1%",[312,364,365],{"align":298},"$0.0279",[145,367,368,369,372],{},"Two tenants with the same token count can cost very different amounts. Here the research agent paid more than twice as much per token as anyone else: it thinks before every step, so most of its tokens are generated one at a time, while the questions over documents are mostly prompt tokens, which the GPU processes in bulk. Requests without a tenant header appear as ",[258,370,371],{},"(no tenant header)",". Past 100 tenants, the smallest are folded into one row.",[248,374,376],{"id":375},"replicas","Replicas",[145,378,379,380,383,384,387,388,391,392,395],{},"One row per replica: its host and GPUs, the price per GPU-hour, the hours it was seen, its cost and serving share, and how each was measured. ",[258,381,382],{},"Serving measured by"," is time with a request in flight, unless the compute cores were active for longer, as with traffic that bypassed the gateway; ",[258,385,386],{},"Cores unused while serving"," shows the profiling counters' finding where there are any; ",[258,389,390],{},"Tenants split by"," says whether engine traces were there to weigh prefill and decode; ",[258,393,394],{},"Requests traced"," is the share of requests that had an engine span.",[248,397,399],{"id":398},"replay","Replay",[145,401,402,403,268],{},"When a replay was run on the window's traffic, its results: the current config against the cheapest one that held the latency limits, and whether it was clearly cheaper. The report shows the newest replay of traffic inside its window, or, if there is none, the newest that finished by the window's end. See ",[266,404,76],{"href":81},[248,406,408],{"id":407},"telemetry-level","Telemetry level",[145,410,411],{},"Per host: the telemetry level, and over the window the average share of time the compute cores, the tensor cores and the memory bandwidth were busy, the peak memory in use and the average power draw. On the H100 above: 85% compute cores active, 51% tensor cores, 51% memory bandwidth, 73.1 GiB peak, 606 W.",[248,413,415],{"id":414},"inputs","Inputs",[145,417,418],{},"The window, when the report was made, the prices it used and where they came from, and how each number was made. Every number in the report can be traced back to here.",[140,420,422],{"id":421},"query-the-numbers-yourself","Query the numbers yourself",[145,424,425],{},"The report reads views that take the window as parameters, and you can query them directly:",[154,427,431],{"className":428,"code":429,"language":430,"meta":160,"style":160},"language-sql shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","SELECT * FROM usage_by_tenant(since = '2026-10-14 00:00:00', until = '2026-10-15 00:00:00')\n","sql",[149,432,433],{"__ignoreMap":160},[164,434,435],{"class":166,"line":167},[164,436,429],{},[145,438,439,440,225,443,225,446,225,449,452,453,456,457,268],{},"The views are ",[149,441,442],{},"usage_by_tenant",[149,444,445],{},"replica_busy",[149,447,448],{},"replica_phases",[149,450,451],{},"replica_engine"," and ",[149,454,455],{},"host_gpus",". The tables underneath are described in ",[266,458,125],{"href":126},[460,461,462],"style",{},"html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":160,"searchDepth":202,"depth":202,"links":464},[465,466,476],{"id":142,"depth":202,"text":143},{"id":242,"depth":202,"text":243,"children":467},[468,470,471,472,473,474,475],{"id":250,"depth":469,"text":251},3,{"id":271,"depth":469,"text":272},{"id":278,"depth":469,"text":279},{"id":375,"depth":469,"text":376},{"id":398,"depth":469,"text":399},{"id":407,"depth":469,"text":408},{"id":414,"depth":469,"text":415},{"id":421,"depth":202,"text":422},"Make a report for any window, and what each of its sections says.","md",null,{},{"icon":69},{"title":66,"description":477},"AHTvcNCwnyGmYPUdRzqszPj_9m0VJWZ3RUnqoi2T_vo",[485,487],{"title":56,"path":57,"stem":58,"description":486,"icon":59,"children":-1},"We install ico with you, on your machines, if you would rather not do it alone.",{"title":71,"path":72,"stem":73,"description":488,"icon":74,"children":-1},"Where each number in the report comes from.",1792165819409]