Vertex AI Text Embeddings API allows you to generate embeddings from text using state-of-the-art language models. The API supports task-specific optimization, enabling you to generate embeddings tailored for specific use cases like question answering, document retrieval, or classification.
from google import genaifrom google.genai.types import EmbedContentConfigclient = genai.Client(vertexai=True, project=PROJECT_ID, location=LOCATION)# Generate question embeddingquestion = "Why is the sky blue?"question_emb = client.models.embed_content( model="text-embedding-005", contents=[question], config=EmbedContentConfig(task_type="QUESTION_ANSWERING")).embeddings[0].values# Generate answer embeddingsanswers = [ "The sky is blue today", "The scattering of sunlight causes the blue color"]answer_embs = client.models.embed_content( model="text-embedding-005", contents=answers, config=EmbedContentConfig(task_type="RETRIEVAL_DOCUMENT"))# Calculate similaritiesimport numpy as npfor i, answer in enumerate(answers): similarity = np.dot(question_emb, answer_embs.embeddings[i].values) print(f"{answer}: {similarity:.4f}")
Calculate similarity between texts using embeddings:
import numpy as npimport pandas as pdfrom sklearn.metrics.pairwise import cosine_similarityfrom google import genaiclient = genai.Client(vertexai=True, project=PROJECT_ID, location=LOCATION)# Sample textstexts = [ "i really enjoyed the movie last night", "so many amazing cinematic scenes yesterday", "had a great time writing my Python scripts a few days ago", "huge sense of relief when my .py script finally ran without error"]# Generate embeddingsembeddings = []for text in texts: emb = client.models.embed_content( model="text-embedding-005", contents=[text] ).embeddings[0].values embeddings.append(emb)# Calculate cosine similarity matrixsimilarity_matrix = cosine_similarity(embeddings)# Display as DataFramedf = pd.DataFrame(similarity_matrix, index=texts, columns=texts)print(df)
import timefrom google import genaiclient = genai.Client(vertexai=True, project=PROJECT_ID, location=LOCATION)def get_embeddings_with_rate_limit(texts: list[str], batch_size: int = 5): embeddings = [] for i in range(0, len(texts), batch_size): time.sleep(1) # Limit to 1 request per second batch = texts[i:i + batch_size] response = client.models.embed_content( model="text-embedding-005", contents=batch ) embeddings.extend([e.values for e in response.embeddings]) return embeddings