Every session closed on the Morpheus Inference Contract (Base mainnet) emits a provider-signed receipt with cumulative input + output token totals from the c-node (summed at close, not inferred from session length). Across paths — consumer node, API Gateway, OpenClaw / Morpheus Skill, Node Neo — everything that opens an on-chain session lands here.
Each point is one daily bucket aggregated from closed-session receipts. Granularity auto-picks from the selected range.
Rate metrics can't be recomputed from a model filter — showing all models.
Volume bars are split: Native (self-custody c-node, OpenClaw / Morpheus Skill, Node Neo, etc.) + API Gateway (sessions opened by known gateway service wallets). Token volume is the sum of input + output totals from each closeout receipt when present. Dec 2025 and Jan 2026 used five-field receipts (TPS only); those months use a clamped TPS × duration fallback so early inference still appears in charts. Median time to first token uses a per-bucket median; TTFT values above 30 s are capped before percentile calculation so one outlier receipt cannot dominate. Latency is shown in seconds; session time in hours.
Click a row to filter charts by that model. Click again to remove — multi-select supported.
| Model | Sessions | Tokens | Hours |
|---|
| Provider | Sessions | Tokens | Hours |
|---|
Daily tokens by model. Showing the top 8 for the current window; pick models above to isolate.
These sessions reached their scheduled endsAt but no closing transaction has
succeeded. Stake is locked in the Inference Contract until someone submits closeSession
(often the consumer node). A persistent non-zero number here is a signal of funding/gas issues
(see Session lifecycle).
| Top wallets with stuck sessions | Count | MOR locked |
|---|
The contract's closeSession must be called by the session's user (or their delegatee). Whichever wallet owns these stuck sessions — or the consumer node acting on its behalf — is who needs to submit the close-tx.
An indexer job scans SessionOpened and SessionClosed
events from the LumerinDiamond
(0x6aBE…030a) on Base mainnet. For each close it decodes the
provider-signed receipt (inputTokens, outputTokens,
ttftMs),
reads getSession() for openedAt /
closedAt / stake /
closeoutType, and resolves the bid to a model / provider.
Token volume is the sum of inputTokens + outputTokens from each closeout
receipt (seven-field ABI from the c-node). We do not multiply
receipt TPS by session duration. Older five-field receipts contribute zero tokens until backfilled via
enrich-tokens.
How sessions are placed on a day.
A session shows up on the UTC day it was closed (closedAt),
not the day it opened. We bucket by close because that's the only moment when the
provider receipt (token totals, TTFT) is on-chain and final. "Last 30 days" is a
rolling now − 30 × 24h window; presets align to whole
UTC days, custom ranges are day-inclusive on the end.
Why a peer dashboard might see different numbers.
Bucketing by openedAt (instead of closedAt)
excludes late / dispute closes — e.g. the stuck-session sweep on 2026-04-22 closed 318
sessions that had opened weeks/months earlier, all of which land in our 30-day window.
Peers that drop disputed sessions, or roll up by bid instead of model name, will also diverge.
Models are grouped by modelId; when two on-chain models share a
human label (e.g. two mistral-31-24b registrations) they appear as
separate rows here but may be fused in someone else's view.
No per-user or wallet-address information is published here. Aggregates only. Data sources & methodology.