OptionalOrdinaryThe finish_reason this driver reports on an ordinary (non-tool) turn — 'stop' for the
OpenAI family, 'completed' for Anthropic, 'STOP' for Gemini.
That these differ at all is a known gap: finish_reason is typed as a bare string and has
never been normalized across drivers. Native tool calling adds the FIRST normalized value
('tool_calls'); the rest is captured here rather than papered over, so the inconsistency is
visible in one place.
Tracked in MemberJunction/MJ#4335. When that lands, every driver reports the same value here and this knob should be deleted rather than updated.
Human-readable provider name, used in describe() labels.
OptionalScriptProgram the vendor mock: the next call returns an ordinary text answer, no tool calls.
OptionalScriptProgram the vendor mock: the next call returns these tool calls, plus text when the
provider is also emitting prose on the same turn. Required when SupportsTools is true.
The mock must render the calls the way its SDK really does — OpenAI's JSON-STRING arguments,
Anthropic's parsed input, Gemini's functionCall parts — because turning that back into
parsed arguments is exactly what the suite is checking.
Whether the driver implements the tool mapping (asserted against SupportsTools).
Construct a fresh driver instance wired to the scriptable vendor mock. Called in beforeEach, so every test gets a clean instance.