CtrlK
BlogDocsLog inGet started
Tessl Logo

tessl/maven-com-google-genai--google-genai

Java idiomatic SDK for the Gemini Developer APIs and Vertex AI APIs

Overview
Eval results
Files

batch-operations.mddocs/

Batch Operations

Create and manage batch jobs for processing multiple requests efficiently with reduced costs and optimized throughput.

Core Imports

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;

Batches Service

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);
}

Batch Job Type

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();
}

Batch Job Source/Destination

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();
}

Create Batch Job (GCS)

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"));

Create Batch Job (Inlined - Gemini API)

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);

Monitor Batch Job

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));
});

Create Embeddings Batch

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
);

List Batch Jobs

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"));
}

Cancel Batch Job

client.batches.cancel(jobName, null);
System.out.println("Batch job cancelled");

Delete Batch Job

DeleteResourceJob result = client.batches.delete(jobName, null);
System.out.println("Batch job deleted");

JSONL Format

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-genai

docs

batch-operations.md

caching.md

chat-sessions.md

client-configuration.md

content-generation.md

embeddings-tokens.md

error-handling.md

file-search-stores.md

files-management.md

image-operations.md

index.md

live-sessions.md

model-tuning.md

operations.md

tools-functions.md

types-reference.md

video-generation.md

tile.json