Skip to content

Ops dashboard conversation count inflated by eval/synthetic traces #4

Description

@kenibarwick

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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions