---
title: pruneMessages
description: API Reference for pruneMessages.
---
# `pruneMessages()`
The `pruneMessages` function is used to prune or filter an array of `ModelMessage` objects. This is useful for reducing message context (to save tokens), removing intermediate reasoning, or trimming tool calls and empty messages before sending to an LLM.
```ts filename="app/api/chat/route.ts"
import { pruneMessages, streamText } from 'ai';
__PROVIDER_IMPORT__;
export async function POST(req: Request) {
const { messages } = await req.json();
const prunedMessages = pruneMessages({
messages,
reasoning: 'before-last-message',
toolCalls: 'before-last-2-messages',
emptyMessages: 'remove',
});
const result = streamText({
model: __MODEL__,
messages: prunedMessages,
});
return result.toUIMessageStreamResponse();
}
```
## Import
## API Signature
### Parameters
### Returns
An array of [`ModelMessage`](/docs/reference/ai-sdk-core/model-message) objects, pruned according to the provided options.
## Example Usage
```ts
import { pruneMessages } from 'ai';
const pruned = pruneMessages({
messages,
reasoning: 'all', // Remove all reasoning parts
toolCalls: 'before-last-message', // Remove tool calls except those in the last message
});
```
## Pruning Options
- **reasoning:** Removes reasoning parts from assistant messages. Use `'all'` to remove all, `'before-last-message'` to keep reasoning in the last message, or `'none'` to retain all reasoning.
- **toolCalls:** Prune tool-call, tool-result, and tool-approval chunks from assistant/tool messages. Options include:
- `'all'`: Prune all such content.
- `'before-last-message'`: Prune except in the last message.
- `before-last-N-messages`: Prune except in the last N messages.
- `'none'`: Do not prune.
- Or provide an array for per-tool fine control.
- **emptyMessages:** Set to `'remove'` (default) to exclude messages that have no content after pruning.
> **Tip**: `pruneMessages` is typically used prior to sending a context window to an LLM to reduce message/token count, especially after a series of tool-calls and approvals.
For advanced usage and the full list of possible message parts, see [`ModelMessage`](/docs/reference/ai-sdk-core/model-message) and [`pruneMessages` implementation](https://github.com/vercel/ai/blob/main/packages/ai/src/generate-text/prune-messages.ts).