/docs/evals/observed
Observed signals
Observed signals are real outcomes — refunds, escalations, thumbs-down, items purchased. obsrv treats them as first-class metrics so they roll up next to your synthetic evals.
Recording an observed signal
# Boolean signals
client.record_metric(name="user_thumbs_up", trace_id="tr_…", passed=True)
client.record_metric(name="refund_requested", trace_id="tr_…", passed=False)
# Categorical signals
client.record_metric(
name="resolution_outcome",
trace_id="tr_…",
value="resolved", # or: "escalated" | "abandoned"
kind="enum",
)
# Numeric signals
client.record_metric(name="csat", trace_id="tr_…", value=4.6, kind="numeric")Common signals to wire up
- Thumbs up / down on the response.
- Conversation reopened within N minutes.
- Refund or chargeback associated with the user's next session.
- Escalation to a human agent.
- Purchase / signup completed after the agent run.
Why observed matters
Synthetic evaluators are biased toward what the prompt thinks "good" looks like. Observed signals tell you whether users actually got what they wanted. Pair them and you have a complete picture.