lib/ChatCompletionRunner.ts (86 lines of code) (raw):

import { type ChatCompletionCreateParamsNonStreaming, type ChatCompletionMessageParam, } from "../resources/chat/completions.ts"; import { type BaseFunctionsArgs, type RunnableFunctions, RunnableTools, } from "./RunnableFunction.ts"; import { AbstractChatCompletionRunner, AbstractChatCompletionRunnerEvents, RunnerOptions, } from "./AbstractChatCompletionRunner.ts"; import { isAssistantMessage } from "./chatCompletionUtils.ts"; import OpenAI from "../mod.ts"; import { AutoParseableTool } from "./parser.ts"; export interface ChatCompletionRunnerEvents extends AbstractChatCompletionRunnerEvents { content: (content: string) => void; } export type ChatCompletionFunctionRunnerParams< FunctionsArgs extends BaseFunctionsArgs, > = & Omit< ChatCompletionCreateParamsNonStreaming, "functions" > & { functions: RunnableFunctions<FunctionsArgs>; }; export type ChatCompletionToolRunnerParams< FunctionsArgs extends BaseFunctionsArgs, > = & Omit< ChatCompletionCreateParamsNonStreaming, "tools" > & { tools: RunnableTools<FunctionsArgs> | AutoParseableTool<any, true>[]; }; export class ChatCompletionRunner<ParsedT = null> extends AbstractChatCompletionRunner< ChatCompletionRunnerEvents, ParsedT > { /** @deprecated - please use `runTools` instead. */ static runFunctions( client: OpenAI, params: ChatCompletionFunctionRunnerParams<any[]>, options?: RunnerOptions, ): ChatCompletionRunner<null> { const runner = new ChatCompletionRunner(); const opts = { ...options, headers: { ...options?.headers, "X-Stainless-Helper-Method": "runFunctions", }, }; runner._run(() => runner._runFunctions(client, params, opts)); return runner; } static runTools<ParsedT>( client: OpenAI, params: ChatCompletionToolRunnerParams<any[]>, options?: RunnerOptions, ): ChatCompletionRunner<ParsedT> { const runner = new ChatCompletionRunner<ParsedT>(); const opts = { ...options, headers: { ...options?.headers, "X-Stainless-Helper-Method": "runTools" }, }; runner._run(() => runner._runTools(client, params, opts)); return runner; } override _addMessage( this: ChatCompletionRunner<ParsedT>, message: ChatCompletionMessageParam, emit: boolean = true, ) { super._addMessage(message, emit); if (isAssistantMessage(message) && message.content) { this._emit("content", message.content as string); } } }