Embed

Mastra uses the AI SDK’s embed and embedMany functions to generate vector embeddings for text inputs, enabling similarity search and RAG workflows.

Single Embedding

The embed function generates a vector embedding for a single text input:

import { embed } from 'ai';
 
const result = await embed({
  model: openai.embedding('text-embedding-3-small'),
  value: "Your text to embed",
  maxRetries: 2  // optional, defaults to 2
});

Parameters

model:

EmbeddingModel
The embedding model to use (e.g. openai.embedding('text-embedding-3-small'))

value:

string | Record<string, any>
The text content or object to embed

maxRetries?:

number
= 2
Maximum number of retries per embedding call. Set to 0 to disable retries.

abortSignal?:

AbortSignal
Optional abort signal to cancel the request

headers?:

Record<string, string>
Additional HTTP headers for the request (only for HTTP-based providers)

Return Value

embedding:

number[]
The embedding vector for the input

Multiple Embeddings

For embedding multiple texts at once, use the embedMany function:

import { embedMany } from 'ai';
 
const result = await embedMany({
  model: openai.embedding('text-embedding-3-small'),
  values: ["First text", "Second text", "Third text"],
  maxRetries: 2  // optional, defaults to 2
});

Parameters

model:

EmbeddingModel
The embedding model to use (e.g. openai.embedding('text-embedding-3-small'))

values:

string[] | Record<string, any>[]
Array of text content or objects to embed

maxRetries?:

number
= 2
Maximum number of retries per embedding call. Set to 0 to disable retries.

abortSignal?:

AbortSignal
Optional abort signal to cancel the request

headers?:

Record<string, string>
Additional HTTP headers for the request (only for HTTP-based providers)

Return Value

embeddings:

number[][]
Array of embedding vectors corresponding to the input values

Example Usage

import { embed, embedMany } from 'ai';
import { openai } from '@ai-sdk/openai';
 
// Single embedding
const singleResult = await embed({
  model: openai.embedding('text-embedding-3-small'),
  value: "What is the meaning of life?",
});
 
// Multiple embeddings
const multipleResult = await embedMany({
  model: openai.embedding('text-embedding-3-small'),
  values: [
    "First question about life",
    "Second question about universe",
    "Third question about everything"
  ],
});

For more detailed information about embeddings in the Vercel AI SDK, see: