UNPKG

ai-utils.js

Version:

Build AI applications, chatbots, and agents with JavaScript and TypeScript.

345 lines (344 loc) 12.5 kB
import z from "zod"; import { AbstractModel } from "../../../model-function/AbstractModel.js"; import { FunctionOptions } from "../../../model-function/FunctionOptions.js"; import { GenerateJsonOrTextModel } from "../../../model-function/generate-json/GenerateJsonOrTextModel.js"; import { DeltaEvent } from "../../../model-function/generate-text/DeltaEvent.js"; import { TextGenerationModel, TextGenerationModelSettings } from "../../../model-function/generate-text/TextGenerationModel.js"; import { PromptMapping } from "../../../prompt/PromptMapping.js"; import { PromptMappingTextGenerationModel } from "../../../prompt/PromptMappingTextGenerationModel.js"; import { ResponseHandler } from "../../../util/api/postToApi.js"; import { OpenAIModelSettings } from "../OpenAIModelSettings.js"; import { TikTokenTokenizer } from "../TikTokenTokenizer.js"; import { OpenAIChatMessage } from "./OpenAIChatMessage.js"; import { OpenAIChatAutoFunctionPrompt, OpenAIChatSingleFunctionPrompt, OpenAIFunctionDescription } from "./OpenAIChatPrompt.js"; import { OpenAIChatDelta } from "./OpenAIChatStreamIterable.js"; export declare const OPENAI_CHAT_MODELS: { "gpt-4": { contextWindowSize: number; promptTokenCostInMillicents: number; completionTokenCostInMillicents: number; }; "gpt-4-0314": { contextWindowSize: number; promptTokenCostInMillicents: number; completionTokenCostInMillicents: number; }; "gpt-4-0613": { contextWindowSize: number; promptTokenCostInMillicents: number; completionTokenCostInMillicents: number; }; "gpt-4-32k": { contextWindowSize: number; promptTokenCostInMillicents: number; completionTokenCostInMillicents: number; }; "gpt-4-32k-0314": { contextWindowSize: number; promptTokenCostInMillicents: number; completionTokenCostInMillicents: number; }; "gpt-4-32k-0613": { contextWindowSize: number; promptTokenCostInMillicents: number; completionTokenCostInMillicents: number; }; "gpt-3.5-turbo": { contextWindowSize: number; promptTokenCostInMillicents: number; completionTokenCostInMillicents: number; }; "gpt-3.5-turbo-0301": { contextWindowSize: number; promptTokenCostInMillicents: number; completionTokenCostInMillicents: number; }; "gpt-3.5-turbo-0613": { contextWindowSize: number; promptTokenCostInMillicents: number; completionTokenCostInMillicents: number; }; "gpt-3.5-turbo-16k": { contextWindowSize: number; promptTokenCostInMillicents: number; completionTokenCostInMillicents: number; }; "gpt-3.5-turbo-16k-0613": { contextWindowSize: number; promptTokenCostInMillicents: number; completionTokenCostInMillicents: number; }; }; export type OpenAIChatModelType = keyof typeof OPENAI_CHAT_MODELS; export declare const isOpenAIChatModel: (model: string) => model is "gpt-4" | "gpt-4-0314" | "gpt-4-0613" | "gpt-4-32k" | "gpt-4-32k-0314" | "gpt-4-32k-0613" | "gpt-3.5-turbo" | "gpt-3.5-turbo-0301" | "gpt-3.5-turbo-0613" | "gpt-3.5-turbo-16k" | "gpt-3.5-turbo-16k-0613"; export declare const calculateOpenAIChatCostInMillicents: ({ model, response, }: { model: OpenAIChatModelType; response: OpenAIChatResponse; }) => number; export interface OpenAIChatCallSettings { model: OpenAIChatModelType; functions?: Array<{ name: string; description?: string; parameters: unknown; }>; functionCall?: "none" | "auto" | { name: string; }; temperature?: number; topP?: number; n?: number; stop?: string | string[]; maxTokens?: number; presencePenalty?: number; frequencyPenalty?: number; } export interface OpenAIChatSettings extends TextGenerationModelSettings, OpenAIModelSettings, OpenAIChatCallSettings { isUserIdForwardingEnabled?: boolean; } /** * Create a text generation model that calls the OpenAI chat completion API. * * @see https://platform.openai.com/docs/api-reference/chat/create * * @example * const model = new OpenAIChatModel({ * model: "gpt-3.5-turbo", * temperature: 0.7, * maxTokens: 500, * }); * * const { text } = await generateText([ * model, * OpenAIChatMessage.system( * "Write a short story about a robot learning to love:" * ), * ]); */ export declare class OpenAIChatModel extends AbstractModel<OpenAIChatSettings> implements TextGenerationModel<OpenAIChatMessage[], OpenAIChatResponse, OpenAIChatDelta, OpenAIChatSettings>, GenerateJsonOrTextModel<OpenAIChatSingleFunctionPrompt<unknown> | OpenAIChatAutoFunctionPrompt<Array<OpenAIFunctionDescription<unknown>>>, OpenAIChatResponse, OpenAIChatSettings> { constructor(settings: OpenAIChatSettings); readonly provider: "openai"; get modelName(): "gpt-4" | "gpt-4-0314" | "gpt-4-0613" | "gpt-4-32k" | "gpt-4-32k-0314" | "gpt-4-32k-0613" | "gpt-3.5-turbo" | "gpt-3.5-turbo-0301" | "gpt-3.5-turbo-0613" | "gpt-3.5-turbo-16k" | "gpt-3.5-turbo-16k-0613"; readonly contextWindowSize: number; readonly tokenizer: TikTokenTokenizer; private get apiKey(); /** * Counts the prompt tokens required for the messages. This includes the message base tokens * and the prompt base tokens. */ countPromptTokens(messages: OpenAIChatMessage[]): Promise<number>; callAPI<RESULT>(messages: Array<OpenAIChatMessage>, options: { responseFormat: OpenAIChatResponseFormatType<RESULT>; } & FunctionOptions<Partial<OpenAIChatCallSettings & OpenAIModelSettings & { user?: string; }>>): Promise<RESULT>; generateTextResponse(prompt: OpenAIChatMessage[], options?: FunctionOptions<OpenAIChatSettings>): Promise<{ object: "chat.completion"; model: string; id: string; created: number; usage: { prompt_tokens: number; total_tokens: number; completion_tokens: number; }; choices: { message: { content: string | null; role: "assistant"; function_call?: { name: string; arguments: string; } | undefined; }; finish_reason: string; index: number; logprobs?: any; }[]; }>; extractText(response: OpenAIChatResponse): string; generateDeltaStreamResponse(prompt: OpenAIChatMessage[], options?: FunctionOptions<OpenAIChatSettings>): Promise<AsyncIterable<DeltaEvent<OpenAIChatDelta>>>; extractTextDelta(fullDelta: OpenAIChatDelta): string | undefined; /** * JSON generation uses the OpenAI GPT function calling API. * It provides a single function specification and instructs the model to provide parameters for calling the function. * The result is returned as parsed JSON. * * @see https://platform.openai.com/docs/guides/gpt/function-calling */ generateJsonResponse(prompt: OpenAIChatSingleFunctionPrompt<unknown> | OpenAIChatAutoFunctionPrompt<Array<OpenAIFunctionDescription<unknown>>>, options?: FunctionOptions<OpenAIChatSettings> | undefined): PromiseLike<OpenAIChatResponse>; mapPrompt<INPUT_PROMPT>(promptMapping: PromptMapping<INPUT_PROMPT, OpenAIChatMessage[]>): PromptMappingTextGenerationModel<INPUT_PROMPT, OpenAIChatMessage[], OpenAIChatResponse, OpenAIChatDelta, OpenAIChatSettings, this>; withSettings(additionalSettings: Partial<OpenAIChatSettings>): this; get maxCompletionTokens(): number | undefined; withMaxCompletionTokens(maxCompletionTokens: number): this; withStopTokens(stopTokens: string[]): this; } declare const openAIChatResponseSchema: z.ZodObject<{ id: z.ZodString; object: z.ZodLiteral<"chat.completion">; created: z.ZodNumber; model: z.ZodString; choices: z.ZodArray<z.ZodObject<{ message: z.ZodObject<{ role: z.ZodLiteral<"assistant">; content: z.ZodNullable<z.ZodString>; function_call: z.ZodOptional<z.ZodObject<{ name: z.ZodString; arguments: z.ZodString; }, "strip", z.ZodTypeAny, { name: string; arguments: string; }, { name: string; arguments: string; }>>; }, "strip", z.ZodTypeAny, { content: string | null; role: "assistant"; function_call?: { name: string; arguments: string; } | undefined; }, { content: string | null; role: "assistant"; function_call?: { name: string; arguments: string; } | undefined; }>; index: z.ZodNumber; logprobs: z.ZodNullable<z.ZodAny>; finish_reason: z.ZodString; }, "strip", z.ZodTypeAny, { message: { content: string | null; role: "assistant"; function_call?: { name: string; arguments: string; } | undefined; }; finish_reason: string; index: number; logprobs?: any; }, { message: { content: string | null; role: "assistant"; function_call?: { name: string; arguments: string; } | undefined; }; finish_reason: string; index: number; logprobs?: any; }>, "many">; usage: z.ZodObject<{ prompt_tokens: z.ZodNumber; completion_tokens: z.ZodNumber; total_tokens: z.ZodNumber; }, "strip", z.ZodTypeAny, { prompt_tokens: number; total_tokens: number; completion_tokens: number; }, { prompt_tokens: number; total_tokens: number; completion_tokens: number; }>; }, "strip", z.ZodTypeAny, { object: "chat.completion"; model: string; id: string; created: number; usage: { prompt_tokens: number; total_tokens: number; completion_tokens: number; }; choices: { message: { content: string | null; role: "assistant"; function_call?: { name: string; arguments: string; } | undefined; }; finish_reason: string; index: number; logprobs?: any; }[]; }, { object: "chat.completion"; model: string; id: string; created: number; usage: { prompt_tokens: number; total_tokens: number; completion_tokens: number; }; choices: { message: { content: string | null; role: "assistant"; function_call?: { name: string; arguments: string; } | undefined; }; finish_reason: string; index: number; logprobs?: any; }[]; }>; export type OpenAIChatResponse = z.infer<typeof openAIChatResponseSchema>; export type OpenAIChatResponseFormatType<T> = { stream: boolean; handler: ResponseHandler<T>; }; export declare const OpenAIChatResponseFormat: { /** * Returns the response as a JSON object. */ json: { stream: false; handler: ResponseHandler<{ object: "chat.completion"; model: string; id: string; created: number; usage: { prompt_tokens: number; total_tokens: number; completion_tokens: number; }; choices: { message: { content: string | null; role: "assistant"; function_call?: { name: string; arguments: string; } | undefined; }; finish_reason: string; index: number; logprobs?: any; }[]; }>; }; /** * Returns an async iterable over the text deltas (only the tex different of the first choice). */ deltaIterable: { stream: true; handler: ({ response }: { response: Response; }) => Promise<AsyncIterable<DeltaEvent<OpenAIChatDelta>>>; }; }; export {};