Bug
Two related bugs in the /ops dashboard cause the conversation count to include eval and synthetic traces, making the number permanently inflated and non-updating after real conversations.
api/ops/traces.js
When includeEvals=false (the default), eval traces are filtered out client-side — but total falls back to tracesData.meta?.totalItems, which is Langfuse's pre-filter count. This means the "X conversations" label counts evals as real conversations.
Fix:
// Before
const total = filtered.length < parseInt(String(limit))
? filtered.length + offset
: (tracesData.meta?.totalItems ?? filtered.length)
// After
const hasMore = filtered.length === parseInt(String(limit))
const total = filtered.length + offset + (hasMore ? 1 : 0)
api/ops/stats.js
conversations is set to traces.length (line 157) — the raw Langfuse fetch count before the eval-filter loop runs. Should use the counter accumulated inside the filtered loop.
Fix:
// Before
const conversations = traces.length
// After
const conversations = textConvos + voiceConvos
Impact
With a typical eval suite (e.g. 60–70 test cases run multiple times), the dashboard shows a fixed inflated number (e.g. "100 conversations") that never moves when real users chat. Fixed by using only the post-filter count.
Bug
Two related bugs in the
/opsdashboard cause the conversation count to include eval and synthetic traces, making the number permanently inflated and non-updating after real conversations.api/ops/traces.jsWhen
includeEvals=false(the default), eval traces are filtered out client-side — buttotalfalls back totracesData.meta?.totalItems, which is Langfuse's pre-filter count. This means the "X conversations" label counts evals as real conversations.Fix:
api/ops/stats.jsconversationsis set totraces.length(line 157) — the raw Langfuse fetch count before the eval-filter loop runs. Should use the counter accumulated inside the filtered loop.Fix:
Impact
With a typical eval suite (e.g. 60–70 test cases run multiple times), the dashboard shows a fixed inflated number (e.g. "100 conversations") that never moves when real users chat. Fixed by using only the post-filter count.