---
url: >-
  https://adk.nht.io/api/@nhtio/adk/batteries/validation/types/interfaces/NonEmptyTurnRule.md
description: Requires a turn to carry something the provider can interpret.
---

# Interface: NonEmptyTurnRule

Defined in: [src/batteries/validation/types.ts:341](https://github.com/NHTIO/ADK/blob/master/src/src/batteries/validation/types.ts#L341)

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

| Property                                           | Type                         | Description                                                                                                                                           | Defined in                                                                                                                   |
| -------------------------------------------------- | ---------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------- |
|  `id`                      | `string`                     | Stable identifier used in findings.                                                                                                                   | [src/batteries/validation/types.ts:345](https://github.com/NHTIO/ADK/blob/master/src/src/batteries/validation/types.ts#L345) |
|  `onlyTerminal?` | `boolean`                    | When 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](https://github.com/NHTIO/ADK/blob/master/src/src/batteries/validation/types.ts#L352) |
|  `role`                  | `"user"` | `"assistant"`    | Role whose turns must not be empty.                                                                                                                   | [src/batteries/validation/types.ts:347](https://github.com/NHTIO/ADK/blob/master/src/src/batteries/validation/types.ts#L347) |
|  `severity?`         | `"blocking"` | `"advisory"` | See [OrderRule.severity](OrderRule.md#property-severity). Omitted means advisory.                                                                     | [src/batteries/validation/types.ts:354](https://github.com/NHTIO/ADK/blob/master/src/src/batteries/validation/types.ts#L354) |
|  `type`                  | `"nonEmptyTurn"`             | Discriminator selecting the empty-turn evaluator.                                                                                                     | [src/batteries/validation/types.ts:343](https://github.com/NHTIO/ADK/blob/master/src/src/batteries/validation/types.ts#L343) |
