{
  "assumptions": {
    "clientAssertedInputProvenance": "Token counts (tokensIn, tokensOut, cachedTokensIn) are asserted by the client making the request. The estimator cannot independently verify or measure token counts.",
    "conservativeUplift": "The 1.30 datacenter uplift exceeds every known provider PUE: the EcoLogits provider table tops out at 1.20 (Anthropic 1.09–1.14, OpenAI 1.20, Google 1.09, Mistral 1.16). It ships as an explicit conservative hypothesis, not a sourced measurement.",
    "datacenterUpliftApplication": "DATACENTER_UPLIFT is applied once by the consumer to the summed per-request IT energy of prefill and decode — (T_in × C_in + T_out × C_out) × DATACENTER_UPLIFT — where T_in and T_out are the input and output token counts and C_in/C_out are the shipped per-token IT-energy coefficients. It is not included in any coefficient, it is not applied to the GPU term alone, and it is not applied per term, so no consumer path can count it twice.",
    "decodePrefillRatioPolicy": "C_in remains its own coefficient with its own tier, basis and upgrade path, but since revision 3 it is anchored on the paired C_out at the conservative prefill fraction (MDR-13-17), so the recorded cOutOverCIn is 4.0 for every bucket by construction — a definitional outcome of the shipped values, not an observed measurement and not a defended global constant. The input document's illustrative ~3.5× ratio is not the source of the fraction and remains a non-imported illustration.",
    "fixedBatchSize": "BATCH_SIZE = 64, inherited from the EcoLogits reference configuration; actual batch sizes vary by provider, and measured batch sweeps recorded qualitatively in the literature (TokenPowerBench, recorded as context only under CORR-10) show energy per token falling steeply before flattening.",
    "generationBasedGridScope": "Ember 2025 world lifecycle = 458.29 g CO₂e/kWh is generation-based (includes upstream/supply-chain/manufacturing), not consumption-based (does not reallocate imports/exports). Scope 2 location-based typically uses regional mix, not global average — acknowledged as proxy",
    "hypothesisMethodology": "Some coefficients are Bloomy hypotheses rather than sourced measurements. Every HYPOTHESIS entry records its rationale and an upgrade path, and no uncertainty interval is invented where the source publishes none.",
    "inheritedServingConfig": "vLLM backend, NVIDIA H100 80 GB, 16-bit quantization, SERVER_POWER = 1.2 kW, SERVER_GPUS = 8, hardware lifespan ΔL = 3 years. These describe the EcoLogits reference configuration, not our actual serving stack",
    "noVendorAudit": "Energy figures reflect third-party research measurements, not audited data from specific AI providers. Actual per-request energy may differ based on hardware, software optimization, and utilization",
    "operationalBoundary": "Operational electricity for inference only: GPU + non-GPU server + datacenter overhead (PUE). Excluded: embodied/grey energy, manufacturing, end-of-life, water consumption, network/storage, training amortization, idle capacity beyond declared batch/PUE",
    "prefillFractionPolicy": "PREFILL_FRACTION = 0.25 is the conservative upper bound of the stated hypothesis band [0.10, 0.25]. Every C_in is PREFILL_FRACTION × its paired C_out and is therefore strictly below it (4.0× headroom), which the phase physics requires: prefill is compute-bound at high utilisation while decode is memory-bandwidth-bound and dearer per token. No cited source publishes a per-input-token prefill energy at the anchors (CORR-10, MDR-13-17), so the fraction is a labelled hypothesis with a stated band and an upgrade path. The band is the hypothesis domain, not a source-published uncertainty interval (D-06, MDR-13-10).",
    "usedByResolution": "Every entry's usedBy names workers/mcp/src/energy-model.ts, the Phase 14 module that pins these coefficients; the file does not exist in Phase 13 and Phase 14 creates it while flipping the ship-set from declared to actual constants."
  },
  "corrections": [
    {
      "action": "dropped",
      "date": "2026-11-11",
      "description": "Unverifiable citation — no resolvable DOI, publisher or peer-reviewed venue was found. Dropped from the registry citations under the citation-hygiene rule.",
      "entity": "Babakol et al. 2026",
      "id": "CORR-01",
      "rationale": "Authorship, peer-review status and publication venue cannot be verified; including unverifiable citations would undermine the credibility of the provenance chain."
    },
    {
      "action": "corrected",
      "date": "2026-11-11",
      "description": "Re-attributed: Francesca Dominici is a co-author of Vartziotis et al. (arXiv:2607.26571), not the author of a separate study.",
      "entity": "Dominici attribution",
      "id": "CORR-02",
      "rationale": "Verified against the arXiv:2607.26571 author list; the original treatment inflated the evidence base by counting one co-author as a second study."
    },
    {
      "action": "qualitative-only",
      "date": "2026-11-11",
      "description": "No Greenpixie numeric figure is embedded in any entry. The approach is acknowledged qualitatively (size bucketing) but no constant is derived from it, because the CC BY-NC-ND licence forbids commercial use and the published absolute figures are deliberately scale-masked.",
      "entity": "Greenpixie",
      "id": "CORR-03",
      "rationale": "Embedding would violate the licence policy and yield unverifiable numbers at an unknown inference scale."
    },
    {
      "action": "corrected",
      "date": "2026-11-11",
      "description": "Luccioni Table 2 unit trap corrected: 0.047 kWh per 1,000 inferences → 0.047 Wh per inference; 2.907 kWh per 1,000 inferences → 2.907 Wh per image. The derivations record the ÷1,000 then ×1,000 conversion explicitly.",
      "entity": "Luccioni kWh-per-1,000 unit trap",
      "id": "CORR-04",
      "rationale": "Per D-09 the conversion yields numerically identical values, but the step must be documented to prevent future unit errors when adapting the coefficients."
    },
    {
      "action": "dropped",
      "date": "2026-11-11",
      "description": "The unsourced \"93 %\" cache-energy-savings claim is dropped. Its complement ships explicitly as the labelled CACHED_PREFILL_MULTIPLIER = 0.07 HYPOTHESIS with no source and an upgrade path in MDR-13-08; no primary source (ML.ENERGY, TokenPowerBench, EcoLogits methodology) publishes a measured prefix-caching energy reduction.",
      "entity": "unsourced \"93 %\" cache-savings claim",
      "id": "CORR-05",
      "rationale": "Per D-08/D-13 the unsourced 93 % figure is dropped; the cached-prefill lane ships explicitly as the labelled 0.07 HYPOTHESIS multiplier with no source and the MDR-13-08 upgrade path."
    },
    {
      "action": "dropped",
      "date": "2026-11-11",
      "description": "Artifact named in the milestone brief confirmed absent from all primary-source literature and dropped; the three source families (EcoLogits, ML.ENERGY, TokenPowerBench) cover the scientific need.",
      "entity": "cometapi artifact",
      "id": "CORR-06",
      "rationale": "Operator decision point in the Phase 13 roadmap: produce or drop. Verified absence across the three source families — dropped."
    },
    {
      "action": "corrected",
      "date": "2026-11-11",
      "description": "Re-derived the C_out denominator from a per-GPU gpu_energy asset to per-request IT energy (GPU + non-GPU server, PUE excluded) at the same anchor model as each C_in bucket. Old → new per entry: C_OUT_PETIT 0.0000410987 → 0.00007432415500270376 at 1 GPU (server term 0.000029222480022164215); C_OUT_MOYEN 0.0000462234 → 0.0001584969245753336 at 2 GPUs (server term 0.00006274748335415947); C_OUT_MASSIF_MOE 0.0000803883 → 0.0005501653604263294 at 4 GPUs (server term 0.00022735963562485242); C_OUT_GENERIQUE 0.000439119 → 0.0076252864360317404 at 16 GPUs (server term 0.0032792719154543922). All four coefficients move ≥ 5 %, so MDR-13-03 requires a new registry release. Because version and effectiveFrom stay 2026-11-11 (same-day remediation of an unshipped registry), that release is the revision 2 release, discriminated by the top-level revision integer rather than by a version-date change.",
      "entity": "C_out denominator and system boundary",
      "id": "CORR-07",
      "rationale": "MDR-13-03 materiality (all four values move ≥ 5 %) and MDR-13-04 system boundary (GPU + non-GPU server + PUE, with PUE applied once by the consumer to the summed prefill + decode IT energy). The earlier values were per-GPU assets presented against a whole-request boundary, so the declared boundary was not implemented by any coefficient."
    },
    {
      "action": "corrected",
      "date": "2026-11-11",
      "description": "Re-anchored and re-bounded the four C_in buckets. Old boundaries (active parameters): PETIT ≤1B, MOYEN 1B–10B, MASSIF_MOE 10B–70B, GÉNÉRIQUE >70B. New disjoint total-parameter boundaries: PETIT ≤10B; MOYEN >10B and ≤50B; MASSIF_MOE >50B and ≤200B; GÉNÉRIQUE >200B or unclassifiable. Anchors, each inside its bucket: PETIT meta-llama/Meta-Llama-3.1-8B (8.03B total / 8.03B active); MOYEN mistralai/Mixtral-8x7B-v0.1 (46.7B total / 12.9B active); MASSIF_MOE meta-llama/Meta-Llama-3.1-70B (70.55B total / 70.55B active); GÉNÉRIQUE extrapolation above meta-llama/Meta-Llama-3.1-405B (405.85B total / 405.85B active). The Mixtral active-parameter count is corrected from ≈7B to 12.9B against the pinned EcoLogits model catalog (node_modules/@ecologits/ecologits.js model entry mistralai/Mixtral-8x7B-v0.1: total 46.7, active 12.9).",
      "entity": "C_in bucket boundaries and anchors",
      "id": "CORR-08",
      "rationale": "MDR-13-02 scope-matched tier semantics and MDR-13-05 allocation: a bucket's anchor must lie inside the boundary it is labelled with, and the active/total parameter basis must be reproducible from the pinned catalog."
    },
    {
      "action": "corrected",
      "date": "2026-11-11",
      "description": "C_IN_MASSIF_MOE keeps its MEASURED tier, but its label, derivation.formula and derivation.extractionNote are restated as a model-specific Llama-3.1-70B H100 prefill measurement that the bucket references. The earlier bucket-blending and substitute-point wording is removed: no bucket average, no substitute model and no transformation is claimed or applied.",
      "entity": "C_IN_MASSIF_MOE scope and tier",
      "id": "CORR-09",
      "rationale": "MDR-13-02: a model-specific measurement is MEASURED when the entry publishes the model identity and applies no transformation; a bucket that references it does not turn it into a bucket average."
    },
    {
      "action": "corrected",
      "date": "2026-11-12",
      "description": "The TokenPowerBench record (arXiv:2512.03024) is corrected to what the source actually publishes. Licence: the arXiv record carries licenses/nonexclusive-distrib/1.0 and the AAAI-26 camera-ready carries an all-rights-reserved notice — Copyright (c) 2026, Association for the Advancement of Artificial Intelligence. All rights reserved. — so the previously recorded CC BY 4.0 licence appears nowhere on the record and was wrong. Locator: the paper contains exactly one table (Table 1); the energy results are Figures 2–6, so the recorded Table 3 locator does not exist. Batch sweep: the tested range is 32–1024 with the curve flattening at ~256, not the previously recorded 32→256 range. Publication facts: the paper is AAAI-26 peer-reviewed, uses the model label Llama3-70B, and was run on an 8-node cluster of 4× H100 94 GB per node. Value: no printed per-input-token prefill energy in Wh exists anywhere in the paper — Figure 2(a) is captioned Prefill Energy, reports energy per prefill stage, and prints no y-axis unit, so a per-token conversion needs a prefill token count the paper does not publish. No shipped coefficient is derived from this source from revision 3 onward. 2026-11-12 literature survey for the negative premise (13-UAT.md test 2): two further sources do publish a per-input-token prefill energy and are excluded on licence grounds, not for absence of the quantity — Ruf & Detyniecki, The Cost of Context (arXiv:2610.19819, HotCarbon'26 / ACM SIGENERGY Energy Informatics Review), reports Llama-3.1-8B prefill at 0.0090 J per input token (vLLM) and 0.0678 J (HF baseline) at ~112k context, but the record carries the arXiv default non-exclusive licence with no Creative Commons grant; and Greenpixie (arXiv:2609.33965) publishes the prefill/decode split in Wh per token with real batching across 1.8B–1T parameters, but is CC BY-NC-ND 4.0 with scale-masked absolutes (CORR-03). Splitwise (ISCA'24) is openly licensed (data CC BY 4.0, code MIT) but measures phase power and throughput on GPT-3-class models, not at the four bucket anchors. ML.ENERGY Benchmark v3 publishes output-token energy only; its PD-disaggregation decode-energy share at Llama-3.1-8B and Llama-3.1-70B is a published phase split but not a per-input-token figure. The premise therefore holds as a licence-admissibility claim, never as an assertion that no such measurement exists anywhere.",
      "entity": "TokenPowerBench citation and licence; per-input-token prefill source triage",
      "id": "CORR-10",
      "rationale": "MDR-13-09 admits only openly licensed, dated and edition-pinned secondary factors, so a record under the arXiv non-exclusive distribution licence with an AAAI all-rights-reserved notice is inadmissible as an emission factor; MDR-13-03 requires the change to be recorded with old and new values, and the MDR-13-07 correction withdraws the C_in clause whose premise this citation supplied. Every fact here was verified against the network on 2026-11-12 (13-UAT.md tests 1–2); no re-fetch is performed by this plan."
    },
    {
      "action": "corrected",
      "date": "2026-11-12",
      "description": "The four C_in coefficients are re-derived from the paired EcoLogits C_out at the conservative prefill fraction and re-tiered. Old → new per entry: C_IN_PETIT 0.0003 → 0.00001858103875067594; C_IN_MOYEN 0.0009 → 0.0000396242311438334; C_IN_MASSIF_MOE 0.002 → 0.00013754134010658236, now shipped as C_IN_MASSIF; C_IN_GENERIQUE 0.003 → 0.0019063216090079351. All four move far beyond 5 %, so MDR-13-03 requires a registry release, published here as revision 3 with version and effectiveFrom 2026-11-12. C_IN_MASSIF_MOE moves MEASURED → HYPOTHESIS: its old value was readable only off a figure axis with no printed unit and appears nowhere in the paper, so it is not a published quantity, and CORR-09 is superseded on the tier. Every new value is PREFILL_FRACTION 0.25 × the paired EcoLogits-derived C_out at the same anchor model, the product-formula alternative to the previous heuristic interpolation, with the sanity bound C_in < C_out recorded per entry in derivation.sanityBound and derivation.prefillFractionBand [0.10, 0.25]. cOutOverCIn moves from 0.2477, 0.1761, 0.2751 and 2.5418 to 4.0 for all four buckets, so no input token is priced above an output token at any anchor. Replacement source edition, the same edition every C_OUT locator names: the pinned EcoLogits package @ecologits/ecologits.js@3.0.0 (git sha c739e8d61f6a12a85864adb698ab85623fe70f3c, synced 2026-10-02), whose methodology documentation is CC BY-SA 4.0.",
      "entity": "C_in coefficients, tier and basis",
      "id": "CORR-11",
      "rationale": "MDR-13-17 records the prefill-fraction basis: with no admissible per-input-token prefill measurement, C_in ships as a documented HYPOTHESIS anchored below its C_out, which the phase physics requires because prefill is compute-bound at high utilisation while decode is memory-bandwidth-bound and dearer per token. MDR-13-02 supplies the tier rule the old MEASURED label failed: MEASURED requires the source to publish the quantity at the entry's scope. MDR-13-03 requires the old and new values, the source edition and the date."
    },
    {
      "action": "corrected",
      "date": "2026-11-12",
      "description": "The MASSIF bucket id is renamed from C_OUT_MASSIF_MOE / C_IN_MASSIF_MOE to C_OUT_MASSIF / C_IN_MASSIF. The boundaries (PETIT ≤10B; MOYEN >10B and ≤50B; MASSIF >50B and ≤200B; GÉNÉRIQUE >200B or unclassifiable) and the anchor (meta-llama/Meta-Llama-3.1-70B, 70.55B dense) are unchanged, so no coefficient moves because of this correction. The dense/mixture-of-experts distinction now lives where it actually holds — in derivation.anchorModel and in the label anchor clause: MOYEN names its Mixtral-8x7B anchor as a mixture-of-experts model (46.7B total / 12.9B active) and PETIT, MASSIF and GÉNÉRIQUE name dense anchors. The ids as written in CORR-07, CORR-08 and CORR-09 are historical: the change log records what the ids were at the time of the change.",
      "entity": "MASSIF_MOE bucket naming",
      "id": "CORR-12",
      "rationale": "MDR-13-16 records that a bucket name is a public claim: the retired suffix asserted a composition the bucket does not implement, because the only mixture-of-experts anchor in the set sits in MOYEN. Renaming keeps the accepted boundaries and anchors while making the id describe only what the bucket routes."
    }
  ],
  "effectiveFrom": "2026-11-12",
  "entries": [
    {
      "accessedDate": "2026-11-11",
      "citation": "Luccioni, A. S., Jernite, Y., & Strubell, E. (2024). Power Hungry Processing. Proceedings of the 2024 ACM Conference on Fairness, Accountability, and Transparency, Rio de Janeiro, Brazil. DOI: 10.1145/3630106.3658542.",
      "derivation": {
        "configNote": "AWS us-west-2, 8x NVIDIA A100-SXM4-80GB, Code Carbon monitoring",
        "extractionNote": "Table 2, Text generation row: 0.047 kWh per 1,000 inferences → 0.047 Wh per inference (unit trap: divide by 1,000, then multiply by 1000 for Wh conversion yields identical numeric value)",
        "formula": "Direct measurement reported in original source",
        "inputIds": []
      },
      "id": "FLAT_TEXT_GEN",
      "label": "Flat-rate energy per standard text-generation inference",
      "license": "CC BY-SA 4.0 (on arXiv)",
      "locator": "https://arxiv.org/abs/2311.16863 Table 2; ACM FAccT '24 doi:10.1145/3630106.3658542",
      "referencedMdrIds": [
        "MDR-13-01",
        "MDR-13-02",
        "MDR-13-04",
        "MDR-13-07",
        "MDR-13-09"
      ],
      "source": "Luccioni et al. 2024 — Power Hungry Processing (arXiv:2311.16863v3)",
      "tier": "MEASURED",
      "unit": "Wh/inference",
      "usedBy": [
        "workers/mcp/src/energy-model.ts"
      ],
      "uncertainty": {
        "kind": "unquantified",
        "reason": "Luccioni et al. report a single point estimate per task without an uncertainty interval at this scope",
        "upgradePath": "adopt a source-published interval if a later edition reports one"
      },
      "value": 0.047
    },
    {
      "accessedDate": "2026-11-11",
      "citation": "Luccioni, A. S., Jernite, Y., & Strubell, E. (2024). Power Hungry Processing. Proceedings of the 2024 ACM Conference on Fairness, Accountability, and Transparency, Rio de Janeiro, Brazil. DOI: 10.1145/3630106.3658542.",
      "derivation": {
        "configNote": "Same hardware/platform as other rows in Table 2",
        "extractionNote": "Table 2, Image generation row: 2.907 kWh per 1,000 inferences → 2.907 Wh per inference",
        "formula": "Direct measurement reported in original source",
        "inputIds": []
      },
      "id": "FLAT_IMAGE_GEN",
      "label": "Flat-rate energy per image-generation inference",
      "license": "CC BY-SA 4.0 (on arXiv)",
      "locator": "https://arxiv.org/abs/2311.16863 Table 2; ACM FAccT '24 doi:10.1145/3630106.3658542",
      "referencedMdrIds": [
        "MDR-13-01",
        "MDR-13-02",
        "MDR-13-04",
        "MDR-13-07",
        "MDR-13-09"
      ],
      "source": "Luccioni et al. 2024 — Power Hungry Processing (arXiv:2311.16863v3)",
      "tier": "MEASURED",
      "unit": "Wh/image",
      "usedBy": [
        "workers/mcp/src/energy-model.ts"
      ],
      "uncertainty": {
        "kind": "unquantified",
        "reason": "Luccioni et al. report a single point estimate per task without an uncertainty interval at this scope",
        "upgradePath": "adopt a source-published interval for image generation if a later edition reports one"
      },
      "value": 2.907
    },
    {
      "accessedDate": "2026-11-11",
      "citation": "Ember (2026). Yearly Electricity Data 2026. Republished by Our World in Data under CC BY 4.0. Last updated June 30, 2026.",
      "derivation": null,
      "id": "GRID_FACTOR_EMBER_2025",
      "label": "World lifecycle carbon intensity, generation-based, 2025 annual average",
      "license": "CC BY 4.0",
      "locator": "https://ourworldindata.org/grapher/electricity-mix (last updated 2026-06-30); original: https://ember-energy.org/data/yearly-electricity-data/",
      "referencedMdrIds": [
        "MDR-13-02",
        "MDR-13-03",
        "MDR-13-06",
        "MDR-13-13",
        "MDR-13-15"
      ],
      "source": "Ember Global Electricity Review 2026, republished by Our World in Data",
      "tier": "MEASURED",
      "unit": "g CO₂e/kWh",
      "usedBy": [
        "workers/mcp/src/energy-model.ts"
      ],
      "uncertainty": {
        "kind": "unquantified",
        "reason": "Ember reports an annual world average without an uncertainty band at this scope",
        "upgradePath": "adopt a published band if Ember or Our World in Data add one"
      },
      "value": 458.29
    },
    {
      "accessedDate": "2026-11-11",
      "citation": "Conservative upper-bound hypothesis. EcoLogits methodology reports provider-specific PUE: Anthropic 1.09–1.14, OpenAI 1.20, Google 1.09, Mistral 1.16. Value 1.30 exceeds all documented PUEs.",
      "derivation": null,
      "id": "DATACENTER_UPLIFT",
      "label": "Datacenter overhead uplift factor (PUE-conservative hypothesis)",
      "license": "N/A (internal hypothesis)",
      "locator": "https://ecologits.ai/latest/methodology/llm_inference/ PUE table; no provider reaches 1.30",
      "referencedMdrIds": [
        "MDR-13-03",
        "MDR-13-05",
        "MDR-13-08",
        "MDR-13-12",
        "MDR-13-14"
      ],
      "source": "Bloomy conservative assumption — EcoLogits provider PUE table tops out at 1.20 (OpenAI)",
      "tier": "HYPOTHESIS",
      "unit": "multiplier",
      "usedBy": [
        "workers/mcp/src/energy-model.ts"
      ],
      "uncertainty": {
        "kind": "unquantified",
        "reason": "unsourced conservative hypothesis; no interval exists",
        "upgradePath": "replace with a measured factor and its reported interval per MDR-13-14"
      },
      "value": 1.3
    },
    {
      "accessedDate": "2026-11-11",
      "citation": "Luccioni et al. 2024 measures ten tasks across five modalities but does not define a 'complex task' category. The ×10 multiplier (0.047 × 10 = 0.47 Wh) is a conservative Bloomy hypothesis, not sourced from any primary publication.",
      "derivation": {
        "configNote": "Round multiplier applied conservatively; actual complex-task energy varies by workload",
        "extractionNote": "No primary source defines 'complex task'; ×10 represents order-of-magnitude increase over standard text generation",
        "formula": "FLAT_TEXT_GEN.value × 10 (conservative upper bound)",
        "inputIds": [
          "FLAT_TEXT_GEN"
        ]
      },
      "id": "FLAT_COMPLEX_TASK",
      "label": "Flat-rate energy per complex/reasoning inference (×10 hypothesis)",
      "license": "N/A (internal hypothesis)",
      "locator": "Internal derivation; Luccioni et al. 2024 defines no 'complex task' category",
      "referencedMdrIds": [
        "MDR-13-01",
        "MDR-13-02",
        "MDR-13-10",
        "MDR-13-11"
      ],
      "source": "Bloomy conservative assumption — approximately 10× standard text rate, based on observed inference complexity variance",
      "tier": "HYPOTHESIS",
      "unit": "Wh/request",
      "usedBy": [
        "workers/mcp/src/energy-model.ts"
      ],
      "uncertainty": {
        "kind": "unquantified",
        "reason": "unsourced conservative hypothesis (×10 over standard text) with no published interval",
        "upgradePath": "replace with a measured complex-task interval if a later source defines that scope per MDR-13-11"
      },
      "value": 0.47
    },
    {
      "accessedDate": "2026-11-11",
      "citation": "Rincé, S., & Banse, A. (2025). EcoLogits: Evaluating the Environmental Impacts of Generative AI. Journal of Open Source Software, 10(111), 7471. doi:10.21105/joss.07471. Regression fitted on ML.ENERGY benchmark data.",
      "derivation": {
        "anchorActiveParamsB": 8.03,
        "anchorModel": "meta-llama/Meta-Llama-3.1-8B",
        "anchorTotalParamsB": 8.03,
        "configNote": "Anchor meta-llama/Meta-Llama-3.1-8B (8.03B total / 8.03B active) sits inside the PETIT bucket (≤10B total parameters). The regression and latency terms use active parameters; GPU sizing uses total parameters. gpuRequiredCount = 1 from the EcoLogits memory rule (2^ceil(log2(ceil(GPU_MEMORY_OVERHEAD × 8.03B × QUANTIZATION_BITS / 8 ÷ GPU_MEMORY_GB)))); BATCH_SIZE = 64; reference GPU class NVIDIA H100 80 GB.",
        "cOutOverCIn": 4,
        "crossCheck": "not performed — no same-scope pinned ML.ENERGY/TokenPowerBench point for this anchor model at batch 64; upgrade path: record the measured per-output-token point for the anchor model when one is published",
        "extractionNote": "Chain: the per-GPU gpu_energy asset at BATCH_SIZE = 64 (0.00004510167498053955 Wh per output token) × gpuRequiredCount (1) = 0.00004510167498053955 Wh, plus server_energy (0.000029222480022164215 Wh per output token) from the package's own tps-null latency regression = 0.00007432415500270376 Wh per output token of request IT energy. PUE is NOT in this coefficient: DATACENTER_UPLIFT is applied once by the consumer to the summed prefill + decode per-request IT energy, matching EcoLogits request_energy = PUE × request_it_energy.",
        "formula": "f_out = gpuRequiredCount × (ALPHA_REGRESSION · exp(BETA_REGRESSION · BATCH_SIZE) · anchorActiveParamsB + GAMMA_REGRESSION) + ((LATENCY_ALPHA · anchorActiveParamsB + LATENCY_BETA · BATCH_SIZE + LATENCY_GAMMA) / 3600) × SERVER_POWER × (gpuRequiredCount / SERVER_GPUS) × (1 / BATCH_SIZE) × 1000 Wh per output token, with gpuRequiredCount = 2^ceil(log2(ceil(GPU_MEMORY_OVERHEAD × anchorTotalParamsB × QUANTIZATION_BITS / 8 ÷ GPU_MEMORY_GB))), anchorActiveParamsB in billions, BATCH_SIZE = 64 and ttft = 0; the parenthesised latency term yields kWh per output token before the × 1000 conversion to Wh.",
        "gpuRequiredCount": 1,
        "gpuSizingBasis": "gpuRequiredCount = 2^ceil(log2(ceil(GPU_MEMORY_OVERHEAD × anchorTotalParamsB × QUANTIZATION_BITS / 8 ÷ GPU_MEMORY_GB))); EcoLogits memory model, total parameters (not active), 80 GB per GPU, 16-bit quantization, 1.2 memory overhead",
        "includesPue": false,
        "includesServerEnergy": true,
        "inputIds": [
          "ALPHA_REGRESSION",
          "BETA_REGRESSION",
          "GAMMA_REGRESSION",
          "BATCH_SIZE",
          "GPU_MEMORY_OVERHEAD",
          "QUANTIZATION_BITS",
          "GPU_MEMORY_GB",
          "LATENCY_ALPHA",
          "LATENCY_BETA",
          "LATENCY_GAMMA",
          "SERVER_POWER",
          "SERVER_GPUS"
        ],
        "perGpuValue": 0.00004510167498053955,
        "serverEnergyPerToken": 0.000029222480022164215
      },
      "id": "C_OUT_PETIT",
      "label": "C_out for PETIT bucket (≤10B total parameters; anchor Llama-3.1-8B, 8.03B dense) — per-request IT energy (GPU + server) per output token at 1 GPU",
      "license": "MPL-2.0 (package) / CC BY-SA 4.0 (methodology docs)",
      "locator": "@ecologits/ecologits.js@3.0.0 (git sha c739e8d61f6a12a85864adb698ab85623fe70f3c, synced 2026-10-02); https://ecologits.ai/latest/methodology/llm_inference/ regression form",
      "referencedMdrIds": [
        "MDR-13-02",
        "MDR-13-04",
        "MDR-13-07",
        "MDR-13-09",
        "MDR-13-12",
        "MDR-13-16"
      ],
      "source": "EcoLogits regression on ML.ENERGY measurements (arXiv:2505.06371)",
      "tier": "CALIBRATED",
      "unit": "Wh/token",
      "usedBy": [
        "workers/mcp/src/energy-model.ts"
      ],
      "uncertainty": {
        "kind": "unquantified",
        "reason": "the EcoLogits regression publishes coefficients without a per-bucket interval, and the anchor points are model-specific",
        "upgradePath": "record a fitted interval if EcoLogits publishes one, or a measured ML.ENERGY interval for the anchor model"
      },
      "value": 0.00007432415500270376
    },
    {
      "accessedDate": "2026-11-11",
      "citation": "Rincé, S., & Banse, A. (2025). EcoLogits: Evaluating the Environmental Impacts of Generative AI. Journal of Open Source Software, 10(111), 7471. doi:10.21105/joss.07471. Regression fitted on ML.ENERGY benchmark data.",
      "derivation": {
        "anchorActiveParamsB": 12.9,
        "anchorModel": "mistralai/Mixtral-8x7B-v0.1",
        "anchorTotalParamsB": 46.7,
        "configNote": "Anchor mistralai/Mixtral-8x7B-v0.1 (46.7B total / 12.9B active per the pinned EcoLogits catalog) sits inside the MOYEN bucket (>10B and ≤50B total parameters). The regression and latency terms use active parameters; GPU sizing uses total parameters. gpuRequiredCount = 2 from the EcoLogits memory rule (2^ceil(log2(ceil(GPU_MEMORY_OVERHEAD × 46.7B × QUANTIZATION_BITS / 8 ÷ GPU_MEMORY_GB)))); BATCH_SIZE = 64; reference GPU class NVIDIA H100 80 GB. The anchor is a mixture-of-experts model: 46.7B total parameters, 12.9B active per token.",
        "cOutOverCIn": 4,
        "crossCheck": "not performed — no same-scope pinned ML.ENERGY/TokenPowerBench point for this anchor model at batch 64; upgrade path: record the measured per-output-token point for the anchor model when one is published",
        "extractionNote": "Chain: the per-GPU gpu_energy asset at BATCH_SIZE = 64 (0.00004787472061058706 Wh per output token) × gpuRequiredCount (2) = 0.00009574944122117412 Wh, plus server_energy (0.00006274748335415947 Wh per output token) from the package's own tps-null latency regression = 0.0001584969245753336 Wh per output token of request IT energy. PUE is NOT in this coefficient: DATACENTER_UPLIFT is applied once by the consumer to the summed prefill + decode per-request IT energy, matching EcoLogits request_energy = PUE × request_it_energy.",
        "formula": "f_out = gpuRequiredCount × (ALPHA_REGRESSION · exp(BETA_REGRESSION · BATCH_SIZE) · anchorActiveParamsB + GAMMA_REGRESSION) + ((LATENCY_ALPHA · anchorActiveParamsB + LATENCY_BETA · BATCH_SIZE + LATENCY_GAMMA) / 3600) × SERVER_POWER × (gpuRequiredCount / SERVER_GPUS) × (1 / BATCH_SIZE) × 1000 Wh per output token, with gpuRequiredCount = 2^ceil(log2(ceil(GPU_MEMORY_OVERHEAD × anchorTotalParamsB × QUANTIZATION_BITS / 8 ÷ GPU_MEMORY_GB))), anchorActiveParamsB in billions, BATCH_SIZE = 64 and ttft = 0; the parenthesised latency term yields kWh per output token before the × 1000 conversion to Wh.",
        "gpuRequiredCount": 2,
        "gpuSizingBasis": "gpuRequiredCount = 2^ceil(log2(ceil(GPU_MEMORY_OVERHEAD × anchorTotalParamsB × QUANTIZATION_BITS / 8 ÷ GPU_MEMORY_GB))); EcoLogits memory model, total parameters (not active), 80 GB per GPU, 16-bit quantization, 1.2 memory overhead",
        "includesPue": false,
        "includesServerEnergy": true,
        "inputIds": [
          "ALPHA_REGRESSION",
          "BETA_REGRESSION",
          "GAMMA_REGRESSION",
          "BATCH_SIZE",
          "GPU_MEMORY_OVERHEAD",
          "QUANTIZATION_BITS",
          "GPU_MEMORY_GB",
          "LATENCY_ALPHA",
          "LATENCY_BETA",
          "LATENCY_GAMMA",
          "SERVER_POWER",
          "SERVER_GPUS"
        ],
        "perGpuValue": 0.00004787472061058706,
        "serverEnergyPerToken": 0.00006274748335415947
      },
      "id": "C_OUT_MOYEN",
      "label": "C_out for MOYEN bucket (>10B and ≤50B total parameters; anchor Mixtral-8x7B, 46.7B total / 12.9B active, a mixture-of-experts model) — per-request IT energy (GPU + server) per output token at 2 GPUs",
      "license": "MPL-2.0 (package) / CC BY-SA 4.0 (methodology docs)",
      "locator": "@ecologits/ecologits.js@3.0.0 (git sha c739e8d61f6a12a85864adb698ab85623fe70f3c, synced 2026-10-02); https://ecologits.ai/latest/methodology/llm_inference/ regression form",
      "referencedMdrIds": [
        "MDR-13-02",
        "MDR-13-04",
        "MDR-13-07",
        "MDR-13-09",
        "MDR-13-12",
        "MDR-13-16"
      ],
      "source": "EcoLogits regression on ML.ENERGY measurements (arXiv:2505.06371)",
      "tier": "CALIBRATED",
      "unit": "Wh/token",
      "usedBy": [
        "workers/mcp/src/energy-model.ts"
      ],
      "uncertainty": {
        "kind": "unquantified",
        "reason": "the EcoLogits regression publishes coefficients without a per-bucket interval, and the anchor points are model-specific",
        "upgradePath": "record a fitted interval if EcoLogits publishes one, or a measured ML.ENERGY interval for the anchor model"
      },
      "value": 0.0001584969245753336
    },
    {
      "accessedDate": "2026-11-11",
      "citation": "Rincé, S., & Banse, A. (2025). EcoLogits: Evaluating the Environmental Impacts of Generative AI. Journal of Open Source Software, 10(111), 7471. doi:10.21105/joss.07471. Regression fitted on ML.ENERGY benchmark data.",
      "derivation": {
        "anchorActiveParamsB": 70.55,
        "anchorModel": "meta-llama/Meta-Llama-3.1-70B",
        "anchorTotalParamsB": 70.55,
        "configNote": "Anchor meta-llama/Meta-Llama-3.1-70B (70.55B total / 70.55B active) sits inside the MASSIF bucket (>50B and ≤200B total parameters). The regression and latency terms use active parameters; GPU sizing uses total parameters. gpuRequiredCount = 4 from the EcoLogits memory rule (2^ceil(log2(ceil(GPU_MEMORY_OVERHEAD × 70.55B × QUANTIZATION_BITS / 8 ÷ GPU_MEMORY_GB)))); BATCH_SIZE = 64; reference GPU class NVIDIA H100 80 GB.",
        "cOutOverCIn": 4,
        "crossCheck": "not performed — no same-scope pinned ML.ENERGY/TokenPowerBench point for this anchor model at batch 64; upgrade path: record the measured per-output-token point for the anchor model when one is published",
        "extractionNote": "Chain: the per-GPU gpu_energy asset at BATCH_SIZE = 64 (0.00008070143120036925 Wh per output token) × gpuRequiredCount (4) = 0.000322805724801477 Wh, plus server_energy (0.00022735963562485242 Wh per output token) from the package's own tps-null latency regression = 0.0005501653604263294 Wh per output token of request IT energy. PUE is NOT in this coefficient: DATACENTER_UPLIFT is applied once by the consumer to the summed prefill + decode per-request IT energy, matching EcoLogits request_energy = PUE × request_it_energy.",
        "formula": "f_out = gpuRequiredCount × (ALPHA_REGRESSION · exp(BETA_REGRESSION · BATCH_SIZE) · anchorActiveParamsB + GAMMA_REGRESSION) + ((LATENCY_ALPHA · anchorActiveParamsB + LATENCY_BETA · BATCH_SIZE + LATENCY_GAMMA) / 3600) × SERVER_POWER × (gpuRequiredCount / SERVER_GPUS) × (1 / BATCH_SIZE) × 1000 Wh per output token, with gpuRequiredCount = 2^ceil(log2(ceil(GPU_MEMORY_OVERHEAD × anchorTotalParamsB × QUANTIZATION_BITS / 8 ÷ GPU_MEMORY_GB))), anchorActiveParamsB in billions, BATCH_SIZE = 64 and ttft = 0; the parenthesised latency term yields kWh per output token before the × 1000 conversion to Wh.",
        "gpuRequiredCount": 4,
        "gpuSizingBasis": "gpuRequiredCount = 2^ceil(log2(ceil(GPU_MEMORY_OVERHEAD × anchorTotalParamsB × QUANTIZATION_BITS / 8 ÷ GPU_MEMORY_GB))); EcoLogits memory model, total parameters (not active), 80 GB per GPU, 16-bit quantization, 1.2 memory overhead",
        "includesPue": false,
        "includesServerEnergy": true,
        "inputIds": [
          "ALPHA_REGRESSION",
          "BETA_REGRESSION",
          "GAMMA_REGRESSION",
          "BATCH_SIZE",
          "GPU_MEMORY_OVERHEAD",
          "QUANTIZATION_BITS",
          "GPU_MEMORY_GB",
          "LATENCY_ALPHA",
          "LATENCY_BETA",
          "LATENCY_GAMMA",
          "SERVER_POWER",
          "SERVER_GPUS"
        ],
        "perGpuValue": 0.00008070143120036925,
        "serverEnergyPerToken": 0.00022735963562485242
      },
      "id": "C_OUT_MASSIF",
      "label": "C_out for MASSIF bucket (>50B and ≤200B total parameters; anchor Llama-3.1-70B, 70.55B dense) — per-request IT energy (GPU + server) per output token at 4 GPUs",
      "license": "MPL-2.0 (package) / CC BY-SA 4.0 (methodology docs)",
      "locator": "@ecologits/ecologits.js@3.0.0 (git sha c739e8d61f6a12a85864adb698ab85623fe70f3c, synced 2026-10-02); https://ecologits.ai/latest/methodology/llm_inference/ regression form",
      "referencedMdrIds": [
        "MDR-13-02",
        "MDR-13-04",
        "MDR-13-07",
        "MDR-13-09",
        "MDR-13-12",
        "MDR-13-16"
      ],
      "source": "EcoLogits regression on ML.ENERGY measurements (arXiv:2505.06371)",
      "tier": "CALIBRATED",
      "unit": "Wh/token",
      "usedBy": [
        "workers/mcp/src/energy-model.ts"
      ],
      "uncertainty": {
        "kind": "unquantified",
        "reason": "the EcoLogits regression publishes coefficients without a per-bucket interval, and the anchor points are model-specific",
        "upgradePath": "record a fitted interval if EcoLogits publishes one, or a measured ML.ENERGY interval for the anchor model"
      },
      "value": 0.0005501653604263294
    },
    {
      "accessedDate": "2026-11-11",
      "citation": "Rincé, S., & Banse, A. (2025). EcoLogits: Evaluating the Environmental Impacts of Generative AI. Journal of Open Source Software, 10(111), 7471. doi:10.21105/joss.07471. Regression fitted on ML.ENERGY benchmark data.",
      "derivation": {
        "anchorActiveParamsB": 405.85,
        "anchorModel": "extrapolation above meta-llama/Meta-Llama-3.1-405B",
        "anchorTotalParamsB": 405.85,
        "configNote": "Anchor is an extrapolation above meta-llama/Meta-Llama-3.1-405B (405.85B total / 405.85B active, the largest catalog model), covering the GÉNÉRIQUE bucket (>200B total parameters or unclassified). The regression and latency terms use active parameters; GPU sizing uses total parameters. gpuRequiredCount = 16 from the EcoLogits memory rule (2^ceil(log2(ceil(GPU_MEMORY_OVERHEAD × 405.85B × QUANTIZATION_BITS / 8 ÷ GPU_MEMORY_GB)))); BATCH_SIZE = 64; reference GPU class NVIDIA H100 80 GB.",
        "cOutOverCIn": 4,
        "crossCheck": "not performed — no same-scope pinned ML.ENERGY/TokenPowerBench point for this anchor model at batch 64; upgrade path: record the measured per-output-token point for the anchor model when one is published",
        "extractionNote": "Chain: the per-GPU gpu_energy asset at BATCH_SIZE = 64 (0.00027162590753608426 Wh per output token) × gpuRequiredCount (16) = 0.004346014520577348 Wh, plus server_energy (0.0032792719154543922 Wh per output token) from the package's own tps-null latency regression = 0.0076252864360317404 Wh per output token of request IT energy. PUE is NOT in this coefficient: DATACENTER_UPLIFT is applied once by the consumer to the summed prefill + decode per-request IT energy, matching EcoLogits request_energy = PUE × request_it_energy.",
        "formula": "f_out = gpuRequiredCount × (ALPHA_REGRESSION · exp(BETA_REGRESSION · BATCH_SIZE) · anchorActiveParamsB + GAMMA_REGRESSION) + ((LATENCY_ALPHA · anchorActiveParamsB + LATENCY_BETA · BATCH_SIZE + LATENCY_GAMMA) / 3600) × SERVER_POWER × (gpuRequiredCount / SERVER_GPUS) × (1 / BATCH_SIZE) × 1000 Wh per output token, with gpuRequiredCount = 2^ceil(log2(ceil(GPU_MEMORY_OVERHEAD × anchorTotalParamsB × QUANTIZATION_BITS / 8 ÷ GPU_MEMORY_GB))), anchorActiveParamsB in billions, BATCH_SIZE = 64 and ttft = 0; the parenthesised latency term yields kWh per output token before the × 1000 conversion to Wh.",
        "gpuRequiredCount": 16,
        "gpuSizingBasis": "gpuRequiredCount = 2^ceil(log2(ceil(GPU_MEMORY_OVERHEAD × anchorTotalParamsB × QUANTIZATION_BITS / 8 ÷ GPU_MEMORY_GB))); EcoLogits memory model, total parameters (not active), 80 GB per GPU, 16-bit quantization, 1.2 memory overhead",
        "includesPue": false,
        "includesServerEnergy": true,
        "inputIds": [
          "ALPHA_REGRESSION",
          "BETA_REGRESSION",
          "GAMMA_REGRESSION",
          "BATCH_SIZE",
          "GPU_MEMORY_OVERHEAD",
          "QUANTIZATION_BITS",
          "GPU_MEMORY_GB",
          "LATENCY_ALPHA",
          "LATENCY_BETA",
          "LATENCY_GAMMA",
          "SERVER_POWER",
          "SERVER_GPUS"
        ],
        "perGpuValue": 0.00027162590753608426,
        "serverEnergyPerToken": 0.0032792719154543922
      },
      "id": "C_OUT_GENERIQUE",
      "label": "C_out for GÉNÉRIQUE bucket (>200B total parameters or unclassified; extrapolation above Llama-3.1-405B, 405.85B dense) — per-request IT energy (GPU + server) per output token at 16 GPUs",
      "license": "MPL-2.0 (package) / CC BY-SA 4.0 (methodology docs)",
      "locator": "@ecologits/ecologits.js@3.0.0 (git sha c739e8d61f6a12a85864adb698ab85623fe70f3c, synced 2026-10-02); https://ecologits.ai/latest/methodology/llm_inference/ regression form",
      "referencedMdrIds": [
        "MDR-13-02",
        "MDR-13-04",
        "MDR-13-07",
        "MDR-13-09",
        "MDR-13-12",
        "MDR-13-16"
      ],
      "source": "EcoLogits regression on ML.ENERGY measurements (arXiv:2505.06371)",
      "tier": "CALIBRATED",
      "unit": "Wh/token",
      "usedBy": [
        "workers/mcp/src/energy-model.ts"
      ],
      "uncertainty": {
        "kind": "unquantified",
        "reason": "the EcoLogits regression publishes coefficients without a per-bucket interval, and the anchor points are model-specific",
        "upgradePath": "record a fitted interval if EcoLogits publishes one, or a measured ML.ENERGY interval for the anchor model"
      },
      "value": 0.0076252864360317404
    },
    {
      "accessedDate": "2026-11-12",
      "citation": "Bloomy hypothesis anchored on Rincé, S., & Banse, A. (2025). EcoLogits: Evaluating the Environmental Impacts of Generative AI. Journal of Open Source Software, 10(111), 7471. doi:10.21105/joss.07471. No cited primary source publishes a per-input-token prefill energy in Wh at this scope.",
      "derivation": {
        "anchorActiveParamsB": 8.03,
        "anchorModel": "meta-llama/Meta-Llama-3.1-8B",
        "anchorTotalParamsB": 8.03,
        "configNote": "Anchor meta-llama/Meta-Llama-3.1-8B (8.03B total / 8.03B active) sits inside the PETIT bucket (≤10B total parameters). C_in is anchored on the paired C_out at the same anchor model: C_IN_PETIT = PREFILL_FRACTION × C_OUT_PETIT. Prefill processes all input tokens in a single forward pass and is compute-bound at high utilisation, while decode re-reads the active weights from HBM for every token and is memory-bandwidth-bound, so an input token costs less than an output token.",
        "extractionNote": "C_IN_PETIT = 0.25 × C_OUT_PETIT = 0.25 × 0.00007432415500270376 = 0.00001858103875067594 Wh per input token. PREFILL_FRACTION 0.25 is the conservative upper bound of the stated hypothesis band [0.10, 0.25] (decode between 4× and 10× prefill per token), so input energy is not understated at this anchor; the demoted ~3.5× illustration is not the source of the fraction. Sanity bound recorded 2026-11-12: C_IN_PETIT 0.00001858103875067594 < C_OUT_PETIT 0.00007432415500270376 (ratio 4.0), which the phase physics requires. Upgrade path: a measured per-input-token prefill energy for meta-llama/Meta-Llama-3.1-8B replaces the hypothesis and would carry the interval that source publishes (MDR-13-17).",
        "formula": "C_IN_PETIT = PREFILL_FRACTION × C_OUT_PETIT, with PREFILL_FRACTION = 0.25 (hypothesis; admissible band 0.10–0.25)",
        "inputIds": [
          "C_OUT_PETIT"
        ],
        "prefillFraction": 0.25,
        "prefillFractionBand": [
          0.1,
          0.25
        ],
        "sanityBound": "C_IN_PETIT = 0.00001858103875067594 < C_OUT_PETIT = 0.00007432415500270376 (ratio 4.000000000000000) — checked 2026-11-12"
      },
      "id": "C_IN_PETIT",
      "label": "C_in for PETIT bucket (≤10B total parameters; anchor Llama-3.1-8B, 8.03B dense) — hypothesized prefill energy per input token, PREFILL_FRACTION 0.25 × the bucket's C_out",
      "license": "N/A (internal hypothesis); anchored on the MPL-2.0 package / CC BY-SA 4.0 methodology figure of C_OUT_PETIT",
      "locator": "Internal derivation — see C_OUT_PETIT for the EcoLogits locator (@ecologits/ecologits.js@3.0.0, git sha c739e8d61f6a12a85864adb698ab85623fe70f3c, synced 2026-10-02); TokenPowerBench is not a source of this value (CORR-10)",
      "referencedMdrIds": [
        "MDR-13-02",
        "MDR-13-07",
        "MDR-13-09",
        "MDR-13-17"
      ],
      "source": "Bloomy hypothesis — PREFILL_FRACTION 0.25 × the EcoLogits-derived C_OUT_PETIT at the same anchor model. Basis: prefill is compute-bound at high utilisation while decode is memory-bandwidth-bound and dearer per token, and no cited source publishes a per-input-token prefill energy in Wh (CORR-10, MDR-13-17).",
      "tier": "HYPOTHESIS",
      "unit": "Wh/token",
      "usedBy": [
        "workers/mcp/src/energy-model.ts"
      ],
      "uncertainty": {
        "kind": "unquantified",
        "reason": "Bloomy hypothesis: no cited source publishes a per-input-token prefill energy at this anchor, so no source interval exists (D-06, MDR-13-10); the admissible band [0.10, 0.25] is the hypothesis domain recorded in the derivation, not a published uncertainty interval",
        "upgradePath": "replace with a measured per-input-token prefill energy for the anchor model and record the interval that source publishes"
      },
      "value": 0.00001858103875067594
    },
    {
      "accessedDate": "2026-11-12",
      "citation": "Bloomy hypothesis anchored on Rincé, S., & Banse, A. (2025). EcoLogits: Evaluating the Environmental Impacts of Generative AI. Journal of Open Source Software, 10(111), 7471. doi:10.21105/joss.07471. No cited primary source publishes a per-input-token prefill energy in Wh at this scope.",
      "derivation": {
        "anchorActiveParamsB": 12.9,
        "anchorModel": "mistralai/Mixtral-8x7B-v0.1",
        "anchorTotalParamsB": 46.7,
        "configNote": "Anchor mistralai/Mixtral-8x7B-v0.1 (46.7B total / 12.9B active per the pinned EcoLogits catalog) sits inside the MOYEN bucket (>10B and ≤50B total parameters). C_in is anchored on the paired C_out at the same anchor model: C_IN_MOYEN = PREFILL_FRACTION × C_OUT_MOYEN. Prefill processes all input tokens in a single forward pass and is compute-bound at high utilisation, while decode re-reads the active weights from HBM for every token and is memory-bandwidth-bound, so an input token costs less than an output token.",
        "extractionNote": "C_IN_MOYEN = 0.25 × C_OUT_MOYEN = 0.25 × 0.0001584969245753336 = 0.0000396242311438334 Wh per input token. PREFILL_FRACTION 0.25 is the conservative upper bound of the stated hypothesis band [0.10, 0.25] (decode between 4× and 10× prefill per token), so input energy is not understated at this anchor; the demoted ~3.5× illustration is not the source of the fraction. Sanity bound recorded 2026-11-12: C_IN_MOYEN 0.0000396242311438334 < C_OUT_MOYEN 0.0001584969245753336 (ratio 4.0), which the phase physics requires. Upgrade path: a measured per-input-token prefill energy for mistralai/Mixtral-8x7B-v0.1 replaces the hypothesis and would carry the interval that source publishes (MDR-13-17).",
        "formula": "C_IN_MOYEN = PREFILL_FRACTION × C_OUT_MOYEN, with PREFILL_FRACTION = 0.25 (hypothesis; admissible band 0.10–0.25)",
        "inputIds": [
          "C_OUT_MOYEN"
        ],
        "prefillFraction": 0.25,
        "prefillFractionBand": [
          0.1,
          0.25
        ],
        "sanityBound": "C_IN_MOYEN = 0.0000396242311438334 < C_OUT_MOYEN = 0.0001584969245753336 (ratio 4.000000000000000) — checked 2026-11-12"
      },
      "id": "C_IN_MOYEN",
      "label": "C_in for MOYEN bucket (>10B and ≤50B total parameters; anchor Mixtral-8x7B, 46.7B total / 12.9B active, a mixture-of-experts model) — hypothesized prefill energy per input token, PREFILL_FRACTION 0.25 × the bucket's C_out",
      "license": "N/A (internal hypothesis); anchored on the MPL-2.0 package / CC BY-SA 4.0 methodology figure of C_OUT_MOYEN",
      "locator": "Internal derivation — see C_OUT_MOYEN for the EcoLogits locator (@ecologits/ecologits.js@3.0.0, git sha c739e8d61f6a12a85864adb698ab85623fe70f3c, synced 2026-10-02); TokenPowerBench is not a source of this value (CORR-10)",
      "referencedMdrIds": [
        "MDR-13-02",
        "MDR-13-07",
        "MDR-13-09",
        "MDR-13-17"
      ],
      "source": "Bloomy hypothesis — PREFILL_FRACTION 0.25 × the EcoLogits-derived C_OUT_MOYEN at the same anchor model. Basis: prefill is compute-bound at high utilisation while decode is memory-bandwidth-bound and dearer per token, and no cited source publishes a per-input-token prefill energy in Wh (CORR-10, MDR-13-17).",
      "tier": "HYPOTHESIS",
      "unit": "Wh/token",
      "usedBy": [
        "workers/mcp/src/energy-model.ts"
      ],
      "uncertainty": {
        "kind": "unquantified",
        "reason": "Bloomy hypothesis: no cited source publishes a per-input-token prefill energy at this anchor, so no source interval exists (D-06, MDR-13-10); the admissible band [0.10, 0.25] is the hypothesis domain recorded in the derivation, not a published uncertainty interval",
        "upgradePath": "replace with a measured per-input-token prefill energy for the anchor model and record the interval that source publishes"
      },
      "value": 0.0000396242311438334
    },
    {
      "accessedDate": "2026-11-12",
      "citation": "Bloomy hypothesis anchored on Rincé, S., & Banse, A. (2025). EcoLogits: Evaluating the Environmental Impacts of Generative AI. Journal of Open Source Software, 10(111), 7471. doi:10.21105/joss.07471. No cited primary source publishes a per-input-token prefill energy in Wh at this scope.",
      "derivation": {
        "anchorActiveParamsB": 70.55,
        "anchorModel": "meta-llama/Meta-Llama-3.1-70B",
        "anchorTotalParamsB": 70.55,
        "configNote": "Anchor meta-llama/Meta-Llama-3.1-70B (70.55B total / 70.55B active) sits inside the MASSIF bucket (>50B and ≤200B total parameters). C_in is anchored on the paired C_out at the same anchor model: C_IN_MASSIF = PREFILL_FRACTION × C_OUT_MASSIF. Prefill processes all input tokens in a single forward pass and is compute-bound at high utilisation, while decode re-reads the active weights from HBM for every token and is memory-bandwidth-bound, so an input token costs less than an output token.",
        "extractionNote": "C_IN_MASSIF = 0.25 × C_OUT_MASSIF = 0.25 × 0.0005501653604263294 = 0.00013754134010658236 Wh per input token. PREFILL_FRACTION 0.25 is the conservative upper bound of the stated hypothesis band [0.10, 0.25] (decode between 4× and 10× prefill per token), so input energy is not understated at this anchor; the demoted ~3.5× illustration is not the source of the fraction. Sanity bound recorded 2026-11-12: C_IN_MASSIF 0.00013754134010658236 < C_OUT_MASSIF 0.0005501653604263294 (ratio 4.0), which the phase physics requires. Upgrade path: a measured per-input-token prefill energy for meta-llama/Meta-Llama-3.1-70B replaces the hypothesis and would carry the interval that source publishes (MDR-13-17).",
        "formula": "C_IN_MASSIF = PREFILL_FRACTION × C_OUT_MASSIF, with PREFILL_FRACTION = 0.25 (hypothesis; admissible band 0.10–0.25)",
        "inputIds": [
          "C_OUT_MASSIF"
        ],
        "prefillFraction": 0.25,
        "prefillFractionBand": [
          0.1,
          0.25
        ],
        "sanityBound": "C_IN_MASSIF = 0.00013754134010658236 < C_OUT_MASSIF = 0.0005501653604263294 (ratio 4.000000000000000) — checked 2026-11-12"
      },
      "id": "C_IN_MASSIF",
      "label": "C_in for MASSIF bucket (>50B and ≤200B total parameters; anchor Llama-3.1-70B, 70.55B dense) — hypothesized prefill energy per input token, PREFILL_FRACTION 0.25 × the bucket's C_out",
      "license": "N/A (internal hypothesis); anchored on the MPL-2.0 package / CC BY-SA 4.0 methodology figure of C_OUT_MASSIF",
      "locator": "Internal derivation — see C_OUT_MASSIF for the EcoLogits locator (@ecologits/ecologits.js@3.0.0, git sha c739e8d61f6a12a85864adb698ab85623fe70f3c, synced 2026-10-02); TokenPowerBench is not a source of this value (CORR-10)",
      "referencedMdrIds": [
        "MDR-13-02",
        "MDR-13-07",
        "MDR-13-09",
        "MDR-13-17"
      ],
      "source": "Bloomy hypothesis — PREFILL_FRACTION 0.25 × the EcoLogits-derived C_OUT_MASSIF at the same anchor model. Basis: prefill is compute-bound at high utilisation while decode is memory-bandwidth-bound and dearer per token, and no cited source publishes a per-input-token prefill energy in Wh (CORR-10, MDR-13-17).",
      "tier": "HYPOTHESIS",
      "unit": "Wh/token",
      "usedBy": [
        "workers/mcp/src/energy-model.ts"
      ],
      "uncertainty": {
        "kind": "unquantified",
        "reason": "Bloomy hypothesis: no cited source publishes a per-input-token prefill energy at this anchor, so no source interval exists (D-06, MDR-13-10); the admissible band [0.10, 0.25] is the hypothesis domain recorded in the derivation, not a published uncertainty interval",
        "upgradePath": "replace with a measured per-input-token prefill energy for the anchor model and record the interval that source publishes"
      },
      "value": 0.00013754134010658236
    },
    {
      "accessedDate": "2026-11-12",
      "citation": "Bloomy hypothesis anchored on Rincé, S., & Banse, A. (2025). EcoLogits: Evaluating the Environmental Impacts of Generative AI. Journal of Open Source Software, 10(111), 7471. doi:10.21105/joss.07471. No cited primary source publishes a per-input-token prefill energy in Wh at this scope.",
      "derivation": {
        "anchorActiveParamsB": 405.85,
        "anchorModel": "extrapolation above meta-llama/Meta-Llama-3.1-405B",
        "anchorTotalParamsB": 405.85,
        "configNote": "Anchor is an extrapolation above meta-llama/Meta-Llama-3.1-405B (405.85B total / 405.85B active, the largest catalog model) and sits inside the GÉNÉRIQUE bucket (>200B total parameters or unclassified). C_in is anchored on the paired C_out at the same anchor model: C_IN_GENERIQUE = PREFILL_FRACTION × C_OUT_GENERIQUE. Prefill processes all input tokens in a single forward pass and is compute-bound at high utilisation, while decode re-reads the active weights from HBM for every token and is memory-bandwidth-bound, so an input token costs less than an output token.",
        "extractionNote": "C_IN_GENERIQUE = 0.25 × C_OUT_GENERIQUE = 0.25 × 0.0076252864360317404 = 0.0019063216090079351 Wh per input token. PREFILL_FRACTION 0.25 is the conservative upper bound of the stated hypothesis band [0.10, 0.25] (decode between 4× and 10× prefill per token), so input energy is not understated at this anchor; the demoted ~3.5× illustration is not the source of the fraction. Sanity bound recorded 2026-11-12: C_IN_GENERIQUE 0.0019063216090079351 < C_OUT_GENERIQUE 0.0076252864360317404 (ratio 4.0), which the phase physics requires. Upgrade path: a measured per-input-token prefill energy at this scale replaces the hypothesis and would carry the interval that source publishes (MDR-13-17).",
        "formula": "C_IN_GENERIQUE = PREFILL_FRACTION × C_OUT_GENERIQUE, with PREFILL_FRACTION = 0.25 (hypothesis; admissible band 0.10–0.25)",
        "inputIds": [
          "C_OUT_GENERIQUE"
        ],
        "prefillFraction": 0.25,
        "prefillFractionBand": [
          0.1,
          0.25
        ],
        "sanityBound": "C_IN_GENERIQUE = 0.0019063216090079351 < C_OUT_GENERIQUE = 0.0076252864360317404 (ratio 4.000000000000000) — checked 2026-11-12"
      },
      "id": "C_IN_GENERIQUE",
      "label": "C_in for GÉNÉRIQUE bucket (>200B total parameters or unclassified; extrapolation above Llama-3.1-405B, 405.85B dense) — hypothesized prefill energy per input token, PREFILL_FRACTION 0.25 × the bucket's C_out",
      "license": "N/A (internal hypothesis); anchored on the MPL-2.0 package / CC BY-SA 4.0 methodology figure of C_OUT_GENERIQUE",
      "locator": "Internal derivation — see C_OUT_GENERIQUE for the EcoLogits locator (@ecologits/ecologits.js@3.0.0, git sha c739e8d61f6a12a85864adb698ab85623fe70f3c, synced 2026-10-02); TokenPowerBench is not a source of this value (CORR-10)",
      "referencedMdrIds": [
        "MDR-13-02",
        "MDR-13-07",
        "MDR-13-09",
        "MDR-13-17"
      ],
      "source": "Bloomy hypothesis — PREFILL_FRACTION 0.25 × the EcoLogits-derived C_OUT_GENERIQUE at the same anchor model. Basis: prefill is compute-bound at high utilisation while decode is memory-bandwidth-bound and dearer per token, and no cited source publishes a per-input-token prefill energy in Wh (CORR-10, MDR-13-17).",
      "tier": "HYPOTHESIS",
      "unit": "Wh/token",
      "usedBy": [
        "workers/mcp/src/energy-model.ts"
      ],
      "uncertainty": {
        "kind": "unquantified",
        "reason": "Bloomy hypothesis: no cited source publishes a per-input-token prefill energy at this anchor, so no source interval exists (D-06, MDR-13-10); the admissible band [0.10, 0.25] is the hypothesis domain recorded in the derivation, not a published uncertainty interval",
        "upgradePath": "replace with a measured per-input-token prefill energy for the anchor model and record the interval that source publishes"
      },
      "value": 0.0019063216090079351
    },
    {
      "accessedDate": "2026-11-11",
      "citation": "No primary source supplies a measured prefix-caching energy saving. The 0.07 multiplier is a Bloomy hypothesis with an upgrade path: a measured KV-cache on/off study would make it CALIBRATED. The unsourced cache-saving percentage circulated in early drafts is dropped (D-13) and must not reappear.",
      "derivation": {
        "configNote": "Applies only to cachedTokensIn; fresh input tokens use C_in unscaled. No measured prefix-caching energy ratio exists in ML.ENERGY, TokenPowerBench or the EcoLogits methodology.",
        "extractionNote": "Evidence-first lane (D-13): with no openly-licensed measurement available the multiplier ships as HYPOTHESIS, and the dropped draft figure is recorded in the corrections array rather than in this entry.",
        "formula": "C_cached = k_cache × C_in, with k_cache = 0.07 (Bloomy conservative assumption)",
        "inputIds": [
          "C_IN_PETIT",
          "C_IN_MOYEN",
          "C_IN_MASSIF",
          "C_IN_GENERIQUE"
        ]
      },
      "id": "CACHED_PREFILL_MULTIPLIER",
      "label": "Cached-prefill energy multiplier k_cache (× C_in) — unsourced Bloomy hypothesis",
      "license": "N/A (internal hypothesis)",
      "locator": "Internal derivation; no openly-licensed primary source publishes a measured prefix-caching energy ratio (ML.ENERGY, TokenPowerBench and EcoLogits methodology checked)",
      "referencedMdrIds": [
        "MDR-13-02",
        "MDR-13-08",
        "MDR-13-09"
      ],
      "source": "Bloomy conservative assumption — cached-prefill input tokens assumed to cost 7 % of the fresh-prefill coefficient",
      "tier": "HYPOTHESIS",
      "unit": "multiplier",
      "usedBy": [
        "workers/mcp/src/energy-model.ts"
      ],
      "uncertainty": {
        "kind": "unquantified",
        "reason": "unsourced conservative hypothesis; no interval exists",
        "upgradePath": "replace with a measured factor and its reported interval per MDR-13-08"
      },
      "value": 0.07
    }
  ],
  "methodologyDecisions": {
    "ids": [
      {
        "id": "MDR-13-01",
        "status": "active",
        "title": "Functional unit declaration"
      },
      {
        "id": "MDR-13-02",
        "status": "active",
        "title": "Epistemic tier definitions"
      },
      {
        "id": "MDR-13-03",
        "status": "active",
        "title": "Recalculation and materiality policy"
      },
      {
        "id": "MDR-13-04",
        "status": "active",
        "title": "System boundary definition"
      },
      {
        "id": "MDR-13-05",
        "status": "active",
        "title": "Allocation method"
      },
      {
        "id": "MDR-13-06",
        "status": "active",
        "title": "Grid factor method — location-based"
      },
      {
        "id": "MDR-13-07",
        "status": "active",
        "title": "Coefficient precedence framework"
      },
      {
        "id": "MDR-13-08",
        "status": "active",
        "title": "Cache multiplier treatment"
      },
      {
        "id": "MDR-13-09",
        "status": "active",
        "title": "Data hierarchy and quality"
      },
      {
        "id": "MDR-13-10",
        "status": "active",
        "title": "Uncertainty treatment"
      },
      {
        "id": "MDR-13-11",
        "status": "active",
        "title": "Exclusions declared"
      },
      {
        "id": "MDR-13-12",
        "status": "active",
        "title": "Batch size assumption"
      },
      {
        "id": "MDR-13-13",
        "status": "active",
        "title": "Market-based exclusion"
      },
      {
        "id": "MDR-13-14",
        "status": "active",
        "title": "Datacenter uplift factor"
      },
      {
        "id": "MDR-13-15",
        "status": "active",
        "title": "Registry versioning and change log policy"
      },
      {
        "id": "MDR-13-16",
        "status": "active",
        "title": "Bucket representation and naming"
      },
      {
        "id": "MDR-13-17",
        "status": "active",
        "title": "C_in basis — prefill fraction hypothesis"
      }
    ]
  },
  "parameters": [
    {
      "accessedDate": "2026-11-11",
      "description": "Regression α consumed when evaluating the per-output-token energy curve f_E(P_active, B) = (α · exp(β · B) · P_active + γ) / 1000 for every CALIBRATED C_out entry. The registry's Wh convention multiplies the package's kWh result by 1000 after its /1e3 step, so the number recorded here is the package's kWh-denominated coefficient used directly in the Wh evaluation.",
      "id": "ALPHA_REGRESSION",
      "locator": "dist/index.js named export GPU_ENERGY_ALPHA; ECOLOGITS_VERSION 0.11.2, git sha c739e8d61f6a12a85864adb698ab85623fe70f3c, synced 2026-10-02",
      "source": "@ecologits/ecologits.js@3.0.0 named export",
      "unit": "Wh per output token per billion active parameters",
      "value": 1.1665273170451914e-6
    },
    {
      "accessedDate": "2026-11-11",
      "description": "Regression β — the exponent coefficient of exp(β · B) in the same per-output-token energy curve; it sets how strongly the batch size B damps the per-token energy term. It feeds the regression evaluation of every CALIBRATED C_out entry.",
      "id": "BETA_REGRESSION",
      "locator": "dist/index.js named export GPU_ENERGY_BETA; ECOLOGITS_VERSION 0.11.2, git sha c739e8d61f6a12a85864adb698ab85623fe70f3c, synced 2026-10-02",
      "source": "@ecologits/ecologits.js@3.0.0 named export",
      "unit": "per batch unit",
      "value": -0.011205921025579175
    },
    {
      "accessedDate": "2026-11-11",
      "description": "Regression γ — the batch-independent intercept of the per-output-token energy curve; it is the term that survives as exp(β · B) tends to zero. It feeds the regression evaluation of every CALIBRATED C_out entry.",
      "id": "GAMMA_REGRESSION",
      "locator": "dist/index.js named export GPU_ENERGY_GAMMA; ECOLOGITS_VERSION 0.11.2, git sha c739e8d61f6a12a85864adb698ab85623fe70f3c, synced 2026-10-02",
      "source": "@ecologits/ecologits.js@3.0.0 named export",
      "unit": "Wh per output token",
      "value": 4.052928146734005e-5
    },
    {
      "accessedDate": "2026-11-11",
      "description": "Batch-size denominator of the regression evaluation (B in exp(β · B)) for the CALIBRATED C_out entries. It is inherited from the EcoLogits reference configuration, not a measurement of any provider's production batching.",
      "id": "BATCH_SIZE",
      "locator": "dist/index.js named export BATCH_SIZE; ECOLOGITS_VERSION 0.11.2, git sha c739e8d61f6a12a85864adb698ab85623fe70f3c, synced 2026-10-02",
      "source": "@ecologits/ecologits.js@3.0.0 named export",
      "unit": "sequences per batch",
      "value": 64
    },
    {
      "accessedDate": "2026-11-11",
      "description": "Per-GPU memory capacity in the GPU-count sizing rule: gpu_required_count = ceil(model_required_memory / GPU_MEMORY_GB). The reference configuration's whole GPU set is SERVER_GPUS of these devices.",
      "id": "GPU_MEMORY_GB",
      "locator": "dist/index.js named export GPU_MEMORY; ECOLOGITS_VERSION 0.11.2, git sha c739e8d61f6a12a85864adb698ab85623fe70f3c, synced 2026-10-02",
      "source": "@ecologits/ecologits.js@3.0.0 named export",
      "unit": "GB",
      "value": 80
    },
    {
      "accessedDate": "2026-11-11",
      "description": "Weight precision assumed by the GPU-sizing rule; model_required_memory scales linearly with it (totalParameterCount x bits / 8 bytes) before the GPU-capacity division.",
      "id": "QUANTIZATION_BITS",
      "locator": "dist/index.js named export MODEL_QUANTIZATION_BITS; ECOLOGITS_VERSION 0.11.2, git sha c739e8d61f6a12a85864adb698ab85623fe70f3c, synced 2026-10-02",
      "source": "@ecologits/ecologits.js@3.0.0 named export",
      "unit": "bits",
      "value": 16
    },
    {
      "accessedDate": "2026-11-11",
      "description": "Activation and runtime overhead multiplier applied inside model_required_memory before the GPU-capacity division: mul(mul(1.2, totalParameterCount), quantizationBits) / 8. Registered as a parameter rather than a literal of our sizing rule because it is a package model input the recompute must cite.",
      "id": "GPU_MEMORY_OVERHEAD",
      "locator": "dist/index.js model_required_memory compute: mul(mul(1.2, totalParameterCount), quantizationBits)/8",
      "source": "@ecologits/ecologits.js@3.0.0 model_required_memory asset literal (1.2)",
      "unit": "multiplier",
      "value": 1.2
    },
    {
      "accessedDate": "2026-11-11",
      "description": "Latency regression α for the server-energy path: seconds per output token per billion active parameters in the per-token latency curve.",
      "id": "LATENCY_ALPHA",
      "locator": "dist/index.js named export LATENCY_ALPHA; ECOLOGITS_VERSION 0.11.2, git sha c739e8d61f6a12a85864adb698ab85623fe70f3c, synced 2026-10-02",
      "source": "@ecologits/ecologits.js@3.0.0 named export",
      "unit": "seconds per output token per billion active parameters",
      "value": 6.785088094353663e-4
    },
    {
      "accessedDate": "2026-11-11",
      "description": "Latency regression β — the per-batch-unit term of the latency curve that, with α and the active parameter count, yields seconds per output token for the server-energy path.",
      "id": "LATENCY_BETA",
      "locator": "dist/index.js named export LATENCY_BETA; ECOLOGITS_VERSION 0.11.2, git sha c739e8d61f6a12a85864adb698ab85623fe70f3c, synced 2026-10-02",
      "source": "@ecologits/ecologits.js@3.0.0 named export",
      "unit": "seconds per output token per batch unit",
      "value": 3.119310311688259e-4
    },
    {
      "accessedDate": "2026-11-11",
      "description": "Latency regression γ — the batch-independent intercept of the latency curve, in seconds per output token; it feeds the server-energy latency term.",
      "id": "LATENCY_GAMMA",
      "locator": "dist/index.js named export LATENCY_GAMMA; ECOLOGITS_VERSION 0.11.2, git sha c739e8d61f6a12a85864adb698ab85623fe70f3c, synced 2026-10-02",
      "source": "@ecologits/ecologits.js@3.0.0 named export",
      "unit": "seconds per output token",
      "value": 0.019473717579473387
    },
    {
      "accessedDate": "2026-11-11",
      "description": "Rated power of one server in the reference configuration; multiplied by the latency-derived duty and divided across SERVER_GPUS it sizes the server (non-GPU) energy term.",
      "id": "SERVER_POWER",
      "locator": "dist/index.js named export SERVER_POWER; ECOLOGITS_VERSION 0.11.2, git sha c739e8d61f6a12a85864adb698ab85623fe70f3c, synced 2026-10-02",
      "source": "@ecologits/ecologits.js@3.0.0 named export",
      "unit": "kW",
      "value": 1.2
    },
    {
      "accessedDate": "2026-11-11",
      "description": "Number of GPUs per server in the reference configuration; it scales the per-GPU energy term up to a full server and divides the server power term in the server-energy path.",
      "id": "SERVER_GPUS",
      "locator": "dist/index.js named export SERVER_GPUS; ECOLOGITS_VERSION 0.11.2, git sha c739e8d61f6a12a85864adb698ab85623fe70f3c, synced 2026-10-02",
      "source": "@ecologits/ecologits.js@3.0.0 named export",
      "unit": "count",
      "value": 8
    }
  ],
  "revision": 3,
  "shipSet": [
    "FLAT_TEXT_GEN",
    "FLAT_IMAGE_GEN",
    "GRID_FACTOR_EMBER_2025",
    "DATACENTER_UPLIFT",
    "FLAT_COMPLEX_TASK",
    "C_OUT_PETIT",
    "C_OUT_MOYEN",
    "C_OUT_MASSIF",
    "C_OUT_GENERIQUE",
    "C_IN_PETIT",
    "C_IN_MOYEN",
    "C_IN_MASSIF",
    "C_IN_GENERIQUE",
    "CACHED_PREFILL_MULTIPLIER"
  ],
  "version": "2026-11-12"
}
