<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: CarbonLayer</title>
    <description>The latest articles on DEV Community by CarbonLayer (@carbonlayer).</description>
    <link>https://dev.to/carbonlayer</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4061493%2Fe53acb7f-6417-4ccd-9ad9-8df569321948.png</url>
      <title>DEV Community: CarbonLayer</title>
      <link>https://dev.to/carbonlayer</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/carbonlayer"/>
    <language>en</language>
    <item>
      <title>What's the hardest part of managing LLM APIs in production?</title>
      <dc:creator>CarbonLayer</dc:creator>
      <pubDate>Tue, 20 Oct 2026 16:37:59 +0000</pubDate>
      <link>https://dev.to/carbonlayer/whats-the-hardest-part-of-managing-llm-apis-in-production-4d98</link>
      <guid>https://dev.to/carbonlayer/whats-the-hardest-part-of-managing-llm-apis-in-production-4d98</guid>
      <description>&lt;p&gt;When building applications with LLM APIs, choosing a model is only part of the challenge.&lt;/p&gt;

&lt;p&gt;Teams also have to think about:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Cost:&lt;/strong&gt; How do you prevent unexpected inference expenses?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Latency:&lt;/strong&gt; How do you handle unpredictable response times?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Reliability:&lt;/strong&gt; What happens when a provider fails or rate-limits requests?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Routing:&lt;/strong&gt; How do you decide which model or provider should handle a request?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Visibility:&lt;/strong&gt; Can you explain why a particular routing decision was made?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;At CarbonLayer, we're exploring these questions as part of our research into inference trade-offs and decision transparency.&lt;/p&gt;

&lt;p&gt;Rather than assume which problems matter most, we'd like to hear directly from developers.&lt;/p&gt;

&lt;h2&gt;
  
  
  Share your experience
&lt;/h2&gt;

&lt;p&gt;We've put together a short &lt;strong&gt;2–3 minute developer survey&lt;/strong&gt; covering model selection, cost controls, latency, reliability, and existing tooling.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://tally.so/r/RWK71Q" rel="noopener noreferrer"&gt;Take the LLM Routing &amp;amp; Reliability Survey&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;You don't need to use CarbonLayer to participate.&lt;/p&gt;

&lt;p&gt;And if you'd rather discuss it here, I'd love to hear:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What's the one LLM infrastructure problem you wish were easier to control?&lt;/strong&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;CarbonLayer's current public API prototype uses simulated receipts, and its Playground explores model-based cost and latency scenarios. Real per-inference environmental impact measurements are not yet available.&lt;/em&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Can an AI Impact Receipt Be Standardized?</title>
      <dc:creator>CarbonLayer</dc:creator>
      <pubDate>Wed, 14 Oct 2026 01:50:30 +0000</pubDate>
      <link>https://dev.to/carbonlayer/can-an-ai-impact-receipt-be-standardized-3c7a</link>
      <guid>https://dev.to/carbonlayer/can-an-ai-impact-receipt-be-standardized-3c7a</guid>
      <description>&lt;p&gt;Here's the problem with building a useful developer tool:&lt;/p&gt;

&lt;p&gt;If only one company can use it, it's a product feature.&lt;/p&gt;

&lt;p&gt;If different systems can produce and consume the same information, it has the potential to become infrastructure.&lt;/p&gt;

&lt;p&gt;That's the question I've been thinking about while developing the Impact Receipt concept at CarbonLayer.&lt;/p&gt;

&lt;p&gt;In Part 3, What Should an AI Impact Receipt Actually Contain?, we explored what an AI Impact Receipt should contain: workload information, model identity, latency, environmental metrics, methodology, provenance, and uncertainty.&lt;/p&gt;

&lt;p&gt;But identifying useful fields is only the beginning.&lt;/p&gt;

&lt;p&gt;What happens when two AI providers describe the same concept differently?&lt;/p&gt;

&lt;p&gt;What happens when two systems return carbon values calculated using completely different boundaries?&lt;/p&gt;

&lt;p&gt;And what happens when a provider doesn't have enough evidence to calculate a value at all?&lt;/p&gt;

&lt;p&gt;Can we standardize an AI Impact Receipt without standardizing misleading assumptions?&lt;/p&gt;

&lt;p&gt;I think that's the problem worth solving.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Standardize the interface—not necessarily the calculation&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Let's start with a distinction.&lt;/p&gt;

&lt;p&gt;I don't think the first goal should be:&lt;/p&gt;

&lt;p&gt;Every AI provider must calculate environmental impact in exactly the same way.&lt;/p&gt;

&lt;p&gt;Different providers operate with different hardware, workloads, measurement systems, data sources, and accounting boundaries.&lt;/p&gt;

&lt;p&gt;A universal calculation methodology would require agreement on questions that are still being researched.&lt;/p&gt;

&lt;p&gt;But perhaps we can start somewhere more practical:&lt;/p&gt;

&lt;p&gt;Can we agree on how to describe what we know, what we don't know, and how we know it?&lt;/p&gt;

&lt;p&gt;Imagine a future system that has a defensible carbon estimate. It might represent the result as:&lt;/p&gt;

&lt;p&gt;{&lt;br&gt;
  "carbon": {&lt;br&gt;
    "status": "available",&lt;br&gt;
    "value": 14.7,&lt;br&gt;
    "unit": "gCO2e",&lt;br&gt;
    "evidenceType": "modeled",&lt;br&gt;
    "methodology": {&lt;br&gt;
      "name": "example-method",&lt;br&gt;
      "version": "1.0"&lt;br&gt;
    }&lt;br&gt;
  }&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;This is an illustrative design, not an actual CarbonLayer API response or a verified emissions result.&lt;/p&gt;

&lt;p&gt;The important feature isn't the number.&lt;/p&gt;

&lt;p&gt;It's that the receiving application can distinguish the value, unit, evidence type, and methodology.&lt;/p&gt;

&lt;p&gt;A shared interface could make this information easier to exchange without pretending every provider's calculations are equivalent.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Consistent JSON doesn't guarantee comparable results&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Suppose three hypothetical providers return environmental data:&lt;/p&gt;

&lt;p&gt;Provider A&lt;/p&gt;

&lt;p&gt;{&lt;br&gt;
  "carbon": 14.7&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;Provider B&lt;/p&gt;

&lt;p&gt;{&lt;br&gt;
  "emissions": 0.0147&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;Provider C&lt;/p&gt;

&lt;p&gt;{&lt;br&gt;
  "impact": {&lt;br&gt;
    "co2e_g": 14.7&lt;br&gt;
  }&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;Even before we discuss measurement, we have an integration problem.&lt;/p&gt;

&lt;p&gt;Are these grams or kilograms? Are they CO2 or CO2-equivalent? What activities are included?&lt;/p&gt;

&lt;p&gt;An application must interpret each response separately.&lt;/p&gt;

&lt;p&gt;A common interface could eliminate some of that ambiguity.&lt;/p&gt;

&lt;p&gt;But now imagine every provider returns the same JSON structure while using different accounting boundaries.&lt;/p&gt;

&lt;p&gt;One includes only accelerator electricity.&lt;/p&gt;

&lt;p&gt;Another includes server and cooling overhead.&lt;/p&gt;

&lt;p&gt;A third includes additional lifecycle impacts.&lt;/p&gt;

&lt;p&gt;The data looks standardized, but the results still may not be comparable.&lt;/p&gt;

&lt;p&gt;Standardizing syntax is not the same as standardizing meaning.&lt;/p&gt;

&lt;p&gt;That's why provenance, accounting boundaries, and methodology have to be part of the conversation.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The most important field might be "unavailable"&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;One of the biggest mistakes an environmental API can make is returning a precise-looking number without adequate supporting evidence.&lt;/p&gt;

&lt;p&gt;Suppose a system knows which model was requested but cannot establish how much electricity was attributable to that individual inference.&lt;/p&gt;

&lt;p&gt;Should it return a default energy value?&lt;/p&gt;

&lt;p&gt;Should it infer carbon emissions from token count alone?&lt;/p&gt;

&lt;p&gt;Should it fill missing water data with zero?&lt;/p&gt;

&lt;p&gt;I would argue no.&lt;/p&gt;

&lt;p&gt;A proposed receipt could instead return:&lt;/p&gt;

&lt;p&gt;{&lt;br&gt;
  "impact": {&lt;br&gt;
    "energy": {&lt;br&gt;
      "status": "unavailable",&lt;br&gt;
      "value": null,&lt;br&gt;
      "unit": "kWh"&lt;br&gt;
    },&lt;br&gt;
    "carbon": {&lt;br&gt;
      "status": "unavailable",&lt;br&gt;
      "value": null,&lt;br&gt;
      "unit": "gCO2e"&lt;br&gt;
    },&lt;br&gt;
    "water": {&lt;br&gt;
      "status": "unavailable",&lt;br&gt;
      "value": null,&lt;br&gt;
      "unit": "mL"&lt;br&gt;
    }&lt;br&gt;
  }&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;This example is a proposed representation, not a response contract currently implemented by CarbonLayer.&lt;/p&gt;

&lt;p&gt;Why is this important?&lt;/p&gt;

&lt;p&gt;Because zero is a value; unavailable is an evidence state.&lt;/p&gt;

&lt;p&gt;Those two things must never be interchangeable.&lt;/p&gt;

&lt;p&gt;A standard that permits explicit missing values would be more trustworthy than one that pressures every provider to populate every field.&lt;/p&gt;

&lt;p&gt;It also creates a path forward: a system can adopt the interface before it has the evidence necessary to populate every environmental metric.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Measured, modeled, derived, and unavailable are different things&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;A useful future specification should distinguish several kinds of evidence.&lt;/p&gt;

&lt;p&gt;Measured: A value supported by a documented measurement process, with a clearly defined boundary.&lt;/p&gt;

&lt;p&gt;Modeled: A value estimated using assumptions, coefficients, or a computational model.&lt;/p&gt;

&lt;p&gt;Derived: A value calculated from other inputs, whose original evidence types must remain traceable.&lt;/p&gt;

&lt;p&gt;Unavailable: A value that cannot currently be supplied with adequate support.&lt;/p&gt;

&lt;p&gt;These categories should not be treated as interchangeable.&lt;/p&gt;

&lt;p&gt;Consider a conceptual calculation:&lt;/p&gt;

&lt;p&gt;Energy attributed to workload&lt;br&gt;
             |&lt;br&gt;
             v&lt;br&gt;
      Grid carbon intensity&lt;br&gt;
             |&lt;br&gt;
             v&lt;br&gt;
     Calculated emissions&lt;/p&gt;

&lt;p&gt;Even when the arithmetic is correct, the result depends on the quality, coverage, and compatibility of the inputs.&lt;/p&gt;

&lt;p&gt;A calculated emissions value doesn't become a direct measurement merely because one of its inputs was measured.&lt;/p&gt;

&lt;p&gt;Nor does adding decimal places make an estimate more accurate.&lt;/p&gt;

&lt;p&gt;A receipt needs to preserve the evidence behind the result.&lt;/p&gt;

&lt;p&gt;And when that evidence is insufficient, it should say so.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Methodology and versioning matter&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Imagine an organization reports environmental impact in January and again in June.&lt;/p&gt;

&lt;p&gt;The second value is lower.&lt;/p&gt;

&lt;p&gt;Did the workload become more efficient?&lt;/p&gt;

&lt;p&gt;Did the infrastructure change?&lt;/p&gt;

&lt;p&gt;Did the accounting boundary change?&lt;/p&gt;

&lt;p&gt;Or did the methodology change?&lt;/p&gt;

&lt;p&gt;Without methodology versioning, a trend can be difficult to interpret.&lt;/p&gt;

&lt;p&gt;A future receipt might include:&lt;/p&gt;

&lt;p&gt;{&lt;br&gt;
  "methodology": {&lt;br&gt;
    "id": "example-impact-method",&lt;br&gt;
    "version": "1.0",&lt;br&gt;
    "boundary": "documented-separately",&lt;br&gt;
    "reference": "&lt;a href="https://example.org/methodology" rel="noopener noreferrer"&gt;https://example.org/methodology&lt;/a&gt;"&lt;br&gt;
  }&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;Again, this is an illustrative schema, not a claim that CarbonLayer has implemented or validated this methodology.&lt;/p&gt;

&lt;p&gt;The goal is to make changes visible rather than silently mixing incompatible results.&lt;/p&gt;

&lt;p&gt;A specification should also define what happens when a methodology is deprecated, when a data source changes, or when historical values are recalculated.&lt;/p&gt;

&lt;p&gt;A number without a methodology is difficult to verify. A number without a methodology version is difficult to compare over time.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Location matters—but privacy does too&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The environmental characteristics of computing infrastructure can depend on location, time, electricity supply, and system boundaries.&lt;/p&gt;

&lt;p&gt;That suggests location context could be useful in an Impact Receipt.&lt;/p&gt;

&lt;p&gt;But there is a complication.&lt;/p&gt;

&lt;p&gt;The location needed for environmental accounting isn't necessarily the location a provider should disclose to every API consumer.&lt;/p&gt;

&lt;p&gt;A future specification might need to support different levels of detail:&lt;/p&gt;

&lt;p&gt;Geographic region&lt;/p&gt;

&lt;p&gt;Electricity-grid region&lt;/p&gt;

&lt;p&gt;Country-level information&lt;/p&gt;

&lt;p&gt;Restricted or undisclosed location&lt;/p&gt;

&lt;p&gt;It would also need to identify whether a location represents an actual execution site, a billing region, a modeled assumption, or something else.&lt;/p&gt;

&lt;p&gt;Otherwise, developers could mistakenly interpret a routing label as proof of where computation physically occurred.&lt;/p&gt;

&lt;p&gt;This is a good example of why standardization is a semantic problem, not merely a JSON-design problem.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;A minimal receipt should separate known facts from impact claims&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Rather than requiring every environmental field, I'd start by separating three layers:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;      AI REQUEST / DECISION
               |
               v
   +-----------------------+
   | Operational context   |
   |-----------------------|
   | Identifier            |
   | Timestamp             |
   | Model / route context |
   | Workload metadata     |
   +-----------------------+
               |
               v
   +-----------------------+
   | Environmental status  |
   |-----------------------|
   | Energy: unavailable   |
   | Carbon: unavailable   |
   | Water: unavailable    |
   +-----------------------+
               |
               v
   +-----------------------+
   | Evidence &amp;amp; semantics  |
   |-----------------------|
   | Data provenance       |
   | Methodology / version |
   | Accounting boundary   |
   | Completeness          |
   +-----------------------+
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;This is a proposed architecture, not a diagram of CarbonLayer's currently shipping per-inference receipt system.&lt;/p&gt;

&lt;p&gt;Notice something important.&lt;/p&gt;

&lt;p&gt;The operational information can still be useful even when environmental impact values are unavailable.&lt;/p&gt;

&lt;p&gt;Developers may be able to inspect routing decisions, latency information, request identifiers, and data completeness without pretending those fields establish a carbon footprint.&lt;/p&gt;

&lt;p&gt;That separation could make the interface more useful and more honest.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;What existing standards can teach us&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;We don't need to invent every concept from scratch.&lt;/p&gt;

&lt;p&gt;Several existing efforts provide useful foundations.&lt;/p&gt;

&lt;p&gt;OpenTelemetry&lt;/p&gt;

&lt;p&gt;OpenTelemetry's Generative AI Semantic Conventions provide a useful reference for describing AI operations, model-related attributes, and telemetry.&lt;/p&gt;

&lt;p&gt;An Impact Receipt proposal should investigate how to reuse compatible observability concepts rather than introducing unnecessary competing terminology.&lt;/p&gt;

&lt;p&gt;However, compatibility with observability conventions would not, by itself, validate an environmental calculation.&lt;/p&gt;

&lt;p&gt;Software Carbon Intensity&lt;/p&gt;

&lt;p&gt;The Green Software Foundation's Software Carbon Intensity specification provides an approach to expressing software carbon intensity, including defined boundaries and functional units.&lt;/p&gt;

&lt;p&gt;It offers important lessons about methodology and normalization.&lt;/p&gt;

&lt;p&gt;But referencing SCI does not mean a particular inference receipt is an SCI score or that a product conforms to the specification.&lt;/p&gt;

&lt;p&gt;CodeCarbon&lt;/p&gt;

&lt;p&gt;CodeCarbon demonstrates approaches to estimating emissions associated with computing workloads.&lt;/p&gt;

&lt;p&gt;It is a useful example of why data sources, assumptions, and workload boundaries matter.&lt;/p&gt;

&lt;p&gt;But a workload-level estimation approach does not automatically establish defensible attribution to every individual API request.&lt;/p&gt;

&lt;p&gt;These efforts provide building blocks.&lt;/p&gt;

&lt;p&gt;They do not automatically establish a universal, interoperable, verified per-inference Impact Receipt standard.&lt;/p&gt;

&lt;p&gt;That remains an open design problem.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;What could developers eventually build?&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If a useful, interoperable receipt format emerged—and providers supplied adequate evidence—it could support several workflows.&lt;/p&gt;

&lt;p&gt;Observability: Examine model and routing context alongside the availability and provenance of environmental data.&lt;/p&gt;

&lt;p&gt;Model selection: Compare operational tradeoffs and, where defensible measurements or estimates exist, investigate environmental differences.&lt;/p&gt;

&lt;p&gt;CI/CD evaluation: Track methodology changes, data completeness, and reproducibility before using environmental metrics as automated decision inputs.&lt;/p&gt;

&lt;p&gt;Reporting: Aggregate compatible observations without silently treating missing values as zero or mixing incompatible boundaries.&lt;/p&gt;

&lt;p&gt;Routing: Inform application-level decisions using supported metrics and explicitly declared constraints.&lt;/p&gt;

&lt;p&gt;These are possible applications of a future interface.&lt;/p&gt;

&lt;p&gt;They are not claims that CarbonLayer currently delivers verified environmental optimization, demonstrated savings, or production-ready versions of every workflow.&lt;/p&gt;

&lt;p&gt;And any implementation would need to establish which metrics are actually observed, which are modeled, and which remain unavailable.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Where CarbonLayer fits today&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;CarbonLayer is exploring how AI routing decisions, operational observability, and environmental accountability might eventually work together.&lt;/p&gt;

&lt;p&gt;Today, CarbonLayer has two distinct demonstration surfaces.&lt;/p&gt;

&lt;p&gt;The /api/inference endpoint returns simulated, illustrative routing metadata. It does not execute production inference workloads or provide verified environmental impact measurements.&lt;/p&gt;

&lt;p&gt;Separately, the Playground supports cost and latency scenarios. When configured, it may make a direct call to an AI provider. That does not mean CarbonLayer is routing production workloads or measuring their environmental impact.&lt;/p&gt;

&lt;p&gt;Per-inference energy, carbon, and water values remain unavailable because CarbonLayer does not have a validated request-to-kWh attribution method.&lt;/p&gt;

&lt;p&gt;Production per-inference Impact Receipts remain a future capability.&lt;/p&gt;

&lt;p&gt;That distinction matters.&lt;/p&gt;

&lt;p&gt;A future Impact Receipt should preserve the difference between simulated decisions, observed operational data, modeled environmental values, and unavailable evidence.&lt;/p&gt;

&lt;p&gt;An interface should be able to say:&lt;/p&gt;

&lt;p&gt;We can describe the routing scenario.&lt;/p&gt;

&lt;p&gt;We can identify which operational information is available.&lt;/p&gt;

&lt;p&gt;We cannot substantiate the environmental impact of this individual inference.&lt;/p&gt;

&lt;p&gt;That's more useful than attaching a convincing-looking carbon number that cannot be defended.&lt;/p&gt;

&lt;p&gt;And it raises an interesting possibility:&lt;/p&gt;

&lt;p&gt;Perhaps the first genuinely useful contribution of an Impact Receipt isn't a carbon number.&lt;/p&gt;

&lt;p&gt;Perhaps it's a shared way of distinguishing evidence from assumption.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The danger of standardizing too early&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;A standard can make data easier to exchange.&lt;/p&gt;

&lt;p&gt;It can also make weak data appear more authoritative.&lt;/p&gt;

&lt;p&gt;If every AI provider returns a field called carbon.value, developers may assume the values are comparable.&lt;/p&gt;

&lt;p&gt;But what if one provider uses physical measurement, another uses a fleetwide average, and a third uses a token-based proxy?&lt;/p&gt;

&lt;p&gt;A common field name doesn't solve those differences.&lt;/p&gt;

&lt;p&gt;So a credible specification would need to answer difficult questions:&lt;/p&gt;

&lt;p&gt;What qualifies as a measured value?&lt;/p&gt;

&lt;p&gt;What boundaries must be disclosed?&lt;/p&gt;

&lt;p&gt;How are modeled and derived values labeled?&lt;/p&gt;

&lt;p&gt;When should a field be unavailable?&lt;/p&gt;

&lt;p&gt;What information is necessary for reproducibility?&lt;/p&gt;

&lt;p&gt;How should uncertainty be represented without inventing confidence scores?&lt;/p&gt;

&lt;p&gt;How are incompatible results prevented from being aggregated?&lt;/p&gt;

&lt;p&gt;What operational or geographic information can be disclosed safely?&lt;/p&gt;

&lt;p&gt;How should the interface evolve without breaking existing consumers?&lt;/p&gt;

&lt;p&gt;Those questions deserve answers before anyone declares victory.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The next step isn't to declare a standard&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;It's to propose something developers can challenge.&lt;/p&gt;

&lt;p&gt;A small, inspectable, machine-readable contract.&lt;/p&gt;

&lt;p&gt;One that explicitly supports unavailable environmental data.&lt;/p&gt;

&lt;p&gt;One that makes evidence types and methodologies visible.&lt;/p&gt;

&lt;p&gt;One that doesn't confuse a simulated decision with a verified physical outcome.&lt;/p&gt;

&lt;p&gt;One that can be implemented independently of CarbonLayer.&lt;/p&gt;

&lt;p&gt;And one that doesn't claim authority simply because a company published it.&lt;/p&gt;

&lt;p&gt;If developers disagree with the structure, that's useful.&lt;/p&gt;

&lt;p&gt;If they find an ambiguity, that's useful.&lt;/p&gt;

&lt;p&gt;If they identify a field that encourages misleading comparisons, that's especially useful.&lt;/p&gt;

&lt;p&gt;Because the goal shouldn't be to make every AI system return the same impressive-looking numbers.&lt;/p&gt;

&lt;p&gt;The goal should be to make every returned claim understandable, traceable, and appropriately qualified.&lt;/p&gt;

&lt;p&gt;Coming next: Part 5&lt;/p&gt;

&lt;p&gt;Let's Put Impact Metadata Into an Open API Specification&lt;/p&gt;

&lt;p&gt;We've explored what an Impact Receipt could contain.&lt;/p&gt;

&lt;p&gt;We've examined the problems with provenance, methodology, missing values, and interoperability.&lt;/p&gt;

&lt;p&gt;Now it's time to turn those questions into a concrete proposal.&lt;/p&gt;

&lt;p&gt;In Part 5, we'll outline a draft machine-readable interface that developers can inspect, challenge, and potentially implement.&lt;/p&gt;

&lt;p&gt;Not an adopted industry standard.&lt;/p&gt;

&lt;p&gt;Not a claim that CarbonLayer has solved per-inference environmental measurement.&lt;/p&gt;

&lt;p&gt;A starting point for an open technical discussion.&lt;/p&gt;

&lt;p&gt;Because before AI infrastructure can make environmental impact comparable, we need to agree on something more fundamental:&lt;/p&gt;

&lt;p&gt;What evidence must accompany the claim?&lt;/p&gt;

&lt;p&gt;Help shape what CarbonLayer builds next&lt;/p&gt;

&lt;p&gt;We're also asking developers who work with AI APIs, LLM applications, inference infrastructure, and developer tooling to share their experiences.&lt;/p&gt;

&lt;p&gt;Where do AI integrations become unnecessarily complicated?&lt;/p&gt;

&lt;p&gt;How do you evaluate cost, latency, and reliability?&lt;/p&gt;

&lt;p&gt;What information do you wish your AI providers exposed?&lt;/p&gt;

&lt;p&gt;And would more transparent routing and impact metadata actually help your workflow?&lt;/p&gt;

&lt;p&gt;We've put together a short, 7-question developer survey to learn what matters most before deciding what to build next.&lt;/p&gt;

&lt;p&gt;Take the CarbonLayer Developer Survey&lt;/p&gt;

&lt;p&gt;Your feedback will help us understand real developer needs, challenge our assumptions, and prioritize useful capabilities.&lt;/p&gt;

&lt;p&gt;You don't need to use CarbonLayer to participate. We're interested in hearing from developers with different tools, providers, and perspectives.&lt;/p&gt;

&lt;p&gt;And if you think an AI Impact Receipt is the wrong approach—or that we're missing a fundamental problem—we'd especially like to hear why.&lt;/p&gt;

&lt;p&gt;Better infrastructure starts with better questions.&lt;/p&gt;

&lt;p&gt;CarbonLayer explores AI routing, decision transparency, and the challenges of making environmental impact data trustworthy.&lt;/p&gt;

&lt;p&gt;Explore CarbonLayer | Follow the Impact Receipt series on DEV.to | Developer Survey&lt;/p&gt;

&lt;p&gt;Part 4 of 5 — The Impact Receipt Series&lt;/p&gt;

</description>
      <category>ai</category>
      <category>api</category>
      <category>opensource</category>
      <category>sustainability</category>
    </item>
    <item>
      <title>Beyond the Impact Receipt: What We're Learning About LLM Routing, Costs, and Reliability</title>
      <dc:creator>CarbonLayer</dc:creator>
      <pubDate>Mon, 12 Oct 2026 16:48:37 +0000</pubDate>
      <link>https://dev.to/carbonlayer/beyond-the-impact-receipt-what-were-learning-about-llm-routing-costs-and-reliability-3dnf</link>
      <guid>https://dev.to/carbonlayer/beyond-the-impact-receipt-what-were-learning-about-llm-routing-costs-and-reliability-3dnf</guid>
      <description>&lt;p&gt;&lt;em&gt;An Impact Receipt Series Companion — Part 3 Follow-Up&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;In Part 3 of our Impact Receipt series, &lt;strong&gt;“What Should an AI Impact Receipt Actually Contain?”&lt;/strong&gt;, we explored the information developers would need to understand the environmental impact of AI requests.&lt;/p&gt;

&lt;p&gt;Tokens. Model identifiers. Latency. Energy estimates. Carbon emissions. Water consumption. Geographic context. Methodology. Uncertainty.&lt;/p&gt;

&lt;p&gt;The underlying idea is straightforward:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;If we're going to report the environmental impact of AI inference, we should explain what was measured, what was estimated, and what remains unknown.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;But working through those questions led us to another realization.&lt;/p&gt;

&lt;p&gt;Environmental transparency is only one part of a larger challenge.&lt;/p&gt;

&lt;p&gt;Developers also need to make operational decisions about the AI requests their applications send.&lt;/p&gt;

&lt;p&gt;Which model should handle a request?&lt;/p&gt;

&lt;p&gt;How much should that request cost?&lt;/p&gt;

&lt;p&gt;What happens when a provider becomes unavailable?&lt;/p&gt;

&lt;p&gt;And when does managing those decisions become complicated enough to justify another infrastructure tool?&lt;/p&gt;

&lt;p&gt;That's where CarbonLayer's current developer research comes in.&lt;/p&gt;

&lt;p&gt;This article is a continuation of the discussion from Part 3—not a replacement for it, and not Part 4 of the series.&lt;/p&gt;




&lt;h2&gt;
  
  
  1. From understanding AI impact to understanding AI decisions
&lt;/h2&gt;

&lt;p&gt;An Impact Receipt helps answer questions about what happened during an AI request and what can reasonably be estimated about its environmental impact.&lt;/p&gt;

&lt;p&gt;But before that request is processed, an application may need to make several decisions.&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Which model or provider should receive the request?&lt;/li&gt;
&lt;li&gt;Is the expected cost within budget?&lt;/li&gt;
&lt;li&gt;Does the request have a latency requirement?&lt;/li&gt;
&lt;li&gt;Is the preferred provider available?&lt;/li&gt;
&lt;li&gt;Should the application retry or use a fallback?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These decisions can affect cost, performance, reliability, and potentially environmental impact.&lt;/p&gt;

&lt;p&gt;However, we shouldn't assume that one optimization automatically improves the others.&lt;/p&gt;

&lt;p&gt;A cheaper request isn't necessarily more energy-efficient.&lt;/p&gt;

&lt;p&gt;A faster response doesn't necessarily have a smaller carbon footprint.&lt;/p&gt;

&lt;p&gt;And choosing a different provider doesn't establish an environmental benefit without supporting measurements or defensible estimates.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Routing decisions and environmental impact reporting are related—but they require different evidence.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That distinction is becoming increasingly important to how we're thinking about CarbonLayer.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. What we're exploring at CarbonLayer
&lt;/h2&gt;

&lt;p&gt;CarbonLayer began exploring how developers could better understand the environmental impact associated with AI inference.&lt;/p&gt;

&lt;p&gt;The Impact Receipt concept is part of that work.&lt;/p&gt;

&lt;p&gt;We're also investigating whether developers need more accessible controls for managing how their applications use LLM providers.&lt;/p&gt;

&lt;p&gt;Some potential areas include:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cost controls&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Configurable budgets, spending limits, and visibility into inference costs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Latency preferences&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The ability to express response-time requirements and understand routing trade-offs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Provider reliability&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Fallback strategies, retry behavior, and handling provider failures.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Model and provider selection&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Controls over which providers or models are permitted for particular workloads.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Decision transparency&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A record explaining why a routing decision was made.&lt;/p&gt;

&lt;p&gt;These are research directions, not promises of completed functionality.&lt;/p&gt;

&lt;p&gt;Our current &lt;code&gt;/api/inference&lt;/code&gt; endpoint produces simulated routing receipts. It does not yet perform verified live inference across external providers.&lt;/p&gt;

&lt;p&gt;Likewise, our environmental impact work does not establish verified per-request electricity consumption, carbon emissions, or water use.&lt;/p&gt;

&lt;p&gt;We're deliberately separating what has been demonstrated from what still needs to be validated.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. A question worth asking: Do developers actually need another gateway?
&lt;/h2&gt;

&lt;p&gt;It's easy to imagine a system that makes LLM routing configurable.&lt;/p&gt;

&lt;p&gt;But there's a more important question:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Would developers actually benefit from adopting it?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Consider a relatively simple architecture:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Application
    |
    v
Primary LLM Provider
    |
    | failure / timeout
    v
Application Retry Logic
    |
    v
Fallback LLM Provider
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For many applications, that may be sufficient.&lt;/p&gt;

&lt;p&gt;Developers can implement retries, fallback behavior, and model selection directly in their own code.&lt;/p&gt;

&lt;p&gt;Adding a gateway might provide centralized controls, but it also introduces another dependency.&lt;/p&gt;

&lt;p&gt;That creates a real trade-off.&lt;/p&gt;

&lt;p&gt;A gateway must provide enough operational value to justify its additional complexity.&lt;/p&gt;

&lt;p&gt;We're particularly interested in discovering when that trade-off changes.&lt;/p&gt;

&lt;p&gt;Does it happen when multiple teams share an inference budget?&lt;/p&gt;

&lt;p&gt;When applications need provider restrictions?&lt;/p&gt;

&lt;p&gt;When routing policies become difficult to maintain?&lt;/p&gt;

&lt;p&gt;Or do existing gateways and observability tools already address these needs effectively?&lt;/p&gt;

&lt;p&gt;We don't know yet.&lt;/p&gt;

&lt;p&gt;And that's precisely why we're asking.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. An early conversation that helped sharpen our thinking
&lt;/h2&gt;

&lt;p&gt;During a recent Bluesky discussion, we asked developers how they balance inference cost, latency, and reliability.&lt;/p&gt;

&lt;p&gt;One respondent, The Projekt, described their approach:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;One provider plus a fallback key for a second, with the retry logic in our own code. A gateway earns its keep once you need per team spend caps. Before that it's one more hop that can go down.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This is a useful perspective because it identifies both a potential adoption trigger and a reason not to adopt another tool.&lt;/p&gt;

&lt;p&gt;The possible trigger: &lt;strong&gt;per-team spending caps&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The concern: &lt;strong&gt;another infrastructure component that could fail&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;But this comment doesn't establish that the developer currently needs spending caps, has experienced a recent costly incident, or would adopt CarbonLayer.&lt;/p&gt;

&lt;p&gt;It's one qualitative observation, not evidence of broad market demand.&lt;/p&gt;

&lt;p&gt;We followed up to understand whether the spending-cap requirement was an actual problem or a hypothetical threshold.&lt;/p&gt;

&lt;p&gt;This is the kind of distinction we want our research to preserve.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Introducing the CarbonLayer Developer Research Survey
&lt;/h2&gt;

&lt;p&gt;To learn from a wider range of experiences, we've launched a short survey for developers building or operating applications with LLM APIs.&lt;/p&gt;

&lt;p&gt;We're asking about:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Recent problems involving inference costs, latency, reliability, or model selection&lt;/li&gt;
&lt;li&gt;How applications currently choose models and providers&lt;/li&gt;
&lt;li&gt;Which operational controls developers have actually implemented&lt;/li&gt;
&lt;li&gt;What tools, gateways, or custom solutions they already use&lt;/li&gt;
&lt;li&gt;Which problems remain difficult despite those solutions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We're also interested in developers who don't experience significant problems.&lt;/p&gt;

&lt;p&gt;Understanding why existing approaches work is just as valuable as discovering unmet needs.&lt;/p&gt;

&lt;h3&gt;
  
  
  We'd appreciate your perspective
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://form.jotform.com/262838252719062" rel="noopener noreferrer"&gt;Take the CarbonLayer Developer Research Survey&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Approximately 3–4 minutes&lt;/li&gt;
&lt;li&gt;Anonymous&lt;/li&gt;
&lt;li&gt;No name or email required&lt;/li&gt;
&lt;li&gt;Focused on real-world development experiences&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you've encountered a specific issue in the last three months, we'd especially appreciate hearing what happened and how you handled it.&lt;/p&gt;

&lt;p&gt;We're not asking respondents to endorse CarbonLayer or validate a predetermined solution.&lt;/p&gt;

&lt;p&gt;We're trying to understand the problem space.&lt;/p&gt;

&lt;h2&gt;
  
  
  6. How we'll evaluate what developers tell us
&lt;/h2&gt;

&lt;p&gt;We've established a research framework that separates two questions:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Is there evidence of a real developer problem?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;And:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Is there evidence that CarbonLayer could meaningfully address that problem?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Those are not interchangeable.&lt;/p&gt;

&lt;p&gt;A developer might have a serious reliability problem that an existing gateway already solves.&lt;/p&gt;

&lt;p&gt;Another developer might express enthusiasm for configurable routing without having an actual need for it.&lt;/p&gt;

&lt;p&gt;We'll evaluate responses based on firsthand experience, recency, existing workarounds, operational impact, adoption triggers, and objections.&lt;/p&gt;

&lt;p&gt;We'll also distinguish structured survey responses from conversations on social platforms.&lt;/p&gt;

&lt;p&gt;Small, self-selected samples can provide valuable qualitative insights.&lt;/p&gt;

&lt;p&gt;They cannot establish market demand on their own.&lt;/p&gt;

&lt;h2&gt;
  
  
  7. How this connects back to the Impact Receipt
&lt;/h2&gt;

&lt;p&gt;The original Impact Receipt concept remains important.&lt;/p&gt;

&lt;p&gt;A trustworthy environmental receipt should make its data sources, assumptions, boundaries, and uncertainty understandable.&lt;/p&gt;

&lt;p&gt;The operational research we're conducting asks a different question: how developers decide where requests go and what constraints matter during execution.&lt;/p&gt;

&lt;p&gt;Over time, these areas could complement each other.&lt;/p&gt;

&lt;p&gt;For example, a future system might distinguish between:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Routing Decision Record
-----------------------
Requested model
Selected provider
Applicable constraints
Fallback decision
Latency
Estimated cost


Environmental Impact Receipt
----------------------------
Token usage
Energy estimate, if available
Carbon estimate, if available
Water estimate, if available
Data provenance
Methodology
Uncertainty
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;These are conceptual structures, not currently verified production capabilities.&lt;/p&gt;

&lt;p&gt;Separating them could help avoid mixing operational telemetry with environmental estimates that have different evidence requirements.&lt;/p&gt;

&lt;p&gt;It might also make future standards easier to reason about.&lt;/p&gt;

&lt;p&gt;But those design choices still need technical examination and developer feedback.&lt;/p&gt;

&lt;h2&gt;
  
  
  8. What's next for the series?
&lt;/h2&gt;

&lt;p&gt;This article is a follow-up to Part 3, providing context about CarbonLayer's current research and development direction.&lt;/p&gt;

&lt;p&gt;The original five-part Impact Receipt series remains unchanged.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Part 4 — Can an AI Impact Receipt Be Standardized?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;We'll explore whether impact metadata can be represented consistently across models, providers, and tools.&lt;/p&gt;

&lt;p&gt;We'll examine required versus optional fields, handling missing data, methodology, provenance, and interoperability.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Part 5 — Let's Put Impact Metadata Into an Open API Specification&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;We'll bring those ideas together into a proposed specification for discussion.&lt;/p&gt;

&lt;p&gt;Neither article depends on claiming environmental measurements that haven't been verified.&lt;/p&gt;

&lt;p&gt;The aim is to propose a transparent framework that developers can scrutinize, challenge, and improve.&lt;/p&gt;

&lt;h2&gt;
  
  
  Join the conversation
&lt;/h2&gt;

&lt;p&gt;If you're working with LLM APIs, we'd like to hear from you.&lt;/p&gt;

&lt;p&gt;What's one routing, cost, latency, or reliability problem you've actually encountered?&lt;/p&gt;

&lt;p&gt;How did you solve it?&lt;/p&gt;

&lt;p&gt;And what would make you consider changing your current setup—or convince you to keep it exactly as it is?&lt;/p&gt;

&lt;p&gt;You can share your experience in the comments or through our anonymous survey.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://form.jotform.com/262838252719062" rel="noopener noreferrer"&gt;Participate in the CarbonLayer Developer Research Survey&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://carbonlayer.polsia.io" rel="noopener noreferrer"&gt;Explore CarbonLayer&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Thanks for helping us investigate these questions with evidence rather than assumptions.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;This is a companion follow-up to Part 3 of CarbonLayer's Impact Receipt series. It is not Part 4, and it does not replace any previously published article.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>llm</category>
      <category>discuss</category>
      <category>devops</category>
    </item>
    <item>
      <title>What Should an AI Impact Receipt Actually Contain?</title>
      <dc:creator>CarbonLayer</dc:creator>
      <pubDate>Sun, 11 Oct 2026 04:02:09 +0000</pubDate>
      <link>https://dev.to/carbonlayer/what-should-an-ai-impact-receipt-actually-contain-2j10</link>
      <guid>https://dev.to/carbonlayer/what-should-an-ai-impact-receipt-actually-contain-2j10</guid>
      <description>&lt;p&gt;Part 3 — Designing for provenance, uncertainty, and meaningful environmental data.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;The Impact Receipt Series — Part 3&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Many AI APIs can report how many tokens a request used and how long it took.&lt;/p&gt;

&lt;p&gt;But imagine they also returned an environmental impact figure.&lt;/p&gt;

&lt;p&gt;Would that number be enough?&lt;/p&gt;

&lt;p&gt;Not even close.&lt;/p&gt;

&lt;p&gt;A carbon estimate without a methodology is difficult to interpret. A water figure without a measurement boundary can be misleading. A region name without a clear connection to the actual execution location may tell us less than we think.&lt;/p&gt;

&lt;p&gt;If an AI Impact Receipt is going to be useful, it needs more than numbers.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;It needs context, provenance, and an honest account of uncertainty.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  First, what is an Impact Receipt?
&lt;/h2&gt;

&lt;p&gt;In the &lt;a href="https://dev.to/carbonlayer/i-built-the-first-version-of-an-ai-impact-receipt-46c7"&gt;earlier Part 2 article&lt;/a&gt;, I explored a prototype receipt contract with modeled environmental estimates.&lt;/p&gt;

&lt;p&gt;That earlier prototype demonstrated a possible response structure; it did not establish real per-inference measurements.&lt;/p&gt;

&lt;p&gt;Now comes the harder design question:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What information would make a receipt genuinely useful to a developer?&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Request identity and model
&lt;/h2&gt;

&lt;p&gt;A receipt should identify the request and distinguish the requested model from the model that actually executed it.&lt;/p&gt;

&lt;p&gt;Possible fields include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Request ID&lt;/li&gt;
&lt;li&gt;Requested model&lt;/li&gt;
&lt;li&gt;Executed model, when verifiable&lt;/li&gt;
&lt;li&gt;Provider&lt;/li&gt;
&lt;li&gt;Timestamp&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A model name supplied by the caller is not proof that a particular provider executed the request.&lt;/p&gt;

&lt;p&gt;The receipt should make that distinction explicit.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Tokens and latency
&lt;/h2&gt;

&lt;p&gt;Developers need to understand the computational work and performance associated with a request.&lt;/p&gt;

&lt;p&gt;Useful fields might include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Input tokens&lt;/li&gt;
&lt;li&gt;Output tokens&lt;/li&gt;
&lt;li&gt;Total tokens&lt;/li&gt;
&lt;li&gt;End-to-end latency&lt;/li&gt;
&lt;li&gt;Provider-reported usage versus estimated usage&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These values also need provenance.&lt;/p&gt;

&lt;p&gt;A token budget is not the same as actual token consumption. A locally measured response time is not necessarily the same as provider processing time.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Cost
&lt;/h2&gt;

&lt;p&gt;Cost is often the first infrastructure trade-off teams can evaluate.&lt;/p&gt;

&lt;p&gt;A useful receipt might distinguish:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Estimated request cost&lt;/li&gt;
&lt;li&gt;Provider-reported or billed cost, if available&lt;/li&gt;
&lt;li&gt;Currency&lt;/li&gt;
&lt;li&gt;Pricing source&lt;/li&gt;
&lt;li&gt;Pricing version or effective date&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A calculated cost based on public token pricing should not be represented as a verified billing record.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Energy
&lt;/h2&gt;

&lt;p&gt;Energy is where the measurement problem becomes especially difficult.&lt;/p&gt;

&lt;p&gt;What exactly are we measuring?&lt;/p&gt;

&lt;p&gt;The accelerator? The server? Networking? Cooling? An allocation of shared infrastructure?&lt;/p&gt;

&lt;p&gt;A proposed receipt could include an energy value, its unit, the system boundary, and its evidence classification.&lt;/p&gt;

&lt;p&gt;If energy cannot be credibly determined for an individual request, the receipt should say so.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Unavailable is a valid technical answer.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Carbon
&lt;/h2&gt;

&lt;p&gt;A carbon figure requires more than an energy estimate.&lt;/p&gt;

&lt;p&gt;It also depends on the electricity emissions factor and the accounting method.&lt;/p&gt;

&lt;p&gt;A useful receipt should explain:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The energy basis&lt;/li&gt;
&lt;li&gt;The carbon intensity source&lt;/li&gt;
&lt;li&gt;The geographic and temporal assumptions&lt;/li&gt;
&lt;li&gt;The accounting method&lt;/li&gt;
&lt;li&gt;Whether the result is measured, modeled, or estimated&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Two calculations can produce different answers without either being a direct measurement of one request's emissions.&lt;/p&gt;

&lt;h2&gt;
  
  
  6. Water
&lt;/h2&gt;

&lt;p&gt;Water deserves its own field and methodology.&lt;/p&gt;

&lt;p&gt;It should not be treated as a simple conversion from carbon.&lt;/p&gt;

&lt;p&gt;A receipt might need to distinguish direct cooling water, electricity-generation water, consumption versus withdrawal, and the boundary used in the estimate.&lt;/p&gt;

&lt;p&gt;Where the inputs are missing, displaying an exact milliliter figure could create more confusion than clarity.&lt;/p&gt;

&lt;h2&gt;
  
  
  7. Location and grid information
&lt;/h2&gt;

&lt;p&gt;Location matters, but it is easy to overstate what is known.&lt;/p&gt;

&lt;p&gt;A provider region label does not necessarily establish the precise physical location where every part of a request was processed.&lt;/p&gt;

&lt;p&gt;Any grid-intensity information should therefore include its source, timestamp, geographic resolution, and assumptions.&lt;/p&gt;

&lt;p&gt;A receipt should never imply more location certainty than the evidence supports.&lt;/p&gt;

&lt;h2&gt;
  
  
  8. Methodology and uncertainty
&lt;/h2&gt;

&lt;p&gt;This may be the most important section.&lt;/p&gt;

&lt;p&gt;Every environmental value should have an evidence label:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Measured:&lt;/strong&gt; Based on a defined measurement process, with a stated boundary.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Modeled:&lt;/strong&gt; Calculated using an explicit model and assumptions.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Estimated:&lt;/strong&gt; Approximated from available inputs or proxy information.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Unavailable:&lt;/strong&gt; Insufficient evidence to report a defensible value.&lt;/p&gt;

&lt;p&gt;These categories need documented definitions. They should not become marketing badges.&lt;/p&gt;

&lt;p&gt;A mature receipt design should also identify methodology versions, input sources, freshness, and uncertainty where that uncertainty can be meaningfully characterized.&lt;/p&gt;

&lt;h2&gt;
  
  
  A possible receipt structure
&lt;/h2&gt;

&lt;p&gt;The following JSON is &lt;strong&gt;a conceptual schema example, not an output from CarbonLayer's current API or Playground&lt;/strong&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"receiptVersion"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"proposal-0.1"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"request"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"example-request"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"modelRequested"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"example-model"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"modelExecuted"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"provider"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"usage"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"inputTokens"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"outputTokens"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"source"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"unavailable"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"latency"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"milliseconds"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"source"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"unavailable"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"cost"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"amount"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"currency"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"USD"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"source"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"unavailable"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"environment"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"energyKwh"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"carbonGrams"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"waterMl"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"source"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"unavailable"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"methodology"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"version"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"measurementBoundary"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"uncertainty"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Notice how many values are &lt;code&gt;null&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;That's intentional.&lt;/p&gt;

&lt;p&gt;A trustworthy schema should allow us to represent missing evidence without inventing precision.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where CarbonLayer stands today
&lt;/h2&gt;

&lt;p&gt;CarbonLayer's public API prototype returns simulated receipts.&lt;/p&gt;

&lt;p&gt;Its separate cost-and-latency Playground explores cost and latency through model-based simulation. It also has a single-request mode that, when provider credentials are configured, can make one direct provider call. That call is not production routing.&lt;/p&gt;

&lt;p&gt;Real per-inference environmental impact data remains unavailable.&lt;/p&gt;

&lt;p&gt;The schema above is a direction for discussion, not a claim that these fields are already implemented.&lt;/p&gt;

&lt;h2&gt;
  
  
  The bigger challenge: making receipts comparable
&lt;/h2&gt;

&lt;p&gt;Even if two providers returned environmental receipts tomorrow, would their numbers be comparable?&lt;/p&gt;

&lt;p&gt;Only if we understood their boundaries, sources, definitions, and methods.&lt;/p&gt;

&lt;p&gt;Otherwise, one provider might report accelerator energy while another includes broader facility overhead. Both might label the result "energy per inference," despite describing different things.&lt;/p&gt;

&lt;p&gt;That's why I think the next question isn't simply which fields to add.&lt;/p&gt;

&lt;p&gt;It's whether the industry can agree on what those fields mean.&lt;/p&gt;

&lt;h2&gt;
  
  
  Next in the series: Can an AI Impact Receipt Be Standardized?
&lt;/h2&gt;

&lt;p&gt;In Part 4, I'll explore what a common specification might require, which definitions need agreement, and how developers could help shape a useful contract.&lt;/p&gt;

&lt;p&gt;Because the goal isn't just to generate a receipt.&lt;/p&gt;

&lt;p&gt;It's to make that receipt understandable, inspectable, and eventually interoperable.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Developer question:&lt;/strong&gt; If you were designing an Impact Receipt API, which field would you insist on including—and which field would you refuse to trust without more evidence?&lt;/p&gt;

&lt;p&gt;Explore CarbonLayer: &lt;a href="https://carbonlayer.polsia.io" rel="noopener noreferrer"&gt;https://carbonlayer.polsia.io&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>api</category>
      <category>devtools</category>
      <category>sustainability</category>
    </item>
    <item>
      <title>I Built the First Version of an AI Impact Receipt</title>
      <dc:creator>CarbonLayer</dc:creator>
      <pubDate>Tue, 29 Sep 2026 00:49:30 +0000</pubDate>
      <link>https://dev.to/carbonlayer/i-built-the-first-version-of-an-ai-impact-receipt-46c7</link>
      <guid>https://dev.to/carbonlayer/i-built-the-first-version-of-an-ai-impact-receipt-46c7</guid>
      <description>&lt;p&gt;An AI API usually gives you an answer. I wanted to explore what it would look like if it also returned a record of the request’s environmental impact—and how those figures were produced.&lt;/p&gt;

&lt;p&gt;That’s the idea behind the Impact Receipt: impact information should travel with the AI request, not live in a separate dashboard with no link to the work that generated it.&lt;/p&gt;

&lt;p&gt;In Part 1, I argued that carbon should travel with every AI request. Here’s what I’ve built so far—and what this first version does not do.&lt;/p&gt;

&lt;p&gt;The prototype flow&lt;br&gt;
A caller supplies a model or routing identifier, a prompt, a token budget, and a latency preference. The prototype returns dispatch information alongside environmental estimates.&lt;/p&gt;

&lt;p&gt;There’s an important boundary: it does not call Claude or another language-model provider. The model identifier is simulated, and the response echoes the supplied prompt. This prototype tests the shape of the dispatch and receipt—not a real model call, provider-reported usage, or physical measurement.&lt;/p&gt;

&lt;p&gt;Here’s a shortened example of the response shape:&lt;/p&gt;

&lt;p&gt;{&lt;br&gt;
  "id": "",&lt;br&gt;
  "model": "claude-sonnet",&lt;br&gt;
  "tokens": 800,&lt;br&gt;
  "device": {&lt;br&gt;
    "region": "eu-north-1",&lt;br&gt;
    "country": "Norway",&lt;br&gt;
    "carbonIntensity": 68,&lt;br&gt;
    "renewableMix": 0.97,&lt;br&gt;
    "waterIntensity": 0.32,&lt;br&gt;
    "carbonIntensitySource": "modeled",&lt;br&gt;
    "waterIntensitySource": "modeled"&lt;br&gt;
  },&lt;br&gt;
  "energyKwh": 0.216045,&lt;br&gt;
  "carbonGrams": 14.691,&lt;br&gt;
  "waterMl": 69.134,&lt;br&gt;
  "carbonSource": "modeled",&lt;br&gt;
  "energySource": "modeled",&lt;br&gt;
  "waterSource": "modeled",&lt;br&gt;
  "source": "synthetic"&lt;br&gt;
}&lt;br&gt;
These are example prototype values—not meter readings for an individual inference.&lt;/p&gt;

&lt;p&gt;The label matters as much as the number&lt;br&gt;
A field like "carbonGrams": 14.691 looks precise. Without context, a developer could read it as a physical measurement of what that request emitted.&lt;/p&gt;

&lt;p&gt;It isn’t.&lt;/p&gt;

&lt;p&gt;In this prototype, the energy, carbon, and water figures are modeled allocations based on modeled or seeded infrastructure data. They are not measured at the level of an individual request. The tokens field is dispatch data, not provider-reported usage, because no model provider is executing the request.&lt;/p&gt;

&lt;p&gt;That’s why the response labels the metrics as "modeled". The root-level "source": "synthetic" describes the data path; it does not turn the estimates into measurements.&lt;/p&gt;

&lt;p&gt;A number needs provenance before someone can decide how much to trust it.&lt;/p&gt;

&lt;p&gt;What the fields are for&lt;br&gt;
The dispatch ID gives the record an identifier. The model field records the routing label used by the prototype; it does not prove which provider ran the request. The device and region fields add location context, which matters because energy, carbon intensity, water, and latency can vary by location.&lt;/p&gt;

&lt;p&gt;Energy, carbon, and water are separate metrics, each with its own source label. A modeled estimate can still be useful—but only if it’s clear that it’s modeled, and clear about the assumptions behind it.&lt;/p&gt;

&lt;p&gt;The ID is an identifier in this response. I’m not claiming that the prototype already provides a way to retrieve a saved receipt later.&lt;/p&gt;

&lt;p&gt;What this first version proves—and what it doesn’t&lt;br&gt;
This is an early prototype of the receipt contract, not a complete production feature. It shows one way a dispatch response can carry environmental estimates and provenance together.&lt;/p&gt;

&lt;p&gt;It does not yet demonstrate a real provider call, per-inference physical metering, or a verified record of what a live model processed. It also doesn’t include a cost figure, confidence labels, or a methodology version.&lt;/p&gt;

&lt;p&gt;Those omissions matter. A fuller receipt will need to say not only what the figures are, but also what boundaries and data sources produced them, how fresh the inputs are, and where uncertainty remains.&lt;/p&gt;

&lt;p&gt;The first lesson from building this prototype is simple: an Impact Receipt isn’t just a set of numbers. It’s numbers plus context and provenance. Without those, precision can look like certainty. With them, even a modeled estimate can be interpreted honestly.&lt;/p&gt;

&lt;p&gt;Next: what should a complete Impact Receipt contain?&lt;/p&gt;

</description>
      <category>ai</category>
      <category>api</category>
      <category>devtools</category>
      <category>sustainability</category>
    </item>
    <item>
      <title>What If Every AI Inference Came With a Transparent Impact Receipt?</title>
      <dc:creator>CarbonLayer</dc:creator>
      <pubDate>Sun, 27 Sep 2026 23:51:51 +0000</pubDate>
      <link>https://dev.to/carbonlayer/what-if-every-ai-inference-came-with-a-transparent-impact-receipt-15b1</link>
      <guid>https://dev.to/carbonlayer/what-if-every-ai-inference-came-with-a-transparent-impact-receipt-15b1</guid>
      <description>&lt;p&gt;An AI API gives you the model’s answer. Often, it also gives you token counts. But when you’re running inference in production, you may also need to know: What did that request cost? How long did it take? And what energy, carbon, and water estimates can be associated with it?&lt;/p&gt;

&lt;p&gt;That’s the developer experience I want CarbonLayer to help make possible: useful information attached to each inference, with enough context to understand what the numbers do—and don’t—mean.&lt;/p&gt;

&lt;p&gt;A response might look something like this:&lt;/p&gt;

&lt;p&gt;{&lt;br&gt;
  "response": "…",&lt;br&gt;
  "usage": {&lt;br&gt;
    "input_tokens": 184,&lt;br&gt;
    "output_tokens": 658,&lt;br&gt;
    "total_tokens": 842&lt;br&gt;
  },&lt;br&gt;
  "latency_ms": 731,&lt;br&gt;
  "impact": {&lt;br&gt;
    "cost_usd": {&lt;br&gt;
      "value": 0.0041,&lt;br&gt;
      "status": "estimated",&lt;br&gt;
      "basis": "token usage and applicable pricing"&lt;br&gt;
    },&lt;br&gt;
    "carbon_g": {&lt;br&gt;
      "value": 0.73,&lt;br&gt;
      "status": "modeled",&lt;br&gt;
      "basis": "estimated energy use and grid carbon intensity"&lt;br&gt;
    },&lt;br&gt;
    "water_ml": {&lt;br&gt;
      "value": 12.4,&lt;br&gt;
      "status": "modeled",&lt;br&gt;
      "basis": "estimated facility and electricity-related water use"&lt;br&gt;
    }&lt;br&gt;
  },&lt;br&gt;
  "methodology": {&lt;br&gt;
    "version": "example",&lt;br&gt;
    "data_freshness": "example",&lt;br&gt;
    "confidence": {&lt;br&gt;
      "cost": "example",&lt;br&gt;
      "carbon": "example",&lt;br&gt;
      "water": "example"&lt;br&gt;
    }&lt;br&gt;
  }&lt;br&gt;
}&lt;br&gt;
This is an illustrative payload—not a live CarbonLayer response, and the values are examples. The shape matters because a number without its status and basis is easy to misread.&lt;/p&gt;

&lt;p&gt;A token count may come directly from the model provider’s response. Latency can be observed at the point where the request passes through a routing layer—but that’s not necessarily the same as the model’s own processing time. Cost might be calculated from usage and a pricing schedule; it may not include every infrastructure or business cost.&lt;/p&gt;

&lt;p&gt;Carbon and water require even more context. In many systems, those figures are modeled estimates, not measurements taken for that individual request. A model may estimate energy use, then combine it with data such as grid carbon intensity. A water estimate may depend on assumptions about cooling and electricity generation. The result is only meaningful if developers can see the system boundary, data sources, assumptions, and uncertainty behind it.&lt;/p&gt;

&lt;p&gt;There’s another complication: inference doesn’t always happen as one isolated request on one isolated machine. Workloads can be batched, hardware is shared, and providers may expose only some of the information needed to attribute resource use. A per-request figure can still be useful—but it may represent an allocation, not a direct reading from a meter attached to that call.&lt;/p&gt;

&lt;p&gt;That’s why I’d want each field to carry its own label. “Measured,” “modeled,” “estimated,” and “unavailable” shouldn’t be interchangeable—and one label shouldn’t automatically apply to every metric in the response. If the region is unknown, the data is stale, or a calculation depends on a broad assumption, the receipt should say so.&lt;/p&gt;

&lt;p&gt;The goal isn’t to make uncertain numbers look precise. It’s to give developers enough information to decide how to use them: compare workloads, spot trends, evaluate routing choices, or decide that a metric isn’t reliable enough for a particular decision.&lt;/p&gt;

&lt;p&gt;For an impact receipt to be useful in production, I think it needs to answer a few basic questions:&lt;/p&gt;

&lt;p&gt;What does each number represent?&lt;br&gt;
Which parts were observed, and which were modeled?&lt;br&gt;
What boundary and assumptions were used?&lt;br&gt;
How fresh is the underlying data?&lt;br&gt;
How uncertain is the estimate?&lt;br&gt;
Which methodology version produced it?&lt;br&gt;
That’s the direction I’m exploring with CarbonLayer: making inference economics and environmental estimates more transparent, one request at a time.&lt;/p&gt;

&lt;p&gt;If you’re building AI systems, what would an inference response need to show before you’d trust its cost, carbon, or water figures?&lt;/p&gt;

</description>
      <category>ai</category>
      <category>machinelearning</category>
      <category>api</category>
      <category>sustainability</category>
    </item>
    <item>
      <title>A Per-Inference Number Is Not a Healthcare Emissions Inventory</title>
      <dc:creator>CarbonLayer</dc:creator>
      <pubDate>Wed, 23 Sep 2026 03:17:44 +0000</pubDate>
      <link>https://dev.to/carbonlayer/a-per-inference-number-is-not-a-healthcare-emissions-inventory-2olf</link>
      <guid>https://dev.to/carbonlayer/a-per-inference-number-is-not-a-healthcare-emissions-inventory-2olf</guid>
      <description>&lt;p&gt;Production AI teams already track latency, token usage, error rates, and cost.&lt;/p&gt;

&lt;p&gt;The next question is increasingly environmental:&lt;/p&gt;

&lt;p&gt;How much energy did this inference use?&lt;br&gt;
What carbon impact can be attributed to it?&lt;br&gt;
Can water use be estimated?&lt;br&gt;
Which values are measured, and which are modeled?&lt;br&gt;
Can the result support an internal or external disclosure?&lt;br&gt;
These are reasonable questions. They are also easy to answer badly.&lt;/p&gt;

&lt;p&gt;A per-inference estimate can be useful without being a complete emissions inventory. The important part is preserving the boundary between operational visibility and organizational disclosure.&lt;/p&gt;

&lt;p&gt;At CarbonLayer, we use a simple rule:&lt;/p&gt;

&lt;p&gt;Show what was measured. Label what was derived. Qualify what was modeled.&lt;/p&gt;

&lt;p&gt;What a per-inference metric actually describes&lt;br&gt;
A per-inference metric describes a specific workload within a defined boundary.&lt;/p&gt;

&lt;p&gt;That boundary might include:&lt;/p&gt;

&lt;p&gt;The model or model class&lt;br&gt;
Input and output size&lt;br&gt;
Runtime or execution environment&lt;br&gt;
Region or facility assumption&lt;br&gt;
Time period&lt;br&gt;
Energy-allocation method&lt;br&gt;
Carbon-intensity source&lt;br&gt;
Water-intensity source&lt;br&gt;
Baseline used for comparison&lt;br&gt;
This can provide valuable operational context. For example, an engineering team might compare two routing strategies by looking at latency, cost, energy, and modeled carbon attribution.&lt;/p&gt;

&lt;p&gt;But that same value does not automatically describe the healthcare organization’s complete environmental impact.&lt;/p&gt;

&lt;p&gt;Workload-level data It can help explain It cannot prove&lt;br&gt;
Per-inference energy    Relative workload efficiency    A facility’s total electricity use&lt;br&gt;
Carbon allocation   Impact of a defined workload    A complete Scope 1, 2, or 3 inventory&lt;br&gt;
Water attribution   A modeled comparison between workloads  Facility water withdrawal or consumption&lt;br&gt;
Savings estimate    A modeled baseline comparison   Measured environmental savings&lt;br&gt;
The number can be valid within its boundary while still being insufficient for a broader disclosure.&lt;/p&gt;

&lt;p&gt;Scope boundaries still matter&lt;br&gt;
A per-request estimate should not be presented as a replacement for organizational accounting.&lt;/p&gt;

&lt;p&gt;Scope 1 covers direct emissions from sources an organization owns or controls, such as fuel combustion or refrigerant releases.&lt;/p&gt;

&lt;p&gt;Scope 2 covers purchased electricity. A workload-level carbon estimate may allocate emissions using an electricity-intensity coefficient, but that is not the same as a utility-meter reading or a full facility-level Scope 2 disclosure.&lt;/p&gt;

&lt;p&gt;Scope 3 covers value-chain emissions, including vendor services, equipment, transportation, and upstream energy impacts. A model-routing comparison is not automatically a Scope 3 inventory.&lt;/p&gt;

&lt;p&gt;The key distinction is simple:&lt;/p&gt;

&lt;p&gt;A workload estimate can support a disclosure process without becoming the disclosure itself.&lt;/p&gt;

&lt;p&gt;Carry the status with the number&lt;br&gt;
Environmental data should not be separated from its provenance.&lt;/p&gt;

&lt;p&gt;A dashboard that displays 0.04 kWh or 12.3 g CO₂e without explaining the source creates false confidence. The value may be calculated correctly, but the reader still needs to know what it represents.&lt;/p&gt;

&lt;p&gt;We recommend using three explicit states.&lt;/p&gt;

&lt;p&gt;Measured&lt;br&gt;
The value comes from a directly sourced input with documented evidence, geography, period, and boundary.&lt;/p&gt;

&lt;p&gt;Examples might include:&lt;/p&gt;

&lt;p&gt;A facility meter reading&lt;br&gt;
A provider-issued energy report&lt;br&gt;
A documented regional intensity factor for a defined period&lt;br&gt;
Derived&lt;br&gt;
The value comes from a calculation, conversion, or aggregation.&lt;/p&gt;

&lt;p&gt;Examples include:&lt;/p&gt;

&lt;p&gt;Converting watt-hours to kilowatt-hours&lt;br&gt;
Summing request-level records for a reporting period&lt;br&gt;
Converting milliliters to liters&lt;br&gt;
Aggregating regional values into a defined workload total&lt;br&gt;
A derived value may inherit uncertainty from the inputs underneath it.&lt;/p&gt;

&lt;p&gt;Modeled&lt;br&gt;
The value is an allocation, estimate, proxy, forecast, baseline, or counterfactual comparison.&lt;/p&gt;

&lt;p&gt;Examples include:&lt;/p&gt;

&lt;p&gt;Allocating shared compute energy to an individual inference&lt;br&gt;
Estimating water attribution from energy use&lt;br&gt;
Comparing a carbon-aware route with a conventional baseline&lt;br&gt;
Forecasting impact from expected request volume&lt;br&gt;
A precise-looking modeled value is still modeled.&lt;/p&gt;

&lt;p&gt;Why a measured coefficient can produce a modeled result&lt;br&gt;
Consider a simplified carbon calculation:&lt;/p&gt;

&lt;p&gt;allocated carbon = allocated energy × regional carbon intensity&lt;br&gt;
The regional carbon-intensity value might come from a documented source. That source can be measured.&lt;/p&gt;

&lt;p&gt;The allocated energy assigned to one inference may still depend on assumptions about shared infrastructure, workload utilization, model behavior, and scheduling.&lt;/p&gt;

&lt;p&gt;Therefore, the resulting per-inference carbon value should usually be labeled modeled, even if one of its inputs is measured.&lt;/p&gt;

&lt;p&gt;The calculation may be sound. The label still matters.&lt;/p&gt;

&lt;p&gt;This distinction is especially important when values are copied into reports or presented to non-technical stakeholders. “Measured coefficient” and “measured workload impact” are not interchangeable claims.&lt;/p&gt;

&lt;p&gt;Water attribution needs extra caution&lt;br&gt;
Water is particularly easy to overstate.&lt;/p&gt;

&lt;p&gt;A value such as waterMl may represent a modeled allocation based on energy use and a water-intensity coefficient. It is not automatically:&lt;/p&gt;

&lt;p&gt;A facility meter reading&lt;br&gt;
Total facility water consumption&lt;br&gt;
Water withdrawal&lt;br&gt;
Water discharge&lt;br&gt;
A complete water inventory&lt;br&gt;
A clinical or patient-related impact&lt;br&gt;
The same applies to a comparison field such as savedWaterMl.&lt;/p&gt;

&lt;p&gt;If the value represents the difference between a selected routing strategy and a baseline, it is a modeled comparison. It should not be presented as measured water savings unless the underlying measurement supports that claim.&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;p&gt;savedWaterMl = baseline modeled water attribution&lt;br&gt;
             - selected route modeled water attribution&lt;br&gt;
That can be useful for evaluating routing decisions. It does not mean a facility consumed that exact amount less water.&lt;/p&gt;

&lt;p&gt;An illustrative inference record&lt;br&gt;
The following is an illustrative data model, not a required API format:&lt;/p&gt;

&lt;p&gt;{&lt;br&gt;
  "workload": {&lt;br&gt;
    "model": "example-model",&lt;br&gt;
    "region": "example-region",&lt;br&gt;
    "period": "2026-09-01/2026-09-30"&lt;br&gt;
  },&lt;br&gt;
  "performance": {&lt;br&gt;
    "latencyMs": 184,&lt;br&gt;
    "inputTokens": 920,&lt;br&gt;
    "outputTokens": 240&lt;br&gt;
  },&lt;br&gt;
  "impact": {&lt;br&gt;
    "energyWh": {&lt;br&gt;
      "value": 0.04,&lt;br&gt;
      "status": "modeled",&lt;br&gt;
      "method": "workload allocation"&lt;br&gt;
    },&lt;br&gt;
    "carbonGrams": {&lt;br&gt;
      "value": 0.012,&lt;br&gt;
      "status": "modeled",&lt;br&gt;
      "method": "energy allocation × regional intensity"&lt;br&gt;
    },&lt;br&gt;
    "waterMl": {&lt;br&gt;
      "value": 0.3,&lt;br&gt;
      "status": "modeled",&lt;br&gt;
      "method": "energy allocation × water-intensity coefficient"&lt;br&gt;
    }&lt;br&gt;
  },&lt;br&gt;
  "provenance": {&lt;br&gt;
    "sourceVersion": "example-source-version",&lt;br&gt;
    "geography": "example-region",&lt;br&gt;
    "assumptionsDocumented": true&lt;br&gt;
  }&lt;br&gt;
}&lt;br&gt;
The important design choice is not the field names. It is that the value and its qualification travel together.&lt;/p&gt;

&lt;p&gt;Do not make engineers or reporting teams reconstruct the meaning of a number from a separate dashboard legend six months later.&lt;/p&gt;

&lt;p&gt;Healthcare adds a privacy boundary&lt;br&gt;
Environmental data is not automatically patient data.&lt;/p&gt;

&lt;p&gt;However, healthcare operations can still be sensitive. Facility identity, location, timing, utilization, and workload patterns may reveal more than intended when combined.&lt;/p&gt;

&lt;p&gt;Environmental telemetry should therefore avoid including:&lt;/p&gt;

&lt;p&gt;Patient identifiers&lt;br&gt;
Encounter IDs&lt;br&gt;
Diagnoses&lt;br&gt;
Treatments&lt;br&gt;
Clinical notes&lt;br&gt;
Claims about patient outcomes&lt;br&gt;
A workload-level environmental record should describe the infrastructure and reporting boundary, not the patient.&lt;/p&gt;

&lt;p&gt;Aggregation may also be appropriate. A monthly or regional report can reduce exposure from publishing individual workload timing or facility-level utilization patterns.&lt;/p&gt;

&lt;p&gt;Privacy review and environmental disclosure review are separate processes. Both are necessary.&lt;/p&gt;

&lt;p&gt;Aggregation does not remove uncertainty&lt;br&gt;
Rolling up request-level values into a monthly total makes the number larger. It does not automatically make it more certain.&lt;/p&gt;

&lt;p&gt;If the underlying records are modeled, the total remains based on modeled inputs.&lt;/p&gt;

&lt;p&gt;If the underlying records use proxy data, the aggregate inherits that limitation.&lt;/p&gt;

&lt;p&gt;If different regions or source versions were used, the aggregation should preserve those distinctions or explain how they were normalized.&lt;/p&gt;

&lt;p&gt;A reporting-period total might be derived from modeled records. Those are two different descriptions, and both may be needed:&lt;/p&gt;

&lt;p&gt;Derived describes how the total was calculated.&lt;br&gt;
Modeled describes the nature of the underlying attribution.&lt;br&gt;
Do not replace both with the simpler word “actual.”&lt;/p&gt;

&lt;p&gt;A practical review checklist&lt;br&gt;
Before including an inference-level value in an external report, confirm:&lt;/p&gt;

&lt;p&gt;Boundary — Which workload, facility, provider, and reporting category does it cover?&lt;br&gt;
Period — Is it historical, current, forecast, or counterfactual?&lt;br&gt;
Source — Who supplied the coefficient, and which version was used?&lt;br&gt;
Geography — Which region, grid, facility, or provider boundary applies?&lt;br&gt;
Fallbacks — Was proxy, synthetic, degraded, or forecast data used?&lt;br&gt;
Aggregation — How were individual records converted into the reported total?&lt;br&gt;
Uncertainty — Which assumptions could materially change the result?&lt;br&gt;
Review — Have engineering, sustainability, facilities, privacy, and reporting owners reviewed it?&lt;br&gt;
This is not paperwork for its own sake. It is what makes an operational metric defensible.&lt;/p&gt;

&lt;p&gt;A disclosure sentence engineers can stand behind&lt;br&gt;
A useful disclosure should explain both the result and its limits.&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;p&gt;During the reporting period, the healthcare AI workload processed [request count] requests. The reported carbon and water values are modeled workload allocations based on [method and source], not facility meter readings or a complete organizational emissions inventory.&lt;/p&gt;

&lt;p&gt;That sentence is less dramatic than claiming a precise environmental saving.&lt;/p&gt;

&lt;p&gt;It is also more useful.&lt;/p&gt;

&lt;p&gt;The standard&lt;br&gt;
AI infrastructure needs better environmental visibility. Production teams should be able to compare cost, latency, utilization, carbon, and modeled water without hiding the assumptions behind those values.&lt;/p&gt;

&lt;p&gt;But better visibility does not mean presenting every estimate as a fact.&lt;/p&gt;

&lt;p&gt;The standard should be:&lt;/p&gt;

&lt;p&gt;Show what was measured.&lt;br&gt;
Label what was derived.&lt;br&gt;
Qualify what was modeled.&lt;br&gt;
Preserve source, period, geography, and boundary.&lt;br&gt;
Never imply what the system cannot establish.&lt;br&gt;
For the full healthcare-specific framework, see the &lt;a href="https://carbonlayer.polsia.io/docs/verticals/healthcare" rel="noopener noreferrer"&gt;CarbonLayer healthcare emissions and water disclosure guide&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>healthcare</category>
      <category>observability</category>
      <category>sustainability</category>
    </item>
    <item>
      <title>Production Inference Needs More Than Token Counts</title>
      <dc:creator>CarbonLayer</dc:creator>
      <pubDate>Fri, 18 Sep 2026 17:37:20 +0000</pubDate>
      <link>https://dev.to/carbonlayer/production-inference-needs-more-than-token-counts-3bl6</link>
      <guid>https://dev.to/carbonlayer/production-inference-needs-more-than-token-counts-3bl6</guid>
      <description>&lt;p&gt;Token counts are easy to measure.&lt;/p&gt;

&lt;p&gt;They are not enough to run inference in production.&lt;/p&gt;

&lt;p&gt;Once an AI workload moves beyond experimentation, the important questions become more operational:&lt;/p&gt;

&lt;p&gt;Why did the cost per request change?&lt;br&gt;
Which route or site served the request?&lt;br&gt;
Did latency improve or degrade?&lt;br&gt;
What did the request consume in energy, carbon, and water?&lt;br&gt;
Can the result be compared with a baseline?&lt;br&gt;
Are those impact values measured, estimated, modeled, or unavailable?&lt;br&gt;
A token dashboard cannot answer all of those questions.&lt;/p&gt;

&lt;p&gt;The unit of production AI is the inference call&lt;br&gt;
Monthly averages are useful for reporting. They are less useful for making infrastructure decisions.&lt;/p&gt;

&lt;p&gt;The inference call is the better unit of analysis because it connects the request to the conditions that produced it:&lt;/p&gt;

&lt;p&gt;Model and workload&lt;br&gt;
Token usage&lt;br&gt;
Latency&lt;br&gt;
Route or serving location&lt;br&gt;
Energy consumption&lt;br&gt;
Carbon impact&lt;br&gt;
Water impact&lt;br&gt;
Cost and savings relative to a baseline&lt;br&gt;
That context makes the numbers actionable.&lt;/p&gt;

&lt;p&gt;If latency rises after a routing change, you can investigate the route. If cost increases while token usage stays flat, you can look at capacity or model selection. If impact changes by location or time, the router can account for that in future decisions.&lt;/p&gt;

&lt;p&gt;Without per-call attribution, the dashboard only tells you that something changed.&lt;/p&gt;

&lt;p&gt;It does not tell you what to change next.&lt;/p&gt;

&lt;p&gt;Aggregated metrics hide infrastructure tradeoffs&lt;br&gt;
A single average can make a production system look stable while important behavior changes underneath.&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;p&gt;A lower average carbon value may come with higher tail latency.&lt;br&gt;
A cheaper route may use more energy.&lt;br&gt;
A regional shift may improve efficiency while violating data-residency requirements.&lt;br&gt;
A model change may reduce token usage but increase compute intensity.&lt;br&gt;
A reported water value may be modeled rather than directly measured.&lt;br&gt;
None of these tradeoffs are inherently unacceptable. The problem is hiding them.&lt;/p&gt;

&lt;p&gt;Production teams need enough context to decide which tradeoffs are acceptable for a particular workload.&lt;/p&gt;

&lt;p&gt;Carbon-aware routing should be operational, not decorative&lt;br&gt;
Carbon-aware infrastructure is most useful when it influences where and when inference runs.&lt;/p&gt;

&lt;p&gt;That does not mean sending every request to the location with the lowest reported carbon intensity. A useful routing decision also considers:&lt;/p&gt;

&lt;p&gt;Latency requirements&lt;br&gt;
Available capacity&lt;br&gt;
Workload characteristics&lt;br&gt;
Data residency&lt;br&gt;
Cost&lt;br&gt;
Reliability&lt;br&gt;
Carbon and water impact&lt;br&gt;
The objective is not to optimize one metric while breaking the product.&lt;/p&gt;

&lt;p&gt;The objective is to make those constraints visible in the same operational loop.&lt;/p&gt;

&lt;p&gt;That is where CarbonLayer fits.&lt;/p&gt;

&lt;p&gt;CarbonLayer provides carbon-aware inference routing, per-call attribution, and usage and savings reporting through an API designed for production workloads. The goal is to help engineering teams see the economics and resource impact of inference at the same level as the request itself.&lt;/p&gt;

&lt;p&gt;Provenance matters as much as the number&lt;br&gt;
Not every environmental metric has the same level of certainty.&lt;/p&gt;

&lt;p&gt;A responsible inference system should make the provenance of each value clear:&lt;/p&gt;

&lt;p&gt;Measured: directly observed from available infrastructure data&lt;br&gt;
Estimated: calculated from an approximation&lt;br&gt;
Modeled: derived from a defined model or methodology&lt;br&gt;
Unavailable: not enough information to provide a defensible value&lt;br&gt;
This distinction is especially important for water attribution.&lt;/p&gt;

&lt;p&gt;A modeled water value can still be useful for comparison and planning. It should not be presented as though it came from a water meter attached to a single inference.&lt;/p&gt;

&lt;p&gt;Precision without provenance creates false confidence.&lt;/p&gt;

&lt;p&gt;The production control loop&lt;br&gt;
A practical inference measurement system should support four steps:&lt;/p&gt;

&lt;p&gt;Attribute the request and its operational impact.&lt;br&gt;
Compare the result with a baseline.&lt;br&gt;
Route future workloads using the available constraints.&lt;br&gt;
Report the outcome through APIs and dashboards.&lt;br&gt;
That turns sustainability data from a quarterly reporting exercise into an infrastructure input.&lt;/p&gt;

&lt;p&gt;It also gives teams a better answer to a basic question:&lt;/p&gt;

&lt;p&gt;What did this inference cost, and what should we do differently next time?&lt;/p&gt;

&lt;p&gt;Start with a real API call&lt;br&gt;
CarbonLayer is built for developers who want to test this workflow against an actual inference path.&lt;/p&gt;

&lt;p&gt;Create a free API key, then follow the API documentation and quickstart.&lt;/p&gt;

&lt;p&gt;The point is not to produce another dashboard full of disconnected numbers.&lt;/p&gt;

&lt;p&gt;The point is to make every inference measurable enough to improve the next one.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>machinelearning</category>
      <category>devops</category>
      <category>sustainability</category>
    </item>
    <item>
      <title>Your Inference Metrics Can Be Correct—and Still Be Wrong</title>
      <dc:creator>CarbonLayer</dc:creator>
      <pubDate>Sun, 30 Aug 2026 02:20:36 +0000</pubDate>
      <link>https://dev.to/carbonlayer/your-inference-metrics-can-be-correct-and-still-be-wrong-2fj8</link>
      <guid>https://dev.to/carbonlayer/your-inference-metrics-can-be-correct-and-still-be-wrong-2fj8</guid>
      <description>&lt;p&gt;&lt;em&gt;Configuration drift turns stale energy, carbon, cost, and latency measurements into misleading operational facts.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;A metric can be arithmetically correct and still be invalid for the decision you are making.&lt;/p&gt;

&lt;p&gt;This is an uncomfortable problem in production AI infrastructure.&lt;/p&gt;

&lt;p&gt;Suppose you measured the energy used by an inference workload last week. The measurement was accurate. The calculation was correct. The dashboard displays it without errors.&lt;/p&gt;

&lt;p&gt;Then the model changes.&lt;/p&gt;

&lt;p&gt;Or the quantization changes. Or the GPU type. Or the batch size. Or the serving region. Or the scheduler starts routing traffic differently.&lt;/p&gt;

&lt;p&gt;The old number may still be correct for the original configuration. It is no longer necessarily correct for the workload running today.&lt;/p&gt;

&lt;p&gt;That distinction matters for more than carbon reporting. It affects cost estimates, capacity planning, latency comparisons, hardware selection, and model-routing decisions.&lt;/p&gt;

&lt;p&gt;A measurement is a statement with premises&lt;br&gt;
Most metrics are treated as simple pairs:&lt;/p&gt;

&lt;p&gt;metric = value&lt;br&gt;
For example:&lt;/p&gt;

&lt;p&gt;energy_per_inference = 0.40 Wh&lt;br&gt;
Operationally, that is incomplete.&lt;/p&gt;

&lt;p&gt;A more accurate representation is:&lt;/p&gt;

&lt;p&gt;metric = value + conditions + method + timestamp + provenance&lt;br&gt;
The actual statement might be:&lt;/p&gt;

&lt;p&gt;This workload used 0.40 Wh per inference when model version 3.2 ran with INT8 quantization, batch size 8, on a specific GPU type, in a specific region, during a defined measurement window.&lt;/p&gt;

&lt;p&gt;Remove those conditions and the value looks more universal than it is.&lt;/p&gt;

&lt;p&gt;That is how stale measurements become dangerous. Not because the original observation was bad, but because its boundaries disappear when the number is exported, reused, or republished.&lt;/p&gt;

&lt;p&gt;An illustrative example&lt;br&gt;
Imagine a team measures a production workload under these conditions:&lt;/p&gt;

&lt;p&gt;Model:        support-model v3.2&lt;br&gt;
Precision:    INT8&lt;br&gt;
Hardware:     GPU type A&lt;br&gt;
Region:       Region 1&lt;br&gt;
Batch size:   8&lt;br&gt;
p95 latency:  180 ms&lt;br&gt;
Energy:       0.40 Wh per inference&lt;br&gt;
The team uses that result to estimate monthly energy and carbon.&lt;/p&gt;

&lt;p&gt;Two weeks later, the workload changes:&lt;/p&gt;

&lt;p&gt;Model:        support-model v4.0&lt;br&gt;
Precision:    INT4&lt;br&gt;
Hardware:     GPU type B&lt;br&gt;
Region:       Region 2&lt;br&gt;
Batch size:   32&lt;br&gt;
The dashboard still uses the original 0.40 Wh figure.&lt;/p&gt;

&lt;p&gt;Nothing is wrong with the multiplication. The monthly total is calculated correctly from the stored value.&lt;/p&gt;

&lt;p&gt;The problem is that the stored value describes a different workload.&lt;/p&gt;

&lt;p&gt;The same issue appears when comparing two routing strategies. If one strategy is measured before a hardware change and the other afterward, the comparison may appear precise while mixing incompatible conditions.&lt;/p&gt;

&lt;p&gt;Precision does not rescue invalid premises.&lt;/p&gt;

&lt;p&gt;Why this gets worse after data leaves the system&lt;br&gt;
Inside an observability system, metadata may still exist somewhere.&lt;/p&gt;

&lt;p&gt;But the metric often gets copied into:&lt;/p&gt;

&lt;p&gt;A spreadsheet&lt;br&gt;
A quarterly report&lt;br&gt;
A customer-facing sustainability claim&lt;br&gt;
A model-selection document&lt;br&gt;
A capacity-planning deck&lt;br&gt;
An investor update&lt;br&gt;
A benchmark article&lt;br&gt;
At that point, the number has outlived its original context.&lt;/p&gt;

&lt;p&gt;The value is no longer just being observed. It is being used to support a decision.&lt;/p&gt;

&lt;p&gt;That is where provenance becomes an operational requirement rather than a documentation nice-to-have.&lt;/p&gt;

&lt;p&gt;What should travel with the number?&lt;br&gt;
At minimum, an inference-impact measurement should carry enough context to answer five questions:&lt;/p&gt;

&lt;p&gt;What was measured?&lt;br&gt;
Under which configuration?&lt;br&gt;
How was it measured or estimated?&lt;br&gt;
When was it valid?&lt;br&gt;
Can it be compared with the current workload?&lt;br&gt;
Useful fields include:&lt;/p&gt;

&lt;p&gt;Context Why it matters  Example&lt;br&gt;
Model and version   Model changes affect compute behavior   support-model v4.0&lt;br&gt;
Serving configuration   Runtime settings change throughput and energy   Batch size, precision&lt;br&gt;
Hardware and region Devices and grid conditions differ  GPU type, region&lt;br&gt;
Request shape   Token count and output length affect work   Input/output tokens&lt;br&gt;
Method and version  Results depend on methodology   Instrumentation or estimation method&lt;br&gt;
Observation time    Conditions change over time Measurement window&lt;br&gt;
Configuration fingerprint   Enables comparison with the current workload    config_8f21...&lt;br&gt;
A compact representation might look like this:&lt;/p&gt;

&lt;p&gt;{&lt;br&gt;
  "metric": "energy_per_inference",&lt;br&gt;
  "value": 0.40,&lt;br&gt;
  "unit": "Wh",&lt;br&gt;
  "provenance": {&lt;br&gt;
    "kind": "measured",&lt;br&gt;
    "method": "power-sampling",&lt;br&gt;
    "methodology_version": "1.0"&lt;br&gt;
  },&lt;br&gt;
  "valid_for": {&lt;br&gt;
    "model": "support-model",&lt;br&gt;
    "model_version": "3.2",&lt;br&gt;
    "precision": "int8",&lt;br&gt;
    "batch_size": 8,&lt;br&gt;
    "hardware": "gpu-type-a",&lt;br&gt;
    "region": "region-1",&lt;br&gt;
    "config_fingerprint": "config_8f21"&lt;br&gt;
  },&lt;br&gt;
  "observed_at": "2026-08-01T12:00:00Z"&lt;br&gt;
}&lt;br&gt;
This is not bureaucracy for its own sake.&lt;/p&gt;

&lt;p&gt;It lets a system distinguish between:&lt;/p&gt;

&lt;p&gt;A current measurement&lt;br&gt;
A historical measurement&lt;br&gt;
A stale measurement&lt;br&gt;
A measurement that cannot be compared&lt;br&gt;
A number with missing provenance&lt;br&gt;
Those should not all look identical in a dashboard or API response.&lt;/p&gt;

&lt;p&gt;Invalidation should follow premise changes&lt;br&gt;
A common approach is to expire every measurement after a fixed number of days.&lt;/p&gt;

&lt;p&gt;Time-based expiry is useful, but it is not enough.&lt;/p&gt;

&lt;p&gt;A measurement should be reconsidered when the conditions that support it change:&lt;/p&gt;

&lt;p&gt;Model version changes&lt;br&gt;
Hardware changes&lt;br&gt;
Quantization changes&lt;br&gt;
Batch or concurrency changes materially&lt;br&gt;
Routing changes&lt;br&gt;
Region changes&lt;br&gt;
Runtime or serving software changes&lt;br&gt;
The measurement methodology changes&lt;br&gt;
The workload shape changes&lt;br&gt;
A measurement from yesterday may be invalid if the deployment changed overnight.&lt;/p&gt;

&lt;p&gt;A measurement from six months ago may still be useful for historical reporting if its original conditions are preserved.&lt;/p&gt;

&lt;p&gt;The first invalidation signal should be a changed premise, not merely an older timestamp.&lt;/p&gt;

&lt;p&gt;Measured, derived, and modeled are different claims&lt;br&gt;
Environmental impact data often combines several types of values.&lt;/p&gt;

&lt;p&gt;They should not be presented as one undifferentiated “impact” number.&lt;/p&gt;

&lt;p&gt;Measured&lt;br&gt;
Directly observed or instrumented:&lt;/p&gt;

&lt;p&gt;Measured energy: 0.40 Wh per inference&lt;br&gt;
Derived&lt;br&gt;
Calculated from measured data and another input:&lt;/p&gt;

&lt;p&gt;Carbon = energy × grid carbon intensity&lt;br&gt;
Modeled&lt;br&gt;
Produced using assumptions, external factors, or an estimation methodology:&lt;/p&gt;

&lt;p&gt;Modeled water impact = energy × water-intensity factor&lt;br&gt;
A modeled value can still be useful. It just needs to be labeled honestly.&lt;/p&gt;

&lt;p&gt;The question is not whether every number is perfectly measured. That standard would make many operational systems useless.&lt;/p&gt;

&lt;p&gt;The question is whether a reader can tell:&lt;/p&gt;

&lt;p&gt;What was observed&lt;br&gt;
What was calculated&lt;br&gt;
What was modeled&lt;br&gt;
Which assumptions were used&lt;br&gt;
Whether those assumptions still apply&lt;br&gt;
Clear labels create trust. False precision destroys it.&lt;/p&gt;

&lt;p&gt;A practical validity model&lt;br&gt;
A useful system does not need to delete old measurements when a deployment changes.&lt;/p&gt;

&lt;p&gt;It can preserve them and classify their relationship to the current workload:&lt;/p&gt;

&lt;p&gt;current&lt;br&gt;
historical&lt;br&gt;
stale&lt;br&gt;
not comparable&lt;br&gt;
unknown&lt;br&gt;
For example:&lt;/p&gt;

&lt;p&gt;if measurement.config_fingerprint == current.config_fingerprint:&lt;br&gt;
    status = "current"&lt;br&gt;
elif measurement.has_complete_provenance:&lt;br&gt;
    status = "historical_or_stale"&lt;br&gt;
else:&lt;br&gt;
    status = "unknown"&lt;br&gt;
The exact implementation can vary. The principle is stable:&lt;/p&gt;

&lt;p&gt;Never silently reuse a measurement after its premises have changed.&lt;/p&gt;

&lt;p&gt;If a historical value is still displayed, show why it is historical and which configuration it describes.&lt;/p&gt;

&lt;p&gt;The export boundary is part of the data model&lt;br&gt;
A metric is not safe merely because it was stored correctly.&lt;/p&gt;

&lt;p&gt;It is safe when its meaning survives the places where people use it.&lt;/p&gt;

&lt;p&gt;That means provenance should travel into:&lt;/p&gt;

&lt;p&gt;API responses&lt;br&gt;
Reports&lt;br&gt;
CSV exports&lt;br&gt;
Dashboards&lt;br&gt;
Benchmark results&lt;br&gt;
Customer-facing claims&lt;br&gt;
Internal planning documents&lt;br&gt;
A number that leaves the database without its configuration context is effectively a different, weaker data product.&lt;/p&gt;

&lt;p&gt;This is especially important for environmental metrics. Carbon and water values are often reused in reporting long after the infrastructure that generated them has changed.&lt;/p&gt;

&lt;p&gt;The report may be numerically consistent while no longer describing the current system.&lt;/p&gt;

&lt;p&gt;The operational question&lt;br&gt;
The useful question is not:&lt;/p&gt;

&lt;p&gt;What was the energy impact of this inference?&lt;/p&gt;

&lt;p&gt;It is:&lt;/p&gt;

&lt;p&gt;What was the energy impact under which conditions, and do those conditions still describe the inference running now?&lt;/p&gt;

&lt;p&gt;That same question applies to cost, latency, throughput, carbon, and modeled water.&lt;/p&gt;

&lt;p&gt;For production AI, impact data should be treated like any other operational signal: contextual, versioned, and tied to the workload that generated it.&lt;/p&gt;

&lt;p&gt;Otherwise, teams risk making confident decisions from numbers that have quietly lost their meaning.&lt;/p&gt;

&lt;p&gt;CarbonLayer is validating this problem with teams running production inference. The goal is not to produce another attractive dashboard. It is to test whether trustworthy per-inference data can change a real decision about routing, batching, hardware, capacity, or scheduling.&lt;/p&gt;

&lt;p&gt;Because the useful metric is not the one that looks precise.&lt;/p&gt;

&lt;p&gt;It is the one that remains valid when someone has to act on it.&lt;/p&gt;

&lt;p&gt;If you operate production AI inference and want to test this against one real infrastructure decision, I’d be interested in comparing notes. CarbonLayer is looking for focused design partners—not broad feedback surveys.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>machinelearning</category>
      <category>mlops</category>
      <category>sustainability</category>
    </item>
    <item>
      <title>The Impact Receipt: Carbon Should Travel With Every AI Request</title>
      <dc:creator>CarbonLayer</dc:creator>
      <pubDate>Sun, 23 Aug 2026 00:50:56 +0000</pubDate>
      <link>https://dev.to/carbonlayer/the-impact-receipt-carbon-should-travel-with-every-ai-request-d99</link>
      <guid>https://dev.to/carbonlayer/the-impact-receipt-carbon-should-travel-with-every-ai-request-d99</guid>
      <description>&lt;p&gt;Latency and tokens already travel with an AI request.&lt;/p&gt;

&lt;p&gt;Carbon usually does not.&lt;/p&gt;

&lt;p&gt;It remains trapped inside a provider dashboard, separated from the model, region, workload, and time window that produced it. That makes the number difficult to compare, difficult to audit, and nearly useless for routing decisions.&lt;/p&gt;

&lt;p&gt;Carbon should be treated as an infrastructure metric. It should travel with the same request context as latency and tokens.&lt;/p&gt;

&lt;p&gt;What an Impact Receipt contains&lt;br&gt;
An Impact Receipt is a portable record attached to an AI request. It describes the workload, where and when it ran, the estimated or measured impact, and the evidence behind that result.&lt;/p&gt;

&lt;p&gt;At minimum, it should include:&lt;/p&gt;

&lt;p&gt;Area    Fields&lt;br&gt;
Request Provider, model, input tokens, output tokens, timestamp&lt;br&gt;
Execution   Region, route, duration, latency, time window&lt;br&gt;
Impact  Energy, carbon, water, units&lt;br&gt;
Evidence    Data source, version, system boundary, resolution&lt;br&gt;
Basis   Measured, modeled, or unavailable&lt;br&gt;
Status  Verified, unverified, or unavailable&lt;br&gt;
Tradeoffs   Cost, latency, availability, alternative route&lt;br&gt;
The important part is not simply adding more fields. It is keeping the evidence attached to the number.&lt;/p&gt;

&lt;p&gt;A carbon value without an execution region is incomplete. A water value without duration and system boundaries is incomplete. A modeled estimate presented as a measurement is misleading.&lt;/p&gt;

&lt;p&gt;Modeled does not mean useless&lt;br&gt;
Most AI infrastructure will not have a direct meter for every individual inference.&lt;/p&gt;

&lt;p&gt;That does not make modeling worthless. It means the result needs to say what it is.&lt;/p&gt;

&lt;p&gt;A modeled attribution can support comparison and planning. It should not quietly become a measured facility flow. Likewise, a grid-level estimate should not be presented as a precise facility-level observation.&lt;/p&gt;

&lt;p&gt;The receipt should make the distinction explicit:&lt;/p&gt;

&lt;p&gt;{&lt;br&gt;
  "impact": {&lt;br&gt;
    "energy": {&lt;br&gt;
      "value": null,&lt;br&gt;
      "unit": "Wh",&lt;br&gt;
      "basis": "modeled",&lt;br&gt;
      "status": "unverified"&lt;br&gt;
    },&lt;br&gt;
    "carbon": {&lt;br&gt;
      "value": null,&lt;br&gt;
      "unit": "gCO2e",&lt;br&gt;
      "basis": "modeled",&lt;br&gt;
      "status": "unverified"&lt;br&gt;
    },&lt;br&gt;
    "water": {&lt;br&gt;
      "value": null,&lt;br&gt;
      "unit": "L",&lt;br&gt;
      "basis": "modeled",&lt;br&gt;
      "status": "unverified"&lt;br&gt;
    }&lt;br&gt;
  },&lt;br&gt;
  "evidence": {&lt;br&gt;
    "source": null,&lt;br&gt;
    "source_version": null,&lt;br&gt;
    "system_boundary": null,&lt;br&gt;
    "spatial_resolution": null&lt;br&gt;
  }&lt;br&gt;
}&lt;br&gt;
This is only the shape of the record, not a claim that these values are currently available for every request.&lt;/p&gt;

&lt;p&gt;If the evidence is missing, the correct answer is unverified or unavailable. It is not zero.&lt;/p&gt;

&lt;p&gt;“Unverified” should be a first-class result&lt;br&gt;
A successful API response does not prove that its environmental attribution is correct.&lt;/p&gt;

&lt;p&gt;A test that uses the same credentials or code path as the action it is checking may only prove that the action returned successfully. It does not necessarily prove the external result.&lt;/p&gt;

&lt;p&gt;Environmental reporting has the same problem. A number can be present without being sufficiently supported.&lt;/p&gt;

&lt;p&gt;“Unverified” preserves that distinction. It tells the operator:&lt;/p&gt;

&lt;p&gt;The request completed.&lt;br&gt;
An attribution may have been calculated.&lt;br&gt;
The available evidence does not justify calling it verified.&lt;br&gt;
That is more useful than false certainty.&lt;/p&gt;

&lt;p&gt;From reporting to sustainable operations&lt;br&gt;
A portable receipt makes several operational decisions possible:&lt;/p&gt;

&lt;p&gt;Compare providers using carbon alongside latency and cost.&lt;br&gt;
Route flexible workloads toward lower-impact regions or time windows.&lt;br&gt;
Identify when a smaller model is sufficient.&lt;br&gt;
Measure the effect of caching, batching, or token limits.&lt;br&gt;
Audit whether a sustainability claim still holds after infrastructure changes.&lt;br&gt;
Keep carbon, energy, and water data attached to the workload instead of a dashboard screenshot.&lt;br&gt;
The receipt should also preserve tradeoffs. A lower-carbon route may have higher latency, different availability, or a different price. Hiding those costs makes the metric less trustworthy.&lt;/p&gt;

&lt;p&gt;Sustainability is not achieved by producing a green number. The useful loop is:&lt;/p&gt;

&lt;p&gt;Measure → compare → reduce → report the evidence and tradeoffs.&lt;/p&gt;

&lt;p&gt;CarbonLayer is exploring whether the Impact Receipt should serve primarily as a live routing signal, a post-run audit record, or both.&lt;/p&gt;

&lt;p&gt;If you operate AI infrastructure, which field would you require before trusting an environmental metric in production?&lt;/p&gt;

</description>
      <category>ai</category>
      <category>sustainability</category>
      <category>devops</category>
      <category>cloud</category>
    </item>
    <item>
      <title>Your AI API Tells You Latency and Tokens. Why Not Carbon?</title>
      <dc:creator>CarbonLayer</dc:creator>
      <pubDate>Sat, 22 Aug 2026 02:45:18 +0000</pubDate>
      <link>https://dev.to/carbonlayer/your-ai-api-tells-you-latency-and-tokens-why-not-carbon-ff</link>
      <guid>https://dev.to/carbonlayer/your-ai-api-tells-you-latency-and-tokens-why-not-carbon-ff</guid>
      <description>&lt;p&gt;When an AI request finishes, most APIs tell you:&lt;/p&gt;

&lt;p&gt;The response&lt;br&gt;
Latency&lt;br&gt;
Token usage&lt;br&gt;
Sometimes the estimated dollar cost&lt;br&gt;
That is useful.&lt;/p&gt;

&lt;p&gt;But most APIs do not tell you how much energy the request used, what its carbon impact was, or whether its water estimate was measured or modeled.&lt;/p&gt;

&lt;p&gt;That missing layer makes it difficult to build genuinely carbon-aware AI products.&lt;/p&gt;

&lt;p&gt;The request is the useful unit&lt;br&gt;
Annual sustainability reports are too broad for developers.&lt;/p&gt;

&lt;p&gt;A monthly average cannot tell you what happened during a specific workload, model choice, or routing decision.&lt;/p&gt;

&lt;p&gt;The useful unit is the same unit developers already understand: the inference request.&lt;/p&gt;

&lt;p&gt;For each request, an AI platform should help answer:&lt;/p&gt;

&lt;p&gt;How much energy did this use?&lt;br&gt;
What carbon impact should we attribute to it?&lt;br&gt;
Was the value measured or modeled?&lt;br&gt;
What assumptions and system boundaries apply?&lt;br&gt;
Can the result be compared across workloads?&lt;br&gt;
That data can support internal reporting, customer disclosures, workload optimization, and carbon-aware routing.&lt;/p&gt;

&lt;p&gt;Trust starts with honest labels&lt;br&gt;
The easiest way to make environmental data useless is to present estimates as facts.&lt;/p&gt;

&lt;p&gt;A facility meter does not automatically reveal the exact water consumed by one inference. Grid-level carbon data does not provide perfect facility-level precision. A water rate without duration and system boundaries is not a defensible total.&lt;/p&gt;

&lt;p&gt;Useful infrastructure should make those limitations visible.&lt;/p&gt;

&lt;p&gt;That means:&lt;/p&gt;

&lt;p&gt;Clearly separating measured and modeled values&lt;br&gt;
Showing the basis of each estimate&lt;br&gt;
Disclosing resolution limits&lt;br&gt;
Keeping direct facility measurements separate from workload allocation&lt;br&gt;
Avoiding false precision&lt;br&gt;
The goal is not to produce a reassuring number.&lt;/p&gt;

&lt;p&gt;The goal is to produce a number an engineering team can actually trust.&lt;/p&gt;

&lt;p&gt;Carbon-aware inference should be part of the API&lt;br&gt;
CarbonLayer is built around this idea.&lt;/p&gt;

&lt;p&gt;It provides a carbon-aware inference API that makes per-call impact visible alongside normal inference usage:&lt;/p&gt;

&lt;p&gt;Energy attribution&lt;br&gt;
Carbon attribution&lt;br&gt;
Modeled water attribution&lt;br&gt;
Clear measured-versus-modeled labeling&lt;br&gt;
Carbon-aware dispatch&lt;br&gt;
Savings reporting for teams that want to optimize over time&lt;br&gt;
This turns environmental impact from a static report into usable infrastructure data.&lt;/p&gt;

&lt;p&gt;You can start with one workload, inspect the impact of real requests, and decide where the information changes an engineering or product decision.&lt;/p&gt;

&lt;p&gt;No green dashboard theatre required.&lt;/p&gt;

&lt;p&gt;Start with the workload you already have&lt;br&gt;
You do not need to redesign your entire AI stack.&lt;/p&gt;

&lt;p&gt;Choose one repeatable inference workload:&lt;/p&gt;

&lt;p&gt;Customer support responses&lt;br&gt;
Document classification&lt;br&gt;
Embeddings&lt;br&gt;
Image generation&lt;br&gt;
Internal copilots&lt;br&gt;
Batch processing&lt;br&gt;
Measure the request-level impact. Compare the results with latency, token usage, and cost.&lt;/p&gt;

&lt;p&gt;Then ask the practical questions:&lt;/p&gt;

&lt;p&gt;Is a slightly slower route materially lower-impact?&lt;br&gt;
Can lower-carbon windows handle batch workloads?&lt;br&gt;
Should customers see impact metadata?&lt;br&gt;
Which workloads are worth optimizing first?&lt;br&gt;
Those are better questions than whether an entire AI product is simply “sustainable.”&lt;/p&gt;

&lt;p&gt;Make every inference count&lt;br&gt;
AI developers already track tokens, latency, and dollars because those metrics affect product decisions.&lt;/p&gt;

&lt;p&gt;Energy and carbon deserve the same treatment.&lt;/p&gt;

&lt;p&gt;Not because every request can be perfectly measured. It cannot.&lt;/p&gt;

&lt;p&gt;Because better-labeled estimates are still more useful than invisible impact, and transparent limitations are better than false certainty.&lt;/p&gt;

&lt;p&gt;Try CarbonLayer free with up to 50,000 calls:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://carbonlayer.polsia.io" rel="noopener noreferrer"&gt;https://carbonlayer.polsia.io&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>machinelearning</category>
      <category>devtools</category>
      <category>sustainability</category>
    </item>
    <item>
      <title>Why "water usage" numbers in AI infrastructure are almost always wrong</title>
      <dc:creator>CarbonLayer</dc:creator>
      <pubDate>Mon, 17 Aug 2026 01:53:55 +0000</pubDate>
      <link>https://dev.to/carbonlayer/why-water-usage-numbers-in-ai-infrastructure-are-almost-always-wrong-m5n</link>
      <guid>https://dev.to/carbonlayer/why-water-usage-numbers-in-ai-infrastructure-are-almost-always-wrong-m5n</guid>
      <description>&lt;p&gt;Every water and carbon number you see reported for data center operations is, more often than not, a market-based average — blended across a grid region, smoothed across a reporting period, often built from utility-level estimates rather than the facility itself.&lt;/p&gt;

&lt;p&gt;That's not malicious. It's just what the existing frameworks (like ISO/IEC 30134) were built to produce: a defensible average, not a traceable measurement.&lt;/p&gt;

&lt;p&gt;The problem shows up the moment you try to do per-inference accounting. If your water/carbon number can't tell you which basin or which grid node it came from, it's not measurement — it's a regional estimate wearing a specific-looking decimal point.&lt;/p&gt;

&lt;p&gt;At CarbonLayer we split these into two explicit categories instead of blending them:&lt;/p&gt;

&lt;p&gt;Modeled — projections built on climate-scenario water-gap data (we work with 5 climate models × 2 warming scenarios), useful for forward risk, explicitly not a claim about what happened&lt;br&gt;
Measured — facility-level, tied to the actual site an inference workload ran on, with regional water-stress scoring (via WRI Aqueduct) layered in&lt;br&gt;
Reporting these as one blended number is how you get compliance theater: technically defensible, operationally meaningless. Reporting them separately is more honest and, frankly, more useful — a facility operator or regulator can act on "here's our modeled exposure vs. here's what we actually measured" in a way they can't act on a single smoothed average.&lt;/p&gt;

&lt;p&gt;We think this distinction becomes mandatory as soon as regulation catches up — the two legislative failures we've been tracking (Texas's water-reporting rider, Rhode Island's energy-benchmarking bill) both died in part because there was no measurement standard underneath the mandate. You can't legislate what you haven't defined how to measure.&lt;/p&gt;

</description>
      <category>sustainability</category>
      <category>datacenter</category>
      <category>climatetech</category>
      <category>ai</category>
    </item>
  </channel>
</rss>
