Eridian
FINOPS

Cost Attribution by Desk, Workflow, and Model Route

James Okafor · · 10 min read

Cost Attribution by Desk, Workflow, and Model Route

A provider invoice that says $47,812.40 for March is not attribution. Legal did not spend that. Ops did not spend that. A retry loop on one template might have spent a third of it. Until you can say which, you do not have FinOps. You have a receipt.

We built cost attribution as a first-class stream on the inference pipeline, not as a spreadsheet export from billing.

The grain we actually use

Every completed request emits cost_usd with this grain:

  • organization
  • project
  • desk (legal, ops, risk, engineering, sandbox)
  • workflow template version
  • route (model IDs per hop)
  • cache hit or miss
  • region

Finance can roll that up to a cost center. Engineering can roll it down to a template. Both views are the same events.

{
  "cost": {
    "usd": 0.0416,
    "input_tokens": 1840,
    "output_tokens": 612,
    "cache_hit": false,
    "hops": [
      { "model": "claude-sonnet-5", "usd": 0.0416, "status": "ok" }
    ]
  }
}

Fallback hops are itemized. A 503 that failed over to a more expensive model shows up as two hops, one of them failed. Teams that only look at the successful model undercount the incident.

Soft caps are not invoices

Projects get a soft cap and a hard envelope. Soft cap pages the project owner. Hard envelope fail-closes new runs with workflow_budget_exceeded unless dual control raises the cap.

We do not auto-raise caps. Auto-raise is how a runaway agent becomes a finance event you explain after the month closes.

What moved a real Tuesday

In March 2025 a $300B bank's legal workspace spiked 3.4x on a Tuesday. The invoice would have said "Claude, more tokens." Attribution showed a new clause-extraction template (tpl_msa_v3) with RAG context attached twice, plus cache disabled because document_version was churning on every upload.

Fix: pin document_version to the corpus hash, restore project cache, and split the template so extraction and mapping were separate nodes with their own models. Daily spend returned to baseline in four days. No one needed a provider credit.

What we refuse to hide

We do not bury cache savings inside a blended rate. Hits are a distinct cost class. If finance only models frontier-token unit price, they will over-provision and then disable cache after one bad near-miss.

We also do not let sandbox desks share a production project's budget. Sandbox has its own envelope. Mixing them is how a hackathon eats the legal month.

James Okafor

VP of Engineering

James Okafor is Vice President of Engineering at Eridian. He holds the production path of the operating system, from model access to signed record. Routing, evaluation, residency, and the controls that keep institutional workloads inside policy sit under his function. His work is to keep Eridian reliable, reviewable, and fit for regulated use at institutional scale.

Related Posts