pinecallDocs
Testing / pinecall eval

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.

Terminal
$ 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.