メインコンテンツへ移動

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 Access
Complete 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 Processing
Full 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 handling
Error 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)
}
  • .stream():MastraModelOutput を返すメソッド
  • ChunkType:完全なストリームで使用可能なすべてのチャンク型