ai-utils.js
Version:
Build AI applications, chatbots, and agents with JavaScript and TypeScript.
123 lines (122 loc) • 4.41 kB
TypeScript
import z from "zod";
import { AbstractModel } from "../../model-function/AbstractModel.js";
import { FunctionOptions } from "../../model-function/FunctionOptions.js";
import { TextEmbeddingModel, TextEmbeddingModelSettings } from "../../model-function/embed-text/TextEmbeddingModel.js";
import { RetryFunction } from "../../util/api/RetryFunction.js";
import { ThrottleFunction } from "../../util/api/ThrottleFunction.js";
import { TikTokenTokenizer } from "./TikTokenTokenizer.js";
export declare const OPENAI_TEXT_EMBEDDING_MODELS: {
"text-embedding-ada-002": {
contextWindowSize: number;
embeddingDimensions: number;
tokenCostInMillicents: number;
};
};
export type OpenAITextEmbeddingModelType = keyof typeof OPENAI_TEXT_EMBEDDING_MODELS;
export declare const isOpenAIEmbeddingModel: (model: string) => model is "text-embedding-ada-002";
export declare const calculateOpenAIEmbeddingCostInMillicents: ({ model, responses, }: {
model: OpenAITextEmbeddingModelType;
responses: OpenAITextEmbeddingResponse[];
}) => number;
export interface OpenAITextEmbeddingModelSettings extends TextEmbeddingModelSettings {
model: OpenAITextEmbeddingModelType;
baseUrl?: string;
apiKey?: string;
retry?: RetryFunction;
throttle?: ThrottleFunction;
isUserIdForwardingEnabled?: boolean;
}
/**
* Create a text embedding model that calls the OpenAI embedding API.
*
* @see https://platform.openai.com/docs/api-reference/embeddings
*
* @example
* const { embeddings } = await embedTexts(
* new OpenAITextEmbeddingModel({ model: "text-embedding-ada-002" }),
* [
* "At first, Nox didn't know what to do with the pup.",
* "He keenly observed and absorbed everything around him, from the birds in the sky to the trees in the forest.",
* ]
* );
*/
export declare class OpenAITextEmbeddingModel extends AbstractModel<OpenAITextEmbeddingModelSettings> implements TextEmbeddingModel<OpenAITextEmbeddingResponse, OpenAITextEmbeddingModelSettings> {
constructor(settings: OpenAITextEmbeddingModelSettings);
readonly provider: "openai";
get modelName(): "text-embedding-ada-002";
readonly maxTextsPerCall = 1;
readonly embeddingDimensions: number;
readonly tokenizer: TikTokenTokenizer;
readonly contextWindowSize: number;
private get apiKey();
countTokens(input: string): Promise<number>;
callAPI(text: string, options?: FunctionOptions<OpenAITextEmbeddingModelSettings>): Promise<OpenAITextEmbeddingResponse>;
generateEmbeddingResponse(texts: string[], options?: FunctionOptions<OpenAITextEmbeddingModelSettings>): Promise<{
object: "list";
model: string;
data: {
object: "embedding";
embedding: number[];
index: number;
}[];
usage: {
prompt_tokens: number;
total_tokens: number;
};
}>;
extractEmbeddings(response: OpenAITextEmbeddingResponse): number[][];
withSettings(additionalSettings: OpenAITextEmbeddingModelSettings): this;
}
declare const openAITextEmbeddingResponseSchema: z.ZodObject<{
object: z.ZodLiteral<"list">;
data: z.ZodArray<z.ZodObject<{
object: z.ZodLiteral<"embedding">;
embedding: z.ZodArray<z.ZodNumber, "many">;
index: z.ZodNumber;
}, "strip", z.ZodTypeAny, {
object: "embedding";
embedding: number[];
index: number;
}, {
object: "embedding";
embedding: number[];
index: number;
}>, "many">;
model: z.ZodString;
usage: z.ZodObject<{
prompt_tokens: z.ZodNumber;
total_tokens: z.ZodNumber;
}, "strip", z.ZodTypeAny, {
prompt_tokens: number;
total_tokens: number;
}, {
prompt_tokens: number;
total_tokens: number;
}>;
}, "strip", z.ZodTypeAny, {
object: "list";
model: string;
data: {
object: "embedding";
embedding: number[];
index: number;
}[];
usage: {
prompt_tokens: number;
total_tokens: number;
};
}, {
object: "list";
model: string;
data: {
object: "embedding";
embedding: number[];
index: number;
}[];
usage: {
prompt_tokens: number;
total_tokens: number;
};
}>;
export type OpenAITextEmbeddingResponse = z.infer<typeof openAITextEmbeddingResponseSchema>;
export {};