Skip to content

Commit beca776

Browse files
damianmomotgooglecopybara-github
authored andcommitted
fix: store grounded events in an adapted Java session service
PiperOrigin-RevId: 1007316424
1 parent dcbdf96 commit beca776

2 files changed

Lines changed: 22 additions & 2 deletions

File tree

‎tokt/src/main/kotlin/com/google/adk/tokt/codecs/GroundingMetadataCodec.kt‎

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ internal object GroundingMetadataCodec {
4949
/** Returns the Kotlin [KtGroundingMetadata] view of the genai [metadata]. */
5050
fun fromJava(metadata: GenaiGroundingMetadata): KtGroundingMetadata =
5151
KtGroundingMetadata(
52-
imageSearchQueries = metadata.imageSearchQueries().getOrNull().orEmpty(),
52+
imageSearchQueries = metadata.imageSearchQueries().getOrNull(),
5353
groundingChunks = metadata.groundingChunks().getOrNull()?.map { chunkFromJava(it) },
5454
groundingSupports = metadata.groundingSupports().getOrNull()?.map { supportFromJava(it) },
5555
webSearchQueries = metadata.webSearchQueries().getOrNull(),
@@ -62,7 +62,8 @@ internal object GroundingMetadataCodec {
6262

6363
/** Returns the genai [GenaiGroundingMetadata] view of the Kotlin [metadata]. */
6464
fun toJava(metadata: KtGroundingMetadata): GenaiGroundingMetadata {
65-
val builder = GenaiGroundingMetadata.builder().imageSearchQueries(metadata.imageSearchQueries)
65+
val builder = GenaiGroundingMetadata.builder()
66+
metadata.imageSearchQueries?.let { builder.imageSearchQueries(it) }
6667
metadata.groundingChunks?.let { builder.groundingChunks(it.map { c -> chunkToJava(c) }) }
6768
metadata.groundingSupports?.let { builder.groundingSupports(it.map { s -> supportToJava(s) }) }
6869
metadata.webSearchQueries?.let { builder.webSearchQueries(it) }

‎tokt/src/test/kotlin/com/google/adk/tokt/KtRunnerInteropTest.kt‎

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@ import com.google.adk.kt.types.GenerationConfigRoutingConfig as KtRoutingConfig
6464
import com.google.adk.kt.types.GenerationConfigRoutingConfigManualRoutingMode as KtManualRoutingMode
6565
import com.google.adk.kt.types.GoogleMaps as KtGoogleMaps
6666
import com.google.adk.kt.types.GoogleSearch as KtGoogleSearch
67+
import com.google.adk.kt.types.GroundingMetadata as KtGroundingMetadata
6768
import com.google.adk.kt.types.HarmBlockMethod as KtHarmBlockMethod
6869
import com.google.adk.kt.types.HarmBlockThreshold as KtHarmBlockThreshold
6970
import com.google.adk.kt.types.HarmCategory as KtHarmCategory
@@ -4552,6 +4553,24 @@ class KtRunnerInteropTest {
45524553
assertEquals("places/abc", maps.placeId().getOrNull(), "maps chunk placeId")
45534554
}
45544555

4556+
@Test
4557+
fun asKtSessionService_groundingMetadata_survivesTheJavaStore() = runBlocking {
4558+
// Kotlin's Gemini leaves imageSearchQueries unset on a Google Search answer.
4559+
val sessions = JavaAdkToKt.asKtSessionService(JavaInMemorySessionService())
4560+
val key = KtSessionKey("app", "u", "s")
4561+
val session = sessions.createSession(key)
4562+
val webSearch = KtGroundingMetadata(webSearchQueries = listOf("tallest building"))
4563+
val imageSearch = KtGroundingMetadata(imageSearchQueries = listOf("cat"))
4564+
4565+
for (grounding in listOf(webSearch, imageSearch)) {
4566+
val unused =
4567+
sessions.appendEvent(session, KtEvent(author = "model", groundingMetadata = grounding))
4568+
}
4569+
4570+
val stored = assertNotNull(sessions.getSession(key)).events.map { it.groundingMetadata }
4571+
assertEquals(listOf(webSearch, imageSearch), stored)
4572+
}
4573+
45554574
@Test
45564575
fun asKtSessionService_listEvents_carriesNextPageToken() = runBlocking {
45574576
// The listEvents bridge must carry nextPageToken, or a paged Java service's continuation token

0 commit comments

Comments
 (0)