Skip to content
Snippets Groups Projects
jina.ts 2.5 KiB
Newer Older
import { JinaAIEmbedding } from "@llamaindex/jinaai";
import { SimpleDirectoryReader } from "@llamaindex/readers/directory";
import { ImageDocument, similarity, SimilarityType } from "llamaindex";
import path from "path";

async function main() {
  const jina = new JinaAIEmbedding({
    model: "jina-clip-v1",
  });

  // Get text embeddings
  const text1 = "a car";
  const textEmbedding1 = await jina.getTextEmbedding(text1);
  const text2 = "a football match";
  const textEmbedding2 = await jina.getTextEmbedding(text2);

  // Get image embedding
  const image =
    "https://huggingface.co/datasets/Xenova/transformers.js-docs/resolve/main/football-match.jpg";
  const imageEmbedding = await jina.getImageEmbedding(image);

  // Calc similarity between text and image
  const sim1 = similarity(
    textEmbedding1,
    imageEmbedding,
    SimilarityType.DEFAULT,
  );
  const sim2 = similarity(
    textEmbedding2,
    imageEmbedding,
    SimilarityType.DEFAULT,
  );

  console.log(`Similarity between "${text1}" and the image is ${sim1}`);
  console.log(`Similarity between "${text2}" and the image is ${sim2}`);

  // Get multiple text embeddings
  const textEmbeddings = await jina.getTextEmbeddings([text1, text2]);
  const sim3 = similarity(
    textEmbeddings[0],
    textEmbeddings[1],
    SimilarityType.DEFAULT,
  );
  console.log(
    `Similarity between the two texts "${text1}" and "${text2}" is ${sim3}`,
  );

  // Get multiple image embeddings
  const catImg1 =
    "https://i.pinimg.com/600x315/21/48/7e/21487e8e0970dd366dafaed6ab25d8d8.jpg";
  const catImg2 =
    "https://i.pinimg.com/736x/c9/f2/3e/c9f23e212529f13f19bad5602d84b78b.jpg";
  const imageEmbeddings = await jina.getImageEmbeddings([catImg1, catImg2]);
  const sim4 = similarity(
    imageEmbeddings[0],
    imageEmbeddings[1],
    SimilarityType.DEFAULT,
  );
  console.log(`Similarity between the two online cat images is ${sim4}`);

  // Get image embeddings from multiple local files
  const documents = await new SimpleDirectoryReader().loadData({
    directoryPath: path.join("multimodal", "data"),
  });
  const localImages = documents
    .filter((doc) => doc instanceof ImageDocument)
    .slice(0, 2); // Get only the first two images
  const localImageEmbeddings = await jina.getImageEmbeddings(
    localImages.map((doc) => (doc as ImageDocument).image),
  );
  const sim5 = similarity(
    localImageEmbeddings[0],
    localImageEmbeddings[1],
    SimilarityType.DEFAULT,
  );
  console.log(`Similarity between the two local images is ${sim5}`);
}

void main();