Skip to content
1 min read · 224 words

Interface: NonEmptyTurnRule

Defined in: src/batteries/validation/types.ts:341

Requires a turn to carry something the provider can interpret.

Remarks

Two vendors reject an assistant turn that is empty of both prose and a tool call, in two different ways, and one is silent:

  • Mistral answers a 400: "Assistant message must have either content or tool_calls, but not none."
  • Gemini rejects a request whose final model turn carries only a thought: true part with finishReason: MALFORMED_RESPONSE — measured 4 of 4, against STOP-with-text when the same history ends on the user turn.

Both are the same underlying defect: a turn the model cannot act on.

Properties

PropertyTypeDescriptionDefined in
idstringStable identifier used in findings.src/batteries/validation/types.ts:345
onlyTerminal?booleanWhen true, only the FINAL turn is checked. Gemini's constraint is terminal-position specific; Mistral's applies to any assistant turn in the history.src/batteries/validation/types.ts:352
role"user" | "assistant"Role whose turns must not be empty.src/batteries/validation/types.ts:347
severity?"blocking" | "advisory"See OrderRule.severity. Omitted means advisory.src/batteries/validation/types.ts:354
type"nonEmptyTurn"Discriminator selecting the empty-turn evaluator.src/batteries/validation/types.ts:343