|
| 1 | +# Meta Muse Spark Dashboard |
| 2 | + |
| 3 | +## Details |
| 4 | + |
| 5 | +This dashboard offers a clear view into Meta Muse Spark usage and cost via the Meta Model API. It covers true spend with caching priced correctly, reasoning share of output, cache hit rate, call duration against time to first chunk, request and error volume per model, and finish reason split. |
| 6 | + |
| 7 | +To start sending Muse Spark telemetry to SigNoz, follow the [Muse Spark monitoring guide](https://signoz.io/docs/muse-spark-monitoring/). |
| 8 | + |
| 9 | +## Dashboard panels |
| 10 | + |
| 11 | +### Sections |
| 12 | + |
| 13 | +### Total Cost |
| 14 | + |
| 15 | +Sum of `gen_ai.cost.total_cost` across every call. This is only correct when your instrumentation prices cached input separately from fresh input. Cached input is roughly 8x cheaper on the standard tier, so a cost figure derived from input tokens alone overstates real spend by several times on any workload that reuses a system prompt. |
| 16 | + |
| 17 | +<img width="359" height="160" alt="muse-spark-total-cost" src="./images/muse-spark-panel-01.webp" /> |
| 18 | + |
| 19 | +### Requests |
| 20 | + |
| 21 | +Muse Spark calls in the selected window. Every panel here filters `gen_ai.provider.name = 'meta'`, which is what keeps this count honest: the wrapper span and the SDK's own client span both carry `gen_ai.request.model`, so counting on the model alone reports twice the real traffic. |
| 22 | + |
| 23 | +<img width="359" height="160" alt="muse-spark-requests" src="./images/muse-spark-panel-02.webp" /> |
| 24 | + |
| 25 | +### Error Rate |
| 26 | + |
| 27 | +Share of calls that ended in an error. Muse Spark's error spans drop to request attributes only, with no usage and no `error.type`, so an error costs you the token accounting for that call as well as the call itself. A step change here usually means rate limiting rather than a bad request. |
| 28 | + |
| 29 | +<img width="359" height="160" alt="muse-spark-error-rate" src="./images/muse-spark-panel-03.webp" /> |
| 30 | + |
| 31 | +### Prompt Cache Hit Rate |
| 32 | + |
| 33 | +Cache read tokens divided by input tokens. Agent and batch workloads that resend a stable system prompt settle high, often above 90 percent on repeat calls, while interactive chat sits lower. Read this next to Total Cost: it is the single biggest lever on spend, and it moves independently of latency because the time goes to reasoning rather than prefill. |
| 34 | + |
| 35 | +<img width="360" height="160" alt="muse-spark-prompt-cache-hit-rate" src="./images/muse-spark-panel-04.webp" /> |
| 36 | + |
| 37 | +### Cost Over Time by Model |
| 38 | + |
| 39 | +True cost per model id over time. Keeping the model split visible matters more here than on most providers because the contributor tier is roughly 12x cheaper than standard for a near-identical model name, so a single mistyped id is the difference between a cheap workload and an expensive one. |
| 40 | + |
| 41 | +<img width="720" height="318" alt="muse-spark-cost-over-time-by-model" src="./images/muse-spark-panel-05.webp" /> |
| 42 | + |
| 43 | +### Cost Share by Model |
| 44 | + |
| 45 | +Which model id is actually spending the money. The normal shape is standard-tier models dominating the total while contributor-tier models carry a large share of the requests, since the two tiers differ by more than an order of magnitude in price rather than in usage. |
| 46 | + |
| 47 | +<img width="729" height="318" alt="muse-spark-cost-share-by-model" src="./images/muse-spark-panel-06.webp" /> |
| 48 | + |
| 49 | +### Token Usage by Type |
| 50 | + |
| 51 | +Input, output, reasoning and cache read tokens on one axis. Reasoning is a subset of output and cache read is a subset of input, so the pairs should track each other closely. Reasoning sitting at 90 percent or more of output is normal for Muse Spark across every version, not a sign of anything wrong. |
| 52 | + |
| 53 | +<img width="1441" height="322" alt="muse-spark-token-usage-by-type" src="./images/muse-spark-panel-07.webp" /> |
| 54 | + |
| 55 | +### Per-Model Usage and Cost |
| 56 | + |
| 57 | +Requests, cost, tokens and average latency per model id in one table. The column to read across is Reasoning Tokens against Output Tokens, which shows how little of what you pay for on the output side ever reaches the caller. Average latency here separates the fast 1.2 line from the much slower 1.3 line. |
| 58 | + |
| 59 | +<img width="1450" height="325" alt="muse-spark-per-model-usage-and-cost" src="./images/muse-spark-panel-08.webp" /> |
| 60 | + |
| 61 | +### Call Duration (p50 / p95 / p99) |
| 62 | + |
| 63 | +End to end duration of each call. The p99 spikes are real rather than noise: they are calls that ran to a large `max_tokens` ceiling, and at roughly 40 output tokens per second an 8192 token ceiling is a call of several minutes. Read the median rather than the tail if you want the everyday experience. |
| 64 | + |
| 65 | +<img width="720" height="323" alt="muse-spark-call-duration" src="./images/muse-spark-panel-09.webp" /> |
| 66 | + |
| 67 | +### Time to First Chunk (p50 / p95) |
| 68 | + |
| 69 | +Seconds of reasoning before the first visible token on streaming calls. This is the number users actually feel, and on Muse Spark it accounts for most of the call: the model reasons to near completion before emitting anything. Total duration on its own hides that entirely, which is why the two panels sit side by side. |
| 70 | + |
| 71 | +<img width="720" height="323" alt="muse-spark-time-to-first-chunk" src="./images/muse-spark-panel-10.webp" /> |
| 72 | + |
| 73 | +### Slowest Calls |
| 74 | + |
| 75 | +Individual spans, slowest first, with output tokens, reasoning tokens and cost per call. The slowest rows are usually calls that ran to their `max_tokens` ceiling, so output tokens equal to a round number such as 8192 is the tell. Those are the calls the Finish Reasons panel counts as `length`. |
| 76 | + |
| 77 | +<img width="1450" height="294" alt="muse-spark-slowest-calls" src="./images/muse-spark-panel-11.webp" /> |
| 78 | + |
| 79 | +### Requests Over Time by Model |
| 80 | + |
| 81 | +Call volume per model id. Useful for spotting a migration between versions, and for reading the other panels in context: a cost or latency change is only interesting once you know whether the traffic mix moved underneath it. |
| 82 | + |
| 83 | +<img width="720" height="323" alt="muse-spark-requests-over-time-by-model" src="./images/muse-spark-panel-12.webp" /> |
| 84 | + |
| 85 | +### Errors Over Time by Model |
| 86 | + |
| 87 | +Errored calls per model id. Grouping by model is the only breakdown available, because the instrumentation records no `error.type` attribute: a 401, a 404 and a 400 are indistinguishable except by parsing the span status message. Use the Recent Errors panel below to see which is which. |
| 88 | + |
| 89 | +<img width="720" height="323" alt="muse-spark-errors-over-time-by-model" src="./images/muse-spark-panel-13.webp" /> |
| 90 | + |
| 91 | +### Finish Reasons |
| 92 | + |
| 93 | +The split across `stop`, `tool_calls` and `length`. A growing `length` slice is the leading indicator worth alerting on, because `max_tokens` caps reasoning and output together on this model family. When reasoning consumes the whole budget the caller gets empty content, and on a streaming call it gets no usage record either, so those failures disappear from the token panels above. |
| 94 | + |
| 95 | +<img width="719" height="353" alt="muse-spark-finish-reasons" src="./images/muse-spark-panel-14.webp" /> |
| 96 | + |
| 97 | +### Recent Errors |
| 98 | + |
| 99 | +The latest errored spans with their service and model. Since error spans carry no usage attributes, this table is where you confirm what actually failed. Note that these rows are the only place the underlying provider error string survives. |
| 100 | + |
| 101 | +<img width="729" height="353" alt="muse-spark-recent-errors" src="./images/muse-spark-panel-15.webp" /> |
0 commit comments