UNPKG

openai

Version:

The official TypeScript library for the OpenAI API

69 lines (62 loc) 2.21 kB
import { type Completions, type ChatCompletionMessageParam, type ChatCompletionCreateParamsNonStreaming, } from "../resources/chat/completions"; import { type RunnableFunctions, type BaseFunctionsArgs, RunnableTools } from './RunnableFunction'; import { AbstractChatCompletionRunner, AbstractChatCompletionRunnerEvents, RunnerOptions, } from './AbstractChatCompletionRunner'; import { isAssistantMessage } from './chatCompletionUtils'; 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>; }; export class ChatCompletionRunner extends AbstractChatCompletionRunner<ChatCompletionRunnerEvents> { /** @deprecated - please use `runTools` instead. */ static runFunctions( completions: Completions, params: ChatCompletionFunctionRunnerParams<any[]>, options?: RunnerOptions, ): ChatCompletionRunner { const runner = new ChatCompletionRunner(); const opts = { ...options, headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'runFunctions' }, }; runner._run(() => runner._runFunctions(completions, params, opts)); return runner; } static runTools( completions: Completions, params: ChatCompletionToolRunnerParams<any[]>, options?: RunnerOptions, ): ChatCompletionRunner { const runner = new ChatCompletionRunner(); const opts = { ...options, headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'runTools' }, }; runner._run(() => runner._runTools(completions, params, opts)); return runner; } override _addMessage(message: ChatCompletionMessageParam) { super._addMessage(message); if (isAssistantMessage(message) && message.content) { this._emit('content', message.content as string); } } }