Multi-turn rows
evals/support.jsonl
user turn — it becomes the prompt. Everything before it is replayed as genuine conversation history through the Laravel AI SDK’s conversation channel, so the agent responds exactly as it would mid-conversation in production: aware the customer bought a lamp, answering “can I return it” correctly.
Replay is real, not prompt-stuffing: prior turns are hydrated into SDK
Message objects and delivered through the same mechanism the SDK uses for stored conversations. The agent’s instructions, tools, and middleware all still apply.Replaying production traffic
If your agents use the SDK’s conversation persistence (RemembersConversations), your agent_conversations tables are a free eval dataset:
tests/Evals/SupportBotTest.php
$row->expected(). Two powerful patterns fall out:
Judge against the production answer
Regression-test a prompt change against real traffic
Dataset::fromConversations(SupportBot::class)->latest()->take(50)->where('title', 'like', '%refund%').
Assertion behavior on multi-turn rows
Everything works the same:$row->input is the final user turn, $row->messages holds the prior turns, and all assertions run against the agent’s real AgentResponse. In the recorded results and dashboard, multi-turn rows display as the final question with a “(after N prior turns)” marker rather than a wall of JSON.