Skip to main content

Embeddings

Examples for generating embeddings with the Gateway.

Basic Embeddings

import { Gateway } from "@adaline/gateway";
import { OpenAI } from "@adaline/openai";
import { Config } from "@adaline/types";

const gateway = new Gateway();
const openai = new OpenAI();
const embeddingModel = openai.embeddingModel({
  modelName: "text-embedding-3-large",
  apiKey: process.env.OPENAI_API_KEY,
});

const response = await gateway.getEmbeddings({
  model: embeddingModel,
  config: Config().parse({ encodingFormat: "float", dimensions: 256 }),
  embeddingRequests: {
    modality: "text",
    requests: ["Hello world"],
  },
});

console.log("Embedding dimensions:", response.embeddings[0].length);
console.log("Tokens used:", response.usage.totalTokens);

Batch Embeddings

Embed multiple texts in a single request:
const documents = [
  "Machine learning is a subset of AI",
  "Natural language processing deals with text",
  "Computer vision processes images and video",
  "Reinforcement learning uses reward signals",
];

const response = await gateway.getEmbeddings({
  model: embeddingModel,
  config: Config().parse({ encodingFormat: "float", dimensions: 256 }),
  embeddingRequests: {
    modality: "text",
    requests: documents,
  },
});

// response.embeddings is an array of vectors, one per document
console.log(`Generated ${response.embeddings.length} embeddings`);

Cosine Similarity

Use embeddings for semantic similarity:
function cosineSimilarity(a: number[], b: number[]): number {
  const dot = a.reduce((sum, ai, i) => sum + ai * b[i], 0);
  const magA = Math.sqrt(a.reduce((sum, ai) => sum + ai * ai, 0));
  const magB = Math.sqrt(b.reduce((sum, bi) => sum + bi * bi, 0));
  return dot / (magA * magB);
}

const texts = ["I love dogs", "I love cats", "The weather is nice"];

const response = await gateway.getEmbeddings({
  model: embeddingModel,
  config: Config().parse({ encodingFormat: "float", dimensions: 256 }),
  embeddingRequests: { modality: "text", requests: texts },
});

const similarity01 = cosineSimilarity(response.embeddings[0], response.embeddings[1]);
const similarity02 = cosineSimilarity(response.embeddings[0], response.embeddings[2]);

console.log(`"dogs" vs "cats": ${similarity01.toFixed(3)}`);    // High similarity
console.log(`"dogs" vs "weather": ${similarity02.toFixed(3)}`); // Lower similarity