UNPKG

ai

Version:

AI SDK by Vercel - The AI Toolkit for TypeScript and JavaScript

121 lines (106 loc) 3.82 kB
import { ServerResponse } from 'http'; import { AsyncIterableStream } from '../util/async-iterable-stream'; import { CallWarning, FinishReason, LanguageModelRequestMetadata, LanguageModelResponseMetadata, ProviderMetadata, } from '../types'; import { LanguageModelUsage } from '../types/usage'; /** * The result of a `streamObject` call that contains the partial object stream and additional information. */ export interface StreamObjectResult<PARTIAL, RESULT, ELEMENT_STREAM> { /** * Warnings from the model provider (e.g. unsupported settings) */ readonly warnings: Promise<CallWarning[] | undefined>; /** * The token usage of the generated response. Resolved when the response is finished. */ readonly usage: Promise<LanguageModelUsage>; /** * Additional provider-specific metadata. They are passed through * from the provider to the AI SDK and enable provider-specific * results that can be fully encapsulated in the provider. */ readonly providerMetadata: Promise<ProviderMetadata | undefined>; /** * Additional request information from the last step. */ readonly request: Promise<LanguageModelRequestMetadata>; /** * Additional response information. */ readonly response: Promise<LanguageModelResponseMetadata>; /** * The reason why the generation finished. Taken from the last step. * * Resolved when the response is finished. */ readonly finishReason: Promise<FinishReason>; /** * The generated object (typed according to the schema). Resolved when the response is finished. */ readonly object: Promise<RESULT>; /** * Stream of partial objects. It gets more complete as the stream progresses. * * Note that the partial object is not validated. * If you want to be certain that the actual content matches your schema, you need to implement your own validation for partial results. */ readonly partialObjectStream: AsyncIterableStream<PARTIAL>; /** * Stream over complete array elements. Only available if the output strategy is set to `array`. */ readonly elementStream: ELEMENT_STREAM; /** * Text stream of the JSON representation of the generated object. It contains text chunks. * When the stream is finished, the object is valid JSON that can be parsed. */ readonly textStream: AsyncIterableStream<string>; /** * Stream of different types of events, including partial objects, errors, and finish events. * Only errors that stop the stream, such as network errors, are thrown. */ readonly fullStream: AsyncIterableStream<ObjectStreamPart<PARTIAL>>; /** * Writes text delta output to a Node.js response-like object. * It sets a `Content-Type` header to `text/plain; charset=utf-8` and * writes each text delta as a separate chunk. * * @param response A Node.js response-like object (ServerResponse). * @param init Optional headers, status code, and status text. */ pipeTextStreamToResponse(response: ServerResponse, init?: ResponseInit): void; /** * Creates a simple text stream response. * The response has a `Content-Type` header set to `text/plain; charset=utf-8`. * Each text delta is encoded as UTF-8 and sent as a separate chunk. * Non-text-delta events are ignored. * * @param init Optional headers, status code, and status text. */ toTextStreamResponse(init?: ResponseInit): Response; } export type ObjectStreamPart<PARTIAL> = | { type: 'object'; object: PARTIAL; } | { type: 'text-delta'; textDelta: string; } | { type: 'error'; error: unknown; } | { type: 'finish'; finishReason: FinishReason; usage: LanguageModelUsage; response: LanguageModelResponseMetadata; providerMetadata?: ProviderMetadata; };