UNPKG

ai

Version:

AI SDK by Vercel - build apps like ChatGPT, Claude, Gemini, and more with a single interface for any model using the Vercel AI Gateway or go direct to OpenAI, Anthropic, Google, or any other model provider.

61 lines (57 loc) • 1.74 kB
import type { ExecuteToolsStreamPart } from './execute-tools-from-stream'; import type { StreamRetryAttemptBoundaryPart } from './stream-retry-attempt-boundary'; // Chunk types that contain semantic model output. This classification is used // for first-content and inter-content timeouts as well as to distinguish empty // incomplete streams from incomplete streams with partial results. It is // exhaustive so that new chunk types must be classified explicitly. const isOutputChunkType = { file: true, custom: false, source: false, 'text-start': false, 'text-end': false, 'text-delta': true, 'reasoning-start': false, 'reasoning-end': false, 'reasoning-delta': true, 'reasoning-file': true, 'tool-input-start': false, 'tool-input-end': false, 'tool-input-delta': true, 'tool-approval-request': false, 'tool-approval-response': false, 'tool-call': true, 'tool-result': false, 'tool-error': false, 'tool-output-denied': false, 'tool-execution-end': false, 'model-call-start': false, 'model-call-response-metadata': false, 'model-call-end': false, error: false, ping: false, raw: false, } as const satisfies Record< Exclude<ExecuteToolsStreamPart, StreamRetryAttemptBoundaryPart>['type'], boolean >; export function isOutputChunk( chunk: Exclude<ExecuteToolsStreamPart, StreamRetryAttemptBoundaryPart>, ): boolean { if (!isOutputChunkType[chunk.type]) { return false; } switch (chunk.type) { case 'text-delta': case 'reasoning-delta': return chunk.text.length > 0; case 'tool-input-delta': return chunk.delta.length > 0; case 'file': case 'reasoning-file': case 'tool-call': return true; default: return false; } }