Identical behaviour, proven not asserted
Across three scenarios both runtimes reach the same outcome with the same number of model calls and tool calls. A test asserts it, so any future divergence is a real finding.
A tool calling loop and a LangGraph state graph, running one refund policy against a deterministic model. Press run and watch both work through the same three scenarios.
Both runtimes execute on the server when you press this. Nothing here is a recording.
Three scenarios are waiting: a refund inside the policy window, one outside it, and one where the payment gateway times out on the first attempt. Press run and both runtimes work through them step by step.
identical behaviour · 97 lines against 50 · benchmark gated in CI
A framework opinion without a number attached is a preference. Run it yourself and the argument is over.
Across three scenarios both runtimes reach the same outcome with the same number of model calls and tool calls. A test asserts it, so any future divergence is a real finding.
Same policy, same model, same evaluation. The only thing that changed is how control flow is expressed, and that is where the whole difference sits.
The model is scripted, so the benchmark measures the runtime rather than model variance. No API key, no network, and the same numbers on every run.
Look up the order, check it against a 30 day refund window, refund or hand off to a human, and retry exactly once when the payment gateway times out.
A loop written by hand with one switch statement, and a LangGraph state graph where every edge is declared up front as data.
Model calls, tool calls, tool failures, characters sent and source size, collected per scenario and enforced in CI as a gate.
Comments and blank lines excluded. At this size the loop wins and it is not close. What the graph buys does not appear in this chart: its edges are data, so the topology can be inspected, drawn and replayed without reading any node body. That is worth nothing at three steps and quite a lot at thirty.