Java idiomatic SDK for the Gemini Developer APIs and Vertex AI APIs
Create and manage batch jobs for processing multiple requests efficiently with reduced costs and optimized throughput.
import com.google.genai.Batches;
import com.google.genai.AsyncBatches;
import com.google.genai.Pager;
import com.google.genai.types.BatchJob;
import com.google.genai.types.BatchJobSource;
import com.google.genai.types.BatchJobDestination;
import com.google.genai.types.CreateBatchJobConfig;
import com.google.genai.types.CreateEmbeddingsBatchJobConfig;
import com.google.genai.types.EmbeddingsBatchJobSource;
import com.google.genai.types.InlinedRequest;
import com.google.genai.types.DeleteResourceJob;package com.google.genai;
public final class Batches {
public BatchJob create(String model, BatchJobSource src, CreateBatchJobConfig config);
public BatchJob createEmbeddings(String model, EmbeddingsBatchJobSource src, CreateEmbeddingsBatchJobConfig config);
public BatchJob get(String name, GetBatchJobConfig config);
public void cancel(String name, CancelBatchJobConfig config);
public DeleteResourceJob delete(String name, DeleteBatchJobConfig config);
public Pager<BatchJob> list(ListBatchJobsConfig config);
}package com.google.genai.types;
public final class BatchJob {
public Optional<String> name();
public Optional<String> displayName();
public Optional<String> model();
public Optional<String> state();
public Optional<String> createTime();
public Optional<String> updateTime();
public Optional<String> endTime();
public Optional<String> startTime();
public Optional<BatchJobSource> src();
public Optional<BatchJobDestination> dest();
public Optional<CompletionStats> completionStats();
public Optional<Status> error();
}package com.google.genai.types;
public final class BatchJobSource {
public static Builder builder();
public Optional<String> gcsUri();
public Optional<String> bigqueryUri();
public Optional<String> fileName();
public Optional<List<InlinedRequest>> inlinedRequests();
public Optional<String> format();
}
public final class BatchJobDestination {
public static Builder builder();
public Optional<String> gcsUri();
public Optional<String> bigqueryUri();
public Optional<String> fileName();
public Optional<List<InlinedResponse>> inlinedResponses();
public Optional<String> format();
}BatchJobSource source = BatchJobSource.builder()
.gcsUri("gs://my-bucket/input/requests.jsonl")
.build();
CreateBatchJobConfig config = CreateBatchJobConfig.builder()
.dest(BatchJobDestination.builder()
.gcsUri("gs://my-bucket/output/")
.build())
.build();
BatchJob job = client.batches.create(
"gemini-2.0-flash",
source,
config
);
System.out.println("Batch job created: " + job.name().orElse("N/A"));import com.google.genai.types.InlinedRequest;
List<InlinedRequest> requests = ImmutableList.of(
InlinedRequest.builder()
.contents(ImmutableList.of(Content.fromParts(Part.fromText("Request 1"))))
.build(),
InlinedRequest.builder()
.contents(ImmutableList.of(Content.fromParts(Part.fromText("Request 2"))))
.build(),
InlinedRequest.builder()
.contents(ImmutableList.of(Content.fromParts(Part.fromText("Request 3"))))
.build()
);
BatchJobSource source = BatchJobSource.builder()
.inlinedRequests(requests)
.build();
CreateBatchJobConfig config = CreateBatchJobConfig.builder()
.dest(BatchJobDestination.builder()
.fileName("files/output-batch")
.build())
.build();
BatchJob job = client.batches.create("gemini-2.0-flash", source, config);BatchJob job = client.batches.get(jobName, null);
while (!"COMPLETE".equals(job.state().orElse(""))) {
if ("FAILED".equals(job.state().orElse(""))) {
System.err.println("Job failed: " + job.error().orElse(null));
break;
}
Thread.sleep(10000);
job = client.batches.get(job.name().get(), null);
System.out.println("State: " + job.state().orElse("N/A"));
}
job.completionStats().ifPresent(stats -> {
System.out.println("Successful: " + stats.successfulRequestCount().orElse(0));
System.out.println("Failed: " + stats.failedRequestCount().orElse(0));
});EmbeddingsBatchJobSource source = EmbeddingsBatchJobSource.builder()
.fileName("files/embedding-requests")
.build();
CreateEmbeddingsBatchJobConfig config = CreateEmbeddingsBatchJobConfig.builder()
.dest(BatchJobDestination.builder()
.fileName("files/embedding-outputs")
.build())
.build();
BatchJob job = client.batches.createEmbeddings(
"text-embedding-004",
source,
config
);Pager<BatchJob> pager = client.batches.list(null);
for (BatchJob job : pager) {
System.out.println("Job: " + job.displayName().orElse("N/A"));
System.out.println(" State: " + job.state().orElse("N/A"));
System.out.println(" Created: " + job.createTime().orElse("N/A"));
}client.batches.cancel(jobName, null);
System.out.println("Batch job cancelled");DeleteResourceJob result = client.batches.delete(jobName, null);
System.out.println("Batch job deleted");Input file format (requests.jsonl):
{"contents":[{"parts":[{"text":"Request 1"}]}]}
{"contents":[{"parts":[{"text":"Request 2"}]}]}
{"contents":[{"parts":[{"text":"Request 3"}]}]}Output format:
{"response":{"candidates":[{"content":{"parts":[{"text":"Response 1"}]}}]}}
{"response":{"candidates":[{"content":{"parts":[{"text":"Response 2"}]}}]}}
{"response":{"candidates":[{"content":{"parts":[{"text":"Response 3"}]}}]}}Install with Tessl CLI
npx tessl i tessl/maven-com-google-genai--google-genaidocs