Java idiomatic SDK for the Gemini Developer APIs and Vertex AI APIs
Create and manage tuning jobs to fine-tune models with custom training data.
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;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);
}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"));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"));
});
}// 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
);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"));
});
}client.tunings.cancel(jobName, null);
System.out.println("Tuning job cancelled");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);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"));
}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);
});UpdateModelConfig config = UpdateModelConfig.builder()
.displayName("Updated Model Name")
.description("Updated description")
.build();
Model updated = client.models.update(tunedModelName, config);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-genaidocs