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

model-tuning.mddocs/

Model Tuning

Create and manage tuning jobs to fine-tune models with custom training data.

Core Imports

import com.google.genai.Tunings;
import com.google.genai.AsyncTunings;
import com.google.genai.Pager;
import com.google.genai.types.TuningOperation;
import com.google.genai.types.TuningJob;
import com.google.genai.types.TunedModel;
import com.google.genai.types.CreateTuningJobConfig;
import com.google.genai.types.Hyperparameters;

Tunings Service

package com.google.genai;

public final class Tunings {
  public TuningOperation create(CreateTuningJobConfig config);
  public TuningOperation get(String name, GetTuningJobConfig config);
  public void cancel(String name, CancelTuningJobConfig config);
  public Pager<TuningOperation> list(ListTuningJobsConfig config);
}

Create Tuning Job

import com.google.genai.types.TuningDataSource;

CreateTuningJobConfig config = CreateTuningJobConfig.builder()
    .baseModel("gemini-1.5-flash-002")
    .tuningDataSource(TuningDataSource.builder()
        .gcsUri("gs://my-bucket/training-data.jsonl")
        .build())
    .hyperparameters(Hyperparameters.builder()
        .epochCount(5)
        .batchSize(8)
        .learningRate(0.001)
        .build())
    .displayName("Custom Model v1")
    .build();

TuningOperation operation = client.tunings.create(config);
System.out.println("Tuning job: " + operation.name().orElse("N/A"));

Monitor Tuning Job

TuningOperation operation = client.tunings.get(jobName, null);

while (!operation.done().orElse(false)) {
    Thread.sleep(30000);
    operation = client.tunings.get(operation.name().get(), null);

    operation.metadata().ifPresent(metadata -> {
        // Check progress
        System.out.println("Status: " + metadata.state().orElse("N/A"));
    });
}

if (operation.error().isPresent()) {
    System.err.println("Tuning failed: " + operation.error().get());
} else {
    operation.response().ifPresent(model -> {
        System.out.println("Model ready: " + model.name().orElse("N/A"));
    });
}

Use Tuned Model

// After tuning completes, use the tuned model
String tunedModelName = operation.response()
    .flatMap(TunedModel::name)
    .orElse(null);

GenerateContentResponse response = client.models.generateContent(
    tunedModelName,
    "Test the tuned model",
    null
);

List Tuning Jobs

Pager<TuningOperation> pager = client.tunings.list(null);

for (TuningOperation op : pager) {
    op.metadata().ifPresent(job -> {
        System.out.println("Job: " + job.displayName().orElse("N/A"));
        System.out.println("  State: " + job.state().orElse("N/A"));
    });
}

Cancel Tuning Job

client.tunings.cancel(jobName, null);
System.out.println("Tuning job cancelled");

Model Management

public Model get(String model, GetModelConfig config);
public Pager<Model> list(ListModelsConfig config);
public Model update(String model, UpdateModelConfig config);
public DeleteModelResponse delete(String model, DeleteModelConfig config);

List Models

Pager<Model> pager = client.models.list(null);

for (Model model : pager) {
    System.out.println("Model: " + model.name().orElse("N/A"));
    System.out.println("  Display: " + model.displayName().orElse("N/A"));
    System.out.println("  Description: " + model.description().orElse("N/A"));
}

Get Model Info

Model model = client.models.get("gemini-2.0-flash", null);

System.out.println("Name: " + model.name().orElse("N/A"));
System.out.println("Input token limit: " + model.inputTokenLimit().orElse(0));
System.out.println("Output token limit: " + model.outputTokenLimit().orElse(0));

model.supportedGenerationMethods().ifPresent(methods -> {
    System.out.println("Supported methods: " + methods);
});

Update Tuned Model

UpdateModelConfig config = UpdateModelConfig.builder()
    .displayName("Updated Model Name")
    .description("Updated description")
    .build();

Model updated = client.models.update(tunedModelName, config);

Delete Tuned Model

DeleteModelResponse response = client.models.delete(tunedModelName, null);
System.out.println("Model deleted");

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