import type { WithAbortSignal } from "#Source/abort/index.ts" import type { LoggerFriendly, LoggerFriendlyOptions } from "#Source/log/index.ts" import { Logger } from "#Source/log/index.ts" import type { Either } from "#Source/result/index.ts" import type { StringWithAutoCompleteOptions } from "#Source/type/index.ts" const EMBEDDING_MODEL_LIST = [ "text-embedding-ada-002", "text-embedding-3-small", "text-embedding-3-large", ] as const export type EmbeddingModel = (typeof EMBEDDING_MODEL_LIST)[number] export interface EmbeddingOptions extends WithAbortSignal { input: string model: EmbeddingModel maxTries?: number | undefined } export interface EmbeddingLeft { code: StringWithAutoCompleteOptions } export interface EmbeddingRight { embedding: number[] usage: { promptTokens: number totalTokens: number } } export type EmbeddingResult = Either export interface BaseEmbeddingOptions extends LoggerFriendlyOptions {} export abstract class BaseEmbedding implements LoggerFriendly { readonly logger: Logger private readonly supportedModelList: EmbeddingModel[] constructor(options: BaseEmbeddingOptions) { this.logger = Logger.fromOptions(options).setDefaultName("BaseEmbedding") this.supportedModelList = [...EMBEDDING_MODEL_LIST] } isSupportModel(model: EmbeddingModel): boolean { return this.supportedModelList.includes(model) } abstract embedding(options: EmbeddingOptions): Promise }