From 71b73d194b9986a241e3a11f91a1d6bb7c312349 Mon Sep 17 00:00:00 2001 From: Yashas Shetty Date: Wed, 18 Mar 2026 16:10:25 +0530 Subject: [PATCH 1/2] fix: align artifact services and tests with BaseArtifactService changes - Resolve type mismatches in RequestConverter and MediaSupportTest where Part was incorrectly treated as Optional. --- .../adk/a2a/converters/RequestConverter.java | 12 +-- .../google/adk/a2a/grpc/MediaSupportTest.java | 75 +++++++++---------- .../artifacts/CassandraArtifactService.java | 15 ++-- .../adk/artifacts/MapDbArtifactService.java | 11 ++- .../adk/artifacts/MongoDbArtifactService.java | 7 +- .../artifacts/PostgresArtifactService.java | 10 ++- .../adk/artifacts/RedisArtifactService.java | 11 ++- .../adk/sessions/PostgresSessionService.java | 5 +- .../artifacts/CassandraArtifactServiceIT.java | 11 +-- .../CassandraArtifactServiceTest.java | 5 +- .../artifacts/PostgresArtifactServiceIT.java | 32 ++++---- .../PostgresArtifactServiceTest.java | 9 +-- .../adk/artifacts/RedisArtifactServiceIT.java | 9 +-- 13 files changed, 104 insertions(+), 108 deletions(-) diff --git a/a2a/src/main/java/com/google/adk/a2a/converters/RequestConverter.java b/a2a/src/main/java/com/google/adk/a2a/converters/RequestConverter.java index b289ced6c..5b8f0fa5a 100644 --- a/a2a/src/main/java/com/google/adk/a2a/converters/RequestConverter.java +++ b/a2a/src/main/java/com/google/adk/a2a/converters/RequestConverter.java @@ -61,8 +61,10 @@ public static Optional convertA2aMessageToAdkEvent(Message message, Strin // Convert each A2A Part to GenAI Part if (message.getParts() != null) { for (Part a2aPart : message.getParts()) { - Optional genaiPart = PartConverter.toGenaiPart(a2aPart); - genaiPart.ifPresent(genaiParts::add); + com.google.genai.types.Part genaiPart = PartConverter.toGenaiPart(a2aPart); + if (genaiPart != null) { + genaiParts.add(genaiPart); + } } } @@ -125,15 +127,15 @@ public static ImmutableList convertAggregatedA2aMessageToAdkEvents( // Emit exactly one ADK Event per A2A Part, preserving order. for (Part a2aPart : message.getParts()) { - Optional genaiPart = PartConverter.toGenaiPart(a2aPart); - if (genaiPart.isEmpty()) { + com.google.genai.types.Part genaiPart = PartConverter.toGenaiPart(a2aPart); + if (genaiPart == null) { continue; } String author = extractAuthorFromMetadata(a2aPart); String role = determineRoleFromAuthor(author); - events.add(createEvent(ImmutableList.of(genaiPart.get()), author, role, invocationId)); + events.add(createEvent(ImmutableList.of(genaiPart), author, role, invocationId)); } if (events.isEmpty()) { diff --git a/a2a/src/test/java/com/google/adk/a2a/grpc/MediaSupportTest.java b/a2a/src/test/java/com/google/adk/a2a/grpc/MediaSupportTest.java index a8019be30..a8f14870d 100644 --- a/a2a/src/test/java/com/google/adk/a2a/grpc/MediaSupportTest.java +++ b/a2a/src/test/java/com/google/adk/a2a/grpc/MediaSupportTest.java @@ -14,7 +14,6 @@ import io.a2a.spec.FileWithUri; import io.a2a.spec.TextPart; import java.util.Base64; -import java.util.Optional; import org.junit.jupiter.api.Test; /** Tests for image, audio, and video support in A2A. */ @@ -36,11 +35,11 @@ class MediaSupportTest { void testTextPart_conversion() { // A2A TextPart to GenAI Part TextPart textPart = new TextPart("Hello, world!"); - Optional genaiPart = PartConverter.toGenaiPart(textPart); + Part genaiPart = PartConverter.toGenaiPart(textPart); - assertThat(genaiPart).isPresent(); - assertThat(genaiPart.get().text()).isPresent(); - assertThat(genaiPart.get().text().get()).isEqualTo("Hello, world!"); + assertThat(genaiPart).isNotNull(); + assertThat(genaiPart.text()).isPresent(); + assertThat(genaiPart.text().get()).isEqualTo("Hello, world!"); // GenAI Part to A2A TextPart Part genaiTextPart = Part.builder().text("Hello, world!").build(); @@ -57,11 +56,11 @@ void testImageFilePart_withUri() { FilePart imagePart = new FilePart(new FileWithUri("image/png", "test.png", "https://example.com/image.png")); - Optional genaiPart = PartConverter.toGenaiPart(imagePart); + Part genaiPart = PartConverter.toGenaiPart(imagePart); - assertThat(genaiPart).isPresent(); - assertThat(genaiPart.get().fileData()).isPresent(); - FileData fileData = genaiPart.get().fileData().get(); + assertThat(genaiPart).isNotNull(); + assertThat(genaiPart.fileData()).isPresent(); + FileData fileData = genaiPart.fileData().get(); assertThat(fileData.fileUri()).isPresent(); assertThat(fileData.fileUri().get()).isEqualTo("https://example.com/image.png"); assertThat(fileData.mimeType()).isPresent(); @@ -74,11 +73,11 @@ void testImageFilePart_withBytes() { FilePart imagePart = new FilePart(new FileWithBytes("image/png", "test.png", SAMPLE_IMAGE_BASE64)); - Optional genaiPart = PartConverter.toGenaiPart(imagePart); + Part genaiPart = PartConverter.toGenaiPart(imagePart); - assertThat(genaiPart).isPresent(); - assertThat(genaiPart.get().inlineData()).isPresent(); - Blob blob = genaiPart.get().inlineData().get(); + assertThat(genaiPart).isNotNull(); + assertThat(genaiPart.inlineData()).isPresent(); + Blob blob = genaiPart.inlineData().get(); assertThat(blob.mimeType()).isPresent(); assertThat(blob.mimeType().get()).isEqualTo("image/png"); assertThat(blob.data()).isPresent(); @@ -91,11 +90,11 @@ void testAudioFilePart_withUri() { FilePart audioPart = new FilePart(new FileWithUri("audio/mpeg", "test.mp3", "https://example.com/audio.mp3")); - Optional genaiPart = PartConverter.toGenaiPart(audioPart); + Part genaiPart = PartConverter.toGenaiPart(audioPart); - assertThat(genaiPart).isPresent(); - assertThat(genaiPart.get().fileData()).isPresent(); - FileData fileData = genaiPart.get().fileData().get(); + assertThat(genaiPart).isNotNull(); + assertThat(genaiPart.fileData()).isPresent(); + FileData fileData = genaiPart.fileData().get(); assertThat(fileData.mimeType()).isPresent(); assertThat(fileData.mimeType().get()).isEqualTo("audio/mpeg"); } @@ -106,11 +105,11 @@ void testAudioFilePart_withBytes() { FilePart audioPart = new FilePart(new FileWithBytes("audio/wav", "test.wav", SAMPLE_AUDIO_BASE64)); - Optional genaiPart = PartConverter.toGenaiPart(audioPart); + Part genaiPart = PartConverter.toGenaiPart(audioPart); - assertThat(genaiPart).isPresent(); - assertThat(genaiPart.get().inlineData()).isPresent(); - Blob blob = genaiPart.get().inlineData().get(); + assertThat(genaiPart).isNotNull(); + assertThat(genaiPart.inlineData()).isPresent(); + Blob blob = genaiPart.inlineData().get(); assertThat(blob.mimeType()).isPresent(); assertThat(blob.mimeType().get()).isEqualTo("audio/wav"); } @@ -121,11 +120,11 @@ void testVideoFilePart_withUri() { FilePart videoPart = new FilePart(new FileWithUri("video/mp4", "test.mp4", "https://example.com/video.mp4")); - Optional genaiPart = PartConverter.toGenaiPart(videoPart); + Part genaiPart = PartConverter.toGenaiPart(videoPart); - assertThat(genaiPart).isPresent(); - assertThat(genaiPart.get().fileData()).isPresent(); - FileData fileData = genaiPart.get().fileData().get(); + assertThat(genaiPart).isNotNull(); + assertThat(genaiPart.fileData()).isPresent(); + FileData fileData = genaiPart.fileData().get(); assertThat(fileData.mimeType()).isPresent(); assertThat(fileData.mimeType().get()).isEqualTo("video/mp4"); } @@ -136,11 +135,11 @@ void testVideoFilePart_withBytes() { FilePart videoPart = new FilePart(new FileWithBytes("video/mp4", "test.mp4", SAMPLE_VIDEO_BASE64)); - Optional genaiPart = PartConverter.toGenaiPart(videoPart); + Part genaiPart = PartConverter.toGenaiPart(videoPart); - assertThat(genaiPart).isPresent(); - assertThat(genaiPart.get().inlineData()).isPresent(); - Blob blob = genaiPart.get().inlineData().get(); + assertThat(genaiPart).isNotNull(); + assertThat(genaiPart.inlineData()).isPresent(); + Blob blob = genaiPart.inlineData().get(); assertThat(blob.mimeType()).isPresent(); assertThat(blob.mimeType().get()).isEqualTo("video/mp4"); } @@ -227,16 +226,16 @@ void testMultipleMediaTypes_inMessage() { FilePart videoPart = new FilePart(new FileWithUri("video/mp4", "movie.mp4", "https://example.com/movie.mp4")); - Optional imageGenai = PartConverter.toGenaiPart(imagePart); - Optional audioGenai = PartConverter.toGenaiPart(audioPart); - Optional videoGenai = PartConverter.toGenaiPart(videoPart); + Part imageGenai = PartConverter.toGenaiPart(imagePart); + Part audioGenai = PartConverter.toGenaiPart(audioPart); + Part videoGenai = PartConverter.toGenaiPart(videoPart); - assertThat(imageGenai).isPresent(); - assertThat(audioGenai).isPresent(); - assertThat(videoGenai).isPresent(); + assertThat(imageGenai).isNotNull(); + assertThat(audioGenai).isNotNull(); + assertThat(videoGenai).isNotNull(); - assertThat(imageGenai.get().fileData().get().mimeType().get()).isEqualTo("image/jpeg"); - assertThat(audioGenai.get().fileData().get().mimeType().get()).isEqualTo("audio/mpeg"); - assertThat(videoGenai.get().fileData().get().mimeType().get()).isEqualTo("video/mp4"); + assertThat(imageGenai.fileData().get().mimeType().get()).isEqualTo("image/jpeg"); + assertThat(audioGenai.fileData().get().mimeType().get()).isEqualTo("audio/mpeg"); + assertThat(videoGenai.fileData().get().mimeType().get()).isEqualTo("video/mp4"); } } diff --git a/core/src/main/java/com/google/adk/artifacts/CassandraArtifactService.java b/core/src/main/java/com/google/adk/artifacts/CassandraArtifactService.java index 9977381e8..aa5ef315b 100644 --- a/core/src/main/java/com/google/adk/artifacts/CassandraArtifactService.java +++ b/core/src/main/java/com/google/adk/artifacts/CassandraArtifactService.java @@ -29,7 +29,6 @@ import io.reactivex.rxjava3.core.Single; import java.util.ArrayList; import java.util.List; -import java.util.Optional; /** * A Cassandra-backed implementation of the {@link BaseArtifactService}. @@ -74,11 +73,15 @@ public Single saveArtifact( @Override public Maybe loadArtifact( - String appName, String userId, String sessionId, String filename, Optional version) { + String appName, + String userId, + String sessionId, + String filename, + @org.jspecify.annotations.Nullable Integer version) { return Maybe.fromCallable( () -> { Row row; - if (version.isPresent()) { + if (version != null) { row = session .execute( @@ -87,7 +90,7 @@ public Maybe loadArtifact( userId, sessionId, filename, - version.get()) + version) .one(); } else { row = @@ -197,9 +200,7 @@ public static void main(String[] args) { // Load the artifact Part loadedArtifact = - artifactService - .loadArtifact(appName, userId, sessionId, filename, Optional.of(version)) - .blockingGet(); + artifactService.loadArtifact(appName, userId, sessionId, filename, version).blockingGet(); System.out.println("Loaded artifact content: " + loadedArtifact.text().get()); CassandraHelper.close(); diff --git a/core/src/main/java/com/google/adk/artifacts/MapDbArtifactService.java b/core/src/main/java/com/google/adk/artifacts/MapDbArtifactService.java index a2a087b9a..8bdee4989 100644 --- a/core/src/main/java/com/google/adk/artifacts/MapDbArtifactService.java +++ b/core/src/main/java/com/google/adk/artifacts/MapDbArtifactService.java @@ -19,7 +19,6 @@ import io.reactivex.rxjava3.core.Single; import java.io.File; import java.util.NavigableMap; -import java.util.Optional; import java.util.Set; import java.util.logging.Level; import java.util.stream.Collectors; @@ -167,15 +166,19 @@ public Single saveArtifact( */ @Override public Maybe loadArtifact( - String appName, String userId, String sessionId, String filename, Optional version) { + String appName, + String userId, + String sessionId, + String filename, + @org.jspecify.annotations.Nullable Integer version) { // The Callable should return the item (Part) or null. // Maybe.fromCallable will wrap the non-null item in a Maybe or emit empty if null. return Maybe.fromCallable( () -> { String key; - if (version.isPresent()) { + if (version != null) { // Load specific version - int v = version.get(); + int v = version; if (v < 0) { // Version numbers must be non-negative return null; // Return null for empty Maybe } diff --git a/core/src/main/java/com/google/adk/artifacts/MongoDbArtifactService.java b/core/src/main/java/com/google/adk/artifacts/MongoDbArtifactService.java index 0259a3b93..01a90f590 100644 --- a/core/src/main/java/com/google/adk/artifacts/MongoDbArtifactService.java +++ b/core/src/main/java/com/google/adk/artifacts/MongoDbArtifactService.java @@ -5,7 +5,6 @@ import io.reactivex.rxjava3.core.Completable; import io.reactivex.rxjava3.core.Maybe; import io.reactivex.rxjava3.core.Single; -import java.util.Optional; /** * @author Harshavardhan A @@ -22,7 +21,11 @@ public Single saveArtifact( @Override public Maybe loadArtifact( - String appName, String userId, String sessionId, String filename, Optional version) { + String appName, + String userId, + String sessionId, + String filename, + @org.jspecify.annotations.Nullable Integer version) { return null; } diff --git a/core/src/main/java/com/google/adk/artifacts/PostgresArtifactService.java b/core/src/main/java/com/google/adk/artifacts/PostgresArtifactService.java index a47e13fb1..2a7b1077c 100644 --- a/core/src/main/java/com/google/adk/artifacts/PostgresArtifactService.java +++ b/core/src/main/java/com/google/adk/artifacts/PostgresArtifactService.java @@ -26,7 +26,6 @@ import io.reactivex.rxjava3.schedulers.Schedulers; import java.sql.SQLException; import java.util.List; -import java.util.Optional; /** * A PostgreSQL-backed implementation of the {@link BaseArtifactService}. @@ -166,14 +165,17 @@ public Single saveArtifact( @Override public Maybe loadArtifact( - String appName, String userId, String sessionId, String filename, Optional version) { + String appName, + String userId, + String sessionId, + String filename, + @org.jspecify.annotations.Nullable Integer version) { return Maybe.fromCallable( () -> { try { // Load from database ArtifactData artifactData = - dbHelper.loadArtifact( - appName, userId, sessionId, filename, version.orElse(null)); + dbHelper.loadArtifact(appName, userId, sessionId, filename, version); if (artifactData == null) { return null; diff --git a/core/src/main/java/com/google/adk/artifacts/RedisArtifactService.java b/core/src/main/java/com/google/adk/artifacts/RedisArtifactService.java index 87c58cdf7..e5dcbfd7c 100644 --- a/core/src/main/java/com/google/adk/artifacts/RedisArtifactService.java +++ b/core/src/main/java/com/google/adk/artifacts/RedisArtifactService.java @@ -25,7 +25,6 @@ import io.reactivex.rxjava3.core.Completable; import io.reactivex.rxjava3.core.Maybe; import io.reactivex.rxjava3.core.Single; -import java.util.Optional; import reactor.adapter.rxjava.RxJava3Adapter; /** @@ -72,11 +71,15 @@ public Single saveArtifact( @Override public Maybe loadArtifact( - String appName, String userId, String sessionId, String filename, Optional version) { + String appName, + String userId, + String sessionId, + String filename, + @org.jspecify.annotations.Nullable Integer version) { String key = artifactKey(appName, userId, sessionId, filename); Single data; - if (version.isPresent()) { - data = RxJava3Adapter.monoToSingle(commands.lindex(key, version.get())); + if (version != null) { + data = RxJava3Adapter.monoToSingle(commands.lindex(key, version)); } else { data = RxJava3Adapter.monoToSingle(commands.lindex(key, -1)); } diff --git a/core/src/main/java/com/google/adk/sessions/PostgresSessionService.java b/core/src/main/java/com/google/adk/sessions/PostgresSessionService.java index c5d5c94c4..771b77d4d 100644 --- a/core/src/main/java/com/google/adk/sessions/PostgresSessionService.java +++ b/core/src/main/java/com/google/adk/sessions/PostgresSessionService.java @@ -15,6 +15,7 @@ import java.time.Instant; import java.util.ArrayList; import java.util.List; +import java.util.Map; import java.util.Objects; import java.util.Optional; import java.util.UUID; @@ -255,7 +256,7 @@ public Single appendEvent(Session session, Event event) { // Apply state delta from event actions EventActions actions = event.actions(); if (actions != null) { - ConcurrentMap stateDelta = actions.stateDelta(); + Map stateDelta = actions.stateDelta(); if (stateDelta != null && !stateDelta.isEmpty()) { stateDelta.forEach( (key, value) -> { @@ -339,7 +340,7 @@ private void trimTempDeltaState(Event event) { if (event == null || event.actions() == null || event.actions().stateDelta() == null) { return; } - ConcurrentMap stateDelta = event.actions().stateDelta(); + Map stateDelta = event.actions().stateDelta(); stateDelta.entrySet().removeIf(entry -> entry.getKey().startsWith(State.TEMP_PREFIX)); } diff --git a/core/src/test/java/com/google/adk/artifacts/CassandraArtifactServiceIT.java b/core/src/test/java/com/google/adk/artifacts/CassandraArtifactServiceIT.java index 55080c2f0..54faffbc6 100644 --- a/core/src/test/java/com/google/adk/artifacts/CassandraArtifactServiceIT.java +++ b/core/src/test/java/com/google/adk/artifacts/CassandraArtifactServiceIT.java @@ -25,7 +25,6 @@ import io.reactivex.rxjava3.core.Maybe; import java.net.InetSocketAddress; import java.util.List; -import java.util.Optional; import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; @@ -79,9 +78,7 @@ public void testSaveAndLoadArtifact() { assertThat(version).isEqualTo(0); Part loadedArtifact = - artifactService - .loadArtifact(appName, userId, sessionId, filename, Optional.of(version)) - .blockingGet(); + artifactService.loadArtifact(appName, userId, sessionId, filename, version).blockingGet(); assertThat(loadedArtifact.text().get()).isEqualTo("hello world"); } @@ -100,7 +97,7 @@ public void testDeleteArtifact() { artifactService.deleteArtifact(appName, userId, sessionId, filename).blockingAwait(); Maybe loadedArtifact = - artifactService.loadArtifact(appName, userId, sessionId, filename, Optional.of(version)); + artifactService.loadArtifact(appName, userId, sessionId, filename, version); assertThat(loadedArtifact.blockingGet()).isNull(); } @@ -135,9 +132,7 @@ public void testSaveAndLoadBinaryArtifact() { assertThat(version).isEqualTo(0); Part loadedBinaryArtifact = - artifactService - .loadArtifact(appName, userId, sessionId, filename, Optional.of(version)) - .blockingGet(); + artifactService.loadArtifact(appName, userId, sessionId, filename, version).blockingGet(); assertThat(loadedBinaryArtifact.inlineData().get().data().get()).isEqualTo(binaryData); assertThat(loadedBinaryArtifact.inlineData().get().mimeType().get()) .isEqualTo("application/octet-stream"); diff --git a/core/src/test/java/com/google/adk/artifacts/CassandraArtifactServiceTest.java b/core/src/test/java/com/google/adk/artifacts/CassandraArtifactServiceTest.java index 8c4f9ca1b..78b528fe1 100644 --- a/core/src/test/java/com/google/adk/artifacts/CassandraArtifactServiceTest.java +++ b/core/src/test/java/com/google/adk/artifacts/CassandraArtifactServiceTest.java @@ -32,7 +32,6 @@ import java.nio.ByteBuffer; import java.util.Collections; import java.util.List; -import java.util.Optional; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -108,9 +107,7 @@ public void testSaveAndLoadArtifact() throws Exception { when(mockObjectMapper.readValue(artifactData, Part.class)).thenReturn(artifact); Part loadedArtifact = - artifactService - .loadArtifact(appName, userId, sessionId, filename, Optional.of(version)) - .blockingGet(); + artifactService.loadArtifact(appName, userId, sessionId, filename, version).blockingGet(); assertThat(loadedArtifact).isEqualTo(artifact); } diff --git a/core/src/test/java/com/google/adk/artifacts/PostgresArtifactServiceIT.java b/core/src/test/java/com/google/adk/artifacts/PostgresArtifactServiceIT.java index ef600fd9e..3df7ecea0 100644 --- a/core/src/test/java/com/google/adk/artifacts/PostgresArtifactServiceIT.java +++ b/core/src/test/java/com/google/adk/artifacts/PostgresArtifactServiceIT.java @@ -21,7 +21,6 @@ import com.google.genai.types.Part; import java.util.List; -import java.util.Optional; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.BeforeEach; @@ -122,7 +121,7 @@ public void testSaveAndLoadArtifact_Success() { // Act - Load Part loadedArtifact = artifactService - .loadArtifact(testAppName, testUserId, testSessionId, filename, Optional.empty()) + .loadArtifact(testAppName, testUserId, testSessionId, filename, (Integer) null) .blockingGet(); // Assert - Content matches @@ -161,15 +160,15 @@ public void testVersioning_MultipleVersions() { // Act - Load specific versions Part loaded0 = artifactService - .loadArtifact(testAppName, testUserId, testSessionId, filename, Optional.of(0)) + .loadArtifact(testAppName, testUserId, testSessionId, filename, 0) .blockingGet(); Part loaded1 = artifactService - .loadArtifact(testAppName, testUserId, testSessionId, filename, Optional.of(1)) + .loadArtifact(testAppName, testUserId, testSessionId, filename, 1) .blockingGet(); Part loaded2 = artifactService - .loadArtifact(testAppName, testUserId, testSessionId, filename, Optional.of(2)) + .loadArtifact(testAppName, testUserId, testSessionId, filename, 2) .blockingGet(); // Assert - Each version contains correct content @@ -180,7 +179,7 @@ public void testVersioning_MultipleVersions() { // Act - Load latest (should be version 2) Part loadedLatest = artifactService - .loadArtifact(testAppName, testUserId, testSessionId, filename, Optional.empty()) + .loadArtifact(testAppName, testUserId, testSessionId, filename, (Integer) null) .blockingGet(); // Assert - Latest is version 2 @@ -224,7 +223,7 @@ public void testDeleteArtifact() { // Verify it exists Part beforeDelete = artifactService - .loadArtifact(testAppName, testUserId, testSessionId, filename, Optional.empty()) + .loadArtifact(testAppName, testUserId, testSessionId, filename, (Integer) null) .blockingGet(); assertThat(beforeDelete).isNotNull(); @@ -236,7 +235,7 @@ public void testDeleteArtifact() { // Assert - No longer exists Part afterDelete = artifactService - .loadArtifact(testAppName, testUserId, testSessionId, filename, Optional.empty()) + .loadArtifact(testAppName, testUserId, testSessionId, filename, (Integer) null) .blockingGet(); assertThat(afterDelete).isNull(); } @@ -285,11 +284,11 @@ public void testMultiTenancy_AppNameIsolation() { // Act - Load from each app Part fromApp1 = artifactService - .loadArtifact(app1, userId, sessionId, filename, Optional.empty()) + .loadArtifact(app1, userId, sessionId, filename, (Integer) null) .blockingGet(); Part fromApp2 = artifactService - .loadArtifact(app2, userId, sessionId, filename, Optional.empty()) + .loadArtifact(app2, userId, sessionId, filename, (Integer) null) .blockingGet(); // Assert - Content is isolated @@ -321,11 +320,11 @@ public void testMultiTenancy_UserIdIsolation() { // Act - Load from each user Part fromUser1 = artifactService - .loadArtifact(appName, user1, sessionId, filename, Optional.empty()) + .loadArtifact(appName, user1, sessionId, filename, (Integer) null) .blockingGet(); Part fromUser2 = artifactService - .loadArtifact(appName, user2, sessionId, filename, Optional.empty()) + .loadArtifact(appName, user2, sessionId, filename, (Integer) null) .blockingGet(); // Assert - Content is isolated @@ -357,11 +356,11 @@ public void testMultiTenancy_SessionIdIsolation() { // Act - Load from each session Part fromSession1 = artifactService - .loadArtifact(appName, userId, session1, filename, Optional.empty()) + .loadArtifact(appName, userId, session1, filename, (Integer) null) .blockingGet(); Part fromSession2 = artifactService - .loadArtifact(appName, userId, session2, filename, Optional.empty()) + .loadArtifact(appName, userId, session2, filename, (Integer) null) .blockingGet(); // Assert - Content is isolated @@ -398,8 +397,7 @@ public void testLoadArtifact_NonExistent() { // Act Part result = artifactService - .loadArtifact( - testAppName, testUserId, testSessionId, "nonexistent.txt", Optional.empty()) + .loadArtifact(testAppName, testUserId, testSessionId, "nonexistent.txt", (Integer) null) .blockingGet(); // Assert @@ -417,7 +415,7 @@ public void testLoadArtifact_NonExistentVersion() { // Act - Try to load non-existent version 99 Part result = artifactService - .loadArtifact(testAppName, testUserId, testSessionId, filename, Optional.of(99)) + .loadArtifact(testAppName, testUserId, testSessionId, filename, 99) .blockingGet(); // Assert diff --git a/core/src/test/java/com/google/adk/artifacts/PostgresArtifactServiceTest.java b/core/src/test/java/com/google/adk/artifacts/PostgresArtifactServiceTest.java index 509f72d9f..5e7bf7bce 100644 --- a/core/src/test/java/com/google/adk/artifacts/PostgresArtifactServiceTest.java +++ b/core/src/test/java/com/google/adk/artifacts/PostgresArtifactServiceTest.java @@ -33,7 +33,6 @@ import java.sql.Timestamp; import java.util.Arrays; import java.util.List; -import java.util.Optional; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -177,7 +176,7 @@ public void testLoadArtifact_LatestVersion() throws Exception { // Act Part loadedArtifact = artifactService - .loadArtifact(appName, userId, sessionId, filename, Optional.empty()) + .loadArtifact(appName, userId, sessionId, filename, (Integer) null) .blockingGet(); // Assert @@ -207,9 +206,7 @@ public void testLoadArtifact_SpecificVersion() throws Exception { // Act Part loadedArtifact = - artifactService - .loadArtifact(appName, userId, sessionId, filename, Optional.of(version)) - .blockingGet(); + artifactService.loadArtifact(appName, userId, sessionId, filename, version).blockingGet(); // Assert assertThat(loadedArtifact).isNotNull(); @@ -232,7 +229,7 @@ public void testLoadArtifact_NotFound() throws Exception { // Act Part loadedArtifact = artifactService - .loadArtifact(appName, userId, sessionId, filename, Optional.empty()) + .loadArtifact(appName, userId, sessionId, filename, (Integer) null) .blockingGet(); // Assert diff --git a/core/src/test/java/com/google/adk/artifacts/RedisArtifactServiceIT.java b/core/src/test/java/com/google/adk/artifacts/RedisArtifactServiceIT.java index 92e1772bf..cdd3a0f3b 100644 --- a/core/src/test/java/com/google/adk/artifacts/RedisArtifactServiceIT.java +++ b/core/src/test/java/com/google/adk/artifacts/RedisArtifactServiceIT.java @@ -20,7 +20,6 @@ import com.google.adk.store.RedisHelper; import com.google.genai.types.Part; -import java.util.Optional; import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; @@ -64,9 +63,7 @@ public void testSaveAndLoadArtifact() { assertThat(version).isEqualTo(0); Part loadedArtifact = - artifactService - .loadArtifact(appName, userId, sessionId, filename, Optional.of(version)) - .blockingGet(); + artifactService.loadArtifact(appName, userId, sessionId, filename, version).blockingGet(); assertThat(loadedArtifact.text().get()).isEqualTo("hello world"); } @@ -84,9 +81,7 @@ public void testSaveAndLoadBinaryArtifact() { assertThat(version).isEqualTo(0); Part loadedArtifact = - artifactService - .loadArtifact(appName, userId, sessionId, filename, Optional.of(version)) - .blockingGet(); + artifactService.loadArtifact(appName, userId, sessionId, filename, version).blockingGet(); assertThat(loadedArtifact.inlineData().get().data().get()).isEqualTo(binaryData); assertThat(loadedArtifact.inlineData().get().mimeType().get()) .isEqualTo("application/octet-stream"); From b09201e841f430922ce66442e483580a2dc1e203 Mon Sep 17 00:00:00 2001 From: Yashas Shetty Date: Tue, 24 Mar 2026 15:37:20 +0530 Subject: [PATCH 2/2] fixed dependencies issues --- .../adk/artifacts/MapDbArtifactService.java | 2 +- .../google/adk/memory/MapDBVectorStore.java | 18 +++++++++++++++--- .../adk/memory/RedbusEmbeddingService.java | 2 +- .../com/google/adk/models/BedrockBaseLM.java | 1 - .../com/google/adk/models/OllamaBaseLM.java | 1 - .../com/google/adk/runner/PostgresRunner.java | 3 --- 6 files changed, 17 insertions(+), 10 deletions(-) diff --git a/core/src/main/java/com/google/adk/artifacts/MapDbArtifactService.java b/core/src/main/java/com/google/adk/artifacts/MapDbArtifactService.java index 8bdee4989..ec7845b59 100644 --- a/core/src/main/java/com/google/adk/artifacts/MapDbArtifactService.java +++ b/core/src/main/java/com/google/adk/artifacts/MapDbArtifactService.java @@ -46,7 +46,7 @@ public final class MapDbArtifactService implements BaseArtifactService { /** * Constructs a MapDbArtifactService. * - * @param dbFile The file path for the MapDB database file. + * @param filePath The file path for the MapDB database file. */ public MapDbArtifactService(String filePath) { File dbFile = new File(filePath); diff --git a/core/src/main/java/com/google/adk/memory/MapDBVectorStore.java b/core/src/main/java/com/google/adk/memory/MapDBVectorStore.java index aec6d501f..f206e1397 100644 --- a/core/src/main/java/com/google/adk/memory/MapDBVectorStore.java +++ b/core/src/main/java/com/google/adk/memory/MapDBVectorStore.java @@ -26,9 +26,21 @@ import org.mapdb.Serializer; /** - * +----------------+ +-----------------+ | | | | | Client Apps |<-----> | Vector Store | | | | API - * | +----------------+ +--------+--------+ | | +-------+--------+ | | | MapDB Store | | | - * +----------------+ + * + * + *
+ * +----------------+     +-----------------+
+ * |                |     |                 |
+ * |  Client Apps   |<--->|  Vector Store   |
+ * |                |     |       API       |
+ * +----------------+     +--------+--------+
+ *                                 |
+ *                        +-------+--------+
+ *                        |                |
+ *                        |  MapDB Store   |
+ *                        |                |
+ *                        +----------------+
+ * 
* * @author manoj.kumar */ diff --git a/core/src/main/java/com/google/adk/memory/RedbusEmbeddingService.java b/core/src/main/java/com/google/adk/memory/RedbusEmbeddingService.java index b6c1cc3f7..4205a2133 100644 --- a/core/src/main/java/com/google/adk/memory/RedbusEmbeddingService.java +++ b/core/src/main/java/com/google/adk/memory/RedbusEmbeddingService.java @@ -37,7 +37,7 @@ *

The URL for the embedding service can be configured via the `EMBEDDING_GENERATOR_URL` * environment variable. * - *

Example: `export EMBEDDING_GENERATOR_URL="http://www.redbus.com//embeddings"` + *

Example: `export EMBEDDING_GENERATOR_URL="http://www.redbus.com/serviceprovider/embeddings"` */ public class RedbusEmbeddingService implements EmbeddingService { public static final MediaType JSON = MediaType.get("application/json; charset=utf-8"); diff --git a/core/src/main/java/com/google/adk/models/BedrockBaseLM.java b/core/src/main/java/com/google/adk/models/BedrockBaseLM.java index 6b141a1ca..80dba9cf7 100644 --- a/core/src/main/java/com/google/adk/models/BedrockBaseLM.java +++ b/core/src/main/java/com/google/adk/models/BedrockBaseLM.java @@ -51,7 +51,6 @@ /** * @author ryzen * @author Manoj Kumar, Sandeep Belgavi - * @date 2025-06-27 */ public class BedrockBaseLM extends BaseLlm { diff --git a/core/src/main/java/com/google/adk/models/OllamaBaseLM.java b/core/src/main/java/com/google/adk/models/OllamaBaseLM.java index 99d0772e0..891e9b435 100644 --- a/core/src/main/java/com/google/adk/models/OllamaBaseLM.java +++ b/core/src/main/java/com/google/adk/models/OllamaBaseLM.java @@ -55,7 +55,6 @@ /** * @author ryzen * @author Manoj Kumar, Sandeep Belgavi - * @date 2025-06-27 */ public class OllamaBaseLM extends BaseLlm { diff --git a/core/src/main/java/com/google/adk/runner/PostgresRunner.java b/core/src/main/java/com/google/adk/runner/PostgresRunner.java index 120818bc3..d6fc1ab5e 100644 --- a/core/src/main/java/com/google/adk/runner/PostgresRunner.java +++ b/core/src/main/java/com/google/adk/runner/PostgresRunner.java @@ -11,9 +11,6 @@ /** * @author Arun Parmar * @author Yashas Shetty (Modified to use shared table) - * @param agent The agent to run - * @throws IOException if initialization fails - * @throws SQLException if database connection fails */ public class PostgresRunner extends Runner { public PostgresRunner(BaseAgent agent) throws IOException, SQLException {