th-f19853: agentic conversation bench (LLM driver + judge) - #315
Conversation
…-turn Big Smooth A single-turn bench can't see the failure that actually bit us: the ical mess, where Big Smooth gave three mutually contradictory calendar answers in one conversation and no individual turn was obviously wrong. `smooth-bench convo` holds a real conversation instead. An LLM driver plays a user across several turns on ONE canonical-protocol session (same sessionId throughout, so the agent's own memory of the thread is what's under test), then an LLM judge grades the whole thread 1-5 on helpfulness, correctness, tool use and CONSISTENCY across turns, plus a rubric PASS/FAIL. Transcripts are emitted as JSON-lines. Scenarios: the calendar ask that started this; a rapid-correction barge-in that fires a correction 1.5s into the first turn (the th-3a912a interrupt gap, marked expect_fail so it records XFAIL today and XPASS - non-zero exit - the day interrupts land); and two ordinary helpfulness/tool-correctness asks. CanonicalSession is the reusable half: multi-turn on one connection with send and collect split, so a message can be fired before the previous turn finishes. run_via_canonical is now a thin wrapper over it. Judge invariants carry over from the single-turn judge: an unparseable grade, a missing axis, or a transport error is INCONCLUSIVE, never a silent pass. The suite is slow, networked and costs money, so it is a smooth-bench subcommand and never part of cargo test; only the pure parsing and rendering logic is unit-tested.
🦋 Changeset detectedLatest commit: dd875db The changes in this PR will be included in the next version bump. This PR includes changesets to release 1 package
Not sure what this means? Click here to learn what changesets are. Click here if you're a maintainer who wants to add another changeset to this PR |
Trial run against a locally spawned Big Smooth (deepseek-v4-flash, driver + judge same model)(b) reproduces — and it's worse than "contradictory"The barge-in didn't just produce a stale answer, it swapped the replies:
The correction arriving mid-turn doesn't cancel turn 1; both turns run and their responses land against the wrong prompts. Judge: consistency 1/5, "answered the superseded file-listing request after the user changed to the date question." That's th-3a912a with a receipt — recorded XFAIL, and it flips to XPASS (non-zero exit) the day interrupts land. Bonus real finding:
|
Problem
The agentic bench scores ONE turn against a workspace. That misses the failure that actually bit us: the ical mess, where Big Smooth gave three mutually contradictory calendar answers in one conversation. No single turn was obviously wrong — the CONVERSATION was.
Solution
smooth-bench convoholds a real multi-turn conversation against a live Big Smooth:sessionIdfor every turn — the agent's own memory of the thread is what's under test.~/.smooth/bench-runs/convo-*/.Scenarios
calendar-listrapid-correctionexpect_failworkspace-orientationscoped-file-taskexpect_failrecords XFAIL while the gap is open (suite green) and XPASS — non-zero exit — the day interrupts land, which is the signal to drop the flag and keep it as a plain regression test.Reuse, not reinvention
CanonicalSessionis a new multi-turn form of the existing canonical driver: send and collect are split so a message can be fired before the previous turn finishes (that concurrency is the point of the barge-in scenario).run_via_canonicalis now a thin wrapper over it, with its lenient hangup behaviour preserved (newCanonicalOutput::completedtells a finished turn from a dropped one). Gateway plumbing,parse_verdict,truncateand the daemon-spawningProcessBooterare all the existing ones.Not in CI
Every scenario is several live LLM turns — slow, networked, costs money. It's a
smooth-benchsubcommand, never part ofcargo test; only the pure parsing/rendering logic is unit-tested (16 new tests, including "a partial grade is INCONCLUSIVE, never a silent pass").Credentials:
SMOOAI_GATEWAY_KEY, falling back to~/.smooth/providers.json(the store the daemon already reads), so it runs with no env setup.Verification
cargo fmt --check,cargo clippy --all-targets(clean),cargo test -p smooai-smooth-bench(186 pass). Trial-run findings against a locally spawned Big Smooth are in the pearl/PR comments.Pearl th-f19853.
🤖 Generated with Claude Code