MastraModelOutput
MastraModelOutput クラスは .stream() によって返され、モデル出力へストリーミングと Promise ベースの両方でアクセスできます。構造化出力の生成、Tool 呼び出し、推論、詳細な使用量の追跡をサポートします。
// MastraModelOutput is returned by agent.stream()
const stream = await agent.stream('Hello world')
セットアップと基本的な使用方法については、.stream() メソッドのドキュメントを参照してください。
ストリーミングプロパティストリーミングプロパティへの直接リンク
これらのプロパティを使用すると、生成中のモデル出力へリアルタイムでアクセスできます。
fullStream:
ReadableStream<ChunkType<OUTPUT>>
テキスト、Tool 呼び出し、推論、メタデータ、制御チャンクを含む、すべてのチャンク型の完全なストリーム。モデルの応答のあらゆる側面へ詳細にアクセスできます。
ReadableStream
ChunkType:
ChunkType<OUTPUT>
ストリーミング中に出力される可能性のあるすべてのチャンク型
textStream:
ReadableStream<string>
増分テキストコンテンツのみのストリーム。すべてのメタデータ、Tool 呼び出し、制御チャンクを除外し、生成中のテキストだけを提供します。
objectStream:
ReadableStream<Partial<OUTPUT>>
出力スキーマを使用する場合に、構造化オブジェクトの段階的な更新を流すストリーム。構築の進行に応じて部分的なオブジェクトを出力するため、構造化データの生成をリアルタイムで可視化できます。
ReadableStream
PartialSchemaOutput:
Partial<OUTPUT>
定義されたスキーマに一致する、部分的に完成したオブジェクト
elementStream:
ReadableStream<OUTPUT extends (infer T)[] ? T : never>
出力スキーマで配列型を定義した場合に、個々の配列要素を流すストリーム。配列全体の完成を待たず、各要素が完成するたびに出力されます。
Promise ベースのプロパティPromise ベースのプロパティへの直接リンク
これらのプロパティは、ストリームの完了後に最終値へ解決されます。
text:
Promise<string>
モデルから返された、連結済みの完全なテキスト応答。テキスト生成が終了すると解決されます。
object:
Promise<OUTPUT>
出力スキーマを使用する場合の、完全な構造化オブジェクト応答。解決前にスキーマに対して検証されます。検証に失敗すると拒否されます。
Promise
InferSchemaOutput:
OUTPUT
スキーマ定義と完全に一致する型付きオブジェクト
reasoning:
Promise<string>
推論をサポートするモデル(OpenAI の o1 シリーズなど)の完全な推論テキスト。推論機能のないモデルでは空文字列を返します。
reasoningText:
Promise<string | undefined>
推論コンテンツへアクセスする別の方法。推論をサポートしないモデルでは、'reasoning' が空文字列を返すのに対し、こちらは undefined になる場合があります。
toolCalls:
Promise<ToolCallChunk[]>
実行中に行われたすべての Tool 呼び出しチャンクの配列。各チャンクには Tool のメタデータと実行の詳細が含まれます。
ToolCallChunk
type:
'tool-call'
チャンク型の識別子
runId:
string
実行 Run の識別子
from:
ChunkFrom
チャンクの送信元(AGENT、WORKFLOW など)
payload:
ToolCallPayload
toolCallId、toolName、args、実行の詳細を含む Tool 呼び出しデータ
toolResults:
Promise<ToolResultChunk[]>
Tool 呼び出しに対応するすべての Tool 結果チャンクの配列。実行結果とエラー情報が含まれます。
ToolResultChunk
type:
'tool-result'
チャンク型の識別子
runId:
string
実行 Run の識別子
from:
ChunkFrom
チャンクの送信元(AGENT、WORKFLOW など)
payload:
ToolResultPayload
toolCallId、toolName、result、エラー状態を含む Tool 結果データ
usage:
Promise<LanguageModelUsage>
入力トークン、出力トークン、合計トークン、推論トークン(推論モデルの場合)を含むトークン使用量の統計。
Record
inputTokens:
number
入力プロンプトによって消費されたトークン
outputTokens:
number
応答で生成されたトークン
totalTokens:
number
入力トークンと出力トークンの合計
reasoningTokens?:
number
非表示の推論トークン(推論モデルの場合)
cachedInputTokens?:
number
キャッシュにヒットした入力トークンの数
finishReason:
Promise<string | undefined>
生成が停止した理由(例:'stop'、'length'、'tool_calls'、'content_filter')。ストリームが完了していない場合は undefined です。
enum
stop:
'stop'
モデルが自然に完了した
length:
'length'
最大トークン数の上限に達した
tool_calls:
'tool_calls'
モデルが Tool を呼び出した
content_filter:
'content_filter'
コンテンツがフィルタリングされた
response:
Promise<Response>
モデル Provider からの応答メタデータとメッセージ。
Response
id?:
string
モデル Provider からの応答 ID
timestamp?:
Date
応答のタイムスタンプ
modelId?:
string
この応答に使用されたモデルの識別子
headers?:
Record<string, string>
モデル Provider からの応答ヘッダー
messages?:
ResponseMessage[]
モデル形式の応答メッセージ
uiMessages?:
UIMessage[]
UI 形式の応答メッセージ。出力プロセッサーによって追加されたメタデータを含みます
エラープロパティエラープロパティへの直接リンク
error:
string | Error | { message: string; stack: string; } | undefined
ストリームでエラーが発生した場合のエラー情報。エラーが発生しなかった場合は undefined です。文字列のメッセージ、Error オブジェクト、またはスタックトレースを含むシリアライズ済みエラーのいずれかです。
メソッドメソッドへの直接リンク
getFullOutput:
() => Promise<FullOutput>
テキスト、構造化オブジェクト、Tool 呼び出し、使用量の統計、推論、メタデータというすべての結果を含む包括的な出力オブジェクトを返します。すべてのストリーム結果へ単一のメソッドで簡単にアクセスできます。
FullOutput
text:
string
完全なテキスト応答
object?:
OUTPUT
スキーマが指定されている場合の構造化出力
toolCalls:
ToolCallChunk[]
行われたすべての Tool 呼び出しチャンク
toolResults:
ToolResultChunk[]
すべての Tool 結果チャンク
usage:
Record<string, number>
トークン使用量の統計
reasoning?:
string
利用可能な場合の推論テキスト
finishReason?:
string
生成が終了した理由
response:
Response
モデル Provider からの応答メタデータとメッセージ
consumeStream:
(options?: ConsumeStreamOptions) => Promise<void>
チャンクを処理せず、ストリーム全体を手動で消費します。Promise ベースの最終結果だけが必要で、ストリームの消費を開始したい場合に便利です。
ConsumeStreamOptions
onError?:
(error: Error) => void
ストリームエラーを処理するためのコールバック
使用例使用例への直接リンク
基本的なテキストストリーミング基本的なテキストストリーミングへの直接リンク
const stream = await agent.stream('Write a haiku')
// Stream text as it's generated
for await (const text of stream.textStream) {
process.stdout.write(text)
}
// Or get the complete text
const fullText = await stream.text
console.log(fullText)
構造化出力のストリーミング構造化出力のストリーミングへの直接リンク
const stream = await agent.stream('Generate user data', {
structuredOutput: {
schema: z.object({
name: z.string(),
age: z.number(),
email: z.string(),
}),
},
})
// Stream partial objects
for await (const partial of stream.objectStream) {
console.log('Progress:', partial) // { name: "John" }, { name: "John", age: 30 }, ...
}
// Get final validated object
const user = await stream.object
console.log('Final:', user) // { name: "John", age: 30, email: "john@example.com" }
### Tool Calls and Results
```typescript
const stream = await agent.stream("What's the weather in NYC?", {
tools: { weather: weatherTool }
});
// Monitor tool calls
const toolCalls = await stream.toolCalls;
const toolResults = await stream.toolResults;
console.log("Tools called:", toolCalls);
console.log("Results:", toolResults);
Complete Output AccessComplete Output Accessへの直接リンク
const stream = await agent.stream('Analyze this data')
const output = await stream.getFullOutput()
console.log({
text: output.text,
usage: output.usage,
reasoning: output.reasoning,
finishReason: output.finishReason,
})
Full Stream ProcessingFull Stream Processingへの直接リンク
const stream = await agent.stream('Complex task')
for await (const chunk of stream.fullStream) {
switch (chunk.type) {
case 'text-delta':
process.stdout.write(chunk.payload.text)
break
case 'tool-call':
console.log(`Calling ${chunk.payload.toolName}...`)
break
case 'reasoning-delta':
console.log(`Reasoning: ${chunk.payload.text}`)
break
case 'finish':
console.log(`Done! Reason: ${chunk.payload.stepResult.reason}`)
// Access response messages with any metadata added by output processors
const uiMessages = chunk.payload.response?.uiMessages
if (uiMessages) {
console.log('Response messages:', uiMessages)
}
break
}
}
Error handlingError handlingへの直接リンク
const stream = await agent.stream('Analyze this data')
try {
// Option 1: Handle errors in consumeStream
await stream.consumeStream({
onError: error => {
console.error('Stream error:', error)
},
})
const result = await stream.text
} catch (error) {
console.error('Failed to get result:', error)
}
// Option 2: Check error property
const result = await stream.getFullOutput()
if (stream.error) {
console.error('Stream had errors:', stream.error)
}