import type { SharedV2Headers, SharedV2ProviderOptions, SharedV2ProviderMetadata, } from '../../shared'; import type { EmbeddingModelV2Embedding } from './embedding-model-v2-embedding'; /** * Specification for an embedding model that implements the embedding model * interface version 2. * * VALUE is the type of the values that the model can embed. * This will allow us to go beyond text embeddings in the future, * e.g. to support image embeddings */ export type EmbeddingModelV2 = { /** * The embedding model must specify which embedding model interface * version it implements. This will allow us to evolve the embedding * model interface and retain backwards compatibility. The different * implementation versions can be handled as a discriminated union * on our side. */ readonly specificationVersion: 'v2'; /** * Name of the provider for logging purposes. */ readonly provider: string; /** * Provider-specific model ID for logging purposes. */ readonly modelId: string; /** * Limit of how many embeddings can be generated in a single API call. * * Use Infinity for models that do not have a limit. */ readonly maxEmbeddingsPerCall: | PromiseLike | number | undefined; /** * True if the model can handle multiple embedding calls in parallel. */ readonly supportsParallelCalls: PromiseLike | boolean; /** * Generates a list of embeddings for the given input text. * * Naming: "do" prefix to prevent accidental direct usage of the method * by the user. */ doEmbed(options: { /** * List of values to embed. */ values: Array; /** * Abort signal for cancelling the operation. */ abortSignal?: AbortSignal; /** * Additional provider-specific options. They are passed through * to the provider from the AI SDK and enable provider-specific * functionality that can be fully encapsulated in the provider. */ providerOptions?: SharedV2ProviderOptions; /** * Additional HTTP headers to be sent with the request. * Only applicable for HTTP-based providers. */ headers?: Record; }): PromiseLike<{ /** * Generated embeddings. They are in the same order as the input values. */ embeddings: Array; /** * Token usage. We only have input tokens for embeddings. */ usage?: { tokens: number }; /** * Additional provider-specific metadata. They are passed through * from the provider to the AI SDK and enable provider-specific * results that can be fully encapsulated in the provider. */ providerMetadata?: SharedV2ProviderMetadata; /** * Optional response information for debugging purposes. */ response?: { /** * Response headers. */ headers?: SharedV2Headers; /** * The response body. */ body?: unknown; }; }>; };