LangChain4j integration for Google Vertex AI models including chat, language, embedding, image, and scoring capabilities
—
Quality
Pending
Does it follow best practices?
Impact
Pending
No eval scenarios have been run
import dev.langchain4j.model.vertexai.VertexAiEmbeddingModel;
import dev.langchain4j.data.segment.TextSegment;
import dev.langchain4j.data.embedding.Embedding;
import dev.langchain4j.model.output.Response;
VertexAiEmbeddingModel model = VertexAiEmbeddingModel.builder()
.endpoint("us-central1-aiplatform.googleapis.com:443")
.project("your-project-id")
.location("us-central1")
.publisher("google")
.modelName("text-embedding-004")
.build();
TextSegment segment = TextSegment.from("Machine learning is a subset of AI");
Response<Embedding> response = model.embed(segment);
Embedding embedding = response.content();
float[] vector = embedding.vector();
System.out.println("Dimension: " + embedding.dimension());List<TextSegment> segments = List.of(
TextSegment.from("First document about AI"),
TextSegment.from("Second document about machine learning"),
TextSegment.from("Third document about neural networks")
);
Response<List<Embedding>> response = model.embedAll(segments);
List<Embedding> embeddings = response.content();
for (int i = 0; i < embeddings.size(); i++) {
System.out.println("Document " + i + " embedding: " +
embeddings.get(i).dimension() + " dimensions");
}// For document indexing
VertexAiEmbeddingModel documentModel = VertexAiEmbeddingModel.builder()
.endpoint("us-central1-aiplatform.googleapis.com:443")
.project("your-project-id")
.location("us-central1")
.publisher("google")
.modelName("text-embedding-004")
.taskType(VertexAiEmbeddingModel.TaskType.RETRIEVAL_DOCUMENT)
.build();
// For search queries
VertexAiEmbeddingModel queryModel = VertexAiEmbeddingModel.builder()
.endpoint("us-central1-aiplatform.googleapis.com:443")
.project("your-project-id")
.location("us-central1")
.publisher("google")
.modelName("text-embedding-004")
.taskType(VertexAiEmbeddingModel.TaskType.RETRIEVAL_QUERY)
.build();VertexAiEmbeddingModel model = VertexAiEmbeddingModel.builder()
.endpoint("us-central1-aiplatform.googleapis.com:443")
.project("your-project-id")
.location("us-central1")
.publisher("google")
.modelName("text-embedding-004")
.taskType(TaskType.SEMANTIC_SIMILARITY)
.maxSegmentsPerBatch(100) // Process 100 segments per API call
.maxTokensPerBatch(10000) // Max 10k tokens per batch
.outputDimensionality(256) // Reduce to 256 dimensions
.autoTruncate(true) // Auto-truncate long texts
.titleMetadataKey("doc_title") // Custom title metadata key
.maxRetries(3)
.build();import dev.langchain4j.model.vertexai.VertexAiEmbeddingModelName;
VertexAiEmbeddingModel model = VertexAiEmbeddingModel.builder()
.endpoint("us-central1-aiplatform.googleapis.com:443")
.project("your-project-id")
.location("us-central1")
.publisher("google")
.modelName(VertexAiEmbeddingModelName.TEXT_EMBEDDING_004.toString())
.build();
// Check dimension
Integer dimension = VertexAiEmbeddingModelName.TEXT_EMBEDDING_004.dimension();
System.out.println("Expected dimension: " + dimension);List<TextSegment> segments = List.of(
TextSegment.from("Short text"),
TextSegment.from("A much longer text with many more tokens to process")
);
List<Integer> tokenCounts = model.calculateTokensCounts(segments);
for (int i = 0; i < tokenCounts.size(); i++) {
System.out.println("Segment " + i + " has " + tokenCounts.get(i) + " tokens");
}import dev.langchain4j.data.document.Metadata;
TextSegment segment = TextSegment.from(
"Document content here",
Metadata.from("title", "Important Document")
);
Response<Embedding> response = model.embed(segment);VertexAiEmbeddingModel model = VertexAiEmbeddingModel.builder()
.endpoint("us-central1-aiplatform.googleapis.com:443")
.project("your-project-id")
.location("us-central1")
.publisher("google")
.modelName("text-embedding-004")
.titleMetadataKey("doc_title") // Custom metadata key
.build();
TextSegment segment = TextSegment.from(
"Document content",
Metadata.from("doc_title", "My Document") // Use same key
);
Response<Embedding> response = model.embed(segment);// Index documents
List<TextSegment> documents = List.of(
TextSegment.from("Python is a programming language"),
TextSegment.from("Java is used for enterprise applications"),
TextSegment.from("Machine learning uses neural networks")
);
Response<List<Embedding>> docEmbeddings = documentModel.embedAll(documents);
// Search query
TextSegment query = TextSegment.from("programming languages");
Response<Embedding> queryEmbedding = queryModel.embed(query);
// Calculate similarities (cosine similarity)
for (int i = 0; i < docEmbeddings.content().size(); i++) {
double similarity = cosineSimilarity(
queryEmbedding.content().vector(),
docEmbeddings.content().get(i).vector()
);
System.out.println("Document " + i + " similarity: " + similarity);
}VertexAiEmbeddingModel model = VertexAiEmbeddingModel.builder()
.endpoint("us-central1-aiplatform.googleapis.com:443")
.project("your-project-id")
.location("us-central1")
.publisher("google")
.modelName("text-embedding-004")
.outputDimensionality(256) // Reduce from 768 to 256
.build();
Response<Embedding> response = model.embed(TextSegment.from("Some text"));
System.out.println("Dimension: " + response.content().dimension()); // 256VertexAiEmbeddingModel model = VertexAiEmbeddingModel.builder()
.endpoint("us-central1-aiplatform.googleapis.com:443")
.project("your-project-id")
.location("us-central1")
.publisher("google")
.modelName("text-embedding-004")
.autoTruncate(true) // Automatically truncate if text too long
.build();
String veryLongText = "..."; // Text longer than model limit
TextSegment segment = TextSegment.from(veryLongText);
Response<Embedding> response = model.embed(segment); // No error, auto-truncated// Configure batching
VertexAiEmbeddingModel model = VertexAiEmbeddingModel.builder()
.endpoint("us-central1-aiplatform.googleapis.com:443")
.project("your-project-id")
.location("us-central1")
.publisher("google")
.modelName("text-embedding-004")
.maxSegmentsPerBatch(50) // Process 50 at a time
.maxTokensPerBatch(5000) // Max 5000 tokens per batch
.build();
// Large list of documents
List<TextSegment> manyDocuments = // ... 1000 documents
Response<List<Embedding>> response = model.embedAll(manyDocuments);
// Automatically batched into multiple API callsVertexAiEmbeddingModel multilingualModel = VertexAiEmbeddingModel.builder()
.endpoint("us-central1-aiplatform.googleapis.com:443")
.project("your-project-id")
.location("us-central1")
.publisher("google")
.modelName("text-multilingual-embedding-002")
.build();
List<TextSegment> multilingualTexts = List.of(
TextSegment.from("Hello world"), // English
TextSegment.from("Bonjour le monde"), // French
TextSegment.from("Hola mundo") // Spanish
);
Response<List<Embedding>> response = multilingualModel.embedAll(multilingualTexts);try {
Response<List<Embedding>> response = model.embedAll(segments);
List<Embedding> embeddings = response.content();
} catch (Exception e) {
System.err.println("Embedding failed: " + e.getMessage());
// Automatic retries already attempted up to maxRetries
}// 1. Create embedding model for documents
VertexAiEmbeddingModel docModel = VertexAiEmbeddingModel.builder()
.endpoint("us-central1-aiplatform.googleapis.com:443")
.project("your-project-id")
.location("us-central1")
.publisher("google")
.modelName("text-embedding-004")
.taskType(TaskType.RETRIEVAL_DOCUMENT)
.build();
// 2. Index knowledge base
List<TextSegment> knowledgeBase = loadDocuments();
Response<List<Embedding>> docEmbeddings = docModel.embedAll(knowledgeBase);
// 3. Create embedding model for queries
VertexAiEmbeddingModel queryModel = VertexAiEmbeddingModel.builder()
.endpoint("us-central1-aiplatform.googleapis.com:443")
.project("your-project-id")
.location("us-central1")
.publisher("google")
.modelName("text-embedding-004")
.taskType(TaskType.RETRIEVAL_QUERY)
.build();
// 4. Search
String userQuery = "How does photosynthesis work?";
Response<Embedding> queryEmbedding = queryModel.embed(TextSegment.from(userQuery));
// 5. Find most similar documents
List<TextSegment> relevantDocs = findTopK(
docEmbeddings.content(),
queryEmbedding.content(),
knowledgeBase,
3 // Top 3
);Install with Tessl CLI
npx tessl i tessl/maven-dev-langchain4j--langchain4j-vertex-ai@1.11.0