pinecall eval
Replay one real call and judge it again.
pinecall eval <call-id> [--policy policy.json] [--json]
One finished call rebuilt from its log and answered by the runtime's six code checks —
consent, register, errors, latency, talk and interruptions. Nothing is re-run and no
model is asked. Each answers held, broken, deferred or skipped; exits 1 when one is broken.
$ pinecall eval call_29d7c7b6cdd643de9c659984a0125c8c
call_29d7c7b6cdd643de9c659984a0125c8c clinica-norte
consent held no irreversible tool ran in this call; 1 tool call(s) did
register skipped no words were declared for this call: send them as `banned` …
errors held the call logged no error
latency broken llm_node_ttft 1.209s > 1.000s at its worst of 1 turns; e2e_latency 2.638s > 2.000s at its worst of 1 turns
talk skipped no talk_share in the budget: send one, the most of the talking the agent may do (0 to 1)
interruptions skipped no reply of the agent's was cut off in this call
--policy is {"banned": ["tarifa plana"], "budget": {"e2e_latency": 2.0, "llm_node_ttft": 1.0, "tts_node_ttfb": 0.6, "talk_share": 0.6}}: the words this business will not have its agent say,
the seconds it holds each turn's worst latency to (livekit's own names; interruption_delay too),
and the most of the talking the agent may do. A budget replaces the defaults — those three latencies
at those values — so a key it does not name is not checked, and a budget with no latency key it
recognises leaves latency skipped.