lib/ChatCompletionStreamingRunner.ts (87 lines of code) (raw):
import {
type ChatCompletionChunk,
type ChatCompletionCreateParamsStreaming,
} from "../resources/chat/completions.ts";
import {
type AbstractChatCompletionRunnerEvents,
RunnerOptions,
} from "./AbstractChatCompletionRunner.ts";
import { type ReadableStream } from "../_shims/mod.ts";
import {
type BaseFunctionsArgs,
type RunnableFunctions,
RunnableTools,
} from "./RunnableFunction.ts";
import {
ChatCompletionSnapshot,
ChatCompletionStream,
} from "./ChatCompletionStream.ts";
import OpenAI from "../mod.ts";
import { AutoParseableTool } from "./parser.ts";
export interface ChatCompletionStreamEvents
extends AbstractChatCompletionRunnerEvents {
content: (contentDelta: string, contentSnapshot: string) => void;
chunk: (chunk: ChatCompletionChunk, snapshot: ChatCompletionSnapshot) => void;
}
export type ChatCompletionStreamingFunctionRunnerParams<
FunctionsArgs extends BaseFunctionsArgs,
> =
& Omit<
ChatCompletionCreateParamsStreaming,
"functions"
>
& {
functions: RunnableFunctions<FunctionsArgs>;
};
export type ChatCompletionStreamingToolRunnerParams<
FunctionsArgs extends BaseFunctionsArgs,
> =
& Omit<
ChatCompletionCreateParamsStreaming,
"tools"
>
& {
tools: RunnableTools<FunctionsArgs> | AutoParseableTool<any, true>[];
};
export class ChatCompletionStreamingRunner<ParsedT = null>
extends ChatCompletionStream<ParsedT>
implements AsyncIterable<ChatCompletionChunk> {
static override fromReadableStream(
stream: ReadableStream,
): ChatCompletionStreamingRunner<null> {
const runner = new ChatCompletionStreamingRunner(null);
runner._run(() => runner._fromReadableStream(stream));
return runner;
}
/** @deprecated - please use `runTools` instead. */
static runFunctions<T extends (string | object)[]>(
client: OpenAI,
params: ChatCompletionStreamingFunctionRunnerParams<T>,
options?: RunnerOptions,
): ChatCompletionStreamingRunner<null> {
const runner = new ChatCompletionStreamingRunner(null);
const opts = {
...options,
headers: {
...options?.headers,
"X-Stainless-Helper-Method": "runFunctions",
},
};
runner._run(() => runner._runFunctions(client, params, opts));
return runner;
}
static runTools<T extends (string | object)[], ParsedT = null>(
client: OpenAI,
params: ChatCompletionStreamingToolRunnerParams<T>,
options?: RunnerOptions,
): ChatCompletionStreamingRunner<ParsedT> {
const runner = new ChatCompletionStreamingRunner<ParsedT>(
// @ts-expect-error TODO these types are incompatible
params,
);
const opts = {
...options,
headers: { ...options?.headers, "X-Stainless-Helper-Method": "runTools" },
};
runner._run(() => runner._runTools(client, params, opts));
return runner;
}
}