diff --git a/examples/pom.xml b/examples/pom.xml index bd073003772..46861a0a0a1 100644 --- a/examples/pom.xml +++ b/examples/pom.xml @@ -5,7 +5,7 @@ com.google.genai.examples google-genai-examples - 1.42.0-SNAPSHOT + 1.41.0 google-genai-examples @@ -13,7 +13,7 @@ 1.8 1.8 - 1.42.0-SNAPSHOT + 1.41.0 diff --git a/pom.xml b/pom.xml index dc255c8ed7f..67d1776e3c5 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ com.google.genai google-genai google-genai - 1.42.0-SNAPSHOT + 1.41.0-SNAPSHOT jar Java idiomatic SDK for the Gemini Developer APIs and Vertex AI APIs. @@ -158,6 +158,7 @@ jspecify 1.0.0 + org.jetbrains.kotlin kotlin-stdlib-jdk8 diff --git a/src/main/java/com/google/genai/ApiClient.java b/src/main/java/com/google/genai/ApiClient.java index 3e2b11fc0e7..888180b70fa 100644 --- a/src/main/java/com/google/genai/ApiClient.java +++ b/src/main/java/com/google/genai/ApiClient.java @@ -52,7 +52,7 @@ /** Interface for an API client which issues HTTP requests to the GenAI APIs. */ @InternalApi -public abstract class ApiClient implements AutoCloseable { +public abstract class ApiClient { // {x-version-update-start:google-genai:released} private static final String SDK_VERSION = "1.40.0"; @@ -726,17 +726,4 @@ public static void setDefaultBaseUrls( ApiClient.geminiBaseUrl = geminiBaseUrl; ApiClient.vertexBaseUrl = vertexBaseUrl; } - - @Override - public void close() { - try { - httpClient().dispatcher().executorService().shutdown(); - httpClient().connectionPool().evictAll(); - if (httpClient().cache() != null) { - httpClient().cache().close(); - } - } catch (IOException e) { - throw new GenAiIOException("Failed to close the client.", e); - } - } } diff --git a/src/main/java/com/google/genai/Client.java b/src/main/java/com/google/genai/Client.java index 99e5f67d606..0bc250b550b 100644 --- a/src/main/java/com/google/genai/Client.java +++ b/src/main/java/com/google/genai/Client.java @@ -20,8 +20,10 @@ import com.google.auth.oauth2.GoogleCredentials; import com.google.errorprone.annotations.CanIgnoreReturnValue; +import com.google.genai.errors.GenAiIOException; import com.google.genai.types.ClientOptions; import com.google.genai.types.HttpOptions; +import java.io.IOException; import java.util.Optional; /** Client class for GenAI. This class is thread-safe. */ @@ -328,7 +330,15 @@ Optional baseUrl() { /** Closes the Client instance together with its instantiated http client. */ @Override public void close() { - apiClient.close(); + try { + apiClient.httpClient().dispatcher().executorService().shutdown(); + apiClient.httpClient().connectionPool().evictAll(); + if (apiClient.httpClient().cache() != null) { + apiClient.httpClient().cache().close(); + } + } catch (IOException e) { + throw new GenAiIOException("Failed to close the client.", e); + } } /** diff --git a/src/test/java/com/google/genai/ClientTest.java b/src/test/java/com/google/genai/ClientTest.java index b84e8026314..ee48cb33793 100644 --- a/src/test/java/com/google/genai/ClientTest.java +++ b/src/test/java/com/google/genai/ClientTest.java @@ -188,4 +188,24 @@ public void testSetDefaultBaseUrls() { // Reset the base URLs after the test. Client.setDefaultBaseUrls(Optional.empty(), Optional.empty()); } + + @Test + public void testCloseClient() throws Exception { + // Arrange + ApiClient apiClient = mock(ApiClient.class); + OkHttpClient httpClient = new OkHttpClient(); + when(apiClient.httpClient()).thenReturn(httpClient); + + Client client = Client.builder().apiKey(API_KEY).vertexAI(false).build(); + Field apiClientField = Client.class.getDeclaredField("apiClient"); + apiClientField.setAccessible(true); + apiClientField.set(client, apiClient); + + // Act + client.close(); + + // Assert + assertTrue(httpClient.dispatcher().executorService().isShutdown()); + assertEquals(0, httpClient.connectionPool().connectionCount()); + } } diff --git a/src/test/java/com/google/genai/HttpApiClientTest.java b/src/test/java/com/google/genai/HttpApiClientTest.java index 63616accb9a..68a7020e00f 100644 --- a/src/test/java/com/google/genai/HttpApiClientTest.java +++ b/src/test/java/com/google/genai/HttpApiClientTest.java @@ -23,7 +23,9 @@ import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertTrue; import static org.mockito.ArgumentMatchers.any; -import static org.mockito.Mockito.*; +import static org.mockito.Mockito.doNothing; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; @@ -44,7 +46,6 @@ import java.util.Optional; import java.util.concurrent.CompletableFuture; import java.util.concurrent.ExecutionException; - import okhttp3.Call; import okhttp3.Callback; import okhttp3.Dispatcher; @@ -1482,21 +1483,4 @@ public void testNoDefaultLocationWhenUsingApiKeyOnlyMode( assertNull(client.location()); assertTrue(client.vertexAI()); } - - @Test - public void testCloseClient() { - HttpApiClient client = - new HttpApiClient( - Optional.empty(), - Optional.of(PROJECT), - Optional.of(LOCATION), - Optional.of(CREDENTIALS), - Optional.empty(), - Optional.empty()); - - client.close(); - - assertTrue(client.httpClient().dispatcher().executorService().isShutdown()); - assertEquals(0, client.httpClient().connectionPool().connectionCount()); - } } diff --git a/versions.txt b/versions.txt index fa2120c49f6..060b16024f6 100644 --- a/versions.txt +++ b/versions.txt @@ -1,4 +1,4 @@ # Format: # module:released-version:current-version -google-genai:1.41.0:1.42.0-SNAPSHOT +google-genai:1.41.0:1.41.0