generateText()

Generates text and calls tools for a given prompt using a language model.

It is ideal for non-interactive use cases such as automation tasks where you need to write text (e.g. drafting email or summarizing web pages) and for agents that use tools.

import { generateText } from 'ai';
const { text } = await generateText({
model: "anthropic/claude-sonnet-4.5",
prompt: 'Invent a new holiday and describe its traditions.',
});
console.log(text);

To see generateText in action, check out these examples.

Import

import { generateText } from "ai"

API Signature

Parameters

model:

LanguageModel

system:

string | SystemModelMessage | SystemModelMessage[]

prompt:

string | Array<SystemModelMessage | UserModelMessage | AssistantModelMessage | ToolModelMessage>

messages:

Array<SystemModelMessage | UserModelMessage | AssistantModelMessage | ToolModelMessage>
SystemModelMessage

role:

'system'

content:

string
UserModelMessage

role:

'user'

content:

string | Array<TextPart | ImagePart | FilePart>
TextPart

type:

'text'

text:

string
ImagePart

type:

'image'

image:

string | Uint8Array | Buffer | ArrayBuffer | URL

mediaType?:

string
FilePart

type:

'file'

data:

string | Uint8Array | Buffer | ArrayBuffer | URL

mediaType:

string
AssistantModelMessage

role:

'assistant'

content:

string | Array<TextPart | FilePart | ReasoningPart | ToolCallPart>
TextPart

type:

'text'

text:

string
ReasoningPart

type:

'reasoning'

text:

string
FilePart

type:

'file'

data:

string | Uint8Array | Buffer | ArrayBuffer | URL

mediaType:

string

filename?:

string
ToolCallPart

type:

'tool-call'

toolCallId:

string

toolName:

string

input:

object based on zod schema
ToolModelMessage

role:

'tool'

content:

Array<ToolResultPart>
ToolResultPart

type:

'tool-result'

toolCallId:

string

toolName:

string

output:

unknown

isError?:

boolean

tools:

ToolSet
Tool

description?:

string

inputSchema:

Zod Schema | JSON Schema

execute?:

async (parameters: T, options: ToolExecutionOptions) => RESULT
ToolExecutionOptions

toolCallId:

string

messages:

ModelMessage[]

abortSignal:

AbortSignal

toolChoice?:

"auto" | "none" | "required" | { "type": "tool", "toolName": string }

maxOutputTokens?:

number

temperature?:

number

topP?:

number

topK?:

number

presencePenalty?:

number

frequencyPenalty?:

number

stopSequences?:

string[]

seed?:

number

maxRetries?:

number

abortSignal?:

AbortSignal

timeout?:

number | { totalMs?: number; stepMs?: number }

headers?:

Record<string, string | undefined>

experimental_telemetry?:

TelemetrySettings
TelemetrySettings

isEnabled?:

boolean

recordInputs?:

boolean

recordOutputs?:

boolean

functionId?:

string

metadata?:

Record<string, string | number | boolean | Array<null | undefined | string> | Array<null | undefined | number> | Array<null | undefined | boolean>>

providerOptions?:

Record<string,JSONObject> | undefined

activeTools?:

Array<TOOLNAME>

stopWhen?:

StopCondition<TOOLS> | Array<StopCondition<TOOLS>>

prepareStep?:

(options: PrepareStepOptions) => PrepareStepResult<TOOLS> | Promise<PrepareStepResult<TOOLS>>
PrepareStepFunction<TOOLS>

options:

object
PrepareStepOptions

steps:

Array<StepResult<TOOLS>>

stepNumber:

number

model:

LanguageModel

messages:

Array<ModelMessage>

experimental_context?:

unknown
PrepareStepResult<TOOLS>

model?:

LanguageModel

toolChoice?:

ToolChoice<TOOLS>

activeTools?:

Array<keyof TOOLS>

system?:

string | SystemModelMessage | SystemModelMessage[]

messages?:

Array<ModelMessage>

experimental_context?:

unknown

providerOptions?:

ProviderOptions

experimental_context?:

unknown

experimental_download?:

(requestedDownloads: Array<{ url: URL; isUrlSupportedByModel: boolean }>) => Promise<Array<null | { data: Uint8Array; mediaType?: string }>>

experimental_include?:

{ requestBody?: boolean; responseBody?: boolean }
Object

requestBody?:

boolean

responseBody?:

boolean

experimental_repairToolCall?:

(options: ToolCallRepairOptions) => Promise<LanguageModelV3ToolCall | null>
ToolCallRepairOptions

system:

string | SystemModelMessage | SystemModelMessage[] | undefined

messages:

ModelMessage[]

toolCall:

LanguageModelV3ToolCall

tools:

TOOLS

parameterSchema:

(options: { toolName: string }) => JSONSchema7

error:

NoSuchToolError | InvalidToolInputError

output?:

Output
Output

Output.text():

Output

Output.object():

Output
Options

schema:

Schema<OBJECT>

name?:

string

description?:

string

Output.array():

Output
Options

element:

Schema<ELEMENT>

name?:

string

description?:

string

Output.choice():

Output
Options

options:

Array<string>

name?:

string

description?:

string

Output.json():

Output
Options

name?:

string

description?:

string

experimental_onStart?:

(event: OnStartEvent) => PromiseLike<void> | void
OnStartEvent

model:

{ provider: string; modelId: string }

system:

string | SystemModelMessage | Array<SystemModelMessage> | undefined

prompt:

string | Array<ModelMessage> | undefined

messages:

Array<ModelMessage> | undefined

tools:

TOOLS | undefined

toolChoice:

ToolChoice<TOOLS> | undefined

activeTools:

Array<keyof TOOLS> | undefined

maxOutputTokens:

number | undefined

temperature:

number | undefined

topP:

number | undefined

topK:

number | undefined

presencePenalty:

number | undefined

frequencyPenalty:

number | undefined

stopSequences:

string[] | undefined

seed:

number | undefined

maxRetries:

number

timeout:

number | { totalMs?: number; stepMs?: number; chunkMs?: number } | undefined

headers:

Record<string, string | undefined> | undefined

providerOptions:

ProviderOptions | undefined

stopWhen:

StopCondition<TOOLS> | Array<StopCondition<TOOLS>> | undefined

output:

OUTPUT | undefined

abortSignal:

AbortSignal | undefined

include:

{ requestBody?: boolean; responseBody?: boolean } | undefined

functionId:

string | undefined

metadata:

Record<string, unknown> | undefined

experimental_context:

unknown

experimental_onStepStart?:

(event: OnStepStartEvent) => PromiseLike<void> | void
OnStepStartEvent

stepNumber:

number

model:

{ provider: string; modelId: string }

system:

string | SystemModelMessage | Array<SystemModelMessage> | undefined

messages:

Array<ModelMessage>

tools:

TOOLS | undefined

toolChoice:

LanguageModelV3ToolChoice | undefined

activeTools:

Array<keyof TOOLS> | undefined

steps:

ReadonlyArray<StepResult<TOOLS>>

providerOptions:

ProviderOptions | undefined

timeout:

number | { totalMs?: number; stepMs?: number; chunkMs?: number } | undefined

headers:

Record<string, string | undefined> | undefined

stopWhen:

StopCondition<TOOLS> | Array<StopCondition<TOOLS>> | undefined

output:

OUTPUT | undefined

abortSignal:

AbortSignal | undefined

include:

{ requestBody?: boolean; responseBody?: boolean } | undefined

functionId:

string | undefined

metadata:

Record<string, unknown> | undefined

experimental_context:

unknown

experimental_onToolCallStart?:

(event: OnToolCallStartEvent) => PromiseLike<void> | void
OnToolCallStartEvent

stepNumber:

number | undefined

model:

{ provider: string; modelId: string } | undefined

toolCall:

TypedToolCall<TOOLS>

messages:

Array<ModelMessage>

abortSignal:

AbortSignal | undefined

functionId:

string | undefined

metadata:

Record<string, unknown> | undefined

experimental_context:

unknown

experimental_onToolCallFinish?:

(event: OnToolCallFinishEvent) => PromiseLike<void> | void
OnToolCallFinishEvent

stepNumber:

number | undefined

model:

{ provider: string; modelId: string } | undefined

toolCall:

TypedToolCall<TOOLS>

messages:

Array<ModelMessage>

abortSignal:

AbortSignal | undefined

durationMs:

number

functionId:

string | undefined

metadata:

Record<string, unknown> | undefined

experimental_context:

unknown

success:

boolean

output:

unknown

error:

unknown

onStepFinish?:

(stepResult: StepResult<TOOLS>) => Promise<void> | void
StepResult

stepNumber:

number

model:

{ provider: string; modelId: string }

functionId:

string | undefined

metadata:

Record<string, unknown> | undefined

experimental_context:

unknown

content:

Array<ContentPart<TOOLS>>

text:

string

reasoning:

Array<ReasoningPart>

reasoningText:

string | undefined

files:

Array<GeneratedFile>

sources:

Array<Source>

toolCalls:

Array<TypedToolCall<TOOLS>>

staticToolCalls:

Array<StaticToolCall<TOOLS>>

dynamicToolCalls:

Array<DynamicToolCall>

toolResults:

Array<TypedToolResult<TOOLS>>

staticToolResults:

Array<StaticToolResult<TOOLS>>

dynamicToolResults:

Array<DynamicToolResult>

finishReason:

"stop" | "length" | "content-filter" | "tool-calls" | "error" | "other"

rawFinishReason:

string | undefined

usage:

LanguageModelUsage
LanguageModelUsage

inputTokens:

number | undefined

inputTokenDetails:

LanguageModelInputTokenDetails
LanguageModelInputTokenDetails

noCacheTokens:

number | undefined

cacheReadTokens:

number | undefined

cacheWriteTokens:

number | undefined

outputTokens:

number | undefined

outputTokenDetails:

LanguageModelOutputTokenDetails
LanguageModelOutputTokenDetails

textTokens:

number | undefined

reasoningTokens:

number | undefined

totalTokens:

number | undefined

raw?:

object | undefined

warnings:

CallWarning[] | undefined

request:

LanguageModelRequestMetadata

response:

LanguageModelResponseMetadata & { messages: Array<ResponseMessage>; body?: unknown }
Response

id:

string

modelId:

string

timestamp:

Date

headers?:

Record<string, string>

messages:

Array<ResponseMessage>

body?:

unknown

providerMetadata?:

ProviderMetadata | undefined

onFinish?:

(event: StepResult<TOOLS> & { steps: StepResult<TOOLS>[]; totalUsage: LanguageModelUsage }) => PromiseLike<void> | void
OnFinishEvent

stepNumber:

number

model:

{ provider: string; modelId: string }

functionId:

string | undefined

metadata:

Record<string, unknown> | undefined

finishReason:

"stop" | "length" | "content-filter" | "tool-calls" | "error" | "other"

rawFinishReason:

string | undefined

usage:

LanguageModelUsage
LanguageModelUsage

inputTokens:

number | undefined

inputTokenDetails:

LanguageModelInputTokenDetails
LanguageModelInputTokenDetails

noCacheTokens:

number | undefined

cacheReadTokens:

number | undefined

cacheWriteTokens:

number | undefined

outputTokens:

number | undefined

outputTokenDetails:

LanguageModelOutputTokenDetails
LanguageModelOutputTokenDetails

textTokens:

number | undefined

reasoningTokens:

number | undefined

totalTokens:

number | undefined

raw?:

object | undefined

totalUsage:

LanguageModelUsage
LanguageModelUsage

inputTokens:

number | undefined

outputTokens:

number | undefined

totalTokens:

number | undefined

content:

Array<ContentPart<TOOLS>>

providerMetadata:

ProviderMetadata | undefined

text:

string

reasoningText:

string | undefined

reasoning:

Array<ReasoningDetail>
ReasoningDetail

type:

'text'

text:

string

signature?:

string
ReasoningDetail

type:

'redacted'

data:

string

sources:

Array<Source>
Source

sourceType:

'url'

id:

string

url:

string

title?:

string

providerMetadata?:

SharedV2ProviderMetadata

files:

Array<GeneratedFile>
GeneratedFile

base64:

string

uint8Array:

Uint8Array

mediaType:

string

toolCalls:

Array<TypedToolCall<TOOLS>>

staticToolCalls:

Array<StaticToolCall<TOOLS>>

dynamicToolCalls:

Array<DynamicToolCall>

toolResults:

Array<TypedToolResult<TOOLS>>

staticToolResults:

Array<StaticToolResult<TOOLS>>

dynamicToolResults:

Array<DynamicToolResult>

warnings:

CallWarning[] | undefined

request:

LanguageModelRequestMetadata

response:

LanguageModelResponseMetadata & { messages: Array<ResponseMessage>; body?: unknown }
Response

id:

string

modelId:

string

timestamp:

Date

headers?:

Record<string, string>

messages:

Array<ResponseMessage>

steps:

Array<StepResult>

experimental_context:

unknown

Returns

content:

Array<ContentPart<TOOLS>>

text:

string

reasoning:

Array<ReasoningOutput>
ReasoningOutput

type:

'reasoning'

text:

string

providerMetadata?:

SharedV2ProviderMetadata

reasoningText:

string | undefined

sources:

Array<Source>
Source

sourceType:

'url'

id:

string

url:

string

title?:

string

providerMetadata?:

SharedV2ProviderMetadata

files:

Array<GeneratedFile>
GeneratedFile

base64:

string

uint8Array:

Uint8Array

mediaType:

string

toolCalls:

ToolCallArray<TOOLS>

toolResults:

ToolResultArray<TOOLS>

staticToolCalls:

Array<StaticToolCall<TOOLS>>

dynamicToolCalls:

Array<DynamicToolCall>

staticToolResults:

Array<StaticToolResult<TOOLS>>

dynamicToolResults:

Array<DynamicToolResult>

finishReason:

'stop' | 'length' | 'content-filter' | 'tool-calls' | 'error' | 'other'

rawFinishReason:

string | undefined

usage:

LanguageModelUsage
LanguageModelUsage

inputTokens:

number | undefined

inputTokenDetails:

LanguageModelInputTokenDetails
LanguageModelInputTokenDetails

noCacheTokens:

number | undefined

cacheReadTokens:

number | undefined

cacheWriteTokens:

number | undefined

outputTokens:

number | undefined

outputTokenDetails:

LanguageModelOutputTokenDetails
LanguageModelOutputTokenDetails

textTokens:

number | undefined

reasoningTokens:

number | undefined

totalTokens:

number | undefined

raw?:

object | undefined

totalUsage:

LanguageModelUsage
LanguageModelUsage

inputTokens:

number | undefined

outputTokens:

number | undefined

totalTokens:

number | undefined

reasoningTokens?:

number | undefined

cachedInputTokens?:

number | undefined

request?:

LanguageModelRequestMetadata
LanguageModelRequestMetadata

body:

string

response?:

LanguageModelResponseMetadata
LanguageModelResponseMetadata

id:

string

modelId:

string

timestamp:

Date

headers?:

Record<string, string>

body?:

unknown

messages:

Array<ResponseMessage>

warnings:

Warning[] | undefined

providerMetadata:

ProviderMetadata | undefined

output?:

Output

steps:

Array<StepResult<TOOLS>>
StepResult

stepNumber:

number

model:

{ provider: string; modelId: string }

functionId:

string | undefined

metadata:

Record<string, unknown> | undefined

experimental_context:

unknown

content:

Array<ContentPart<TOOLS>>

text:

string

reasoning:

Array<ReasoningPart>
ReasoningPart

type:

'reasoning'

text:

string

reasoningText:

string | undefined

files:

Array<GeneratedFile>
GeneratedFile

base64:

string

uint8Array:

Uint8Array

mediaType:

string

sources:

Array<Source>
Source

sourceType:

'url'

id:

string

url:

string

title?:

string

providerMetadata?:

SharedV2ProviderMetadata

toolCalls:

ToolCallArray<TOOLS>

toolResults:

ToolResultArray<TOOLS>

finishReason:

'stop' | 'length' | 'content-filter' | 'tool-calls' | 'error' | 'other'

rawFinishReason:

string | undefined

usage:

LanguageModelUsage
LanguageModelUsage

inputTokens:

number | undefined

inputTokenDetails:

LanguageModelInputTokenDetails
LanguageModelInputTokenDetails

noCacheTokens:

number | undefined

cacheReadTokens:

number | undefined

cacheWriteTokens:

number | undefined

outputTokens:

number | undefined

outputTokenDetails:

LanguageModelOutputTokenDetails
LanguageModelOutputTokenDetails

textTokens:

number | undefined

reasoningTokens:

number | undefined

totalTokens:

number | undefined

raw?:

object | undefined

warnings:

Warning[] | undefined

request:

LanguageModelRequestMetadata
LanguageModelRequestMetadata

body:

string

response:

LanguageModelResponseMetadata
LanguageModelResponseMetadata

id:

string

modelId:

string

timestamp:

Date

headers?:

Record<string, string>

body?:

unknown

messages:

Array<ResponseMessage>

providerMetadata:

ProviderMetadata | undefined

Examples

Learn to generate text using a language model in Next.js
Learn to generate a chat completion using a language model in Next.js
Learn to call tools using a language model in Next.js
Learn to render a React component as a tool call using a language model in Next.js
Learn to generate text using a language model in Node.js
Learn to generate chat completions using a language model in Node.js