Repository: firebase/firebase-android-sdk
Pull request #6910: Align LiveSeverMessage related protos
Author: login: daymxn
Labels: name: size/XL
name: main-merge-ack
Created: 2025-04-24T21:04:27Z | Merged: 2025-04-30T17:03:56Z

Per [b/410856389](https://b.corp.google.com/issues/410856389),

This removes the `LiveContentResponse` and provides a `LiveServerMessage` in its place that aligns with the proto, and the other SDKs. Documentation is included for everything added.

Additionally, this PR fixes the following:

- [b/410040441](https://b.corp.google.com/issues/410040441) -> Add support for id field on functions
- [b/413437559](https://b.corp.google.com/issues/413437559) -> Add support for generationComplete
- [b/414602833](https://b.corp.google.com/issues/414602833) -> Fix firebase ai changelog



Diff:
diff --git a/firebase-ai/CHANGELOG.md b/firebase-ai/CHANGELOG.md
index 1d69c5b0908..a0018bd9fa0 100644
--- a/firebase-ai/CHANGELOG.md
+++ b/firebase-ai/CHANGELOG.md
@@ -13,5 +13,11 @@
 * [fixed] Fixed an issue with `LiveContentResponse` audio data not being present when the model was
   interrupted or the turn completed. (#6870)
 * [fixed] Fixed an issue with `LiveSession` not converting exceptions to `FirebaseVertexAIException`. (#6870)
+* * [changed] **Breaking Change**: Removed the `LiveContentResponse.Status` class, and instead have nested the status
+  fields as properties of `LiveContentResponse`. (#6906)
+* [changed] **Breaking Change**: Removed the `LiveContentResponse` class, and instead have provided subclasses
+  of `LiveServerMessage` that match the responses from the model. (#6910)
+* [feature] Added support for the `id` field on `FunctionResponsePart` and `FunctionCallPart`. (#6910)
 * [feature] Add support for specifying response modalities in `GenerationConfig`. (#6921)
 * [feature] Added a helper field for getting all the `InlineDataPart` from a `GenerateContentResponse`. (#6922)
+
diff --git a/firebase-ai/api.txt b/firebase-ai/api.txt
index 10b1cbc965f..d16c1904e6b 100644
--- a/firebase-ai/api.txt
+++ b/firebase-ai/api.txt
@@ -127,7 +127,7 @@ package com.google.firebase.ai.java {
   @com.google.firebase.ai.type.PublicPreviewAPI public abstract class LiveSessionFutures {
     method public abstract com.google.common.util.concurrent.ListenableFuture<kotlin.Unit> close();
     method public static final com.google.firebase.ai.java.LiveSessionFutures from(com.google.firebase.ai.type.LiveSession session);
-    method public abstract org.reactivestreams.Publisher<com.google.firebase.ai.type.LiveContentResponse> receive();
+    method public abstract org.reactivestreams.Publisher<com.google.firebase.ai.type.LiveServerMessage> receive();
     method public abstract com.google.common.util.concurrent.ListenableFuture<kotlin.Unit> send(com.google.firebase.ai.type.Content content);
     method public abstract com.google.common.util.concurrent.ListenableFuture<kotlin.Unit> send(String text);
     method public abstract com.google.common.util.concurrent.ListenableFuture<kotlin.Unit> sendFunctionResponse(java.util.List<com.google.firebase.ai.type.FunctionResponsePart> functionList);
@@ -293,9 +293,12 @@ package com.google.firebase.ai.type {
 
   public final class FunctionCallPart implements com.google.firebase.ai.type.Part {
     ctor public FunctionCallPart(String name, java.util.Map<java.lang.String,? extends kotlinx.serialization.json.JsonElement> args);
+    ctor public FunctionCallPart(String name, java.util.Map<java.lang.String,? extends kotlinx.serialization.json.JsonElement> args, String? id = null);
     method public java.util.Map<java.lang.String,kotlinx.serialization.json.JsonElement> getArgs();
+    method public String? getId();
     method public String getName();
     property public final java.util.Map<java.lang.String,kotlinx.serialization.json.JsonElement> args;
+    property public final String? id;
     property public final String name;
   }
 
@@ -320,8 +323,11 @@ package com.google.firebase.ai.type {
 
   public final class FunctionResponsePart implements com.google.firebase.ai.type.Part {
     ctor public FunctionResponsePart(String name, kotlinx.serialization.json.JsonObject response);
+    ctor public FunctionResponsePart(String name, kotlinx.serialization.json.JsonObject response, String? id = null);
+    method public String? getId();
     method public String getName();
     method public kotlinx.serialization.json.JsonObject getResponse();
+    property public final String? id;
     property public final String name;
     property public final kotlinx.serialization.json.JsonObject response;
   }
@@ -579,30 +585,6 @@ package com.google.firebase.ai.type {
   public final class InvalidStateException extends com.google.firebase.ai.type.FirebaseAIException {
   }
 
-  @com.google.firebase.ai.type.PublicPreviewAPI public final class LiveContentResponse {
-    method public com.google.firebase.ai.type.Content? getData();
-    method public java.util.List<com.google.firebase.ai.type.FunctionCallPart>? getFunctionCalls();
-    method public int getStatus();
-    method public String? getText();
-    property public final com.google.firebase.ai.type.Content? data;
-    property public final java.util.List<com.google.firebase.ai.type.FunctionCallPart>? functionCalls;
-    property public final int status;
-    property public final String? text;
-  }
-
-  @kotlin.jvm.JvmInline public static final value class LiveContentResponse.Status {
-    field public static final com.google.firebase.ai.type.LiveContentResponse.Status.Companion Companion;
-  }
-
-  public static final class LiveContentResponse.Status.Companion {
-    method public int getINTERRUPTED();
-    method public int getNORMAL();
-    method public int getTURN_COMPLETE();
-    property public final int INTERRUPTED;
-    property public final int NORMAL;
-    property public final int TURN_COMPLETE;
-  }
-
   @com.google.firebase.ai.type.PublicPreviewAPI public final class LiveGenerationConfig {
     field public static final com.google.firebase.ai.type.LiveGenerationConfig.Companion Companion;
   }
@@ -638,9 +620,40 @@ package com.google.firebase.ai.type {
     method public static com.google.firebase.ai.type.LiveGenerationConfig liveGenerationConfig(kotlin.jvm.functions.Function1<? super com.google.firebase.ai.type.LiveGenerationConfig.Builder,kotlin.Unit> init);
   }
 
+  @com.google.firebase.ai.type.PublicPreviewAPI public final class LiveServerContent implements com.google.firebase.ai.type.LiveServerMessage {
+    ctor public LiveServerContent(com.google.firebase.ai.type.Content? content, boolean interrupted, boolean turnComplete, boolean generationComplete);
+    method public com.google.firebase.ai.type.Content? getContent();
+    method public boolean getGenerationComplete();
+    method public boolean getInterrupted();
+    method public boolean getTurnComplete();
+    property public final com.google.firebase.ai.type.Content? content;
+    property public final boolean generationComplete;
+    property public final boolean interrupted;
+    property public final boolean turnComplete;
+  }
+
+  @com.google.firebase.ai.type.PublicPreviewAPI public interface LiveServerMessage {
+  }
+
+  @com.google.firebase.ai.type.PublicPreviewAPI public final class LiveServerSetupComplete implements com.google.firebase.ai.type.LiveServerMessage {
+    ctor public LiveServerSetupComplete();
+  }
+
+  @com.google.firebase.ai.type.PublicPreviewAPI public final class LiveServerToolCall implements com.google.firebase.ai.type.LiveServerMessage {
+    ctor public LiveServerToolCall(java.util.List<com.google.firebase.ai.type.FunctionCallPart> functionCalls);
+    method public java.util.List<com.google.firebase.ai.type.FunctionCallPart> getFunctionCalls();
+    property public final java.util.List<com.google.firebase.ai.type.FunctionCallPart> functionCalls;
+  }
+
+  @com.google.firebase.ai.type.PublicPreviewAPI public final class LiveServerToolCallCancellation implements com.google.firebase.ai.type.LiveServerMessage {
+    ctor public LiveServerToolCallCancellation(java.util.List<java.lang.String> functionIds);
+    method public java.util.List<java.lang.String> getFunctionIds();
+    property public final java.util.List<java.lang.String> functionIds;
+  }
+
   @com.google.firebase.ai.type.PublicPreviewAPI public final class LiveSession {
     method public suspend Object? close(kotlin.coroutines.Continuation<? super kotlin.Unit>);
-    method public kotlinx.coroutines.flow.Flow<com.google.firebase.ai.type.LiveContentResponse> receive();
+    method public kotlinx.coroutines.flow.Flow<com.google.firebase.ai.type.LiveServerMessage> receive();
     method public suspend Object? send(com.google.firebase.ai.type.Content content, kotlin.coroutines.Continuation<? super kotlin.Unit>);
     method public suspend Object? send(String text, kotlin.coroutines.Continuation<? super kotlin.Unit>);
     method public suspend Object? sendFunctionResponse(java.util.List<com.google.firebase.ai.type.FunctionResponsePart> functionList, kotlin.coroutines.Continuation<? super kotlin.Unit>);
diff --git a/firebase-ai/src/main/kotlin/com/google/firebase/ai/java/LiveSessionFutures.kt b/firebase-ai/src/main/kotlin/com/google/firebase/ai/java/LiveSessionFutures.kt
index 3d6652f51d7..1efa2dfedfc 100644
--- a/firebase-ai/src/main/kotlin/com/google/firebase/ai/java/LiveSessionFutures.kt
+++ b/firebase-ai/src/main/kotlin/com/google/firebase/ai/java/LiveSessionFutures.kt
@@ -23,7 +23,7 @@ import com.google.common.util.concurrent.ListenableFuture
 import com.google.firebase.ai.type.Content
 import com.google.firebase.ai.type.FunctionCallPart
 import com.google.firebase.ai.type.FunctionResponsePart
-import com.google.firebase.ai.type.LiveContentResponse
+import com.google.firebase.ai.type.LiveServerMessage
 import com.google.firebase.ai.type.LiveSession
 import com.google.firebase.ai.type.MediaData
 import com.google.firebase.ai.type.PublicPreviewAPI
@@ -135,16 +135,16 @@ public abstract class LiveSessionFutures internal constructor() {
    *
    * Call [close] to stop receiving responses from the model.
    *
-   * @return A [Publisher] which will emit [LiveContentResponse] from the model.
+   * @return A [Publisher] which will emit [LiveServerMessage] from the model.
    *
    * @throws [SessionAlreadyReceivingException] when the session is already receiving.
    * @see stopReceiving
    */
-  public abstract fun receive(): Publisher<LiveContentResponse>
+  public abstract fun receive(): Publisher<LiveServerMessage>
 
   private class FuturesImpl(private val session: LiveSession) : LiveSessionFutures() {
 
-    override fun receive(): Publisher<LiveContentResponse> = session.receive().asPublisher()
+    override fun receive(): Publisher<LiveServerMessage> = session.receive().asPublisher()
 
     override fun close(): ListenableFuture<Unit> =
       SuspendToFutureAdapter.launchFuture { session.close() }
diff --git a/firebase-ai/src/main/kotlin/com/google/firebase/ai/type/LiveContentResponse.kt b/firebase-ai/src/main/kotlin/com/google/firebase/ai/type/LiveContentResponse.kt
deleted file mode 100644
index f06da6057b8..00000000000
--- a/firebase-ai/src/main/kotlin/com/google/firebase/ai/type/LiveContentResponse.kt
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- * Copyright 2025 Google LLC
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.google.firebase.ai.type
-
-/**
- * Represents the response from the model for live content updates.
- *
- * This class encapsulates the content data, the status of the response, and any function calls
- * included in the response.
- */
-@PublicPreviewAPI
-public class LiveContentResponse
-internal constructor(
-
-  /** The main content data of the response. This can be `null` if there is no content. */
-  public val data: Content?,
-
-  /**
-   * The status of the live content response. Indicates whether the response is normal, was
-   * interrupted, or signifies the completion of a turn.
-   */
-  public val status: Status,
-
-  /**
-   * A list of [FunctionCallPart] included in the response, if any.
-   *
-   * This list can be null or empty if no function calls are present.
-   */
-  public val functionCalls: List<FunctionCallPart>?
-) {
-
-  /**
-   * Convenience field representing all the text parts in the response as a single string, if they
-   * exists.
-   */
-  public val text: String? =
-    data?.parts?.filterIsInstance<TextPart>()?.joinToString(" ") { it.text }
-
-  /** Represents the status of a [LiveContentResponse], within a single interaction. */
-  @JvmInline
-  public value class Status private constructor(private val value: Int) {
-    public companion object {
-      /** The server is actively sending data for the current interaction. */
-      public val NORMAL: Status = Status(0)
-      /**
-       * The server was interrupted while generating data.
-       *
-       * An interruption occurs when the client sends a message while the server is [actively]
-       * [NORMAL] sending data.
-       */
-      public val INTERRUPTED: Status = Status(1)
-      /**
-       * The model has finished sending data in the current interaction.
-       *
-       * Can be set alongside content, signifying that the content is the last in the turn.
-       */
-      public val TURN_COMPLETE: Status = Status(2)
-    }
-  }
-}
diff --git a/firebase-ai/src/main/kotlin/com/google/firebase/ai/type/LiveServerMessage.kt b/firebase-ai/src/main/kotlin/com/google/firebase/ai/type/LiveServerMessage.kt
new file mode 100644
index 00000000000..5ab520af474
--- /dev/null
+++ b/firebase-ai/src/main/kotlin/com/google/firebase/ai/type/LiveServerMessage.kt
@@ -0,0 +1,190 @@
+/*
+ * Copyright 2025 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.firebase.ai.type
+
+import kotlinx.serialization.DeserializationStrategy
+import kotlinx.serialization.ExperimentalSerializationApi
+import kotlinx.serialization.Serializable
+import kotlinx.serialization.json.JsonContentPolymorphicSerializer
+import kotlinx.serialization.json.JsonElement
+import kotlinx.serialization.json.JsonNull
+import kotlinx.serialization.json.JsonObject
+import kotlinx.serialization.json.jsonObject
+
+/**
+ * Parent interface for responses from the model during live interactions.
+ *
+ * @see LiveServerContent
+ * @see LiveServerToolCall
+ * @see LiveServerToolCallCancellation
+ * @see LiveServerSetupComplete
+ */
+@PublicPreviewAPI public interface LiveServerMessage
+
+/**
+ * Incremental server update generated by the model in response to client messages.
+ *
+ * Content is generated as quickly as possible, and not in realtime. You may choose to buffer and
+ * play it out in realtime.
+ */
+@PublicPreviewAPI
+public class LiveServerContent(
+  /**
+   * The content that the model has generated as part of the current conversation with the user.
+   *
+   * This can be `null` if there is no content.
+   */
+  public val content: Content?,
+
+  /**
+   * The model was interrupted by the client while generating data.
+   *
+   * An interruption occurs when the client sends a message while the model is actively sending
+   * data.
+   */
+  public val interrupted: Boolean,
+
+  /**
+   * The model has finished sending data in the current turn.
+   *
+   * Generation will only start in response to additional client messages.
+   *
+   * Can be set alongside [content], indicating that the [content] is the last in the turn.
+   *
+   * @see generationComplete
+   */
+  public val turnComplete: Boolean,
+
+  /**
+   * The model has finished _generating_ data for the current turn.
+   *
+   * For realtime playback, there will be a delay between when the model finishes generating content
+   * and the client has finished playing back the generated content. [generationComplete] indicates
+   * that the model is done generating data, while [turnComplete] indicates the model is waiting for
+   * additional client messages. Sending a message during this delay may cause an [interrupted]
+   * message to be sent.
+   *
+   * Note that if the model was [interrupted], this will not be set. The model will go from
+   * [interrupted] -> [turnComplete].
+   */
+  public val generationComplete: Boolean,
+) : LiveServerMessage {
+  @OptIn(ExperimentalSerializationApi::class)
+  @Serializable
+  internal data class Internal(
+    val modelTurn: Content.Internal? = null,
+    val interrupted: Boolean = false,
+    val turnComplete: Boolean = false,
+    val generationComplete: Boolean = false
+  )
+  @Serializable
+  internal data class InternalWrapper(val serverContent: Internal) : InternalLiveServerMessage {
+    @OptIn(ExperimentalSerializationApi::class)
+    override fun toPublic() =
+      LiveServerContent(
+        serverContent.modelTurn?.toPublic(),
+        serverContent.interrupted,
+        serverContent.turnComplete,
+        serverContent.generationComplete
+      )
+  }
+}
+
+/** The model is ready to receive client messages. */
+@PublicPreviewAPI
+public class LiveServerSetupComplete : LiveServerMessage {
+  @Serializable
+  internal data class Internal(val setupComplete: JsonObject) : InternalLiveServerMessage {
+    override fun toPublic() = LiveServerSetupComplete()
+  }
+}
+
+/**
+ * Request for the client to execute the provided [functionCalls].
+ *
+ * The client should return matching [FunctionResponsePart], where the `id` fields correspond to
+ * individual [FunctionCallPart]s.
+ *
+ * @property functionCalls A list of [FunctionCallPart] to run and return responses for.
+ */
+@PublicPreviewAPI
+public class LiveServerToolCall(public val functionCalls: List<FunctionCallPart>) :
+  LiveServerMessage {
+  @Serializable
+  internal data class Internal(
+    val functionCalls: List<FunctionCallPart.Internal.FunctionCall> = emptyList()
+  )
+  @Serializable
+  internal data class InternalWrapper(val toolCall: Internal) : InternalLiveServerMessage {
+    override fun toPublic() =
+      LiveServerToolCall(
+        toolCall.functionCalls.map { functionCall ->
+          FunctionCallPart(
+            name = functionCall.name,
+            args = functionCall.args.orEmpty().mapValues { it.value ?: JsonNull }
+          )
+        }
+      )
+  }
+}
+
+/**
+ * Notification for the client to cancel a previous function call from [LiveServerToolCall].
+ *
+ * You do not need to send [FunctionResponsePart]s for the cancelled [FunctionCallPart]s.
+ *
+ * @property functionIds A list of `id`s matching the `id` provided in a previous
+ * [LiveServerToolCall], where only the provided `id`s should be cancelled.
+ */
+@PublicPreviewAPI
+public class LiveServerToolCallCancellation(public val functionIds: List<String>) :
+  LiveServerMessage {
+  @Serializable internal data class Internal(val functionIds: List<String> = emptyList())
+  @Serializable
+  internal data class InternalWrapper(val toolCallCancellation: Internal) :
+    InternalLiveServerMessage {
+    override fun toPublic() = LiveServerToolCallCancellation(toolCallCancellation.functionIds)
+  }
+}
+
+@PublicPreviewAPI
+@Serializable(LiveServerMessageSerializer::class)
+internal sealed interface InternalLiveServerMessage {
+  fun toPublic(): LiveServerMessage
+}
+
+@OptIn(PublicPreviewAPI::class)
+internal object LiveServerMessageSerializer :
+  JsonContentPolymorphicSerializer<InternalLiveServerMessage>(InternalLiveServerMessage::class) {
+  @OptIn(PublicPreviewAPI::class)
+  override fun selectDeserializer(
+    element: JsonElement
+  ): DeserializationStrategy<InternalLiveServerMessage> {
+    val jsonObject = element.jsonObject
+    return when {
+      "serverContent" in jsonObject -> LiveServerContent.InternalWrapper.serializer()
+      "setupComplete" in jsonObject -> LiveServerSetupComplete.Internal.serializer()
+      "toolCall" in jsonObject -> LiveServerToolCall.InternalWrapper.serializer()
+      "toolCallCancellation" in jsonObject ->
+        LiveServerToolCallCancellation.InternalWrapper.serializer()
+      else ->
+        throw SerializationException(
+          "The given subclass of LiveServerMessage (${javaClass.simpleName}) is not supported in the serialization yet."
+        )
+    }
+  }
+}
diff --git a/firebase-ai/src/main/kotlin/com/google/firebase/ai/type/LiveSession.kt b/firebase-ai/src/main/kotlin/com/google/firebase/ai/type/LiveSession.kt
index 74c8669ad2f..1f84c18a53b 100644
--- a/firebase-ai/src/main/kotlin/com/google/firebase/ai/type/LiveSession.kt
+++ b/firebase-ai/src/main/kotlin/com/google/firebase/ai/type/LiveSession.kt
@@ -43,7 +43,6 @@ import kotlinx.coroutines.flow.flow
 import kotlinx.coroutines.flow.launchIn
 import kotlinx.coroutines.flow.onCompletion
 import kotlinx.coroutines.flow.onEach
-import kotlinx.coroutines.flow.transform
 import kotlinx.coroutines.isActive
 import kotlinx.coroutines.launch
 import kotlinx.coroutines.yield
@@ -51,9 +50,6 @@ import kotlinx.serialization.ExperimentalSerializationApi
 import kotlinx.serialization.Serializable
 import kotlinx.serialization.encodeToString
 import kotlinx.serialization.json.Json
-import kotlinx.serialization.json.JsonNull
-import kotlinx.serialization.json.JsonObject
-import kotlinx.serialization.json.decodeFromJsonElement
 
 /** Represents a live WebSocket session capable of streaming content to and from the server. */
 @PublicPreviewAPI
@@ -140,12 +136,12 @@ internal constructor(
    *
    * Call [close] to stop receiving responses from the model.
    *
-   * @return A [Flow] which will emit [LiveContentResponse] from the model.
+   * @return A [Flow] which will emit [LiveServerMessage] from the model.
    *
    * @throws [SessionAlreadyReceivingException] when the session is already receiving.
    * @see stopReceiving
    */
-  public fun receive(): Flow<LiveContentResponse> {
+  public fun receive(): Flow<LiveServerMessage> {
     return FirebaseAIException.catch {
       if (startedReceiving.getAndSet(true)) {
         throw SessionAlreadyReceivingException()
@@ -157,8 +153,14 @@ internal constructor(
             val response = session.incoming.tryReceive()
             if (response.isClosed || !startedReceiving.get()) break
 
-            val frame = response.getOrNull()
-            frame?.let { frameToLiveContentResponse(it) }?.let { emit(it) }
+            response
+              .getOrNull()
+              ?.let {
+                JSON.decodeFromString<InternalLiveServerMessage>(
+                  it.readBytes().toString(Charsets.UTF_8)
+                )
+              }
+              ?.let { emit(it.toPublic()) }
 
             yield()
           }
@@ -167,12 +169,6 @@ internal constructor(
         .catch { throw FirebaseAIException.from(it) }
 
       // TODO(b/410059569): Add back when fixed
-      //    return session.incoming.receiveAsFlow().transform { frame ->
-      //      val response = frameToLiveContentResponse(frame)
-      //      response?.let { emit(it) }
-      //    }.onCompletion {
-      //      stopAudioConversation()
-      //    }.catch { throw FirebaseVertexAIException.from(it) }
     }
   }
 
@@ -309,30 +305,48 @@ internal constructor(
     functionCallHandler: ((FunctionCallPart) -> FunctionResponsePart)?
   ) {
     receive()
-      .transform {
-        if (it.status == LiveContentResponse.Status.INTERRUPTED) {
-          playBackQueue.clear()
-        } else {
-          emit(it)
-        }
-      }
       .onEach {
-        if (!it.functionCalls.isNullOrEmpty()) {
-          if (functionCallHandler != null) {
-            // It's fine to suspend here since you can't have a function call running concurrently
-            // with an audio response
-            sendFunctionResponse(it.functionCalls.map(functionCallHandler).toList())
-          } else {
+        when (it) {
+          is LiveServerToolCall -> {
+            if (it.functionCalls.isEmpty()) {
+              Log.w(
+                TAG,
+                "The model sent a tool call request, but it was missing functions to call."
+              )
+            } else if (functionCallHandler != null) {
+              // It's fine to suspend here since you can't have a function call running concurrently
+              // with an audio response
+              sendFunctionResponse(it.functionCalls.map(functionCallHandler).toList())
+            } else {
+              Log.w(
+                TAG,
+                "Function calls were present in the response, but a functionCallHandler was not provided."
+              )
+            }
+          }
+          is LiveServerToolCallCancellation -> {
             Log.w(
               TAG,
-              "Function calls were present in the response, but a functionCallHandler was not provided."
+              "The model sent a tool cancellation request, but tool cancellation is not supported when using startAudioConversation()."
+            )
+          }
+          is LiveServerContent -> {
+            if (it.interrupted) {
+              playBackQueue.clear()
+            } else {
+              val audioParts = it.content?.parts?.filterIsInstance<InlineDataPart>().orEmpty()
+              for (part in audioParts) {
+                playBackQueue.add(part.inlineData)
+              }
+            }
+          }
+          is LiveServerSetupComplete -> {
+            // we should only get this message when we initially `connect` in LiveGenerativeModel
+            Log.w(
+              TAG,
+              "The model sent LiveServerSetupComplete after the connection was established."
             )
           }
-        }
-
-        val audioParts = it.data?.parts?.filterIsInstance<InlineDataPart>().orEmpty()
-        for (part in audioParts) {
-          playBackQueue.add(part.inlineData)
         }
       }
       .launchIn(scope)
@@ -368,50 +382,6 @@ internal constructor(
     }
   }
 
-  /**
-   * Converts a [Frame] from the model to a valid [LiveContentResponse], if possible.
-   *
-   * @return The corresponding [LiveContentResponse] or null if it couldn't be converted.
-   */
-  private fun frameToLiveContentResponse(frame: Frame): LiveContentResponse? {
-    val jsonMessage = Json.parseToJsonElement(frame.readBytes().toString(Charsets.UTF_8))
-
-    if (jsonMessage !is JsonObject) {
-      Log.w(TAG, "Server response was not a JsonObject: $jsonMessage")
-      return null
-    }
-
-    return when {
-      "toolCall" in jsonMessage -> {
-        val functionContent =
-          JSON.decodeFromJsonElement<BidiGenerateContentToolCallSetup.Internal>(jsonMessage)
-        LiveContentResponse(
-          null,
-          LiveContentResponse.Status.NORMAL,
-          functionContent.toolCall.functionCalls.map {
-            FunctionCallPart(it.name, it.args.orEmpty().mapValues { x -> x.value ?: JsonNull })
-          }
-        )
-      }
-      "serverContent" in jsonMessage -> {
-        val serverContent =
-          JSON.decodeFromJsonElement<BidiGenerateContentServerContentSetup.Internal>(jsonMessage)
-            .serverContent
-        val status =
-          when {
-            serverContent.turnComplete == true -> LiveContentResponse.Status.TURN_COMPLETE
-            serverContent.interrupted == true -> LiveContentResponse.Status.INTERRUPTED
-            else -> LiveContentResponse.Status.NORMAL
-          }
-        LiveContentResponse(serverContent.modelTurn?.toPublic(), status, null)
-      }
-      else -> {
-        Log.w(TAG, "Failed to decode the server response: $jsonMessage")
-        null
-      }
-    }
-  }
-
   /**
    * Incremental update of the current conversation delivered from the client.
    *
@@ -433,51 +403,7 @@ internal constructor(
     fun toInternal() = Internal(Internal.BidiGenerateContentClientContent(turns, turnComplete))
   }
 
-  /**
-   * Incremental server update generated by the model in response to client messages.
-   *
-   * Effectively, a message from the model to the client.
-   */
-  internal class BidiGenerateContentServerContentSetup(
-    val modelTurn: Content.Internal?,
-    val turnComplete: Boolean?,
-    val interrupted: Boolean?
-  ) {
-    @Serializable
-    internal class Internal(val serverContent: BidiGenerateContentServerContent) {
-      @Serializable
-      internal data class BidiGenerateContentServerContent(
-        val modelTurn: Content.Internal?,
-        val turnComplete: Boolean?,
-        val interrupted: Boolean?
-      )
-    }
-
-    fun toInternal() =
-      Internal(Internal.BidiGenerateContentServerContent(modelTurn, turnComplete, interrupted))
-  }
-
-  /**
-   * Request for the client to execute the provided function calls and return the responses with the
-   * matched `id`s.
-   */
-  internal data class BidiGenerateContentToolCallSetup(
-    val functionCalls: List<FunctionCallPart.Internal.FunctionCall>
-  ) {
-    @Serializable
-    internal class Internal(val toolCall: BidiGenerateContentToolCall) {
-      @Serializable
-      internal data class BidiGenerateContentToolCall(
-        val functionCalls: List<FunctionCallPart.Internal.FunctionCall>
-      )
-    }
-
-    fun toInternal(): Internal {
-      return Internal(Internal.BidiGenerateContentToolCall(functionCalls))
-    }
-  }
-
-  /** Client generated responses to a [BidiGenerateContentToolCallSetup]. */
+  /** Client generated responses to a [LiveServerToolCall]. */
   internal class BidiGenerateContentToolResponseSetup(
     val functionResponses: List<FunctionResponsePart.Internal.FunctionResponse>
   ) {
diff --git a/firebase-ai/src/main/kotlin/com/google/firebase/ai/type/Part.kt b/firebase-ai/src/main/kotlin/com/google/firebase/ai/type/Part.kt
index 4d1a8297e0c..bcc7e14b657 100644
--- a/firebase-ai/src/main/kotlin/com/google/firebase/ai/type/Part.kt
+++ b/firebase-ai/src/main/kotlin/com/google/firebase/ai/type/Part.kt
@@ -77,38 +77,57 @@ public class InlineDataPart(public val inlineData: ByteArray, public val mimeTyp
  *
  * @param name the name of the function to call
  * @param args the function parameters and values as a [Map]
+ * @param id Unique id of the function call. If present, the returned [FunctionResponsePart] should
+ * have a matching `id` field.
  */
-// TODO(b/410040441): Support id property
-public class FunctionCallPart(
+public class FunctionCallPart
+@JvmOverloads
+constructor(
   public val name: String,
   public val args: Map<String, JsonElement>,
+  public val id: String? = null
 ) : Part {
 
   @Serializable
   internal data class Internal(val functionCall: FunctionCall) : InternalPart {
 
     @Serializable
-    internal data class FunctionCall(val name: String, val args: Map<String, JsonElement?>? = null)
+    internal data class FunctionCall(
+      val name: String,
+      val args: Map<String, JsonElement?>? = null,
+      val id: String? = null
+    )
   }
 }
 
 /**
  * Represents function call output to be returned to the model when it requests a function call.
  *
- * @param name the name of the called function
- * @param response the response produced by the function as a [JSONObject]
+ * @param name The name of the called function.
+ * @param response The response produced by the function as a [JSONObject].
+ * @param id Matching `id` for a [FunctionCallPart], if one was provided.
  */
-// TODO(b/410040441): Support id property
-public class FunctionResponsePart(public val name: String, public val response: JsonObject) : Part {
+public class FunctionResponsePart
+@JvmOverloads
+constructor(
+  public val name: String,
+  public val response: JsonObject,
+  public val id: String? = null
+) : Part {
 
   @Serializable
   internal data class Internal(val functionResponse: FunctionResponse) : InternalPart {
 
-    @Serializable internal data class FunctionResponse(val name: String, val response: JsonObject)
+    @Serializable
+    internal data class FunctionResponse(
+      val name: String,
+      val response: JsonObject,
+      val id: String? = null
+    )
   }
 
   internal fun toInternalFunctionCall(): Internal.FunctionResponse {
-    return Internal.FunctionResponse(this.name, this.response)
+    return Internal.FunctionResponse(name, response, id)
   }
 }
 
@@ -181,9 +200,11 @@ internal fun Part.toInternal(): InternalPart {
         )
       )
     is FunctionCallPart ->
-      FunctionCallPart.Internal(FunctionCallPart.Internal.FunctionCall(name, args))
+      FunctionCallPart.Internal(FunctionCallPart.Internal.FunctionCall(name, args, id))
     is FunctionResponsePart ->
-      FunctionResponsePart.Internal(FunctionResponsePart.Internal.FunctionResponse(name, response))
+      FunctionResponsePart.Internal(
+        FunctionResponsePart.Internal.FunctionResponse(name, response, id)
+      )
     is FileDataPart ->
       FileDataPart.Internal(FileDataPart.Internal.FileData(mimeType = mimeType, fileUri = uri))
     else ->
@@ -214,13 +235,11 @@ internal fun InternalPart.toPublic(): Part {
     is FunctionCallPart.Internal ->
       FunctionCallPart(
         functionCall.name,
-        functionCall.args.orEmpty().mapValues { it.value ?: JsonNull }
+        functionCall.args.orEmpty().mapValues { it.value ?: JsonNull },
+        functionCall.id
       )
     is FunctionResponsePart.Internal ->
-      FunctionResponsePart(
-        functionResponse.name,
-        functionResponse.response,
-      )
+      FunctionResponsePart(functionResponse.name, functionResponse.response, functionResponse.id)
     is FileDataPart.Internal -> FileDataPart(fileData.mimeType, fileData.fileUri)
     else ->
       throw com.google.firebase.ai.type.SerializationException(


Reviews:
user: login: rlazo
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-04-30T16:29:03Z
user: login: daymxn
state: COMMENTED
author_association: MEMBER
submitted_at: 2025-04-30T16:30:49Z
user: login: daymxn
state: COMMENTED
author_association: MEMBER
submitted_at: 2025-04-30T16:37:56Z
user: login: rlazo
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-04-30T16:51:18Z
user: login: rlazo
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-04-30T16:51:45Z
user: login: rlazo
state: APPROVED
author_association: CONTRIBUTOR
submitted_at: 2025-04-30T16:54:05Z
user: login: daymxn
state: COMMENTED
author_association: MEMBER
submitted_at: 2025-04-30T16:55:17Z

Review comments:
diff_hunk: @@ -0,0 +1,190 @@
+/*
+ * Copyright 2025 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.firebase.ai.type
+
+import kotlinx.serialization.DeserializationStrategy
+import kotlinx.serialization.ExperimentalSerializationApi
+import kotlinx.serialization.Serializable
+import kotlinx.serialization.json.JsonContentPolymorphicSerializer
+import kotlinx.serialization.json.JsonElement
+import kotlinx.serialization.json.JsonNull
+import kotlinx.serialization.json.JsonObject
+import kotlinx.serialization.json.jsonObject
+
+/**
+ * Parent interface for responses from the model during live interactions.
+ *
+ * @see LiveServerContent
+ * @see LiveServerToolCall
+ * @see LiveServerToolCallCancellation
+ * @see LiveServerSetupComplete
+ */
+@PublicPreviewAPI public interface LiveServerMessage
+
+/**
+ * Incremental server update generated by the model in response to client messages.
+ *
+ * Content is generated as quickly as possible, and not in realtime. You may choose to buffer and
+ * play it out in realtime.
+ */
+@PublicPreviewAPI
+public class LiveServerContent(
+  /**
+   * The content that the model has generated as part of the current conversation with the user.
+   *
+   * This can be `null` if there is no content.
+   */
+  public val content: Content?,
+
+  /**
path: firebase-ai/src/main/kotlin/com/google/firebase/ai/type/LiveServerMessage.kt
user: login: rlazo
body: I've tried this in Android Studio but couldn't get a definitive answer. While doc show file for the particular field, do they show in the constructor? should the constructor be public or internal?
created_at: 2025-04-30T16:21:43Z
author_association: CONTRIBUTOR
diff_hunk: @@ -167,12 +169,13 @@ internal constructor(
         .catch { throw FirebaseAIException.from(it) }
 
       // TODO(b/410059569): Add back when fixed
-      //    return session.incoming.receiveAsFlow().transform { frame ->
path: firebase-ai/src/main/kotlin/com/google/firebase/ai/type/LiveSession.kt
user: login: rlazo
body: Is all the commented code correct? Should it be here at all?
created_at: 2025-04-30T16:27:02Z
author_association: CONTRIBUTOR
diff_hunk: @@ -167,12 +169,13 @@ internal constructor(
         .catch { throw FirebaseAIException.from(it) }
 
       // TODO(b/410059569): Add back when fixed
-      //    return session.incoming.receiveAsFlow().transform { frame ->
path: firebase-ai/src/main/kotlin/com/google/firebase/ai/type/LiveSession.kt
user: login: daymxn
body: Yeah, I've kept it updated. It'll make it easier to add it back when the bug is resolved. Although, I could put it in the bug if you'd rather it not be here?
created_at: 2025-04-30T16:30:48Z
author_association: MEMBER
diff_hunk: @@ -0,0 +1,190 @@
+/*
+ * Copyright 2025 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.firebase.ai.type
+
+import kotlinx.serialization.DeserializationStrategy
+import kotlinx.serialization.ExperimentalSerializationApi
+import kotlinx.serialization.Serializable
+import kotlinx.serialization.json.JsonContentPolymorphicSerializer
+import kotlinx.serialization.json.JsonElement
+import kotlinx.serialization.json.JsonNull
+import kotlinx.serialization.json.JsonObject
+import kotlinx.serialization.json.jsonObject
+
+/**
+ * Parent interface for responses from the model during live interactions.
+ *
+ * @see LiveServerContent
+ * @see LiveServerToolCall
+ * @see LiveServerToolCallCancellation
+ * @see LiveServerSetupComplete
+ */
+@PublicPreviewAPI public interface LiveServerMessage
+
+/**
+ * Incremental server update generated by the model in response to client messages.
+ *
+ * Content is generated as quickly as possible, and not in realtime. You may choose to buffer and
+ * play it out in realtime.
+ */
+@PublicPreviewAPI
+public class LiveServerContent(
+  /**
+   * The content that the model has generated as part of the current conversation with the user.
+   *
+   * This can be `null` if there is no content.
+   */
+  public val content: Content?,
+
+  /**
path: firebase-ai/src/main/kotlin/com/google/firebase/ai/type/LiveServerMessage.kt
user: login: daymxn
body: The docs _do_ show up in the constructor, if that's what you're asking. _Maybe_ it should be internal, but we also have the constructor on `GenerateContentResponse` as public- so I was just aligning with that. The only practical use-case I can think of for them being public is consumers wanting to write tests for their interop layer, or their logic directly if they don't have an interop layer.

Would you rather we make both of their constructors internal instead?
created_at: 2025-04-30T16:37:56Z
author_association: MEMBER
diff_hunk: @@ -0,0 +1,190 @@
+/*
+ * Copyright 2025 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.firebase.ai.type
+
+import kotlinx.serialization.DeserializationStrategy
+import kotlinx.serialization.ExperimentalSerializationApi
+import kotlinx.serialization.Serializable
+import kotlinx.serialization.json.JsonContentPolymorphicSerializer
+import kotlinx.serialization.json.JsonElement
+import kotlinx.serialization.json.JsonNull
+import kotlinx.serialization.json.JsonObject
+import kotlinx.serialization.json.jsonObject
+
+/**
+ * Parent interface for responses from the model during live interactions.
+ *
+ * @see LiveServerContent
+ * @see LiveServerToolCall
+ * @see LiveServerToolCallCancellation
+ * @see LiveServerSetupComplete
+ */
+@PublicPreviewAPI public interface LiveServerMessage
+
+/**
+ * Incremental server update generated by the model in response to client messages.
+ *
+ * Content is generated as quickly as possible, and not in realtime. You may choose to buffer and
+ * play it out in realtime.
+ */
+@PublicPreviewAPI
+public class LiveServerContent(
+  /**
+   * The content that the model has generated as part of the current conversation with the user.
+   *
+   * This can be `null` if there is no content.
+   */
+  public val content: Content?,
+
+  /**
path: firebase-ai/src/main/kotlin/com/google/firebase/ai/type/LiveServerMessage.kt
user: login: rlazo
body: That would be a bigger breaking change that we can hold for later.
created_at: 2025-04-30T16:51:18Z
author_association: CONTRIBUTOR
diff_hunk: @@ -167,12 +169,13 @@ internal constructor(
         .catch { throw FirebaseAIException.from(it) }
 
       // TODO(b/410059569): Add back when fixed
-      //    return session.incoming.receiveAsFlow().transform { frame ->
path: firebase-ai/src/main/kotlin/com/google/firebase/ai/type/LiveSession.kt
user: login: rlazo
body: Yeah, I'd rather not have commented out code in the SDK itself.
created_at: 2025-04-30T16:51:45Z
author_association: CONTRIBUTOR
diff_hunk: @@ -167,12 +169,13 @@ internal constructor(
         .catch { throw FirebaseAIException.from(it) }
 
       // TODO(b/410059569): Add back when fixed
-      //    return session.incoming.receiveAsFlow().transform { frame ->
path: firebase-ai/src/main/kotlin/com/google/firebase/ai/type/LiveSession.kt
user: login: daymxn
body: SGTM, done
created_at: 2025-04-30T16:55:17Z
author_association: MEMBER

PR comments:
user: login: github-actions[bot]
created_at: 2025-04-24T21:04:37Z
body: <!-- add-pr-comment:add-pr-comment -->

<details>
<summary>Javadoc Changes:</summary>

```diff
--- /home/runner/diff/original/firebase-kotlindoc/android/client/firebase-ai/_toc.yaml	2025-04-30 17:02:10.592740634 +0000
+++ /home/runner/diff/modified/firebase-kotlindoc/android/client/firebase-ai/_toc.yaml	2025-04-30 16:58:48.524286525 +0000
@@ -44,6 +44,8 @@
   - title: "Interfaces"
 
     section:
+    - title: "LiveServerMessage"
+      path: "/docs/reference/android/com/google/firebase/ai/type/LiveServerMessage.html"
     - title: "Part"
       path: "/docs/reference/android/com/google/firebase/ai/type/Part.html"
 
@@ -124,16 +126,20 @@
       path: "/docs/reference/android/com/google/firebase/ai/type/ImagenSafetySettings.html"
     - title: "InlineDataPart"
       path: "/docs/reference/android/com/google/firebase/ai/type/InlineDataPart.html"
-    - title: "LiveContentResponse"
-      path: "/docs/reference/android/com/google/firebase/ai/type/LiveContentResponse.html"
-    - title: "LiveContentResponse.Status"
-      path: "/docs/reference/android/com/google/firebase/ai/type/LiveContentResponse.Status.html"
     - title: "LiveGenerationConfig"
       path: "/docs/reference/android/com/google/firebase/ai/type/LiveGenerationConfig.html"
     - title: "LiveGenerationConfig.Builder"
       path: "/docs/reference/android/com/google/firebase/ai/type/LiveGenerationConfig.Builder.html"
     - title: "LiveGenerationConfigKt"
       path: "/docs/reference/android/com/google/firebase/ai/type/LiveGenerationConfigKt.html"
+    - title: "LiveServerContent"
+      path: "/docs/reference/android/com/google/firebase/ai/type/LiveServerContent.html"
+    - title: "LiveServerSetupComplete"
+      path: "/docs/reference/android/com/google/firebase/ai/type/LiveServerSetupComplete.html"
+    - title: "LiveServerToolCall"
+      path: "/docs/reference/android/com/google/firebase/ai/type/LiveServerToolCall.html"
+    - title: "LiveServerToolCallCancellation"
+      path: "/docs/reference/android/com/google/firebase/ai/type/LiveServerToolCallCancellation.html"
     - title: "LiveSession"
       path: "/docs/reference/android/com/google/firebase/ai/type/LiveSession.html"
     - title: "MediaData"
```
```diff
--- /home/runner/diff/original/firebase-kotlindoc/android/com/google/firebase/ai/java/LiveSessionFutures.html	2025-04-30 17:02:10.604740601 +0000
+++ /home/runner/diff/modified/firebase-kotlindoc/android/com/google/firebase/ai/java/LiveSessionFutures.html	2025-04-30 16:58:48.526286521 +0000
@@ -78,7 +78,7 @@
             </td>
           </tr>
           <tr>
-            <td><code>abstract @<a href="https://developer.android.com/reference/kotlin/androidx/annotation/NonNull.html">NonNull</a> <a href="/docs/reference/android/org/reactivestreams/Publisher.html">Publisher</a>&lt;@<a href="https://developer.android.com/reference/kotlin/androidx/annotation/NonNull.html">NonNull</a> <a href="/docs/reference/android/com/google/firebase/ai/type/LiveContentResponse.html">LiveContentResponse</a>&gt;</code></td>
+            <td><code>abstract @<a href="https://developer.android.com/reference/kotlin/androidx/annotation/NonNull.html">NonNull</a> <a href="/docs/reference/android/org/reactivestreams/Publisher.html">Publisher</a>&lt;@<a href="https://developer.android.com/reference/kotlin/androidx/annotation/NonNull.html">NonNull</a> <a href="/docs/reference/android/com/google/firebase/ai/type/LiveServerMessage.html">LiveServerMessage</a>&gt;</code></td>
             <td>
               <div><code><a href="/docs/reference/android/com/google/firebase/ai/java/LiveSessionFutures.html#receive()">receive</a>()</code></div>
               <p>Receives responses from the model for both streaming and standard requests.</p>
@@ -197,7 +197,7 @@
       </div>
       <div class="api-item"><a name="receive--"></a><a name="receive"></a>
         <h3 class="api-name" id="receive()">receive</h3>
-        <pre class="api-signature no-pretty-print">public&nbsp;abstract&nbsp;@<a href="https://developer.android.com/reference/kotlin/androidx/annotation/NonNull.html">NonNull</a> <a href="/docs/reference/android/org/reactivestreams/Publisher.html">Publisher</a>&lt;@<a href="https://developer.android.com/reference/kotlin/androidx/annotation/NonNull.html">NonNull</a> <a href="/docs/reference/android/com/google/firebase/ai/type/LiveContentResponse.html">LiveContentResponse</a>&gt;&nbsp;<a href="/docs/reference/android/com/google/firebase/ai/java/LiveSessionFutures.html#receive()">receive</a>()</pre>
+        <pre class="api-signature no-pretty-print">public&nbsp;abstract&nbsp;@<a href="https://developer.android.com/reference/kotlin/androidx/annotation/NonNull.html">NonNull</a> <a href="/docs/reference/android/org/reactivestreams/Publisher.html">Publisher</a>&lt;@<a href="https://developer.android.com/reference/kotlin/androidx/annotation/NonNull.html">NonNull</a> <a href="/docs/reference/android/com/google/firebase/ai/type/LiveServerMessage.html">LiveServerMessage</a>&gt;&nbsp;<a href="/docs/reference/android/com/google/firebase/ai/java/LiveSessionFutures.html#receive()">receive</a>()</pre>
         <p>Receives responses from the model for both streaming and standard requests.</p>
         <p>Call <code><a href="/docs/reference/android/com/google/firebase/ai/java/LiveSessionFutures.html#close()">close</a></code> to stop receiving responses from the model.</p>
         <div class="devsite-table-wrapper">
@@ -213,9 +213,9 @@
             </thead>
             <tbody class="list">
               <tr>
-                <td><code>@<a href="https://developer.android.com/reference/kotlin/androidx/annotation/NonNull.html">NonNull</a> <a href="/docs/reference/android/org/reactivestreams/Publisher.html">Publisher</a>&lt;@<a href="https://developer.android.com/reference/kotlin/androidx/annotation/NonNull.html">NonNull</a> <a href="/docs/reference/android/com/google/firebase/ai/type/LiveContentResponse.html">LiveContentResponse</a>&gt;</code></td>
+                <td><code>@<a href="https://developer.android.com/reference/kotlin/androidx/annotation/NonNull.html">NonNull</a> <a href="/docs/reference/android/org/reactivestreams/Publisher.html">Publisher</a>&lt;@<a href="https://developer.android.com/reference/kotlin/androidx/annotation/NonNull.html">NonNull</a> <a href="/docs/reference/android/com/google/firebase/ai/type/LiveServerMessage.html">LiveServerMessage</a>&gt;</code></td>
                 <td>
-                  <p>A <code><a href="/docs/reference/android/org/reactivestreams/Publisher.html">Publisher</a></code> which will emit <code><a href="/docs/reference/android/com/google/firebase/ai/type/LiveContentResponse.html">LiveContentResponse</a></code> from the model.</p>
+                  <p>A <code><a href="/docs/reference/android/org/reactivestreams/Publisher.html">Publisher</a></code> which will emit <code><a href="/docs/reference/android/com/google/firebase/ai/type/LiveServerMessage.html">LiveServerMessage</a></code> from the model.</p>
                 </td>
               </tr>
             </tbody>
```
```diff
--- /home/runner/diff/original/firebase-kotlindoc/android/com/google/firebase/ai/type/FunctionCallPart.html	2025-04-30 17:02:10.632740524 +0000
+++ /home/runner/diff/modified/firebase-kotlindoc/android/com/google/firebase/ai/type/FunctionCallPart.html	2025-04-30 16:58:48.557286446 +0000
@@ -33,6 +33,13 @@
             </td>
           </tr>
           <tr>
+            <td><code>final <a href="https://developer.android.com/reference/kotlin/java/lang/String.html">String</a></code></td>
+            <td>
+              <div><code><a href="/docs/reference/android/com/google/firebase/ai/type/FunctionCallPart.html#id()">id</a></code></div>
+              <p>Unique id of the function call.</p>
+            </td>
+          </tr>
+          <tr>
             <td><code>final @<a href="https://developer.android.com/reference/kotlin/androidx/annotation/NonNull.html">NonNull</a> <a href="https://developer.android.com/reference/kotlin/java/lang/String.html">String</a></code></td>
             <td>
               <div><code><a href="/docs/reference/android/com/google/firebase/ai/type/FunctionCallPart.html#name()">name</a></code></div>
@@ -56,7 +63,7 @@
         <tbody class="list">
           <tr>
             <td>
-              <div><code><a href="/docs/reference/android/com/google/firebase/ai/type/FunctionCallPart.html#FunctionCallPart(kotlin.String,kotlin.collections.Map)">FunctionCallPart</a>(<br>&nbsp;&nbsp;&nbsp;&nbsp;@<a href="https://developer.android.com/reference/kotlin/androidx/annotation/NonNull.html">NonNull</a> <a href="https://developer.android.com/reference/kotlin/java/lang/String.html">String</a>&nbsp;name,<br>&nbsp;&nbsp;&nbsp;&nbsp;@<a href="https://developer.android.com/reference/kotlin/androidx/annotation/NonNull.html">NonNull</a> <a href="https://developer.android.com/reference/kotlin/java/util/Map.html">Map</a>&lt;@<a href="https://developer.android.com/reference/kotlin/androidx/annotation/NonNull.html">NonNull</a> <a href="https://developer.android.com/reference/kotlin/java/lang/String.html">String</a>,&nbsp;@<a href="https://developer.android.com/reference/kotlin/androidx/annotation/NonNull.html">NonNull</a> <a href="/docs/reference/android/kotlinx/serialization/json/JsonElement.html">JsonElement</a>&gt;&nbsp;args<br>)</code></div>
+              <div><code><a href="/docs/reference/android/com/google/firebase/ai/type/FunctionCallPart.html#FunctionCallPart(kotlin.String,kotlin.collections.Map,kotlin.String)">FunctionCallPart</a>(<br>&nbsp;&nbsp;&nbsp;&nbsp;@<a href="https://developer.android.com/reference/kotlin/androidx/annotation/NonNull.html">NonNull</a> <a href="https://developer.android.com/reference/kotlin/java/lang/String.html">String</a>&nbsp;name,<br>&nbsp;&nbsp;&nbsp;&nbsp;@<a href="https://developer.android.com/reference/kotlin/androidx/annotation/NonNull.html">NonNull</a> <a href="https://developer.android.com/reference/kotlin/java/util/Map.html">Map</a>&lt;@<a href="https://developer.android.com/reference/kotlin/androidx/annotation/NonNull.html">NonNull</a> <a href="https://developer.android.com/reference/kotlin/java/lang/String.html">String</a>,&nbsp;@<a href="https://developer.android.com/reference/kotlin/androidx/annotation/NonNull.html">NonNull</a> <a href="/docs/reference/android/kotlinx/serialization/json/JsonElement.html">JsonElement</a>&gt;&nbsp;args,<br>&nbsp;&nbsp;&nbsp;&nbsp;<a href="https://developer.android.com/reference/kotlin/java/lang/String.html">String</a>&nbsp;id<br>)</code></div>
             </td>
           </tr>
         </tbody>
@@ -69,6 +76,11 @@
         <pre class="api-signature no-pretty-print">public&nbsp;final&nbsp;@<a href="https://developer.android.com/reference/kotlin/androidx/annotation/NonNull.html">NonNull</a> <a href="https://developer.android.com/reference/kotlin/java/util/Map.html">Map</a>&lt;@<a href="https://developer.android.com/reference/kotlin/androidx/annotation/NonNull.html">NonNull</a> <a href="https://developer.android.com/reference/kotlin/java/lang/String.html">String</a>,&nbsp;@<a href="https://developer.android.com/reference/kotlin/androidx/annotation/NonNull.html">NonNull</a> <a href="/docs/reference/android/kotlinx/serialization/json/JsonElement.html">JsonElement</a>&gt;&nbsp;<a href="/docs/reference/android/com/google/firebase/ai/type/FunctionCallPart.html#args()">args</a></pre>
         <p>the function parameters and values as a <code><a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-map/index.html">Map</a></code></p>
       </div>
+      <div class="api-item"><a name="getId()"></a><a name="setId()"></a><a name="getId--"></a><a name="setId--"></a>
+        <h3 class="api-name" id="id()">id</h3>
+        <pre class="api-signature no-pretty-print">public&nbsp;final&nbsp;<a href="https://developer.android.com/reference/kotlin/java/lang/String.html">String</a>&nbsp;<a href="/docs/reference/android/com/google/firebase/ai/type/FunctionCallPart.html#id()">id</a></pre>
+        <p>Unique id of the function call. If present, the returned <code><a href="/docs/reference/android/com/google/firebase/ai/type/FunctionResponsePart.html">FunctionResponsePart</a></code> should have a matching <code>id</code> field.</p>
+      </div>
       <div class="api-item"><a name="getName()"></a><a name="setName()"></a><a name="getName--"></a><a name="setName--"></a>
         <h3 class="api-name" id="name()">name</h3>
         <pre class="api-signature no-pretty-print">public&nbsp;final&nbsp;@<a href="https://developer.android.com/reference/kotlin/androidx/annotation/NonNull.html">NonNull</a> <a href="https://developer.android.com/reference/kotlin/java/lang/String.html">String</a>&nbsp;<a href="/docs/reference/android/com/google/firebase/ai/type/FunctionCallPart.html#name()">name</a></pre>
@@ -77,9 +89,9 @@
     </div>
     <div class="list">
       <h2>Public constructors</h2>
-      <div class="api-item"><a name="FunctionCallPart(kotlin.String, kotlin.collections.Map)"></a><a name="FunctionCallPart-kotlin.String-kotlin.collections.Map-"></a><a name="functioncallpart"></a>
-        <h3 class="api-name" id="FunctionCallPart(kotlin.String,kotlin.collections.Map)">FunctionCallPart</h3>
-        <pre class="api-signature no-pretty-print">public&nbsp;<a href="/docs/reference/android/com/google/firebase/ai/type/FunctionCallPart.html#FunctionCallPart(kotlin.String,kotlin.collections.Map)">FunctionCallPart</a>(<br>&nbsp;&nbsp;&nbsp;&nbsp;@<a href="https://developer.android.com/reference/kotlin/androidx/annotation/NonNull.html">NonNull</a> <a href="https://developer.android.com/reference/kotlin/java/lang/String.html">String</a>&nbsp;name,<br>&nbsp;&nbsp;&nbsp;&nbsp;@<a href="https://developer.android.com/reference/kotlin/androidx/annotation/NonNull.html">NonNull</a> <a href="https://developer.android.com/reference/kotlin/java/util/Map.html">Map</a>&lt;@<a href="https://developer.android.com/reference/kotlin/androidx/annotation/NonNull.html">NonNull</a> <a href="https://developer.android.com/reference/kotlin/java/lang/String.html">String</a>,&nbsp;@<a href="https://developer.android.com/reference/kotlin/androidx/annotation/NonNull.html">NonNull</a> <a href="/docs/reference/android/kotlinx/serialization/json/JsonElement.html">JsonElement</a>&gt;&nbsp;args<br>)</pre>
+      <div class="api-item"><a name="FunctionCallPart(kotlin.String, kotlin.collections.Map, kotlin.String)"></a><a name="FunctionCallPart-kotlin.String-kotlin.collections.Map-kotlin.String-"></a><a name="functioncallpart"></a>
+        <h3 class="api-name" id="FunctionCallPart(kotlin.String,kotlin.collections.Map,kotlin.String)">FunctionCallPart</h3>
+        <pre class="api-signature no-pretty-print">public&nbsp;<a href="/docs/reference/android/com/google/firebase/ai/type/FunctionCallPart.html#FunctionCallPart(kotlin.String,kotlin.collections.Map,kotlin.String)">FunctionCallPart</a>(<br>&nbsp;&nbsp;&nbsp;&nbsp;@<a href="https://developer.android.com/reference/kotlin/androidx/annotation/NonNull.html">NonNull</a> <a href="https://developer.android.com/reference/kotlin/java/lang/String.html">String</a>&nbsp;name,<br>&nbsp;&nbsp;&nbsp;&nbsp;@<a href="https://developer.android.com/reference/kotlin/androidx/annotation/NonNull.html">NonNull</a> <a href="https://developer.android.com/reference/kotlin/java/util/Map.html">Map</a>&lt;@<a href="https://developer.android.com/reference/kotlin/androidx/annotation/NonNull.html">NonNull</a> <a href="https://developer.android.com/reference/kotlin/java/lang/String.html">String</a>,&nbsp;@<a href="https://developer.android.com/reference/kotlin/androidx/annotation/NonNull.html">NonNull</a> <a href="/docs/reference/android/kotlinx/serialization/json/JsonElement.html">JsonElement</a>&gt;&nbsp;args,<br>&nbsp;&nbsp;&nbsp;&nbsp;<a href="https://developer.android.com/reference/kotlin/java/lang/String.html">String</a>&nbsp;id<br>)</pre>
         <div class="devsite-table-wrapper">
           <table class="responsive">
             <colgroup>
@@ -104,6 +116,12 @@
                   <p>the function parameters and values as a <code><a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-map/index.html">Map</a></code></p>
                 </td>
               </tr>
+              <tr>
+                <td><code><a href="https://developer.android.com/reference/kotlin/java/lang/String.html">String</a>&nbsp;id</code></td>
+                <td>
+                  <p>Unique id of the function call. If present, the returned <code><a href="/docs/reference/android/com/google/firebase/ai/type/FunctionResponsePart.html">FunctionResponsePart</a></code> should have a matching <code>id</code> field.</p>
+                </td>
+              </tr>
             </tbody>
           </table>
         </div>
```
```diff
--- /home/runner/diff/original/firebase-kotlindoc/android/com/google/firebase/ai/type/FunctionResponsePart.html	2025-04-30 17:02:10.629740533 +0000
+++ /home/runner/diff/modified/firebase-kotlindoc/android/com/google/firebase/ai/type/FunctionResponsePart.html	2025-04-30 16:58:48.553286456 +0000
@@ -26,17 +26,24 @@
         </thead>
         <tbody class="list">
           <tr>
+            <td><code>final <a href="https://developer.android.com/reference/kotlin/java/lang/String.html">String</a></code></td>
+            <td>
+              <div><code><a href="/docs/reference/android/com/google/firebase/ai/type/FunctionResponsePart.html#id()">id</a></code></div>
+              <p>Matching <code>id</code> for a <code><a href="/docs/reference/android/com/google/firebase/ai/type/FunctionCallPart.html">FunctionCallPart</a></code>, if one was provided.</p>
+            </td>
+          </tr>
+          <tr>
             <td><code>final @<a href="https://developer.android.com/reference/kotlin/androidx/annotation/NonNull.html">NonNull</a> <a href="https://developer.android.com/reference/kotlin/java/lang/String.html">String</a></code></td>
             <td>
               <div><code><a href="/docs/reference/android/com/google/firebase/ai/type/FunctionResponsePart.html#name()">name</a></code></div>
-              <p>the name of the called function</p>
+              <p>The name of the called function.</p>
             </td>
           </tr>
           <tr>
             <td><code>final @<a href="https://developer.android.com/reference/kotlin/androidx/annotation/NonNull.html">NonNull</a> <a href="/docs/reference/android/kotlinx/serialization/json/JsonObject.html">JsonObject</a></code></td>
             <td>
               <div><code><a href="/docs/reference/android/com/google/firebase/ai/type/FunctionResponsePart.html#response()">response</a></code></div>
-              <p>the response produced by the function as a <code><a href="https://developer.android.com/reference/kotlin/org/json/JSONObject.html">JSONObject</a></code></p>
+              <p>The response produced by the function as a <code><a href="https://developer.android.com/reference/kotlin/org/json/JSONObject.html">JSONObject</a></code>.</p>
             </td>
           </tr>
         </tbody>
@@ -56,7 +63,7 @@
         <tbody class="list">
           <tr>
             <td>
-              <div><code><a href="/docs/reference/android/com/google/firebase/ai/type/FunctionResponsePart.html#FunctionResponsePart(kotlin.String,kotlinx.serialization.json.JsonObject)">FunctionResponsePart</a>(@<a href="https://developer.android.com/reference/kotlin/androidx/annotation/NonNull.html">NonNull</a> <a href="https://developer.android.com/reference/kotlin/java/lang/String.html">String</a>&nbsp;name,&nbsp;@<a href="https://developer.android.com/reference/kotlin/androidx/annotation/NonNull.html">NonNull</a> <a href="/docs/reference/android/kotlinx/serialization/json/JsonObject.html">JsonObject</a>&nbsp;response)</code></div>
+              <div><code><a href="/docs/reference/android/com/google/firebase/ai/type/FunctionResponsePart.html#FunctionResponsePart(kotlin.String,kotlinx.serialization.json.JsonObject,kotlin.String)">FunctionResponsePart</a>(<br>&nbsp;&nbsp;&nbsp;&nbsp;@<a href="https://developer.android.com/reference/kotlin/androidx/annotation/NonNull.html">NonNull</a> <a href="https://developer.android.com/reference/kotlin/java/lang/String.html">String</a>&nbsp;name,<br>&nbsp;&nbsp;&nbsp;&nbsp;@<a href="https://developer.android.com/reference/kotlin/androidx/annotation/NonNull.html">NonNull</a> <a href="/docs/reference/android/kotlinx/serialization/json/JsonObject.html">JsonObject</a>&nbsp;response,<br>&nbsp;&nbsp;&nbsp;&nbsp;<a href="https://developer.android.com/reference/kotlin/java/lang/String.html">String</a>&nbsp;id<br>)</code></div>
             </td>
           </tr>
         </tbody>
@@ -64,22 +71,27 @@
     </div>
     <div class="list">
       <h2>Public fields</h2>
+      <div class="api-item"><a name="getId()"></a><a name="setId()"></a><a name="getId--"></a><a name="setId--"></a>
+        <h3 class="api-name" id="id()">id</h3>
+        <pre class="api-signature no-pretty-print">public&nbsp;final&nbsp;<a href="https://developer.android.com/reference/kotlin/java/lang/String.html">String</a>&nbsp;<a href="/docs/reference/android/com/google/firebase/ai/type/FunctionResponsePart.html#id()">id</a></pre>
+        <p>Matching <code>id</code> for a <code><a href="/docs/reference/android/com/google/firebase/ai/type/FunctionCallPart.html">FunctionCallPart</a></code>, if one was provided.</p>
+      </div>
       <div class="api-item"><a name="getName()"></a><a name="setName()"></a><a name="getName--"></a><a name="setName--"></a>
         <h3 class="api-name" id="name()">name</h3>
         <pre class="api-signature no-pretty-print">public&nbsp;final&nbsp;@<a href="https://developer.android.com/reference/kotlin/androidx/annotation/NonNull.html">NonNull</a> <a href="https://developer.android.com/reference/kotlin/java/lang/String.html">String</a>&nbsp;<a href="/docs/reference/android/com/google/firebase/ai/type/FunctionResponsePart.html#name()">name</a></pre>
-        <p>the name of the called function</p>
+        <p>The name of the called function.</p>
       </div>
       <div class="api-item"><a name="getResponse()"></a><a name="setResponse()"></a><a name="getResponse--"></a><a name="setResponse--"></a>
         <h3 class="api-name" id="response()">response</h3>
         <pre class="api-signature no-pretty-print">public&nbsp;final&nbsp;@<a href="https://developer.android.com/reference/kotlin/androidx/annotation/NonNull.html">NonNull</a> <a href="/docs/reference/android/kotlinx/serialization/json/JsonObject.html">JsonObject</a>&nbsp;<a href="/docs/reference/android/com/google/firebase/ai/type/FunctionResponsePart.html#response()">response</a></pre>
-        <p>the response produced by the function as a <code><a href="https://developer.android.com/reference/kotlin/org/json/JSONObject.html">JSONObject</a></code></p>
+        <p>The response produced by the function as a <code><a href="https://developer.android.com/reference/kotlin/org/json/JSONObject.html">JSONObject</a></code>.</p>
       </div>
     </div>
     <div class="list">
       <h2>Public constructors</h2>
-      <div class="api-item"><a name="FunctionResponsePart(kotlin.String, kotlinx.serialization.json.JsonObject)"></a><a name="FunctionResponsePart-kotlin.String-kotlinx.serialization.json.JsonObject-"></a><a name="functionresponsepart"></a>
-        <h3 class="api-name" id="FunctionResponsePart(kotlin.String,kotlinx.serialization.json.JsonObject)">FunctionResponsePart</h3>
-        <pre class="api-signature no-pretty-print">public&nbsp;<a href="/docs/reference/android/com/google/firebase/ai/type/FunctionResponsePart.html#FunctionResponsePart(kotlin.String,kotlinx.serialization.json.JsonObject)">FunctionResponsePart</a>(@<a href="https://developer.android.com/reference/kotlin/androidx/annotation/NonNull.html">NonNull</a> <a href="https://developer.android.com/reference/kotlin/java/lang/String.html">String</a>&nbsp;name,&nbsp;@<a href="https://developer.android.com/reference/kotlin/androidx/annotation/NonNull.html">NonNull</a> <a href="/docs/reference/android/kotlinx/serialization/json/JsonObject.html">JsonObject</a>&nbsp;response)</pre>
+      <div class="api-item"><a name="FunctionResponsePart(kotlin.String, kotlinx.serialization.json.JsonObject, kotlin.String)"></a><a name="FunctionResponsePart-kotlin.String-kotlinx.serialization.json.JsonObject-kotlin.String-"></a><a name="functionresponsepart"></a>
+        <h3 class="api-name" id="FunctionResponsePart(kotlin.String,kotlinx.serialization.json.JsonObject,kotlin.String)">FunctionResponsePart</h3>
+        <pre class="api-signature no-pretty-print">public&nbsp;<a href="/docs/reference/android/com/google/firebase/ai/type/FunctionResponsePart.html#FunctionResponsePart(kotlin.String,kotlinx.serialization.json.JsonObject,kotlin.String)">FunctionResponsePart</a>(<br>&nbsp;&nbsp;&nbsp;&nbsp;@<a href="https://developer.android.com/reference/kotlin/androidx/annotation/NonNull.html">NonNull</a> <a href="https://developer.android.com/reference/kotlin/java/lang/String.html">String</a>&nbsp;name,<br>&nbsp;&nbsp;&nbsp;&nbsp;@<a href="https://developer.android.com/reference/kotlin/androidx/annotation/NonNull.html">NonNull</a> <a href="/docs/reference/android/kotlinx/serialization/json/JsonObject.html">JsonObject</a>&nbsp;response,<br>&nbsp;&nbsp;&nbsp;&nbsp;<a href="https://developer.android.com/reference/kotlin/java/lang/String.html">String</a>&nbsp;id<br>)</pre>
         <div class="devsite-table-wrapper">
           <table class="responsive">
             <colgroup>
@@ -95,13 +107,19 @@
               <tr>
                 <td><code>@<a href="https://developer.android.com/reference/kotlin/androidx/annotation/NonNull.html">NonNull</a> <a href="https://developer.android.com/reference/kotlin/java/lang/String.html">String</a>&nbsp;name</code></td>
                 <td>
-                  <p>the name of the called function</p>
+                  <p>The name of the called function.</p>
                 </td>
               </tr>
               <tr>
                 <td><code>@<a href="https://developer.android.com/reference/kotlin/androidx/annotation/NonNull.html">NonNull</a> <a href="/docs/reference/android/kotlinx/serialization/json/JsonObject.html">JsonObject</a>&nbsp;response</code></td>
                 <td>
-                  <p>the response produced by the function as a <code><a href="https://developer.android.com/reference/kotlin/org/json/JSONObject.html">JSONObject</a></code></p>
+                  <p>The response produced by the function as a <code><a href="https://developer.android.com/reference/kotlin/org/json/JSONObject.html">JSONObject</a></code>.</p>
+                </td>
+              </tr>
+              <tr>
+                <td><code><a href="https://developer.android.com/reference/kotlin/java/lang/String.html">String</a>&nbsp;id</code></td>
+                <td>
+                  <p>Matching <code>id</code> for a <code><a href="/docs/reference/android/com/google/firebase/ai/type/FunctionCallPart.html">FunctionCallPart</a></code>, if one was provided.</p>
                 </td>
               </tr>
             </tbody>
```
```diff
--- /home/runner/diff/original/firebase-kotlindoc/android/com/google/firebase/ai/type/LiveContentResponse.Status.Companion.html	2025-04-30 17:02:10.610740585 +0000
+++ /home/runner/diff/modified/firebase-kotlindoc/android/com/google/firebase/ai/type/LiveContentResponse.Status.Companion.html	1970-01-01 00:00:00.000000000 +0000
@@ -1,73 +0,0 @@
-<html devsite="true">
-  <head>
-    <title>LiveContentResponse.Status.Companion</title>
-{% setvar book_path %}/_book.yaml{% endsetvar %}
-{% include "docs/reference/android/_reference-head-tags.html" %}
-  </head>
-  <body>
-    <div id="metadata-info-block"></div>
-    <h1>LiveContentResponse.Status.Companion</h1>
-    <p>
-      <pre>public static class <a href="/docs/reference/android/com/google/firebase/ai/type/LiveContentResponse.Status.Companion.html">LiveContentResponse.Status.Companion</a></pre>
-    </p>
-    <hr>
-    <h2>Summary</h2>
-    <div class="devsite-table-wrapper">
-      <table class="responsive">
-        <colgroup>
-          <col width="40%">
-          <col>
-        </colgroup>
-        <thead>
-          <tr>
-            <th colspan="100%"><h3>Public fields</h3></th>
-          </tr>
-        </thead>
-        <tbody class="list">
-          <tr>
-            <td><code>static&nbsp;final @<a href="https://developer.android.com/reference/kotlin/androidx/annotation/NonNull.html">NonNull</a> <a href="/docs/reference/android/com/google/firebase/ai/type/LiveContentResponse.Status.html">LiveContentResponse.Status</a></code></td>
-            <td>
-              <div><code><a href="/docs/reference/android/com/google/firebase/ai/type/LiveContentResponse.Status.Companion.html#INTERRUPTED()">INTERRUPTED</a></code></div>
-              <p>The server was interrupted while generating data.</p>
-            </td>
-          </tr>
-          <tr>
-            <td><code>static&nbsp;final @<a href="https://developer.android.com/reference/kotlin/androidx/annotation/NonNull.html">NonNull</a> <a href="/docs/reference/android/com/google/firebase/ai/type/LiveContentResponse.Status.html">LiveContentResponse.Status</a></code></td>
-            <td>
-              <div><code><a href="/docs/reference/android/com/google/firebase/ai/type/LiveContentResponse.Status.Companion.html#NORMAL()">NORMAL</a></code></div>
-              <p>The server is actively sending data for the current interaction.</p>
-            </td>
-          </tr>
-          <tr>
-            <td><code>static&nbsp;final @<a href="https://developer.android.com/reference/kotlin/androidx/annotation/NonNull.html">NonNull</a> <a href="/docs/reference/android/com/google/firebase/ai/type/LiveContentResponse.Status.html">LiveContentResponse.Status</a></code></td>
-            <td>
-              <div><code><a href="/docs/reference/android/com/google/firebase/ai/type/LiveContentResponse.Status.Companion.html#TURN_COMPLETE()">TURN_COMPLETE</a></code></div>
-              <p>The model has finished sending data in the current interaction.</p>
-            </td>
-          </tr>
-        </tbody>
-      </table>
-    </div>
-    <div class="list">
-      <h2>Public fields</h2>
-      <div class="api-item"><a name="getINTERRUPTED()"></a><a name="setINTERRUPTED()"></a><a name="getINTERRUPTED--"></a><a name="setINTERRUPTED--"></a>
-        <h3 class="api-name" id="INTERRUPTED()">INTERRUPTED</h3>
-        <pre class="api-signature no-pretty-print">public&nbsp;static&nbsp;final&nbsp;@<a href="https://developer.android.com/reference/kotlin/androidx/annotation/NonNull.html">NonNull</a> <a href="/docs/reference/android/com/google/firebase/ai/type/LiveContentResponse.Status.html">LiveContentResponse.Status</a>&nbsp;<a href="/docs/reference/android/com/google/firebase/ai/type/LiveContentResponse.Status.Companion.html#INTERRUPTED()">INTERRUPTED</a></pre>
-        <p>The server was interrupted while generating data.</p>
-        <p>An interruption occurs when the client sends a message while the server is <code><a href="/docs/reference/android/com/google/firebase/ai/type/LiveContentResponse.Status.Companion.html#NORMAL()">actively</a></code> sending data.</p>
-      </div>
-      <div class="api-item"><a name="getNORMAL()"></a><a name="setNORMAL()"></a><a name="getNORMAL--"></a><a name="setNORMAL--"></a>
-        <h3 class="api-name" id="NORMAL()">NORMAL</h3>
-        <pre class="api-signature no-pretty-print">public&nbsp;static&nbsp;final&nbsp;@<a href="https://developer.android.com/reference/kotlin/androidx/annotation/NonNull.html">NonNull</a> <a href="/docs/reference/android/com/google/firebase/ai/type/LiveContentResponse.Status.html">LiveContentResponse.Status</a>&nbsp;<a href="/docs/reference/android/com/google/firebase/ai/type/LiveContentResponse.Status.Companion.html#NORMAL()">NORMAL</a></pre>
-        <p>The server is actively sending data for the current interaction.</p>
-      </div>
-      <div class="api-item"><a name="getTURN_COMPLETE()"></a><a name="setTURN_COMPLETE()"></a><a name="getTURN_COMPLETE--"></a><a name="setTURN_COMPLETE--"></a>
-        <h3 class="api-name" id="TURN_COMPLETE()">TURN_COMPLETE</h3>
-        <pre class="api-signature no-pretty-print">public&nbsp;static&nbsp;final&nbsp;@<a href="https://developer.android.com/reference/kotlin/androidx/annotation/NonNull.html">NonNull</a> <a href="/docs/reference/android/com/google/firebase/ai/type/LiveContentResponse.Status.html">LiveContentResponse.Status</a>&nbsp;<a href="/docs/reference/android/com/google/firebase/ai/type/LiveContentResponse.Status.Companion.html#TURN_COMPLETE()">TURN_COMPLETE</a></pre>
-        <p>The model has finished sending data in the current interaction.</p>
-        <p>Can be set alongside content, signifying that the content is the last in the turn.</p>
-      </div>
-    </div>
-  </body>
-</html>
-
```
```diff
--- /home/runner/diff/original/firebase-kotlindoc/android/com/google/firebase/ai/type/LiveContentResponse.Status.html	2025-04-30 17:02:10.624740546 +0000
+++ /home/runner/diff/modified/firebase-kotlindoc/android/com/google/firebase/ai/type/LiveContentResponse.Status.html	1970-01-01 00:00:00.000000000 +0000
@@ -1,38 +0,0 @@
-<html devsite="true">
-  <head>
-    <title>LiveContentResponse.Status</title>
-{% setvar book_path %}/_book.yaml{% endsetvar %}
-{% include "docs/reference/android/_reference-head-tags.html" %}
-  </head>
-  <body>
-    <div id="metadata-info-block"></div>
-    <h1>LiveContentResponse.Status</h1>
-    <p>
-      <pre>value public final class <a href="/docs/reference/android/com/google/firebase/ai/type/LiveContentResponse.Status.html">LiveContentResponse.Status</a></pre>
-    </p>
-    <hr>
-    <p>Represents the status of a <code><a href="/docs/reference/android/com/google/firebase/ai/type/LiveContentResponse.html">LiveContentResponse</a></code>, within a single interaction.</p>
-    <h2>Summary</h2>
-    <div class="devsite-table-wrapper">
-      <table class="responsive">
-        <colgroup>
-          <col width="40%">
-          <col>
-        </colgroup>
-        <thead>
-          <tr>
-            <th colspan="100%"><h3>Nested types</h3></th>
-          </tr>
-        </thead>
-        <tbody class="list">
-          <tr>
-            <td>
-              <div><code>public static class <a href="/docs/reference/android/com/google/firebase/ai/type/LiveContentResponse.Status.Companion.html">LiveContentResponse.Status.Companion</a></code></div>
-            </td>
-          </tr>
-        </tbody>
-      </table>
-    </div>
-  </body>
-</html>
-
```
```diff
--- /home/runner/diff/original/firebase-kotlindoc/android/com/google/firebase/ai/type/LiveContentResponse.html	2025-04-30 17:02:10.614740574 +0000
+++ /home/runner/diff/modified/firebase-kotlindoc/android/com/google/firebase/ai/type/LiveContentResponse.html	1970-01-01 00:00:00.000000000 +0000
@@ -1,112 +0,0 @@
-<html devsite="true">
-  <head>
-    <title>LiveContentResponse</title>
-{% setvar book_path %}/_book.yaml{% endsetvar %}
-{% include "docs/reference/android/_reference-head-tags.html" %}
-  </head>
-  <body>
-    <div id="metadata-info-block"></div>
-    <h1>LiveContentResponse</h1>
-    <p>
-      <pre>@<a href="/docs/reference/android/com/google/firebase/ai/type/PublicPreviewAPI.html">PublicPreviewAPI</a><br>public final class <a href="/docs/reference/android/com/google/firebase/ai/type/LiveContentResponse.html">LiveContentResponse</a></pre>
-    </p>
-    <hr>
-    <p>Represents the response from the model for live content updates.</p>
-    <p>This class encapsulates the content data, the status of the response, and any function calls included in the response.</p>
-    <h2>Summary</h2>
-    <div class="devsite-table-wrapper">
-      <table class="responsive">
-        <colgroup>
-          <col width="40%">
-          <col>
-        </colgroup>
-        <thead>
-          <tr>
-            <th colspan="100%"><h3>Nested types</h3></th>
-          </tr>
-        </thead>
-        <tbody class="list">
-          <tr>
-            <td>
-              <div><code>value public final class <a href="/docs/reference/android/com/google/firebase/ai/type/LiveContentResponse.Status.html">LiveContentResponse.Status</a></code></div>
-              <p>Represents the status of a <code><a href="/docs/reference/android/com/google/firebase/ai/type/LiveContentResponse.html">LiveContentResponse</a></code>, within a single interaction.</p>
-            </td>
-          </tr>
-          <tr>
-            <td>
-              <div><code>public static class <a href="/docs/reference/android/com/google/firebase/ai/type/LiveContentResponse.Status.Companion.html">LiveContentResponse.Status.Companion</a></code></div>
-            </td>
-          </tr>
-        </tbody>
-      </table>
-    </div>
-    <div class="devsite-table-wrapper">
-      <table class="responsive">
-        <colgroup>
-          <col width="40%">
-          <col>
-        </colgroup>
-        <thead>
-          <tr>
-            <th colspan="100%"><h3>Public fields</h3></th>
-          </tr>
-        </thead>
-        <tbody class="list">
-          <tr>
-            <td><code>final <a href="/docs/reference/android/com/google/firebase/ai/type/Content.html">Content</a></code></td>
-            <td>
-              <div><code><a href="/docs/reference/android/com/google/firebase/ai/type/LiveContentResponse.html#data()">data</a></code></div>
-              <p>The main content data of the response.</p>
-            </td>
-          </tr>
-          <tr>
-            <td><code>final <a href="https://developer.android.com/reference/kotlin/java/util/List.html">List</a>&lt;@<a href="https://developer.android.com/reference/kotlin/androidx/annotation/NonNull.html">NonNull</a> <a href="/docs/reference/android/com/google/firebase/ai/type/FunctionCallPart.html">FunctionCallPart</a>&gt;</code></td>
-            <td>
-              <div><code><a href="/docs/reference/android/com/google/firebase/ai/type/LiveContentResponse.html#functionCalls()">functionCalls</a></code></div>
-              <p>A list of <code><a href="/docs/reference/android/com/google/firebase/ai/type/FunctionCallPart.html">FunctionCallPart</a></code> included in the response, if any.</p>
-            </td>
-          </tr>
-          <tr>
-            <td><code>final @<a href="https://developer.android.com/reference/kotlin/androidx/annotation/NonNull.html">NonNull</a> <a href="/docs/reference/android/com/google/firebase/ai/type/LiveContentResponse.Status.html">LiveContentResponse.Status</a></code></td>
-            <td>
-              <div><code><a href="/docs/reference/android/com/google/firebase/ai/type/LiveContentResponse.html#status()">status</a></code></div>
-              <p>The status of the live content response.</p>
-            </td>
-          </tr>
-          <tr>
-            <td><code>final <a href="https://developer.android.com/reference/kotlin/java/lang/String.html">String</a></code></td>
-            <td>
-              <div><code><a href="/docs/reference/android/com/google/firebase/ai/type/LiveContentResponse.html#text()">text</a></code></div>
-              <p>Convenience field representing all the text parts in the response as a single string, if they exists.</p>
-            </td>
-          </tr>
-        </tbody>
-      </table>
-    </div>
-    <div class="list">
-      <h2>Public fields</h2>
-      <div class="api-item"><a name="getData()"></a><a name="setData()"></a><a name="getData--"></a><a name="setData--"></a>
-        <h3 class="api-name" id="data()">data</h3>
-        <pre class="api-signature no-pretty-print">public&nbsp;final&nbsp;<a href="/docs/reference/android/com/google/firebase/ai/type/Content.html">Content</a>&nbsp;<a href="/docs/reference/android/com/google/firebase/ai/type/LiveContentResponse.html#data()">data</a></pre>
-        <p>The main content data of the response. This can be <code>null</code> if there is no content.</p>
-      </div>
-      <div class="api-item"><a name="getFunctionCalls()"></a><a name="setFunctionCalls()"></a><a name="getFunctionCalls--"></a><a name="setFunctionCalls--"></a>
-        <h3 class="api-name" id="functionCalls()">functionCalls</h3>
-        <pre class="api-signature no-pretty-print">public&nbsp;final&nbsp;<a href="https://developer.android.com/reference/kotlin/java/util/List.html">List</a>&lt;@<a href="https://developer.android.com/reference/kotlin/androidx/annotation/NonNull.html">NonNull</a> <a href="/docs/reference/android/com/google/firebase/ai/type/FunctionCallPart.html">FunctionCallPart</a>&gt;&nbsp;<a href="/docs/reference/android/com/google/firebase/ai/type/LiveContentResponse.html#functionCalls()">functionCalls</a></pre>
-        <p>A list of <code><a href="/docs/reference/android/com/google/firebase/ai/type/FunctionCallPart.html">FunctionCallPart</a></code> included in the response, if any.</p>
-        <p>This list can be null or empty if no function calls are present.</p>
-      </div>
-      <div class="api-item"><a name="getStatus()"></a><a name="setStatus()"></a><a name="getStatus--"></a><a name="setStatus--"></a>
-        <h3 class="api-name" id="status()">status</h3>
-        <pre class="api-signature no-pretty-print">public&nbsp;final&nbsp;@<a href="https://developer.android.com/reference/kotlin/androidx/annotation/NonNull.html">NonNull</a> <a href="/docs/reference/android/com/google/firebase/ai/type/LiveContentResponse.Status.html">LiveContentResponse.Status</a>&nbsp;<a href="/docs/reference/android/com/google/firebase/ai/type/LiveContentResponse.html#status()">status</a></pre>
-        <p>The status of the live content response. Indicates whether the response is normal, was interrupted, or signifies the completion of a turn.</p>
-      </div>
-      <div class="api-item"><a name="getText()"></a><a name="setText()"></a><a name="getText--"></a><a name="setText--"></a>
-        <h3 class="api-name" id="text()">text</h3>
-        <pre class="api-signature no-pretty-print">public&nbsp;final&nbsp;<a href="https://developer.android.com/reference/kotlin/java/lang/String.html">String</a>&nbsp;<a href="/docs/reference/android/com/google/firebase/ai/type/LiveContentResponse.html#text()">text</a></pre>
-        <p>Convenience field representing all the text parts in the response as a single string, if they exists.</p>
-      </div>
-    </div>
-  </body>
-</html>
-
```
```diff
--- /home/runner/diff/original/firebase-kotlindoc/android/com/google/firebase/ai/type/LiveServerContent.html	1970-01-01 00:00:00.000000000 +0000
+++ /home/runner/diff/modified/firebase-kotlindoc/android/com/google/firebase/ai/type/LiveServerContent.html	2025-04-30 16:58:48.537286494 +0000
@@ -0,0 +1,137 @@
+<html devsite="true">
+  <head>
+    <title>LiveServerContent</title>
+{% setvar book_path %}/_book.yaml{% endsetvar %}
+{% include "docs/reference/android/_reference-head-tags.html" %}
+  </head>
+  <body>
+    <div id="metadata-info-block"></div>
+    <h1>LiveServerContent</h1>
+    <p>
+      <pre>@<a href="/docs/reference/android/com/google/firebase/ai/type/PublicPreviewAPI.html">PublicPreviewAPI</a><br>public final class <a href="/docs/reference/android/com/google/firebase/ai/type/LiveServerContent.html">LiveServerContent</a> implements <a href="/docs/reference/android/com/google/firebase/ai/type/LiveServerMessage.html">LiveServerMessage</a></pre>
+    </p>
+    <hr>
+    <p>Incremental server update generated by the model in response to client messages.</p>
+    <p>Content is generated as quickly as possible, and not in realtime. You may choose to buffer and play it out in realtime.</p>
+    <h2>Summary</h2>
+    <div class="devsite-table-wrapper">
+      <table class="responsive">
+        <colgroup>
+          <col width="40%">
+          <col>
+        </colgroup>
+        <thead>
+          <tr>
+            <th colspan="100%"><h3>Public fields</h3></th>
+          </tr>
+        </thead>
+        <tbody class="list">
+          <tr>
+            <td><code>final <a href="/docs/reference/android/com/google/firebase/ai/type/Content.html">Content</a></code></td>
+            <td>
+              <div><code><a href="/docs/reference/android/com/google/firebase/ai/type/LiveServerContent.html#content()">content</a></code></div>
+              <p>The content that the model has generated as part of the current conversation with the user.</p>
+            </td>
+          </tr>
+          <tr>
+            <td><code>final boolean</code></td>
+            <td>
+              <div><code><a href="/docs/reference/android/com/google/firebase/ai/type/LiveServerContent.html#generationComplete()">generationComplete</a></code></div>
+              <p>The model has finished <em>generating</em> data for the current turn.</p>
+            </td>
+          </tr>
+          <tr>
+            <td><code>final boolean</code></td>
+            <td>
+              <div><code><a href="/docs/reference/android/com/google/firebase/ai/type/LiveServerContent.html#interrupted()">interrupted</a></code></div>
+              <p>The model was interrupted by the client while generating data.</p>
+            </td>
+          </tr>
+          <tr>
+            <td><code>final boolean</code></td>
+            <td>
+              <div><code><a href="/docs/reference/android/com/google/firebase/ai/type/LiveServerContent.html#turnComplete()">turnComplete</a></code></div>
+              <p>The model has finished sending data in the current turn.</p>
+            </td>
+          </tr>
+        </tbody>
+      </table>
+    </div>
+    <div class="devsite-table-wrapper">
+      <table class="responsive">
+        <colgroup>
+          <col width="40%">
+          <col>
+        </colgroup>
+        <thead>
+          <tr>
+            <th colspan="100%"><h3>Public constructors</h3></th>
+          </tr>
+        </thead>
+        <tbody class="list">
+          <tr>
+            <td>
+              <div><code><a href="/docs/reference/android/com/google/firebase/ai/type/LiveServerContent.html#LiveServerContent(com.google.firebase.ai.type.Content,kotlin.Boolean,kotlin.Boolean,kotlin.Boolean)">LiveServerContent</a>(<br>&nbsp;&nbsp;&nbsp;&nbsp;<a href="/docs/reference/android/com/google/firebase/ai/type/Content.html">Content</a>&nbsp;content,<br>&nbsp;&nbsp;&nbsp;&nbsp;boolean&nbsp;interrupted,<br>&nbsp;&nbsp;&nbsp;&nbsp;boolean&nbsp;turnComplete,<br>&nbsp;&nbsp;&nbsp;&nbsp;boolean&nbsp;generationComplete<br>)</code></div>
+            </td>
+          </tr>
+        </tbody>
+      </table>
+    </div>
+    <div class="list">
+      <h2>Public fields</h2>
+      <div class="api-item"><a name="getContent()"></a><a name="setContent()"></a><a name="getContent--"></a><a name="setContent--"></a>
+        <h3 class="api-name" id="content()">content</h3>
+        <pre class="api-signature no-pretty-print">public&nbsp;final&nbsp;<a href="/docs/reference/android/com/google/firebase/ai/type/Content.html">Content</a>&nbsp;<a href="/docs/reference/android/com/google/firebase/ai/type/LiveServerContent.html#content()">content</a></pre>
+        <p>The content that the model has generated as part of the current conversation with the user.</p>
+        <p>This can be <code>null</code> if there is no content.</p>
+      </div>
+      <div class="api-item"><a name="getGenerationComplete()"></a><a name="setGenerationComplete()"></a><a name="getGenerationComplete--"></a><a name="setGenerationComplete--"></a>
+        <h3 class="api-name" id="generationComplete()">generationComplete</h3>
+        <pre class="api-signature no-pretty-print">public&nbsp;final&nbsp;boolean&nbsp;<a href="/docs/reference/android/com/google/firebase/ai/type/LiveServerContent.html#generationComplete()">generationComplete</a></pre>
+        <p>The model has finished <em>generating</em> data for the current turn.</p>
+        <p>For realtime playback, there will be a delay between when the model finishes generating content and the client has finished playing back the generated content. <code><a href="/docs/reference/android/com/google/firebase/ai/type/LiveServerContent.html#generationComplete()">generationComplete</a></code> indicates that the model is done generating data, while <code><a href="/docs/reference/android/com/google/firebase/ai/type/LiveServerContent.html#turnComplete()">turnComplete</a></code> indicates the model is waiting for additional client messages. Sending a message during this delay may cause an <code><a href="/docs/reference/android/com/google/firebase/ai/type/LiveServerContent.html#interrupted()">interrupted</a></code> message to be sent.</p>
+        <p>Note that if the model was <code><a href="/docs/reference/android/com/google/firebase/ai/type/LiveServerContent.html#interrupted()">interrupted</a></code>, this will not be set. The model will go from <code><a href="/docs/reference/android/com/google/firebase/ai/type/LiveServerContent.html#interrupted()">interrupted</a></code> -><code><a href="/docs/reference/android/com/google/firebase/ai/type/LiveServerContent.html#turnComplete()">turnComplete</a></code>.</p>
+      </div>
+      <div class="api-item"><a name="getInterrupted()"></a><a name="setInterrupted()"></a><a name="getInterrupted--"></a><a name="setInterrupted--"></a>
+        <h3 class="api-name" id="interrupted()">interrupted</h3>
+        <pre class="api-signature no-pretty-print">public&nbsp;final&nbsp;boolean&nbsp;<a href="/docs/reference/android/com/google/firebase/ai/type/LiveServerContent.html#interrupted()">interrupted</a></pre>
+        <p>The model was interrupted by the client while generating data.</p>
+        <p>An interruption occurs when the client sends a message while the model is actively sending data.</p>
+      </div>
+      <div class="api-item"><a name="getTurnComplete()"></a><a name="setTurnComplete()"></a><a name="getTurnComplete--"></a><a name="setTurnComplete--"></a>
+        <h3 class="api-name" id="turnComplete()">turnComplete</h3>
+        <pre class="api-signature no-pretty-print">public&nbsp;final&nbsp;boolean&nbsp;<a href="/docs/reference/android/com/google/firebase/ai/type/LiveServerContent.html#turnComplete()">turnComplete</a></pre>
+        <p>The model has finished sending data in the current turn.</p>
+        <p>Generation will only start in response to additional client messages.</p>
+        <p>Can be set alongside <code><a href="/docs/reference/android/com/google/firebase/ai/type/package-summary.html#content(kotlin.String,kotlin.Function1)">content</a></code>, indicating that the <code><a href="/docs/reference/android/com/google/firebase/ai/type/package-summary.html#content(kotlin.String,kotlin.Function1)">content</a></code> is the last in the turn.</p>
+        <div class="devsite-table-wrapper">
+          <table class="responsive">
+            <colgroup>
+              <col width="40%">
+              <col>
+            </colgroup>
+            <thead>
+              <tr>
+                <th colspan="100%">See also</th>
+              </tr>
+            </thead>
+            <tbody class="list">
+              <tr>
+                <td><code><a href="/docs/reference/android/com/google/firebase/ai/type/LiveServerContent.html#generationComplete()">generationComplete</a></code></td>
+                <td></td>
+              </tr>
+            </tbody>
+          </table>
+        </div>
+      </div>
+    </div>
+    <div class="list">
+      <h2>Public constructors</h2>
+      <div class="api-item"><a name="LiveServerContent(com.google.firebase.ai.type.Content, kotlin.Boolean, kotlin.Boolean, kotlin.Boolean)"></a><a name="LiveServerContent-com.google.firebase.ai.type.Content-kotlin.Boolean-kotlin.Boolean-kotlin.Boolean-"></a><a name="liveservercontent"></a>
+        <h3 class="api-name" id="LiveServerContent(com.google.firebase.ai.type.Content,kotlin.Boolean,kotlin.Boolean,kotlin.Boolean)">LiveServerContent</h3>
+        <pre class="api-signature no-pretty-print">public&nbsp;<a href="/docs/reference/android/com/google/firebase/ai/type/LiveServerContent.html#LiveServerContent(com.google.firebase.ai.type.Content,kotlin.Boolean,kotlin.Boolean,kotlin.Boolean)">LiveServerContent</a>(<br>&nbsp;&nbsp;&nbsp;&nbsp;<a href="/docs/reference/android/com/google/firebase/ai/type/Content.html">Content</a>&nbsp;content,<br>&nbsp;&nbsp;&nbsp;&nbsp;boolean&nbsp;interrupted,<br>&nbsp;&nbsp;&nbsp;&nbsp;boolean&nbsp;turnComplete,<br>&nbsp;&nbsp;&nbsp;&nbsp;boolean&nbsp;generationComplete<br>)</pre>
+      </div>
+    </div>
+  </body>
+</html>
+
```
```diff
--- /home/runner/diff/original/firebase-kotlindoc/android/com/google/firebase/ai/type/LiveServerMessage.html	1970-01-01 00:00:00.000000000 +0000
+++ /home/runner/diff/modified/firebase-kotlindoc/android/com/google/firebase/ai/type/LiveServerMessage.html	2025-04-30 16:58:48.558286444 +0000
@@ -0,0 +1,88 @@
+<html devsite="true">
+  <head>
+    <title>LiveServerMessage</title>
+{% setvar book_path %}/_book.yaml{% endsetvar %}
+{% include "docs/reference/android/_reference-head-tags.html" %}
+  </head>
+  <body>
+    <div id="metadata-info-block"></div>
+    <h1>LiveServerMessage</h1>
+    <p>
+      <pre>@<a href="/docs/reference/android/com/google/firebase/ai/type/PublicPreviewAPI.html">PublicPreviewAPI</a><br>public interface <a href="/docs/reference/android/com/google/firebase/ai/type/LiveServerMessage.html">LiveServerMessage</a></pre>
+    </p>
+    <div class="devsite-table-wrapper"><devsite-expandable><span class="expand-control jd-sumtable-subclasses">Known direct subclasses
+        <div class="showalways" id="subclasses-direct"><a href="/docs/reference/android/com/google/firebase/ai/type/LiveServerContent.html">LiveServerContent</a>, <a href="/docs/reference/android/com/google/firebase/ai/type/LiveServerSetupComplete.html">LiveServerSetupComplete</a>, <a href="/docs/reference/android/com/google/firebase/ai/type/LiveServerToolCallCancellation.html">LiveServerToolCallCancellation</a>, <a href="/docs/reference/android/com/google/firebase/ai/type/LiveServerToolCall.html">LiveServerToolCall</a></div>
+      </span>
+      <div id="subclasses-direct-summary">
+        <div class="devsite-table-wrapper">
+          <table class="responsive">
+            <colgroup>
+              <col width="40%">
+              <col>
+            </colgroup>
+            <tbody class="list">
+              <tr>
+                <td><code><a href="/docs/reference/android/com/google/firebase/ai/type/LiveServerContent.html">LiveServerContent</a></code></td>
+                <td>
+                  <p>Incremental server update generated by the model in response to client messages.</p>
+                </td>
+              </tr>
+              <tr>
+                <td><code><a href="/docs/reference/android/com/google/firebase/ai/type/LiveServerSetupComplete.html">LiveServerSetupComplete</a></code></td>
+                <td>
+                  <p>The model is ready to receive client messages.</p>
+                </td>
+              </tr>
+              <tr>
+                <td><code><a href="/docs/reference/android/com/google/firebase/ai/type/LiveServerToolCallCancellation.html">LiveServerToolCallCancellation</a></code></td>
+                <td>
+                  <p>Notification for the client to cancel a previous function call from <code><a href="/docs/reference/android/com/google/firebase/ai/type/LiveServerToolCall.html">LiveServerToolCall</a></code>.</p>
+                </td>
+              </tr>
+              <tr>
+                <td><code><a href="/docs/reference/android/com/google/firebase/ai/type/LiveServerToolCall.html">LiveServerToolCall</a></code></td>
+                <td>
+                  <p>Request for the client to execute the provided <code><a href="/docs/reference/android/com/google/firebase/ai/type/LiveServerToolCall.html#functionCalls()">functionCalls</a></code>.</p>
+                </td>
+              </tr>
+            </tbody>
+          </table>
+        </div>
+      </div>
+</devsite-expandable>    </div>
+    <hr>
+    <p>Parent interface for responses from the model during live interactions.</p>
+    <div class="devsite-table-wrapper">
+      <table class="responsive">
+        <colgroup>
+          <col width="40%">
+          <col>
+        </colgroup>
+        <thead>
+          <tr>
+            <th colspan="100%">See also</th>
+          </tr>
+        </thead>
+        <tbody class="list">
+          <tr>
+            <td><code><a href="/docs/reference/android/com/google/firebase/ai/type/LiveServerContent.html">LiveServerContent</a></code></td>
+            <td></td>
+          </tr>
+          <tr>
+            <td><code><a href="/docs/reference/android/com/google/firebase/ai/type/LiveServerToolCall.html">LiveServerToolCall</a></code></td>
+            <td></td>
+          </tr>
+          <tr>
+            <td><code><a href="/docs/reference/android/com/google/firebase/ai/type/LiveServerToolCallCancellation.html">LiveServerToolCallCancellation</a></code></td>
+            <td></td>
+          </tr>
+          <tr>
+            <td><code><a href="/docs/reference/android/com/google/firebase/ai/type/LiveServerSetupComplete.html">LiveServerSetupComplete</a></code></td>
+            <td></td>
+          </tr>
+        </tbody>
+      </table>
+    </div>
+  </body>
+</html>
+
```
```diff
--- /home/runner/diff/original/firebase-kotlindoc/android/com/google/firebase/ai/type/LiveServerSetupComplete.html	1970-01-01 00:00:00.000000000 +0000
+++ /home/runner/diff/modified/firebase-kotlindoc/android/com/google/firebase/ai/type/LiveServerSetupComplete.html	2025-04-30 16:58:48.553286456 +0000
@@ -0,0 +1,45 @@
+<html devsite="true">
+  <head>
+    <title>LiveServerSetupComplete</title>
+{% setvar book_path %}/_book.yaml{% endsetvar %}
+{% include "docs/reference/android/_reference-head-tags.html" %}
+  </head>
+  <body>
+    <div id="metadata-info-block"></div>
+    <h1>LiveServerSetupComplete</h1>
+    <p>
+      <pre>@<a href="/docs/reference/android/com/google/firebase/ai/type/PublicPreviewAPI.html">PublicPreviewAPI</a><br>public final class <a href="/docs/reference/android/com/google/firebase/ai/type/LiveServerSetupComplete.html">LiveServerSetupComplete</a> implements <a href="/docs/reference/android/com/google/firebase/ai/type/LiveServerMessage.html">LiveServerMessage</a></pre>
+    </p>
+    <hr>
+    <p>The model is ready to receive client messages.</p>
+    <h2>Summary</h2>
+    <div class="devsite-table-wrapper">
+      <table class="responsive">
+        <colgroup>
+          <col width="40%">
+          <col>
+        </colgroup>
+        <thead>
+          <tr>
+            <th colspan="100%"><h3>Public constructors</h3></th>
+          </tr>
+        </thead>
+        <tbody class="list">
+          <tr>
+            <td>
+              <div><code><a href="/docs/reference/android/com/google/firebase/ai/type/LiveServerSetupComplete.html#LiveServerSetupComplete()">LiveServerSetupComplete</a>()</code></div>
+            </td>
+          </tr>
+        </tbody>
+      </table>
+    </div>
+    <div class="list">
+      <h2>Public constructors</h2>
+      <div class="api-item"><a name="LiveServerSetupComplete--"></a><a name="liveserversetupcomplete"></a>
+        <h3 class="api-name" id="LiveServerSetupComplete()">LiveServerSetupComplete</h3>
+        <pre class="api-signature no-pretty-print">public&nbsp;<a href="/docs/reference/android/com/google/firebase/ai/type/LiveServerSetupComplete.html#LiveServerSetupComplete()">LiveServerSetupComplete</a>()</pre>
+      </div>
+    </div>
+  </body>
+</html>
+
```
```diff
--- /home/runner/diff/original/firebase-kotlindoc/android/com/google/firebase/ai/type/LiveServerToolCall.html	1970-01-01 00:00:00.000000000 +0000
+++ /home/runner/diff/modified/firebase-kotlindoc/android/com/google/firebase/ai/type/LiveServerToolCall.html	2025-04-30 16:58:48.536286497 +0000
@@ -0,0 +1,76 @@
+<html devsite="true">
+  <head>
+    <title>LiveServerToolCall</title>
+{% setvar book_path %}/_book.yaml{% endsetvar %}
+{% include "docs/reference/android/_reference-head-tags.html" %}
+  </head>
+  <body>
+    <div id="metadata-info-block"></div>
+    <h1>LiveServerToolCall</h1>
+    <p>
+      <pre>@<a href="/docs/reference/android/com/google/firebase/ai/type/PublicPreviewAPI.html">PublicPreviewAPI</a><br>public final class <a href="/docs/reference/android/com/google/firebase/ai/type/LiveServerToolCall.html">LiveServerToolCall</a> implements <a href="/docs/reference/android/com/google/firebase/ai/type/LiveServerMessage.html">LiveServerMessage</a></pre>
+    </p>
+    <hr>
+    <p>Request for the client to execute the provided <code><a href="/docs/reference/android/com/google/firebase/ai/type/LiveServerToolCall.html#functionCalls()">functionCalls</a></code>.</p>
+    <p>The client should return matching <code><a href="/docs/reference/android/com/google/firebase/ai/type/FunctionResponsePart.html">FunctionResponsePart</a></code>, where the <code>id</code> fields correspond to individual <code><a href="/docs/reference/android/com/google/firebase/ai/type/FunctionCallPart.html">FunctionCallPart</a></code>s.</p>
+    <h2>Summary</h2>
+    <div class="devsite-table-wrapper">
+      <table class="responsive">
+        <colgroup>
+          <col width="40%">
+          <col>
+        </colgroup>
+        <thead>
+          <tr>
+            <th colspan="100%"><h3>Public fields</h3></th>
+          </tr>
+        </thead>
+        <tbody class="list">
+          <tr>
+            <td><code>final @<a href="https://developer.android.com/reference/kotlin/androidx/annotation/NonNull.html">NonNull</a> <a href="https://developer.android.com/reference/kotlin/java/util/List.html">List</a>&lt;@<a href="https://developer.android.com/reference/kotlin/androidx/annotation/NonNull.html">NonNull</a> <a href="/docs/reference/android/com/google/firebase/ai/type/FunctionCallPart.html">FunctionCallPart</a>&gt;</code></td>
+            <td>
+              <div><code><a href="/docs/reference/android/com/google/firebase/ai/type/LiveServerToolCall.html#functionCalls()">functionCalls</a></code></div>
+              <p>A list of <code><a href="/docs/reference/android/com/google/firebase/ai/type/FunctionCallPart.html">FunctionCallPart</a></code> to run and return responses for.</p>
+            </td>
+          </tr>
+        </tbody>
+      </table>
+    </div>
+    <div class="devsite-table-wrapper">
+      <table class="responsive">
+        <colgroup>
+          <col width="40%">
+          <col>
+        </colgroup>
+        <thead>
+          <tr>
+            <th colspan="100%"><h3>Public constructors</h3></th>
+          </tr>
+        </thead>
+        <tbody class="list">
+          <tr>
+            <td>
+              <div><code><a href="/docs/reference/android/com/google/firebase/ai/type/LiveServerToolCall.html#LiveServerToolCall(kotlin.collections.List)">LiveServerToolCall</a>(@<a href="https://developer.android.com/reference/kotlin/androidx/annotation/NonNull.html">NonNull</a> <a href="https://developer.android.com/reference/kotlin/java/util/List.html">List</a>&lt;@<a href="https://developer.android.com/reference/kotlin/androidx/annotation/NonNull.html">NonNull</a> <a href="/docs/reference/android/com/google/firebase/ai/type/FunctionCallPart.html">FunctionCallPart</a>&gt;&nbsp;functionCalls)</code></div>
+            </td>
+          </tr>
+        </tbody>
+      </table>
+    </div>
+    <div class="list">
+      <h2>Public fields</h2>
+      <div class="api-item"><a name="getFunctionCalls()"></a><a name="setFunctionCalls()"></a><a name="getFunctionCalls--"></a><a name="setFunctionCalls--"></a>
+        <h3 class="api-name" id="functionCalls()">functionCalls</h3>
+        <pre class="api-signature no-pretty-print">public&nbsp;final&nbsp;@<a href="https://developer.android.com/reference/kotlin/androidx/annotation/NonNull.html">NonNull</a> <a href="https://developer.android.com/reference/kotlin/java/util/List.html">List</a>&lt;@<a href="https://developer.android.com/reference/kotlin/androidx/annotation/NonNull.html">NonNull</a> <a href="/docs/reference/android/com/google/firebase/ai/type/FunctionCallPart.html">FunctionCallPart</a>&gt;&nbsp;<a href="/docs/reference/android/com/google/firebase/ai/type/LiveServerToolCall.html#functionCalls()">functionCalls</a></pre>
+        <p>A list of <code><a href="/docs/reference/android/com/google/firebase/ai/type/FunctionCallPart.html">FunctionCallPart</a></code> to run and return responses for.</p>
+      </div>
+    </div>
+    <div class="list">
+      <h2>Public constructors</h2>
+      <div class="api-item"><a name="LiveServerToolCall-kotlin.collections.List-"></a><a name="liveservertoolcall"></a>
+        <h3 class="api-name" id="LiveServerToolCall(kotlin.collections.List)">LiveServerToolCall</h3>
+        <pre class="api-signature no-pretty-print">public&nbsp;<a href="/docs/reference/android/com/google/firebase/ai/type/LiveServerToolCall.html#LiveServerToolCall(kotlin.collections.List)">LiveServerToolCall</a>(@<a href="https://developer.android.com/reference/kotlin/androidx/annotation/NonNull.html">NonNull</a> <a href="https://developer.android.com/reference/kotlin/java/util/List.html">List</a>&lt;@<a href="https://developer.android.com/reference/kotlin/androidx/annotation/NonNull.html">NonNull</a> <a href="/docs/reference/android/com/google/firebase/ai/type/FunctionCallPart.html">FunctionCallPart</a>&gt;&nbsp;functionCalls)</pre>
+      </div>
+    </div>
+  </body>
+</html>
+
```
```diff
--- /home/runner/diff/original/firebase-kotlindoc/android/com/google/firebase/ai/type/LiveServerToolCallCancellation.html	1970-01-01 00:00:00.000000000 +0000
+++ /home/runner/diff/modified/firebase-kotlindoc/android/com/google/firebase/ai/type/LiveServerToolCallCancellation.html	2025-04-30 16:58:48.541286485 +0000
@@ -0,0 +1,76 @@
+<html devsite="true">
+  <head>
+    <title>LiveServerToolCallCancellation</title>
+{% setvar book_path %}/_book.yaml{% endsetvar %}
+{% include "docs/reference/android/_reference-head-tags.html" %}
+  </head>
+  <body>
+    <div id="metadata-info-block"></div>
+    <h1>LiveServerToolCallCancellation</h1>
+    <p>
+      <pre>@<a href="/docs/reference/android/com/google/firebase/ai/type/PublicPreviewAPI.html">PublicPreviewAPI</a><br>public final class <a href="/docs/reference/android/com/google/firebase/ai/type/LiveServerToolCallCancellation.html">LiveServerToolCallCancellation</a> implements <a href="/docs/reference/android/com/google/firebase/ai/type/LiveServerMessage.html">LiveServerMessage</a></pre>
+    </p>
+    <hr>
+    <p>Notification for the client to cancel a previous function call from <code><a href="/docs/reference/android/com/google/firebase/ai/type/LiveServerToolCall.html">LiveServerToolCall</a></code>.</p>
+    <p>You do not need to send <code><a href="/docs/reference/android/com/google/firebase/ai/type/FunctionResponsePart.html">FunctionResponsePart</a></code>s for the cancelled <code><a href="/docs/reference/android/com/google/firebase/ai/type/FunctionCallPart.html">FunctionCallPart</a></code>s.</p>
+    <h2>Summary</h2>
+    <div class="devsite-table-wrapper">
+      <table class="responsive">
+        <colgroup>
+          <col width="40%">
+          <col>
+        </colgroup>
+        <thead>
+          <tr>
+            <th colspan="100%"><h3>Public fields</h3></th>
+          </tr>
+        </thead>
+        <tbody class="list">
+          <tr>
+            <td><code>final @<a href="https://developer.android.com/reference/kotlin/androidx/annotation/NonNull.html">NonNull</a> <a href="https://developer.android.com/reference/kotlin/java/util/List.html">List</a>&lt;@<a href="https://developer.android.com/reference/kotlin/androidx/annotation/NonNull.html">NonNull</a> <a href="https://developer.android.com/reference/kotlin/java/lang/String.html">String</a>&gt;</code></td>
+            <td>
+              <div><code><a href="/docs/reference/android/com/google/firebase/ai/type/LiveServerToolCallCancellation.html#functionIds()">functionIds</a></code></div>
+              <p>A list of <code>id</code>s matching the <code>id</code> provided in a previous <code><a href="/docs/reference/android/com/google/firebase/ai/type/LiveServerToolCall.html">LiveServerToolCall</a></code>, where only the provided <code>id</code>s should be cancelled.</p>
+            </td>
+          </tr>
+        </tbody>
+      </table>
+    </div>
+    <div class="devsite-table-wrapper">
+      <table class="responsive">
+        <colgroup>
+          <col width="40%">
+          <col>
+        </colgroup>
+        <thead>
+          <tr>
+            <th colspan="100%"><h3>Public constructors</h3></th>
+          </tr>
+        </thead>
+        <tbody class="list">
+          <tr>
+            <td>
+              <div><code><a href="/docs/reference/android/com/google/firebase/ai/type/LiveServerToolCallCancellation.html#LiveServerToolCallCancellation(kotlin.collections.List)">LiveServerToolCallCancellation</a>(@<a href="https://developer.android.com/reference/kotlin/androidx/annotation/NonNull.html">NonNull</a> <a href="https://developer.android.com/reference/kotlin/java/util/List.html">List</a>&lt;@<a href="https://developer.android.com/reference/kotlin/androidx/annotation/NonNull.html">NonNull</a> <a href="https://developer.android.com/reference/kotlin/java/lang/String.html">String</a>&gt;&nbsp;functionIds)</code></div>
+            </td>
+          </tr>
+        </tbody>
+      </table>
+    </div>
+    <div class="list">
+      <h2>Public fields</h2>
+      <div class="api-item"><a name="getFunctionIds()"></a><a name="setFunctionIds()"></a><a name="getFunctionIds--"></a><a name="setFunctionIds--"></a>
+        <h3 class="api-name" id="functionIds()">functionIds</h3>
+        <pre class="api-signature no-pretty-print">public&nbsp;final&nbsp;@<a href="https://developer.android.com/reference/kotlin/androidx/annotation/NonNull.html">NonNull</a> <a href="https://developer.android.com/reference/kotlin/java/util/List.html">List</a>&lt;@<a href="https://developer.android.com/reference/kotlin/androidx/annotation/NonNull.html">NonNull</a> <a href="https://developer.android.com/reference/kotlin/java/lang/String.html">String</a>&gt;&nbsp;<a href="/docs/reference/android/com/google/firebase/ai/type/LiveServerToolCallCancellation.html#functionIds()">functionIds</a></pre>
+        <p>A list of <code>id</code>s matching the <code>id</code> provided in a previous <code><a href="/docs/reference/android/com/google/firebase/ai/type/LiveServerToolCall.html">LiveServerToolCall</a></code>, where only the provided <code>id</code>s should be cancelled.</p>
+      </div>
+    </div>
+    <div class="list">
+      <h2>Public constructors</h2>
+      <div class="api-item"><a name="LiveServerToolCallCancellation-kotlin.collections.List-"></a><a name="liveservertoolcallcancellation"></a>
+        <h3 class="api-name" id="LiveServerToolCallCancellation(kotlin.collections.List)">LiveServerToolCallCancellation</h3>
+        <pre class="api-signature no-pretty-print">public&nbsp;<a href="/docs/reference/android/com/google/firebase/ai/type/LiveServerToolCallCancellation.html#LiveServerToolCallCancellation(kotlin.collections.List)">LiveServerToolCallCancellation</a>(@<a href="https://developer.android.com/reference/kotlin/androidx/annotation/NonNull.html">NonNull</a> <a href="https://developer.android.com/reference/kotlin/java/util/List.html">List</a>&lt;@<a href="https://developer.android.com/reference/kotlin/androidx/annotation/NonNull.html">NonNull</a> <a href="https://developer.android.com/reference/kotlin/java/lang/String.html">String</a>&gt;&nbsp;functionIds)</pre>
+      </div>
+    </div>
+  </body>
+</html>
+
```
```diff
--- /home/runner/diff/original/firebase-kotlindoc/android/com/google/firebase/ai/type/LiveSession.html	2025-04-30 17:02:10.630740530 +0000
+++ /home/runner/diff/modified/firebase-kotlindoc/android/com/google/firebase/ai/type/LiveSession.html	2025-04-30 16:58:48.554286454 +0000
@@ -33,7 +33,7 @@
             </td>
           </tr>
           <tr>
-            <td><code>final @<a href="https://developer.android.com/reference/kotlin/androidx/annotation/NonNull.html">NonNull</a> <a href="https://kotlinlang.org/api/kotlinx.coroutines/kotlinx-coroutines-core/kotlinx.coroutines.flow/-flow/index.html">Flow</a>&lt;@<a href="https://developer.android.com/reference/kotlin/androidx/annotation/NonNull.html">NonNull</a> <a href="/docs/reference/android/com/google/firebase/ai/type/LiveContentResponse.html">LiveContentResponse</a>&gt;</code></td>
+            <td><code>final @<a href="https://developer.android.com/reference/kotlin/androidx/annotation/NonNull.html">NonNull</a> <a href="https://kotlinlang.org/api/kotlinx.coroutines/kotlinx-coroutines-core/kotlinx.coroutines.flow/-flow/index.html">Flow</a>&lt;@<a href="https://developer.android.com/reference/kotlin/androidx/annotation/NonNull.html">NonNull</a> <a href="/docs/reference/android/com/google/firebase/ai/type/LiveServerMessage.html">LiveServerMessage</a>&gt;</code></td>
             <td>
               <div><code><a href="/docs/reference/android/com/google/firebase/ai/type/LiveSession.html#receive()">receive</a>()</code></div>
               <p>Receives responses from the model for both streaming and standard requests.</p>
@@ -120,7 +120,7 @@
       </div>
       <div class="api-item"><a name="receive--"></a><a name="receive"></a>
         <h3 class="api-name" id="receive()">receive</h3>
-        <pre class="api-signature no-pretty-print">public&nbsp;final&nbsp;@<a href="https://developer.android.com/reference/kotlin/androidx/annotation/NonNull.html">NonNull</a> <a href="https://kotlinlang.org/api/kotlinx.coroutines/kotlinx-coroutines-core/kotlinx.coroutines.flow/-flow/index.html">Flow</a>&lt;@<a href="https://developer.android.com/reference/kotlin/androidx/annotation/NonNull.html">NonNull</a> <a href="/docs/reference/android/com/google/firebase/ai/type/LiveContentResponse.html">LiveContentResponse</a>&gt;&nbsp;<a href="/docs/reference/android/com/google/firebase/ai/type/LiveSession.html#receive()">receive</a>()</pre>
+        <pre class="api-signature no-pretty-print">public&nbsp;final&nbsp;@<a href="https://developer.android.com/reference/kotlin/androidx/annotation/NonNull.html">NonNull</a> <a href="https://kotlinlang.org/api/kotlinx.coroutines/kotlinx-coroutines-core/kotlinx.coroutines.flow/-flow/index.html">Flow</a>&lt;@<a href="https://developer.android.com/reference/kotlin/androidx/annotation/NonNull.html">NonNull</a> <a href="/docs/reference/android/com/google/firebase/ai/type/LiveServerMessage.html">LiveServerMessage</a>&gt;&nbsp;<a href="/docs/reference/android/com/google/firebase/ai/type/LiveSession.html#receive()">receive</a>()</pre>
         <p>Receives responses from the model for both streaming and standard requests.</p>
         <p>Call <code><a href="/docs/reference/android/com/google/firebase/ai/type/LiveSession.html#close()">close</a></code> to stop receiving responses from the model.</p>
         <div class="devsite-table-wrapper">
@@ -136,9 +136,9 @@
             </thead>
             <tbody class="list">
               <tr>
-                <td><code>@<a href="https://developer.android.com/reference/kotlin/androidx/annotation/NonNull.html">NonNull</a> <a href="https://kotlinlang.org/api/kotlinx.coroutines/kotlinx-coroutines-core/kotlinx.coroutines.flow/-flow/index.html">Flow</a>&lt;@<a href="https://developer.android.com/reference/kotlin/androidx/annotation/NonNull.html">NonNull</a> <a href="/docs/reference/android/com/google/firebase/ai/type/LiveContentResponse.html">LiveContentResponse</a>&gt;</code></td>
+                <td><code>@<a href="https://developer.android.com/reference/kotlin/androidx/annotation/NonNull.html">NonNull</a> <a href="https://kotlinlang.org/api/kotlinx.coroutines/kotlinx-coroutines-core/kotlinx.coroutines.flow/-flow/index.html">Flow</a>&lt;@<a href="https://developer.android.com/reference/kotlin/androidx/annotation/NonNull.html">NonNull</a> <a href="/docs/reference/android/com/google/firebase/ai/type/LiveServerMessage.html">LiveServerMessage</a>&gt;</code></td>
                 <td>
-                  <p>A <code><a href="https://kotlinlang.org/api/kotlinx.coroutines/kotlinx-coroutines-core/kotlinx.coroutines.flow/-flow/index.html">Flow</a></code> which will emit <code><a href="/docs/reference/android/com/google/firebase/ai/type/LiveContentResponse.html">LiveContentResponse</a></code> from the model.</p>
+                  <p>A <code><a href="https://kotlinlang.org/api/kotlinx.coroutines/kotlinx-coroutines-core/kotlinx.coroutines.flow/-flow/index.html">Flow</a></code> which will emit <code><a href="/docs/reference/android/com/google/firebase/ai/type/LiveServerMessage.html">LiveServerMessage</a></code> from the model.</p>
                 </td>
               </tr>
             </tbody>
```
```diff
--- /home/runner/diff/original/firebase-kotlindoc/android/com/google/firebase/ai/type/package-summary.html	2025-04-30 17:02:10.619740560 +0000
+++ /home/runner/diff/modified/firebase-kotlindoc/android/com/google/firebase/ai/type/package-summary.html	2025-04-30 16:58:48.540286487 +0000
@@ -30,6 +30,12 @@
         </colgroup>
         <tbody class="list">
           <tr>
+            <td><code><a href="/docs/reference/android/com/google/firebase/ai/type/LiveServerMessage.html">LiveServerMessage</a></code></td>
+            <td>
+              <p>Parent interface for responses from the model during live interactions.</p>
+            </td>
+          </tr>
+          <tr>
             <td><code><a href="/docs/reference/android/com/google/firebase/ai/type/Part.html">Part</a></code></td>
             <td>
               <p>Interface representing data sent to and received from requests.</p>
@@ -261,32 +267,44 @@
             </td>
           </tr>
           <tr>
-            <td><code><a href="/docs/reference/android/com/google/firebase/ai/type/LiveContentResponse.html">LiveContentResponse</a></code></td>
+            <td><code><a href="/docs/reference/android/com/google/firebase/ai/type/LiveGenerationConfig.html">LiveGenerationConfig</a></code></td>
             <td>
-              <p>Represents the response from the model for live content updates.</p>
+              <p>Configuration parameters to use for live content generation.</p>
             </td>
           </tr>
           <tr>
-            <td><code><a href="/docs/reference/android/com/google/firebase/ai/type/LiveContentResponse.Status.html">LiveContentResponse.Status</a></code></td>
+            <td><code><a href="/docs/reference/android/com/google/firebase/ai/type/LiveGenerationConfig.Builder.html">LiveGenerationConfig.Builder</a></code></td>
             <td>
-              <p>Represents the status of a <code><a href="/docs/reference/android/com/google/firebase/ai/type/LiveContentResponse.html">LiveContentResponse</a></code>, within a single interaction.</p>
+              <p>Builder for creating a <code><a href="/docs/reference/android/com/google/firebase/ai/type/LiveGenerationConfig.html">LiveGenerationConfig</a></code>.</p>
             </td>
           </tr>
           <tr>
-            <td><code><a href="/docs/reference/android/com/google/firebase/ai/type/LiveGenerationConfig.html">LiveGenerationConfig</a></code></td>
+            <td><code><a href="/docs/reference/android/com/google/firebase/ai/type/LiveGenerationConfigKt.html">LiveGenerationConfigKt</a></code></td>
+            <td></td>
+          </tr>
+          <tr>
+            <td><code><a href="/docs/reference/android/com/google/firebase/ai/type/LiveServerContent.html">LiveServerContent</a></code></td>
             <td>
-              <p>Configuration parameters to use for live content generation.</p>
+              <p>Incremental server update generated by the model in response to client messages.</p>
             </td>
           </tr>
           <tr>
-            <td><code><a href="/docs/reference/android/com/google/firebase/ai/type/LiveGenerationConfig.Builder.html">LiveGenerationConfig.Builder</a></code></td>
+            <td><code><a href="/docs/reference/android/com/google/firebase/ai/type/LiveServerSetupComplete.html">LiveServerSetupComplete</a></code></td>
             <td>
-              <p>Builder for creating a <code><a href="/docs/reference/android/com/google/firebase/ai/type/LiveGenerationConfig.html">LiveGenerationConfig</a></code>.</p>
+              <p>The model is ready to receive client messages.</p>
             </td>
           </tr>
           <tr>
-            <td><code><a href="/docs/reference/android/com/google/firebase/ai/type/LiveGenerationConfigKt.html">LiveGenerationConfigKt</a></code></td>
-            <td></td>
+            <td><code><a href="/docs/reference/android/com/google/firebase/ai/type/LiveServerToolCall.html">LiveServerToolCall</a></code></td>
+            <td>
+              <p>Request for the client to execute the provided <code><a href="/docs/reference/android/com/google/firebase/ai/type/LiveServerToolCall.html#functionCalls()">functionCalls</a></code>.</p>
+            </td>
+          </tr>
+          <tr>
+            <td><code><a href="/docs/reference/android/com/google/firebase/ai/type/LiveServerToolCallCancellation.html">LiveServerToolCallCancellation</a></code></td>
+            <td>
+              <p>Notification for the client to cancel a previous function call from <code><a href="/docs/reference/android/com/google/firebase/ai/type/LiveServerToolCall.html">LiveServerToolCall</a></code>.</p>
+            </td>
           </tr>
           <tr>
             <td><code><a href="/docs/reference/android/com/google/firebase/ai/type/LiveSession.html">LiveSession</a></code></td>
```
```diff
--- /home/runner/diff/original/firebase-kotlindoc/kotlin/client/firebase-ai/_toc.yaml	2025-04-30 17:02:10.553740741 +0000
+++ /home/runner/diff/modified/firebase-kotlindoc/kotlin/client/firebase-ai/_toc.yaml	2025-04-30 16:58:48.497286590 +0000
@@ -42,6 +42,8 @@
   - title: "Interfaces"
 
     section:
+    - title: "LiveServerMessage"
+      path: "/docs/reference/kotlin/com/google/firebase/ai/type/LiveServerMessage.html"
     - title: "Part"
       path: "/docs/reference/kotlin/com/google/firebase/ai/type/Part.html"
 
@@ -116,14 +118,18 @@
       path: "/docs/reference/kotlin/com/google/firebase/ai/type/ImagenSafetySettings.html"
     - title: "InlineDataPart"
       path: "/docs/reference/kotlin/com/google/firebase/ai/type/InlineDataPart.html"
-    - title: "LiveContentResponse"
-      path: "/docs/reference/kotlin/com/google/firebase/ai/type/LiveContentResponse.html"
-    - title: "LiveContentResponse.Status"
-      path: "/docs/reference/kotlin/com/google/firebase/ai/type/LiveContentResponse.Status.html"
     - title: "LiveGenerationConfig"
       path: "/docs/reference/kotlin/com/google/firebase/ai/type/LiveGenerationConfig.html"
     - title: "LiveGenerationConfig.Builder"
       path: "/docs/reference/kotlin/com/google/firebase/ai/type/LiveGenerationConfig.Builder.html"
+    - title: "LiveServerContent"
+      path: "/docs/reference/kotlin/com/google/firebase/ai/type/LiveServerContent.html"
+    - title: "LiveServerSetupComplete"
+      path: "/docs/reference/kotlin/com/google/firebase/ai/type/LiveServerSetupComplete.html"
+    - title: "LiveServerToolCall"
+      path: "/docs/reference/kotlin/com/google/firebase/ai/type/LiveServerToolCall.html"
+    - title: "LiveServerToolCallCancellation"
+      path: "/docs/reference/kotlin/com/google/firebase/ai/type/LiveServerToolCallCancellation.html"
     - title: "LiveSession"
       path: "/docs/reference/kotlin/com/google/firebase/ai/type/LiveSession.html"
     - title: "MediaData"
```
```diff
--- /home/runner/diff/original/firebase-kotlindoc/kotlin/com/google/firebase/ai/java/LiveSessionFutures.html	2025-04-30 17:02:10.557740730 +0000
+++ /home/runner/diff/modified/firebase-kotlindoc/kotlin/com/google/firebase/ai/java/LiveSessionFutures.html	2025-04-30 16:58:48.502286578 +0000
@@ -73,7 +73,7 @@
             </td>
           </tr>
           <tr>
-            <td><code>abstract <a href="/docs/reference/kotlin/org/reactivestreams/Publisher.html">Publisher</a>&lt;<a href="/docs/reference/kotlin/com/google/firebase/ai/type/LiveContentResponse.html">LiveContentResponse</a>&gt;</code></td>
+            <td><code>abstract <a href="/docs/reference/kotlin/org/reactivestreams/Publisher.html">Publisher</a>&lt;<a href="/docs/reference/kotlin/com/google/firebase/ai/type/LiveServerMessage.html">LiveServerMessage</a>&gt;</code></td>
             <td>
               <div><code><a href="/docs/reference/kotlin/com/google/firebase/ai/java/LiveSessionFutures.html#receive()">receive</a>()</code></div>
               <p>Receives responses from the model for both streaming and standard requests.</p>
@@ -195,7 +195,7 @@
       </div>
       <div class="api-item"><a name="receive--"></a><a name="receive"></a>
         <h3 class="api-name" id="receive()">receive</h3>
-        <pre class="api-signature no-pretty-print">abstract&nbsp;fun&nbsp;<a href="/docs/reference/kotlin/com/google/firebase/ai/java/LiveSessionFutures.html#receive()">receive</a>():&nbsp;<a href="/docs/reference/kotlin/org/reactivestreams/Publisher.html">Publisher</a>&lt;<a href="/docs/reference/kotlin/com/google/firebase/ai/type/LiveContentResponse.html">LiveContentResponse</a>&gt;</pre>
+        <pre class="api-signature no-pretty-print">abstract&nbsp;fun&nbsp;<a href="/docs/reference/kotlin/com/google/firebase/ai/java/LiveSessionFutures.html#receive()">receive</a>():&nbsp;<a href="/docs/reference/kotlin/org/reactivestreams/Publisher.html">Publisher</a>&lt;<a href="/docs/reference/kotlin/com/google/firebase/ai/type/LiveServerMessage.html">LiveServerMessage</a>&gt;</pre>
         <p>Receives responses from the model for both streaming and standard requests.</p>
         <p>Call <code><a href="/docs/reference/kotlin/com/google/firebase/ai/java/LiveSessionFutures.html#close()">close</a></code> to stop receiving responses from the model.</p>
         <div class="devsite-table-wrapper">
@@ -211,9 +211,9 @@
             </thead>
             <tbody class="list">
               <tr>
-                <td><code><a href="/docs/reference/kotlin/org/reactivestreams/Publisher.html">Publisher</a>&lt;<a href="/docs/reference/kotlin/com/google/firebase/ai/type/LiveContentResponse.html">LiveContentResponse</a>&gt;</code></td>
+                <td><code><a href="/docs/reference/kotlin/org/reactivestreams/Publisher.html">Publisher</a>&lt;<a href="/docs/reference/kotlin/com/google/firebase/ai/type/LiveServerMessage.html">LiveServerMessage</a>&gt;</code></td>
                 <td>
-                  <p>A <code><a href="/docs/reference/kotlin/org/reactivestreams/Publisher.html">Publisher</a></code> which will emit <code><a href="/docs/reference/kotlin/com/google/firebase/ai/type/LiveContentResponse.html">LiveContentResponse</a></code> from the model.</p>
+                  <p>A <code><a href="/docs/reference/kotlin/org/reactivestreams/Publisher.html">Publisher</a></code> which will emit <code><a href="/docs/reference/kotlin/com/google/firebase/ai/type/LiveServerMessage.html">LiveServerMessage</a></code> from the model.</p>
                 </td>
               </tr>
             </tbody>
```
```diff
--- /home/runner/diff/original/firebase-kotlindoc/kotlin/com/google/firebase/ai/type/FunctionCallPart.html	2025-04-30 17:02:10.586740651 +0000
+++ /home/runner/diff/modified/firebase-kotlindoc/kotlin/com/google/firebase/ai/type/FunctionCallPart.html	2025-04-30 16:58:48.518286540 +0000
@@ -27,7 +27,7 @@
         <tbody class="list">
           <tr>
             <td>
-              <div><code><a href="/docs/reference/kotlin/com/google/firebase/ai/type/FunctionCallPart.html#FunctionCallPart(kotlin.String,kotlin.collections.Map)">FunctionCallPart</a>(name:&nbsp;<a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a>,&nbsp;args:&nbsp;<a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-map/index.html">Map</a>&lt;<a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a>,&nbsp;<a href="/docs/reference/kotlin/kotlinx/serialization/json/JsonElement.html">JsonElement</a>&gt;)</code></div>
+              <div><code><a href="/docs/reference/kotlin/com/google/firebase/ai/type/FunctionCallPart.html#FunctionCallPart(kotlin.String,kotlin.collections.Map,kotlin.String)">FunctionCallPart</a>(name:&nbsp;<a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a>,&nbsp;args:&nbsp;<a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-map/index.html">Map</a>&lt;<a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a>,&nbsp;<a href="/docs/reference/kotlin/kotlinx/serialization/json/JsonElement.html">JsonElement</a>&gt;,&nbsp;id:&nbsp;<a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a>?)</code></div>
             </td>
           </tr>
         </tbody>
@@ -53,6 +53,13 @@
             </td>
           </tr>
           <tr>
+            <td><code><a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a>?</code></td>
+            <td>
+              <div><code><a href="/docs/reference/kotlin/com/google/firebase/ai/type/FunctionCallPart.html#id()">id</a></code></div>
+              <p>Unique id of the function call.</p>
+            </td>
+          </tr>
+          <tr>
             <td><code><a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a></code></td>
             <td>
               <div><code><a href="/docs/reference/kotlin/com/google/firebase/ai/type/FunctionCallPart.html#name()">name</a></code></div>
@@ -64,9 +71,9 @@
     </div>
     <div class="list">
       <h2>Public constructors</h2>
-      <div class="api-item"><a name="FunctionCallPart(kotlin.String, kotlin.collections.Map)"></a><a name="FunctionCallPart-kotlin.String-kotlin.collections.Map-"></a><a name="functioncallpart"></a>
-        <h3 class="api-name" id="FunctionCallPart(kotlin.String,kotlin.collections.Map)">FunctionCallPart</h3>
-        <pre class="api-signature no-pretty-print"><a href="/docs/reference/kotlin/com/google/firebase/ai/type/FunctionCallPart.html#FunctionCallPart(kotlin.String,kotlin.collections.Map)">FunctionCallPart</a>(name:&nbsp;<a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a>,&nbsp;args:&nbsp;<a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-map/index.html">Map</a>&lt;<a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a>,&nbsp;<a href="/docs/reference/kotlin/kotlinx/serialization/json/JsonElement.html">JsonElement</a>&gt;)</pre>
+      <div class="api-item"><a name="FunctionCallPart(kotlin.String, kotlin.collections.Map, kotlin.String)"></a><a name="FunctionCallPart-kotlin.String-kotlin.collections.Map-kotlin.String-"></a><a name="functioncallpart"></a>
+        <h3 class="api-name" id="FunctionCallPart(kotlin.String,kotlin.collections.Map,kotlin.String)">FunctionCallPart</h3>
+        <pre class="api-signature no-pretty-print"><a href="/docs/reference/kotlin/com/google/firebase/ai/type/FunctionCallPart.html#FunctionCallPart(kotlin.String,kotlin.collections.Map,kotlin.String)">FunctionCallPart</a>(<br>&nbsp;&nbsp;&nbsp;&nbsp;name:&nbsp;<a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a>,<br>&nbsp;&nbsp;&nbsp;&nbsp;args:&nbsp;<a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-map/index.html">Map</a>&lt;<a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a>,&nbsp;<a href="/docs/reference/kotlin/kotlinx/serialization/json/JsonElement.html">JsonElement</a>&gt;,<br>&nbsp;&nbsp;&nbsp;&nbsp;id:&nbsp;<a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a>? = null<br>)</pre>
         <div class="devsite-table-wrapper">
           <table class="responsive">
             <colgroup>
@@ -91,6 +98,12 @@
                   <p>the function parameters and values as a <code><a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-map/index.html">Map</a></code></p>
                 </td>
               </tr>
+              <tr>
+                <td><code>id:&nbsp;<a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a>? = null</code></td>
+                <td>
+                  <p>Unique id of the function call. If present, the returned <code><a href="/docs/reference/kotlin/com/google/firebase/ai/type/FunctionResponsePart.html">FunctionResponsePart</a></code> should have a matching <code>id</code> field.</p>
+                </td>
+              </tr>
             </tbody>
           </table>
         </div>
@@ -103,6 +116,11 @@
         <pre class="api-signature no-pretty-print">val&nbsp;<a href="/docs/reference/kotlin/com/google/firebase/ai/type/FunctionCallPart.html#args()">args</a>:&nbsp;<a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-map/index.html">Map</a>&lt;<a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a>,&nbsp;<a href="/docs/reference/kotlin/kotlinx/serialization/json/JsonElement.html">JsonElement</a>&gt;</pre>
         <p>the function parameters and values as a <code><a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-map/index.html">Map</a></code></p>
       </div>
+      <div class="api-item"><a name="getId()"></a><a name="setId()"></a><a name="getId--"></a><a name="setId--"></a>
+        <h3 class="api-name" id="id()">id</h3>
+        <pre class="api-signature no-pretty-print">val&nbsp;<a href="/docs/reference/kotlin/com/google/firebase/ai/type/FunctionCallPart.html#id()">id</a>:&nbsp;<a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a>?</pre>
+        <p>Unique id of the function call. If present, the returned <code><a href="/docs/reference/kotlin/com/google/firebase/ai/type/FunctionResponsePart.html">FunctionResponsePart</a></code> should have a matching <code>id</code> field.</p>
+      </div>
       <div class="api-item"><a name="getName()"></a><a name="setName()"></a><a name="getName--"></a><a name="setName--"></a>
         <h3 class="api-name" id="name()">name</h3>
         <pre class="api-signature no-pretty-print">val&nbsp;<a href="/docs/reference/kotlin/com/google/firebase/ai/type/FunctionCallPart.html#name()">name</a>:&nbsp;<a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a></pre>
```
```diff
--- /home/runner/diff/original/firebase-kotlindoc/kotlin/com/google/firebase/ai/type/FunctionResponsePart.html	2025-04-30 17:02:10.580740667 +0000
+++ /home/runner/diff/modified/firebase-kotlindoc/kotlin/com/google/firebase/ai/type/FunctionResponsePart.html	2025-04-30 16:58:48.514286549 +0000
@@ -27,7 +27,7 @@
         <tbody class="list">
           <tr>
             <td>
-              <div><code><a href="/docs/reference/kotlin/com/google/firebase/ai/type/FunctionResponsePart.html#FunctionResponsePart(kotlin.String,kotlinx.serialization.json.JsonObject)">FunctionResponsePart</a>(name:&nbsp;<a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a>,&nbsp;response:&nbsp;<a href="/docs/reference/kotlin/kotlinx/serialization/json/JsonObject.html">JsonObject</a>)</code></div>
+              <div><code><a href="/docs/reference/kotlin/com/google/firebase/ai/type/FunctionResponsePart.html#FunctionResponsePart(kotlin.String,kotlinx.serialization.json.JsonObject,kotlin.String)">FunctionResponsePart</a>(name:&nbsp;<a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a>,&nbsp;response:&nbsp;<a href="/docs/reference/kotlin/kotlinx/serialization/json/JsonObject.html">JsonObject</a>,&nbsp;id:&nbsp;<a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a>?)</code></div>
             </td>
           </tr>
         </tbody>
@@ -46,17 +46,24 @@
         </thead>
         <tbody class="list">
           <tr>
+            <td><code><a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a>?</code></td>
+            <td>
+              <div><code><a href="/docs/reference/kotlin/com/google/firebase/ai/type/FunctionResponsePart.html#id()">id</a></code></div>
+              <p>Matching <code>id</code> for a <code><a href="/docs/reference/kotlin/com/google/firebase/ai/type/FunctionCallPart.html">FunctionCallPart</a></code>, if one was provided.</p>
+            </td>
+          </tr>
+          <tr>
             <td><code><a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a></code></td>
             <td>
               <div><code><a href="/docs/reference/kotlin/com/google/firebase/ai/type/FunctionResponsePart.html#name()">name</a></code></div>
-              <p>the name of the called function</p>
+              <p>The name of the called function.</p>
             </td>
           </tr>
           <tr>
             <td><code><a href="/docs/reference/kotlin/kotlinx/serialization/json/JsonObject.html">JsonObject</a></code></td>
             <td>
               <div><code><a href="/docs/reference/kotlin/com/google/firebase/ai/type/FunctionResponsePart.html#response()">response</a></code></div>
-              <p>the response produced by the function as a <code><a href="https://developer.android.com/reference/kotlin/org/json/JSONObject.html">JSONObject</a></code></p>
+              <p>The response produced by the function as a <code><a href="https://developer.android.com/reference/kotlin/org/json/JSONObject.html">JSONObject</a></code>.</p>
             </td>
           </tr>
         </tbody>
@@ -64,9 +71,9 @@
     </div>
     <div class="list">
       <h2>Public constructors</h2>
-      <div class="api-item"><a name="FunctionResponsePart(kotlin.String, kotlinx.serialization.json.JsonObject)"></a><a name="FunctionResponsePart-kotlin.String-kotlinx.serialization.json.JsonObject-"></a><a name="functionresponsepart"></a>
-        <h3 class="api-name" id="FunctionResponsePart(kotlin.String,kotlinx.serialization.json.JsonObject)">FunctionResponsePart</h3>
-        <pre class="api-signature no-pretty-print"><a href="/docs/reference/kotlin/com/google/firebase/ai/type/FunctionResponsePart.html#FunctionResponsePart(kotlin.String,kotlinx.serialization.json.JsonObject)">FunctionResponsePart</a>(name:&nbsp;<a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a>,&nbsp;response:&nbsp;<a href="/docs/reference/kotlin/kotlinx/serialization/json/JsonObject.html">JsonObject</a>)</pre>
+      <div class="api-item"><a name="FunctionResponsePart(kotlin.String, kotlinx.serialization.json.JsonObject, kotlin.String)"></a><a name="FunctionResponsePart-kotlin.String-kotlinx.serialization.json.JsonObject-kotlin.String-"></a><a name="functionresponsepart"></a>
+        <h3 class="api-name" id="FunctionResponsePart(kotlin.String,kotlinx.serialization.json.JsonObject,kotlin.String)">FunctionResponsePart</h3>
+        <pre class="api-signature no-pretty-print"><a href="/docs/reference/kotlin/com/google/firebase/ai/type/FunctionResponsePart.html#FunctionResponsePart(kotlin.String,kotlinx.serialization.json.JsonObject,kotlin.String)">FunctionResponsePart</a>(name:&nbsp;<a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a>,&nbsp;response:&nbsp;<a href="/docs/reference/kotlin/kotlinx/serialization/json/JsonObject.html">JsonObject</a>,&nbsp;id:&nbsp;<a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a>? = null)</pre>
         <div class="devsite-table-wrapper">
           <table class="responsive">
             <colgroup>
@@ -82,13 +89,19 @@
               <tr>
                 <td><code>name:&nbsp;<a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a></code></td>
                 <td>
-                  <p>the name of the called function</p>
+                  <p>The name of the called function.</p>
                 </td>
               </tr>
               <tr>
                 <td><code>response:&nbsp;<a href="/docs/reference/kotlin/kotlinx/serialization/json/JsonObject.html">JsonObject</a></code></td>
                 <td>
-                  <p>the response produced by the function as a <code><a href="https://developer.android.com/reference/kotlin/org/json/JSONObject.html">JSONObject</a></code></p>
+                  <p>The response produced by the function as a <code><a href="https://developer.android.com/reference/kotlin/org/json/JSONObject.html">JSONObject</a></code>.</p>
+                </td>
+              </tr>
+              <tr>
+                <td><code>id:&nbsp;<a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a>? = null</code></td>
+                <td>
+                  <p>Matching <code>id</code> for a <code><a href="/docs/reference/kotlin/com/google/firebase/ai/type/FunctionCallPart.html">FunctionCallPart</a></code>, if one was provided.</p>
                 </td>
               </tr>
             </tbody>
@@ -98,15 +111,20 @@
     </div>
     <div class="list">
       <h2>Public properties</h2>
+      <div class="api-item"><a name="getId()"></a><a name="setId()"></a><a name="getId--"></a><a name="setId--"></a>
+        <h3 class="api-name" id="id()">id</h3>
+        <pre class="api-signature no-pretty-print">val&nbsp;<a href="/docs/reference/kotlin/com/google/firebase/ai/type/FunctionResponsePart.html#id()">id</a>:&nbsp;<a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a>?</pre>
+        <p>Matching <code>id</code> for a <code><a href="/docs/reference/kotlin/com/google/firebase/ai/type/FunctionCallPart.html">FunctionCallPart</a></code>, if one was provided.</p>
+      </div>
       <div class="api-item"><a name="getName()"></a><a name="setName()"></a><a name="getName--"></a><a name="setName--"></a>
         <h3 class="api-name" id="name()">name</h3>
         <pre class="api-signature no-pretty-print">val&nbsp;<a href="/docs/reference/kotlin/com/google/firebase/ai/type/FunctionResponsePart.html#name()">name</a>:&nbsp;<a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a></pre>
-        <p>the name of the called function</p>
+        <p>The name of the called function.</p>
       </div>
       <div class="api-item"><a name="getResponse()"></a><a name="setResponse()"></a><a name="getResponse--"></a><a name="setResponse--"></a>
         <h3 class="api-name" id="response()">response</h3>
         <pre class="api-signature no-pretty-print">val&nbsp;<a href="/docs/reference/kotlin/com/google/firebase/ai/type/FunctionResponsePart.html#response()">response</a>:&nbsp;<a href="/docs/reference/kotlin/kotlinx/serialization/json/JsonObject.html">JsonObject</a></pre>
-        <p>the response produced by the function as a <code><a href="https://developer.android.com/reference/kotlin/org/json/JSONObject.html">JSONObject</a></code></p>
+        <p>The response produced by the function as a <code><a href="https://developer.android.com/reference/kotlin/org/json/JSONObject.html">JSONObject</a></code>.</p>
       </div>
     </div>
   </body>
```
```diff
--- /home/runner/diff/original/firebase-kotlindoc/kotlin/com/google/firebase/ai/type/LiveContentResponse.Status.html	2025-04-30 17:02:10.579740670 +0000
+++ /home/runner/diff/modified/firebase-kotlindoc/kotlin/com/google/firebase/ai/type/LiveContentResponse.Status.html	1970-01-01 00:00:00.000000000 +0000
@@ -1,74 +0,0 @@
-<html devsite="true">
-  <head>
-    <title>LiveContentResponse.Status</title>
-{% setvar book_path %}/_book.yaml{% endsetvar %}
-{% include "docs/reference/kotlin/_reference-head-tags.html" %}
-  </head>
-  <body>
-    <div id="metadata-info-block"></div>
-    <h1>LiveContentResponse.Status</h1>
-    <p>
-      <pre>value class <a href="/docs/reference/kotlin/com/google/firebase/ai/type/LiveContentResponse.Status.html">LiveContentResponse.Status</a></pre>
-    </p>
-    <hr>
-    <p>Represents the status of a <code><a href="/docs/reference/kotlin/com/google/firebase/ai/type/LiveContentResponse.html">LiveContentResponse</a></code>, within a single interaction.</p>
-    <h2>Summary</h2>
-    <div class="devsite-table-wrapper">
-      <table class="responsive">
-        <colgroup>
-          <col width="40%">
-          <col>
-        </colgroup>
-        <thead>
-          <tr>
-            <th colspan="100%"><h3>Public companion properties</h3></th>
-          </tr>
-        </thead>
-        <tbody class="list">
-          <tr>
-            <td><code><a href="/docs/reference/kotlin/com/google/firebase/ai/type/LiveContentResponse.Status.html">LiveContentResponse.Status</a></code></td>
-            <td>
-              <div><code><a href="/docs/reference/kotlin/com/google/firebase/ai/type/LiveContentResponse.Status.Companion.html#INTERRUPTED()">INTERRUPTED</a></code></div>
-              <p>The server was interrupted while generating data.</p>
-            </td>
-          </tr>
-          <tr>
-            <td><code><a href="/docs/reference/kotlin/com/google/firebase/ai/type/LiveContentResponse.Status.html">LiveContentResponse.Status</a></code></td>
-            <td>
-              <div><code><a href="/docs/reference/kotlin/com/google/firebase/ai/type/LiveContentResponse.Status.Companion.html#NORMAL()">NORMAL</a></code></div>
-              <p>The server is actively sending data for the current interaction.</p>
-            </td>
-          </tr>
-          <tr>
-            <td><code><a href="/docs/reference/kotlin/com/google/firebase/ai/type/LiveContentResponse.Status.html">LiveContentResponse.Status</a></code></td>
-            <td>
-              <div><code><a href="/docs/reference/kotlin/com/google/firebase/ai/type/LiveContentResponse.Status.Companion.html#TURN_COMPLETE()">TURN_COMPLETE</a></code></div>
-              <p>The model has finished sending data in the current interaction.</p>
-            </td>
-          </tr>
-        </tbody>
-      </table>
-    </div>
-    <div class="list">
-      <h2>Public companion properties</h2>
-      <div class="api-item"><a name="getINTERRUPTED()"></a><a name="setINTERRUPTED()"></a><a name="getINTERRUPTED--"></a><a name="setINTERRUPTED--"></a>
-        <h3 class="api-name" id="INTERRUPTED()">INTERRUPTED</h3>
-        <pre class="api-signature no-pretty-print">val&nbsp;<a href="/docs/reference/kotlin/com/google/firebase/ai/type/LiveContentResponse.Status.Companion.html#INTERRUPTED()">INTERRUPTED</a>:&nbsp;<a href="/docs/reference/kotlin/com/google/firebase/ai/type/LiveContentResponse.Status.html">LiveContentResponse.Status</a></pre>
-        <p>The server was interrupted while generating data.</p>
-        <p>An interruption occurs when the client sends a message while the server is <code><a href="/docs/reference/kotlin/com/google/firebase/ai/type/LiveContentResponse.Status.Companion.html#NORMAL()">actively</a></code> sending data.</p>
-      </div>
-      <div class="api-item"><a name="getNORMAL()"></a><a name="setNORMAL()"></a><a name="getNORMAL--"></a><a name="setNORMAL--"></a>
-        <h3 class="api-name" id="NORMAL()">NORMAL</h3>
-        <pre class="api-signature no-pretty-print">val&nbsp;<a href="/docs/reference/kotlin/com/google/firebase/ai/type/LiveContentResponse.Status.Companion.html#NORMAL()">NORMAL</a>:&nbsp;<a href="/docs/reference/kotlin/com/google/firebase/ai/type/LiveContentResponse.Status.html">LiveContentResponse.Status</a></pre>
-        <p>The server is actively sending data for the current interaction.</p>
-      </div>
-      <div class="api-item"><a name="getTURN_COMPLETE()"></a><a name="setTURN_COMPLETE()"></a><a name="getTURN_COMPLETE--"></a><a name="setTURN_COMPLETE--"></a>
-        <h3 class="api-name" id="TURN_COMPLETE()">TURN_COMPLETE</h3>
-        <pre class="api-signature no-pretty-print">val&nbsp;<a href="/docs/reference/kotlin/com/google/firebase/ai/type/LiveContentResponse.Status.Companion.html#TURN_COMPLETE()">TURN_COMPLETE</a>:&nbsp;<a href="/docs/reference/kotlin/com/google/firebase/ai/type/LiveContentResponse.Status.html">LiveContentResponse.Status</a></pre>
-        <p>The model has finished sending data in the current interaction.</p>
-        <p>Can be set alongside content, signifying that the content is the last in the turn.</p>
-      </div>
-    </div>
-  </body>
-</html>
-
```
```diff
--- /home/runner/diff/original/firebase-kotlindoc/kotlin/com/google/firebase/ai/type/LiveContentResponse.html	2025-04-30 17:02:10.564740711 +0000
+++ /home/runner/diff/modified/firebase-kotlindoc/kotlin/com/google/firebase/ai/type/LiveContentResponse.html	1970-01-01 00:00:00.000000000 +0000
@@ -1,107 +0,0 @@
-<html devsite="true">
-  <head>
-    <title>LiveContentResponse</title>
-{% setvar book_path %}/_book.yaml{% endsetvar %}
-{% include "docs/reference/kotlin/_reference-head-tags.html" %}
-  </head>
-  <body>
-    <div id="metadata-info-block"></div>
-    <h1>LiveContentResponse</h1>
-    <p>
-      <pre>@<a href="/docs/reference/kotlin/com/google/firebase/ai/type/PublicPreviewAPI.html">PublicPreviewAPI</a><br>class <a href="/docs/reference/kotlin/com/google/firebase/ai/type/LiveContentResponse.html">LiveContentResponse</a></pre>
-    </p>
-    <hr>
-    <p>Represents the response from the model for live content updates.</p>
-    <p>This class encapsulates the content data, the status of the response, and any function calls included in the response.</p>
-    <h2>Summary</h2>
-    <div class="devsite-table-wrapper">
-      <table class="responsive">
-        <colgroup>
-          <col width="40%">
-          <col>
-        </colgroup>
-        <thead>
-          <tr>
-            <th colspan="100%"><h3>Nested types</h3></th>
-          </tr>
-        </thead>
-        <tbody class="list">
-          <tr>
-            <td>
-              <div><code>value class <a href="/docs/reference/kotlin/com/google/firebase/ai/type/LiveContentResponse.Status.html">LiveContentResponse.Status</a></code></div>
-              <p>Represents the status of a <code><a href="/docs/reference/kotlin/com/google/firebase/ai/type/LiveContentResponse.html">LiveContentResponse</a></code>, within a single interaction.</p>
-            </td>
-          </tr>
-        </tbody>
-      </table>
-    </div>
-    <div class="devsite-table-wrapper">
-      <table class="responsive">
-        <colgroup>
-          <col width="40%">
-          <col>
-        </colgroup>
-        <thead>
-          <tr>
-            <th colspan="100%"><h3>Public properties</h3></th>
-          </tr>
-        </thead>
-        <tbody class="list">
-          <tr>
-            <td><code><a href="/docs/reference/kotlin/com/google/firebase/ai/type/Content.html">Content</a>?</code></td>
-            <td>
-              <div><code><a href="/docs/reference/kotlin/com/google/firebase/ai/type/LiveContentResponse.html#data()">data</a></code></div>
-              <p>The main content data of the response.</p>
-            </td>
-          </tr>
-          <tr>
-            <td><code><a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-list/index.html">List</a>&lt;<a href="/docs/reference/kotlin/com/google/firebase/ai/type/FunctionCallPart.html">FunctionCallPart</a>&gt;?</code></td>
-            <td>
-              <div><code><a href="/docs/reference/kotlin/com/google/firebase/ai/type/LiveContentResponse.html#functionCalls()">functionCalls</a></code></div>
-              <p>A list of <code><a href="/docs/reference/kotlin/com/google/firebase/ai/type/FunctionCallPart.html">FunctionCallPart</a></code> included in the response, if any.</p>
-            </td>
-          </tr>
-          <tr>
-            <td><code><a href="/docs/reference/kotlin/com/google/firebase/ai/type/LiveContentResponse.Status.html">LiveContentResponse.Status</a></code></td>
-            <td>
-              <div><code><a href="/docs/reference/kotlin/com/google/firebase/ai/type/LiveContentResponse.html#status()">status</a></code></div>
-              <p>The status of the live content response.</p>
-            </td>
-          </tr>
-          <tr>
-            <td><code><a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a>?</code></td>
-            <td>
-              <div><code><a href="/docs/reference/kotlin/com/google/firebase/ai/type/LiveContentResponse.html#text()">text</a></code></div>
-              <p>Convenience field representing all the text parts in the response as a single string, if they exists.</p>
-            </td>
-          </tr>
-        </tbody>
-      </table>
-    </div>
-    <div class="list">
-      <h2>Public properties</h2>
-      <div class="api-item"><a name="getData()"></a><a name="setData()"></a><a name="getData--"></a><a name="setData--"></a>
-        <h3 class="api-name" id="data()">data</h3>
-        <pre class="api-signature no-pretty-print">val&nbsp;<a href="/docs/reference/kotlin/com/google/firebase/ai/type/LiveContentResponse.html#data()">data</a>:&nbsp;<a href="/docs/reference/kotlin/com/google/firebase/ai/type/Content.html">Content</a>?</pre>
-        <p>The main content data of the response. This can be <code>null</code> if there is no content.</p>
-      </div>
-      <div class="api-item"><a name="getFunctionCalls()"></a><a name="setFunctionCalls()"></a><a name="getFunctionCalls--"></a><a name="setFunctionCalls--"></a>
-        <h3 class="api-name" id="functionCalls()">functionCalls</h3>
-        <pre class="api-signature no-pretty-print">val&nbsp;<a href="/docs/reference/kotlin/com/google/firebase/ai/type/LiveContentResponse.html#functionCalls()">functionCalls</a>:&nbsp;<a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-list/index.html">List</a>&lt;<a href="/docs/reference/kotlin/com/google/firebase/ai/type/FunctionCallPart.html">FunctionCallPart</a>&gt;?</pre>
-        <p>A list of <code><a href="/docs/reference/kotlin/com/google/firebase/ai/type/FunctionCallPart.html">FunctionCallPart</a></code> included in the response, if any.</p>
-        <p>This list can be null or empty if no function calls are present.</p>
-      </div>
-      <div class="api-item"><a name="getStatus()"></a><a name="setStatus()"></a><a name="getStatus--"></a><a name="setStatus--"></a>
-        <h3 class="api-name" id="status()">status</h3>
-        <pre class="api-signature no-pretty-print">val&nbsp;<a href="/docs/reference/kotlin/com/google/firebase/ai/type/LiveContentResponse.html#status()">status</a>:&nbsp;<a href="/docs/reference/kotlin/com/google/firebase/ai/type/LiveContentResponse.Status.html">LiveContentResponse.Status</a></pre>
-        <p>The status of the live content response. Indicates whether the response is normal, was interrupted, or signifies the completion of a turn.</p>
-      </div>
-      <div class="api-item"><a name="getText()"></a><a name="setText()"></a><a name="getText--"></a><a name="setText--"></a>
-        <h3 class="api-name" id="text()">text</h3>
-        <pre class="api-signature no-pretty-print">val&nbsp;<a href="/docs/reference/kotlin/com/google/firebase/ai/type/LiveContentResponse.html#text()">text</a>:&nbsp;<a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a>?</pre>
-        <p>Convenience field representing all the text parts in the response as a single string, if they exists.</p>
-      </div>
-    </div>
-  </body>
-</html>
-
```
```diff
--- /home/runner/diff/original/firebase-kotlindoc/kotlin/com/google/firebase/ai/type/LiveServerContent.html	1970-01-01 00:00:00.000000000 +0000
+++ /home/runner/diff/modified/firebase-kotlindoc/kotlin/com/google/firebase/ai/type/LiveServerContent.html	2025-04-30 16:58:48.505286571 +0000
@@ -0,0 +1,137 @@
+<html devsite="true">
+  <head>
+    <title>LiveServerContent</title>
+{% setvar book_path %}/_book.yaml{% endsetvar %}
+{% include "docs/reference/kotlin/_reference-head-tags.html" %}
+  </head>
+  <body>
+    <div id="metadata-info-block"></div>
+    <h1>LiveServerContent</h1>
+    <p>
+      <pre>@<a href="/docs/reference/kotlin/com/google/firebase/ai/type/PublicPreviewAPI.html">PublicPreviewAPI</a><br>class <a href="/docs/reference/kotlin/com/google/firebase/ai/type/LiveServerContent.html">LiveServerContent</a> : <a href="/docs/reference/kotlin/com/google/firebase/ai/type/LiveServerMessage.html">LiveServerMessage</a></pre>
+    </p>
+    <hr>
+    <p>Incremental server update generated by the model in response to client messages.</p>
+    <p>Content is generated as quickly as possible, and not in realtime. You may choose to buffer and play it out in realtime.</p>
+    <h2>Summary</h2>
+    <div class="devsite-table-wrapper">
+      <table class="responsive">
+        <colgroup>
+          <col width="40%">
+          <col>
+        </colgroup>
+        <thead>
+          <tr>
+            <th colspan="100%"><h3>Public constructors</h3></th>
+          </tr>
+        </thead>
+        <tbody class="list">
+          <tr>
+            <td>
+              <div><code><a href="/docs/reference/kotlin/com/google/firebase/ai/type/LiveServerContent.html#LiveServerContent(com.google.firebase.ai.type.Content,kotlin.Boolean,kotlin.Boolean,kotlin.Boolean)">LiveServerContent</a>(<br>&nbsp;&nbsp;&nbsp;&nbsp;content:&nbsp;<a href="/docs/reference/kotlin/com/google/firebase/ai/type/Content.html">Content</a>?,<br>&nbsp;&nbsp;&nbsp;&nbsp;interrupted:&nbsp;<a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html">Boolean</a>,<br>&nbsp;&nbsp;&nbsp;&nbsp;turnComplete:&nbsp;<a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html">Boolean</a>,<br>&nbsp;&nbsp;&nbsp;&nbsp;generationComplete:&nbsp;<a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html">Boolean</a><br>)</code></div>
+            </td>
+          </tr>
+        </tbody>
+      </table>
+    </div>
+    <div class="devsite-table-wrapper">
+      <table class="responsive">
+        <colgroup>
+          <col width="40%">
+          <col>
+        </colgroup>
+        <thead>
+          <tr>
+            <th colspan="100%"><h3>Public properties</h3></th>
+          </tr>
+        </thead>
+        <tbody class="list">
+          <tr>
+            <td><code><a href="/docs/reference/kotlin/com/google/firebase/ai/type/Content.html">Content</a>?</code></td>
+            <td>
+              <div><code><a href="/docs/reference/kotlin/com/google/firebase/ai/type/LiveServerContent.html#content()">content</a></code></div>
+              <p>The content that the model has generated as part of the current conversation with the user.</p>
+            </td>
+          </tr>
+          <tr>
+            <td><code><a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html">Boolean</a></code></td>
+            <td>
+              <div><code><a href="/docs/reference/kotlin/com/google/firebase/ai/type/LiveServerContent.html#generationComplete()">generationComplete</a></code></div>
+              <p>The model has finished <em>generating</em> data for the current turn.</p>
+            </td>
+          </tr>
+          <tr>
+            <td><code><a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html">Boolean</a></code></td>
+            <td>
+              <div><code><a href="/docs/reference/kotlin/com/google/firebase/ai/type/LiveServerContent.html#interrupted()">interrupted</a></code></div>
+              <p>The model was interrupted by the client while generating data.</p>
+            </td>
+          </tr>
+          <tr>
+            <td><code><a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html">Boolean</a></code></td>
+            <td>
+              <div><code><a href="/docs/reference/kotlin/com/google/firebase/ai/type/LiveServerContent.html#turnComplete()">turnComplete</a></code></div>
+              <p>The model has finished sending data in the current turn.</p>
+            </td>
+          </tr>
+        </tbody>
+      </table>
+    </div>
+    <div class="list">
+      <h2>Public constructors</h2>
+      <div class="api-item"><a name="LiveServerContent(com.google.firebase.ai.type.Content, kotlin.Boolean, kotlin.Boolean, kotlin.Boolean)"></a><a name="LiveServerContent-com.google.firebase.ai.type.Content-kotlin.Boolean-kotlin.Boolean-kotlin.Boolean-"></a><a name="liveservercontent"></a>
+        <h3 class="api-name" id="LiveServerContent(com.google.firebase.ai.type.Content,kotlin.Boolean,kotlin.Boolean,kotlin.Boolean)">LiveServerContent</h3>
+        <pre class="api-signature no-pretty-print"><a href="/docs/reference/kotlin/com/google/firebase/ai/type/LiveServerContent.html#LiveServerContent(com.google.firebase.ai.type.Content,kotlin.Boolean,kotlin.Boolean,kotlin.Boolean)">LiveServerContent</a>(<br>&nbsp;&nbsp;&nbsp;&nbsp;content:&nbsp;<a href="/docs/reference/kotlin/com/google/firebase/ai/type/Content.html">Content</a>?,<br>&nbsp;&nbsp;&nbsp;&nbsp;interrupted:&nbsp;<a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html">Boolean</a>,<br>&nbsp;&nbsp;&nbsp;&nbsp;turnComplete:&nbsp;<a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html">Boolean</a>,<br>&nbsp;&nbsp;&nbsp;&nbsp;generationComplete:&nbsp;<a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html">Boolean</a><br>)</pre>
+      </div>
+    </div>
+    <div class="list">
+      <h2>Public properties</h2>
+      <div class="api-item"><a name="getContent()"></a><a name="setContent()"></a><a name="getContent--"></a><a name="setContent--"></a>
+        <h3 class="api-name" id="content()">content</h3>
+        <pre class="api-signature no-pretty-print">val&nbsp;<a href="/docs/reference/kotlin/com/google/firebase/ai/type/LiveServerContent.html#content()">content</a>:&nbsp;<a href="/docs/reference/kotlin/com/google/firebase/ai/type/Content.html">Content</a>?</pre>
+        <p>The content that the model has generated as part of the current conversation with the user.</p>
+        <p>This can be <code>null</code> if there is no content.</p>
+      </div>
+      <div class="api-item"><a name="getGenerationComplete()"></a><a name="setGenerationComplete()"></a><a name="getGenerationComplete--"></a><a name="setGenerationComplete--"></a>
+        <h3 class="api-name" id="generationComplete()">generationComplete</h3>
+        <pre class="api-signature no-pretty-print">val&nbsp;<a href="/docs/reference/kotlin/com/google/firebase/ai/type/LiveServerContent.html#generationComplete()">generationComplete</a>:&nbsp;<a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html">Boolean</a></pre>
+        <p>The model has finished <em>generating</em> data for the current turn.</p>
+        <p>For realtime playback, there will be a delay between when the model finishes generating content and the client has finished playing back the generated content. <code><a href="/docs/reference/kotlin/com/google/firebase/ai/type/LiveServerContent.html#generationComplete()">generationComplete</a></code> indicates that the model is done generating data, while <code><a href="/docs/reference/kotlin/com/google/firebase/ai/type/LiveServerContent.html#turnComplete()">turnComplete</a></code> indicates the model is waiting for additional client messages. Sending a message during this delay may cause an <code><a href="/docs/reference/kotlin/com/google/firebase/ai/type/LiveServerContent.html#interrupted()">interrupted</a></code> message to be sent.</p>
+        <p>Note that if the model was <code><a href="/docs/reference/kotlin/com/google/firebase/ai/type/LiveServerContent.html#interrupted()">interrupted</a></code>, this will not be set. The model will go from <code><a href="/docs/reference/kotlin/com/google/firebase/ai/type/LiveServerContent.html#interrupted()">interrupted</a></code> -><code><a href="/docs/reference/kotlin/com/google/firebase/ai/type/LiveServerContent.html#turnComplete()">turnComplete</a></code>.</p>
+      </div>
+      <div class="api-item"><a name="getInterrupted()"></a><a name="setInterrupted()"></a><a name="getInterrupted--"></a><a name="setInterrupted--"></a>
+        <h3 class="api-name" id="interrupted()">interrupted</h3>
+        <pre class="api-signature no-pretty-print">val&nbsp;<a href="/docs/reference/kotlin/com/google/firebase/ai/type/LiveServerContent.html#interrupted()">interrupted</a>:&nbsp;<a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html">Boolean</a></pre>
+        <p>The model was interrupted by the client while generating data.</p>
+        <p>An interruption occurs when the client sends a message while the model is actively sending data.</p>
+      </div>
+      <div class="api-item"><a name="getTurnComplete()"></a><a name="setTurnComplete()"></a><a name="getTurnComplete--"></a><a name="setTurnComplete--"></a>
+        <h3 class="api-name" id="turnComplete()">turnComplete</h3>
+        <pre class="api-signature no-pretty-print">val&nbsp;<a href="/docs/reference/kotlin/com/google/firebase/ai/type/LiveServerContent.html#turnComplete()">turnComplete</a>:&nbsp;<a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html">Boolean</a></pre>
+        <p>The model has finished sending data in the current turn.</p>
+        <p>Generation will only start in response to additional client messages.</p>
+        <p>Can be set alongside <code><a href="/docs/reference/kotlin/com/google/firebase/ai/type/package-summary.html#content(kotlin.String,kotlin.Function1)">content</a></code>, indicating that the <code><a href="/docs/reference/kotlin/com/google/firebase/ai/type/package-summary.html#content(kotlin.String,kotlin.Function1)">content</a></code> is the last in the turn.</p>
+        <div class="devsite-table-wrapper">
+          <table class="responsive">
+            <colgroup>
+              <col width="40%">
+              <col>
+            </colgroup>
+            <thead>
+              <tr>
+                <th colspan="100%">See also</th>
+              </tr>
+            </thead>
+            <tbody class="list">
+              <tr>
+                <td><code><a href="/docs/reference/kotlin/com/google/firebase/ai/type/LiveServerContent.html#generationComplete()">generationComplete</a></code></td>
+                <td></td>
+              </tr>
+            </tbody>
+          </table>
+        </div>
+      </div>
+    </div>
+  </body>
+</html>
+
```
```diff
--- /home/runner/diff/original/firebase-kotlindoc/kotlin/com/google/firebase/ai/type/LiveServerMessage.html	1970-01-01 00:00:00.000000000 +0000
+++ /home/runner/diff/modified/firebase-kotlindoc/kotlin/com/google/firebase/ai/type/LiveServerMessage.html	2025-04-30 16:58:48.518286540 +0000
@@ -0,0 +1,88 @@
+<html devsite="true">
+  <head>
+    <title>LiveServerMessage</title>
+{% setvar book_path %}/_book.yaml{% endsetvar %}
+{% include "docs/reference/kotlin/_reference-head-tags.html" %}
+  </head>
+  <body>
+    <div id="metadata-info-block"></div>
+    <h1>LiveServerMessage</h1>
+    <p>
+      <pre>@<a href="/docs/reference/kotlin/com/google/firebase/ai/type/PublicPreviewAPI.html">PublicPreviewAPI</a><br>interface <a href="/docs/reference/kotlin/com/google/firebase/ai/type/LiveServerMessage.html">LiveServerMessage</a></pre>
+    </p>
+    <div class="devsite-table-wrapper"><devsite-expandable><span class="expand-control jd-sumtable-subclasses">Known direct subclasses
+        <div class="showalways" id="subclasses-direct"><a href="/docs/reference/kotlin/com/google/firebase/ai/type/LiveServerContent.html">LiveServerContent</a>, <a href="/docs/reference/kotlin/com/google/firebase/ai/type/LiveServerSetupComplete.html">LiveServerSetupComplete</a>, <a href="/docs/reference/kotlin/com/google/firebase/ai/type/LiveServerToolCallCancellation.html">LiveServerToolCallCancellation</a>, <a href="/docs/reference/kotlin/com/google/firebase/ai/type/LiveServerToolCall.html">LiveServerToolCall</a></div>
+      </span>
+      <div id="subclasses-direct-summary">
+        <div class="devsite-table-wrapper">
+          <table class="responsive">
+            <colgroup>
+              <col width="40%">
+              <col>
+            </colgroup>
+            <tbody class="list">
+              <tr>
+                <td><code><a href="/docs/reference/kotlin/com/google/firebase/ai/type/LiveServerContent.html">LiveServerContent</a></code></td>
+                <td>
+                  <p>Incremental server update generated by the model in response to client messages.</p>
+                </td>
+              </tr>
+              <tr>
+                <td><code><a href="/docs/reference/kotlin/com/google/firebase/ai/type/LiveServerSetupComplete.html">LiveServerSetupComplete</a></code></td>
+                <td>
+                  <p>The model is ready to receive client messages.</p>
+                </td>
+              </tr>
+              <tr>
+                <td><code><a href="/docs/reference/kotlin/com/google/firebase/ai/type/LiveServerToolCallCancellation.html">LiveServerToolCallCancellation</a></code></td>
+                <td>
+                  <p>Notification for the client to cancel a previous function call from <code><a href="/docs/reference/kotlin/com/google/firebase/ai/type/LiveServerToolCall.html">LiveServerToolCall</a></code>.</p>
+                </td>
+              </tr>
+              <tr>
+                <td><code><a href="/docs/reference/kotlin/com/google/firebase/ai/type/LiveServerToolCall.html">LiveServerToolCall</a></code></td>
+                <td>
+                  <p>Request for the client to execute the provided <code><a href="/docs/reference/kotlin/com/google/firebase/ai/type/LiveServerToolCall.html#functionCalls()">functionCalls</a></code>.</p>
+                </td>
+              </tr>
+            </tbody>
+          </table>
+        </div>
+      </div>
+</devsite-expandable>    </div>
+    <hr>
+    <p>Parent interface for responses from the model during live interactions.</p>
+    <div class="devsite-table-wrapper">
+      <table class="responsive">
+        <colgroup>
+          <col width="40%">
+          <col>
+        </colgroup>
+        <thead>
+          <tr>
+            <th colspan="100%">See also</th>
+          </tr>
+        </thead>
+        <tbody class="list">
+          <tr>
+            <td><code><a href="/docs/reference/kotlin/com/google/firebase/ai/type/LiveServerContent.html">LiveServerContent</a></code></td>
+            <td></td>
+          </tr>
+          <tr>
+            <td><code><a href="/docs/reference/kotlin/com/google/firebase/ai/type/LiveServerToolCall.html">LiveServerToolCall</a></code></td>
+            <td></td>
+          </tr>
+          <tr>
+            <td><code><a href="/docs/reference/kotlin/com/google/firebase/ai/type/LiveServerToolCallCancellation.html">LiveServerToolCallCancellation</a></code></td>
+            <td></td>
+          </tr>
+          <tr>
+            <td><code><a href="/docs/reference/kotlin/com/google/firebase/ai/type/LiveServerSetupComplete.html">LiveServerSetupComplete</a></code></td>
+            <td></td>
+          </tr>
+        </tbody>
+      </table>
+    </div>
+  </body>
+</html>
+
```
```diff
--- /home/runner/diff/original/firebase-kotlindoc/kotlin/com/google/firebase/ai/type/LiveServerSetupComplete.html	1970-01-01 00:00:00.000000000 +0000
+++ /home/runner/diff/modified/firebase-kotlindoc/kotlin/com/google/firebase/ai/type/LiveServerSetupComplete.html	2025-04-30 16:58:48.515286547 +0000
@@ -0,0 +1,45 @@
+<html devsite="true">
+  <head>
+    <title>LiveServerSetupComplete</title>
+{% setvar book_path %}/_book.yaml{% endsetvar %}
+{% include "docs/reference/kotlin/_reference-head-tags.html" %}
+  </head>
+  <body>
+    <div id="metadata-info-block"></div>
+    <h1>LiveServerSetupComplete</h1>
+    <p>
+      <pre>@<a href="/docs/reference/kotlin/com/google/firebase/ai/type/PublicPreviewAPI.html">PublicPreviewAPI</a><br>class <a href="/docs/reference/kotlin/com/google/firebase/ai/type/LiveServerSetupComplete.html">LiveServerSetupComplete</a> : <a href="/docs/reference/kotlin/com/google/firebase/ai/type/LiveServerMessage.html">LiveServerMessage</a></pre>
+    </p>
+    <hr>
+    <p>The model is ready to receive client messages.</p>
+    <h2>Summary</h2>
+    <div class="devsite-table-wrapper">
+      <table class="responsive">
+        <colgroup>
+          <col width="40%">
+          <col>
+        </colgroup>
+        <thead>
+          <tr>
+            <th colspan="100%"><h3>Public constructors</h3></th>
+          </tr>
+        </thead>
+        <tbody class="list">
+          <tr>
+            <td>
+              <div><code><a href="/docs/reference/kotlin/com/google/firebase/ai/type/LiveServerSetupComplete.html#LiveServerSetupComplete()">LiveServerSetupComplete</a>()</code></div>
+            </td>
+          </tr>
+        </tbody>
+      </table>
+    </div>
+    <div class="list">
+      <h2>Public constructors</h2>
+      <div class="api-item"><a name="LiveServerSetupComplete--"></a><a name="liveserversetupcomplete"></a>
+        <h3 class="api-name" id="LiveServerSetupComplete()">LiveServerSetupComplete</h3>
+        <pre class="api-signature no-pretty-print"><a href="/docs/reference/kotlin/com/google/firebase/ai/type/LiveServerSetupComplete.html#LiveServerSetupComplete()">LiveServerSetupComplete</a>()</pre>
+      </div>
+    </div>
+  </body>
+</html>
+
```
```diff
--- /home/runner/diff/original/firebase-kotlindoc/kotlin/com/google/firebase/ai/type/LiveServerToolCall.html	1970-01-01 00:00:00.000000000 +0000
+++ /home/runner/diff/modified/firebase-kotlindoc/kotlin/com/google/firebase/ai/type/LiveServerToolCall.html	2025-04-30 16:58:48.504286574 +0000
@@ -0,0 +1,76 @@
+<html devsite="true">
+  <head>
+    <title>LiveServerToolCall</title>
+{% setvar book_path %}/_book.yaml{% endsetvar %}
+{% include "docs/reference/kotlin/_reference-head-tags.html" %}
+  </head>
+  <body>
+    <div id="metadata-info-block"></div>
+    <h1>LiveServerToolCall</h1>
+    <p>
+      <pre>@<a href="/docs/reference/kotlin/com/google/firebase/ai/type/PublicPreviewAPI.html">PublicPreviewAPI</a><br>class <a href="/docs/reference/kotlin/com/google/firebase/ai/type/LiveServerToolCall.html">LiveServerToolCall</a> : <a href="/docs/reference/kotlin/com/google/firebase/ai/type/LiveServerMessage.html">LiveServerMessage</a></pre>
+    </p>
+    <hr>
+    <p>Request for the client to execute the provided <code><a href="/docs/reference/kotlin/com/google/firebase/ai/type/LiveServerToolCall.html#functionCalls()">functionCalls</a></code>.</p>
+    <p>The client should return matching <code><a href="/docs/reference/kotlin/com/google/firebase/ai/type/FunctionResponsePart.html">FunctionResponsePart</a></code>, where the <code>id</code> fields correspond to individual <code><a href="/docs/reference/kotlin/com/google/firebase/ai/type/FunctionCallPart.html">FunctionCallPart</a></code>s.</p>
+    <h2>Summary</h2>
+    <div class="devsite-table-wrapper">
+      <table class="responsive">
+        <colgroup>
+          <col width="40%">
+          <col>
+        </colgroup>
+        <thead>
+          <tr>
+            <th colspan="100%"><h3>Public constructors</h3></th>
+          </tr>
+        </thead>
+        <tbody class="list">
+          <tr>
+            <td>
+              <div><code><a href="/docs/reference/kotlin/com/google/firebase/ai/type/LiveServerToolCall.html#LiveServerToolCall(kotlin.collections.List)">LiveServerToolCall</a>(functionCalls:&nbsp;<a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-list/index.html">List</a>&lt;<a href="/docs/reference/kotlin/com/google/firebase/ai/type/FunctionCallPart.html">FunctionCallPart</a>&gt;)</code></div>
+            </td>
+          </tr>
+        </tbody>
+      </table>
+    </div>
+    <div class="devsite-table-wrapper">
+      <table class="responsive">
+        <colgroup>
+          <col width="40%">
+          <col>
+        </colgroup>
+        <thead>
+          <tr>
+            <th colspan="100%"><h3>Public properties</h3></th>
+          </tr>
+        </thead>
+        <tbody class="list">
+          <tr>
+            <td><code><a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-list/index.html">List</a>&lt;<a href="/docs/reference/kotlin/com/google/firebase/ai/type/FunctionCallPart.html">FunctionCallPart</a>&gt;</code></td>
+            <td>
+              <div><code><a href="/docs/reference/kotlin/com/google/firebase/ai/type/LiveServerToolCall.html#functionCalls()">functionCalls</a></code></div>
+              <p>A list of <code><a href="/docs/reference/kotlin/com/google/firebase/ai/type/FunctionCallPart.html">FunctionCallPart</a></code> to run and return responses for.</p>
+            </td>
+          </tr>
+        </tbody>
+      </table>
+    </div>
+    <div class="list">
+      <h2>Public constructors</h2>
+      <div class="api-item"><a name="LiveServerToolCall-kotlin.collections.List-"></a><a name="liveservertoolcall"></a>
+        <h3 class="api-name" id="LiveServerToolCall(kotlin.collections.List)">LiveServerToolCall</h3>
+        <pre class="api-signature no-pretty-print"><a href="/docs/reference/kotlin/com/google/firebase/ai/type/LiveServerToolCall.html#LiveServerToolCall(kotlin.collections.List)">LiveServerToolCall</a>(functionCalls:&nbsp;<a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-list/index.html">List</a>&lt;<a href="/docs/reference/kotlin/com/google/firebase/ai/type/FunctionCallPart.html">FunctionCallPart</a>&gt;)</pre>
+      </div>
+    </div>
+    <div class="list">
+      <h2>Public properties</h2>
+      <div class="api-item"><a name="getFunctionCalls()"></a><a name="setFunctionCalls()"></a><a name="getFunctionCalls--"></a><a name="setFunctionCalls--"></a>
+        <h3 class="api-name" id="functionCalls()">functionCalls</h3>
+        <pre class="api-signature no-pretty-print">val&nbsp;<a href="/docs/reference/kotlin/com/google/firebase/ai/type/LiveServerToolCall.html#functionCalls()">functionCalls</a>:&nbsp;<a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-list/index.html">List</a>&lt;<a href="/docs/reference/kotlin/com/google/firebase/ai/type/FunctionCallPart.html">FunctionCallPart</a>&gt;</pre>
+        <p>A list of <code><a href="/docs/reference/kotlin/com/google/firebase/ai/type/FunctionCallPart.html">FunctionCallPart</a></code> to run and return responses for.</p>
+      </div>
+    </div>
+  </body>
+</html>
+
```
```diff
--- /home/runner/diff/original/firebase-kotlindoc/kotlin/com/google/firebase/ai/type/LiveServerToolCallCancellation.html	1970-01-01 00:00:00.000000000 +0000
+++ /home/runner/diff/modified/firebase-kotlindoc/kotlin/com/google/firebase/ai/type/LiveServerToolCallCancellation.html	2025-04-30 16:58:48.507286566 +0000
@@ -0,0 +1,76 @@
+<html devsite="true">
+  <head>
+    <title>LiveServerToolCallCancellation</title>
+{% setvar book_path %}/_book.yaml{% endsetvar %}
+{% include "docs/reference/kotlin/_reference-head-tags.html" %}
+  </head>
+  <body>
+    <div id="metadata-info-block"></div>
+    <h1>LiveServerToolCallCancellation</h1>
+    <p>
+      <pre>@<a href="/docs/reference/kotlin/com/google/firebase/ai/type/PublicPreviewAPI.html">PublicPreviewAPI</a><br>class <a href="/docs/reference/kotlin/com/google/firebase/ai/type/LiveServerToolCallCancellation.html">LiveServerToolCallCancellation</a> : <a href="/docs/reference/kotlin/com/google/firebase/ai/type/LiveServerMessage.html">LiveServerMessage</a></pre>
+    </p>
+    <hr>
+    <p>Notification for the client to cancel a previous function call from <code><a href="/docs/reference/kotlin/com/google/firebase/ai/type/LiveServerToolCall.html">LiveServerToolCall</a></code>.</p>
+    <p>You do not need to send <code><a href="/docs/reference/kotlin/com/google/firebase/ai/type/FunctionResponsePart.html">FunctionResponsePart</a></code>s for the cancelled <code><a href="/docs/reference/kotlin/com/google/firebase/ai/type/FunctionCallPart.html">FunctionCallPart</a></code>s.</p>
+    <h2>Summary</h2>
+    <div class="devsite-table-wrapper">
+      <table class="responsive">
+        <colgroup>
+          <col width="40%">
+          <col>
+        </colgroup>
+        <thead>
+          <tr>
+            <th colspan="100%"><h3>Public constructors</h3></th>
+          </tr>
+        </thead>
+        <tbody class="list">
+          <tr>
+            <td>
+              <div><code><a href="/docs/reference/kotlin/com/google/firebase/ai/type/LiveServerToolCallCancellation.html#LiveServerToolCallCancellation(kotlin.collections.List)">LiveServerToolCallCancellation</a>(functionIds:&nbsp;<a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-list/index.html">List</a>&lt;<a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a>&gt;)</code></div>
+            </td>
+          </tr>
+        </tbody>
+      </table>
+    </div>
+    <div class="devsite-table-wrapper">
+      <table class="responsive">
+        <colgroup>
+          <col width="40%">
+          <col>
+        </colgroup>
+        <thead>
+          <tr>
+            <th colspan="100%"><h3>Public properties</h3></th>
+          </tr>
+        </thead>
+        <tbody class="list">
+          <tr>
+            <td><code><a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-list/index.html">List</a>&lt;<a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a>&gt;</code></td>
+            <td>
+              <div><code><a href="/docs/reference/kotlin/com/google/firebase/ai/type/LiveServerToolCallCancellation.html#functionIds()">functionIds</a></code></div>
+              <p>A list of <code>id</code>s matching the <code>id</code> provided in a previous <code><a href="/docs/reference/kotlin/com/google/firebase/ai/type/LiveServerToolCall.html">LiveServerToolCall</a></code>, where only the provided <code>id</code>s should be cancelled.</p>
+            </td>
+          </tr>
+        </tbody>
+      </table>
+    </div>
+    <div class="list">
+      <h2>Public constructors</h2>
+      <div class="api-item"><a name="LiveServerToolCallCancellation-kotlin.collections.List-"></a><a name="liveservertoolcallcancellation"></a>
+        <h3 class="api-name" id="LiveServerToolCallCancellation(kotlin.collections.List)">LiveServerToolCallCancellation</h3>
+        <pre class="api-signature no-pretty-print"><a href="/docs/reference/kotlin/com/google/firebase/ai/type/LiveServerToolCallCancellation.html#LiveServerToolCallCancellation(kotlin.collections.List)">LiveServerToolCallCancellation</a>(functionIds:&nbsp;<a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-list/index.html">List</a>&lt;<a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a>&gt;)</pre>
+      </div>
+    </div>
+    <div class="list">
+      <h2>Public properties</h2>
+      <div class="api-item"><a name="getFunctionIds()"></a><a name="setFunctionIds()"></a><a name="getFunctionIds--"></a><a name="setFunctionIds--"></a>
+        <h3 class="api-name" id="functionIds()">functionIds</h3>
+        <pre class="api-signature no-pretty-print">val&nbsp;<a href="/docs/reference/kotlin/com/google/firebase/ai/type/LiveServerToolCallCancellation.html#functionIds()">functionIds</a>:&nbsp;<a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-list/index.html">List</a>&lt;<a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html">String</a>&gt;</pre>
+        <p>A list of <code>id</code>s matching the <code>id</code> provided in a previous <code><a href="/docs/reference/kotlin/com/google/firebase/ai/type/LiveServerToolCall.html">LiveServerToolCall</a></code>, where only the provided <code>id</code>s should be cancelled.</p>
+      </div>
+    </div>
+  </body>
+</html>
+
```
```diff
--- /home/runner/diff/original/firebase-kotlindoc/kotlin/com/google/firebase/ai/type/LiveSession.html	2025-04-30 17:02:10.583740659 +0000
+++ /home/runner/diff/modified/firebase-kotlindoc/kotlin/com/google/firebase/ai/type/LiveSession.html	2025-04-30 16:58:48.515286547 +0000
@@ -33,7 +33,7 @@
             </td>
           </tr>
           <tr>
-            <td><code><a href="https://kotlinlang.org/api/kotlinx.coroutines/kotlinx-coroutines-core/kotlinx.coroutines.flow/-flow/index.html">Flow</a>&lt;<a href="/docs/reference/kotlin/com/google/firebase/ai/type/LiveContentResponse.html">LiveContentResponse</a>&gt;</code></td>
+            <td><code><a href="https://kotlinlang.org/api/kotlinx.coroutines/kotlinx-coroutines-core/kotlinx.coroutines.flow/-flow/index.html">Flow</a>&lt;<a href="/docs/reference/kotlin/com/google/firebase/ai/type/LiveServerMessage.html">LiveServerMessage</a>&gt;</code></td>
             <td>
               <div><code><a href="/docs/reference/kotlin/com/google/firebase/ai/type/LiveSession.html#receive()">receive</a>()</code></div>
               <p>Receives responses from the model for both streaming and standard requests.</p>
@@ -120,7 +120,7 @@
       </div>
       <div class="api-item"><a name="receive--"></a><a name="receive"></a>
         <h3 class="api-name" id="receive()">receive</h3>
-        <pre class="api-signature no-pretty-print">fun&nbsp;<a href="/docs/reference/kotlin/com/google/firebase/ai/type/LiveSession.html#receive()">receive</a>():&nbsp;<a href="https://kotlinlang.org/api/kotlinx.coroutines/kotlinx-coroutines-core/kotlinx.coroutines.flow/-flow/index.html">Flow</a>&lt;<a href="/docs/reference/kotlin/com/google/firebase/ai/type/LiveContentResponse.html">LiveContentResponse</a>&gt;</pre>
+        <pre class="api-signature no-pretty-print">fun&nbsp;<a href="/docs/reference/kotlin/com/google/firebase/ai/type/LiveSession.html#receive()">receive</a>():&nbsp;<a href="https://kotlinlang.org/api/kotlinx.coroutines/kotlinx-coroutines-core/kotlinx.coroutines.flow/-flow/index.html">Flow</a>&lt;<a href="/docs/reference/kotlin/com/google/firebase/ai/type/LiveServerMessage.html">LiveServerMessage</a>&gt;</pre>
         <p>Receives responses from the model for both streaming and standard requests.</p>
         <p>Call <code><a href="/docs/reference/kotlin/com/google/firebase/ai/type/LiveSession.html#close()">close</a></code> to stop receiving responses from the model.</p>
         <div class="devsite-table-wrapper">
@@ -136,9 +136,9 @@
             </thead>
             <tbody class="list">
               <tr>
-                <td><code><a href="https://kotlinlang.org/api/kotlinx.coroutines/kotlinx-coroutines-core/kotlinx.coroutines.flow/-flow/index.html">Flow</a>&lt;<a href="/docs/reference/kotlin/com/google/firebase/ai/type/LiveContentResponse.html">LiveContentResponse</a>&gt;</code></td>
+                <td><code><a href="https://kotlinlang.org/api/kotlinx.coroutines/kotlinx-coroutines-core/kotlinx.coroutines.flow/-flow/index.html">Flow</a>&lt;<a href="/docs/reference/kotlin/com/google/firebase/ai/type/LiveServerMessage.html">LiveServerMessage</a>&gt;</code></td>
                 <td>
-                  <p>A <code><a href="https://kotlinlang.org/api/kotlinx.coroutines/kotlinx-coroutines-core/kotlinx.coroutines.flow/-flow/index.html">Flow</a></code> which will emit <code><a href="/docs/reference/kotlin/com/google/firebase/ai/type/LiveContentResponse.html">LiveContentResponse</a></code> from the model.</p>
+                  <p>A <code><a href="https://kotlinlang.org/api/kotlinx.coroutines/kotlinx-coroutines-core/kotlinx.coroutines.flow/-flow/index.html">Flow</a></code> which will emit <code><a href="/docs/reference/kotlin/com/google/firebase/ai/type/LiveServerMessage.html">LiveServerMessage</a></code> from the model.</p>
                 </td>
               </tr>
             </tbody>
```
```diff
--- /home/runner/diff/original/firebase-kotlindoc/kotlin/com/google/firebase/ai/type/package-summary.html	2025-04-30 17:02:10.566740705 +0000
+++ /home/runner/diff/modified/firebase-kotlindoc/kotlin/com/google/firebase/ai/type/package-summary.html	2025-04-30 16:58:48.506286569 +0000
@@ -15,6 +15,12 @@
         </colgroup>
         <tbody class="list">
           <tr>
+            <td><code><a href="/docs/reference/kotlin/com/google/firebase/ai/type/LiveServerMessage.html">LiveServerMessage</a></code></td>
+            <td>
+              <p>Parent interface for responses from the model during live interactions.</p>
+            </td>
+          </tr>
+          <tr>
             <td><code><a href="/docs/reference/kotlin/com/google/firebase/ai/type/Part.html">Part</a></code></td>
             <td>
               <p>Interface representing data sent to and received from requests.</p>
@@ -234,27 +240,39 @@
             </td>
           </tr>
           <tr>
-            <td><code><a href="/docs/reference/kotlin/com/google/firebase/ai/type/LiveContentResponse.html">LiveContentResponse</a></code></td>
+            <td><code><a href="/docs/reference/kotlin/com/google/firebase/ai/type/LiveGenerationConfig.html">LiveGenerationConfig</a></code></td>
             <td>
-              <p>Represents the response from the model for live content updates.</p>
+              <p>Configuration parameters to use for live content generation.</p>
             </td>
           </tr>
           <tr>
-            <td><code><a href="/docs/reference/kotlin/com/google/firebase/ai/type/LiveContentResponse.Status.html">LiveContentResponse.Status</a></code></td>
+            <td><code><a href="/docs/reference/kotlin/com/google/firebase/ai/type/LiveGenerationConfig.Builder.html">LiveGenerationConfig.Builder</a></code></td>
             <td>
-              <p>Represents the status of a <code><a href="/docs/reference/kotlin/com/google/firebase/ai/type/LiveContentResponse.html">LiveContentResponse</a></code>, within a single interaction.</p>
+              <p>Builder for creating a <code><a href="/docs/reference/kotlin/com/google/firebase/ai/type/LiveGenerationConfig.html">LiveGenerationConfig</a></code>.</p>
             </td>
           </tr>
           <tr>
-            <td><code><a href="/docs/reference/kotlin/com/google/firebase/ai/type/LiveGenerationConfig.html">LiveGenerationConfig</a></code></td>
+            <td><code><a href="/docs/reference/kotlin/com/google/firebase/ai/type/LiveServerContent.html">LiveServerContent</a></code></td>
             <td>
-              <p>Configuration parameters to use for live content generation.</p>
+              <p>Incremental server update generated by the model in response to client messages.</p>
             </td>
           </tr>
           <tr>
-            <td><code><a href="/docs/reference/kotlin/com/google/firebase/ai/type/LiveGenerationConfig.Builder.html">LiveGenerationConfig.Builder</a></code></td>
+            <td><code><a href="/docs/reference/kotlin/com/google/firebase/ai/type/LiveServerSetupComplete.html">LiveServerSetupComplete</a></code></td>
             <td>
-              <p>Builder for creating a <code><a href="/docs/reference/kotlin/com/google/firebase/ai/type/LiveGenerationConfig.html">LiveGenerationConfig</a></code>.</p>
+              <p>The model is ready to receive client messages.</p>
+            </td>
+          </tr>
+          <tr>
+            <td><code><a href="/docs/reference/kotlin/com/google/firebase/ai/type/LiveServerToolCall.html">LiveServerToolCall</a></code></td>
+            <td>
+              <p>Request for the client to execute the provided <code><a href="/docs/reference/kotlin/com/google/firebase/ai/type/LiveServerToolCall.html#functionCalls()">functionCalls</a></code>.</p>
+            </td>
+          </tr>
+          <tr>
+            <td><code><a href="/docs/reference/kotlin/com/google/firebase/ai/type/LiveServerToolCallCancellation.html">LiveServerToolCallCancellation</a></code></td>
+            <td>
+              <p>Notification for the client to cancel a previous function call from <code><a href="/docs/reference/kotlin/com/google/firebase/ai/type/LiveServerToolCall.html">LiveServerToolCall</a></code>.</p>
             </td>
           </tr>
           <tr>
```
</details>

author_association: CONTRIBUTOR
user: login: github-actions[bot]
created_at: 2025-04-24T21:04:43Z
body: ### Vertex AI Mock Responses Check :warning:
A newer major version of the mock responses for Vertex AI unit tests is available. [update_responses.sh](https://github.com/firebase/firebase-android-sdk/blob/main/firebase-vertexai/update_responses.sh) should be updated to clone the latest version of the responses: `v10.0`
author_association: CONTRIBUTOR
user: login: google-oss-bot
created_at: 2025-04-24T21:08:31Z
body: <!DOCTYPE html>
<html><body><h1>Coverage Report <sup><a href="#63NpY7tkvJ">1</a></sup></h1><h3>Affected Products</h3>No changes between base commit (7b7e11e) and merge commit (bfd745f).<h3>Test Logs</h3><ul><li>Merge (bfd745f): <a href="https://github.com/firebase/firebase-android-sdk/actions/runs/14759958140">https://github.com/firebase/firebase-android-sdk/actions/runs/14759958140</a></li></ul><h1></h1><footer><ol><li id="63NpY7tkvJ"><a href="https://storage.googleapis.com/firebase-sdk-metric-reports/63NpY7tkvJ.html">https://storage.googleapis.com/firebase-sdk-metric-reports/63NpY7tkvJ.html</a></li></ol></footer></body></html>
author_association: COLLABORATOR
user: login: github-actions[bot]
created_at: 2025-04-24T21:10:47Z
body: ## Test Results
 22 files   -  18   22 suites   - 18   14s ⏱️ -14s
 98 tests  -  86   98 ✅  -  86  0 💤 ±0  0 ❌ ±0 
196 runs   - 172  196 ✅  - 172  0 💤 ±0  0 ❌ ±0 

Results for commit f1c15d83. ± Comparison against base commit 7b7e11ea.

<details>
  <summary>This pull request <b>removes</b> 86 tests.</summary>

```
com.google.firebase.vertexai.GenerativeModelTesting ‑ exception thrown when using invalid location
com.google.firebase.vertexai.GenerativeModelTesting ‑ system calling in request
com.google.firebase.vertexai.SchemaTests ‑ basic schema declaration
com.google.firebase.vertexai.SchemaTests ‑ full schema declaration
com.google.firebase.vertexai.SerializationTests ‑ test Candidate serialization as Json
com.google.firebase.vertexai.SerializationTests ‑ test GenerateContentResponse serialization as Json
com.google.firebase.vertexai.SerializationTests ‑ test Schema serialization as Json
com.google.firebase.vertexai.SerializationTests ‑ test countTokensResponse serialization as Json
com.google.firebase.vertexai.SerializationTests ‑ test modalityTokenCount serialization as Json
com.google.firebase.vertexai.VertexAIStreamingSnapshotTests ‑ citation parsed correctly
…
```
</details>

[test-results]:data:application/gzip;base64,H4sIAF5XEmgC/13Myw6CMBCF4VchXbvoFGwYX8bQoZM0AjW9rIzvbiEg1eX3n+S8BLvJRnFrlLo0ImaXTo05DMn5pRi64jKldcT+wD1mor/ycM9S5Dfw4KafYEPwYS8hL+sjoN5xPNblfNxcHW6u/8jPs0sFgoHgOvYtKm1IK0kaWmsRJTNIpM6QAR6sEe8PpmlyawQBAAA=

:recycle: This comment has been updated with latest results.
author_association: CONTRIBUTOR
user: login: google-oss-bot
created_at: 2025-04-24T21:12:02Z
body: The public api surface has changed for the subproject firebase-vertexai:
error: Method com.google.firebase.vertexai.java.LiveSessionFutures.receive has changed return type from org.reactivestreams.Publisher<com.google.firebase.vertexai.type.LiveContentResponse> to org.reactivestreams.Publisher<com.google.firebase.vertexai.type.LiveServerMessage> [ChangedType]
error: Added constructor com.google.firebase.vertexai.type.FunctionCallPart(String,java.util.Map<java.lang.String,? extends kotlinx.serialization.json.JsonElement>,String) [AddedMethod]
error: Added method com.google.firebase.vertexai.type.FunctionCallPart.getId() [AddedMethod]
error: Added constructor com.google.firebase.vertexai.type.FunctionResponsePart(String,kotlinx.serialization.json.JsonObject,String) [AddedMethod]
error: Added method com.google.firebase.vertexai.type.FunctionResponsePart.getId() [AddedMethod]
error: Removed class com.google.firebase.vertexai.type.LiveContentResponse [RemovedClass]
error: Added class com.google.firebase.vertexai.type.LiveServerContent [AddedClass]
error: Added class com.google.firebase.vertexai.type.LiveServerSetupComplete [AddedClass]
error: Added class com.google.firebase.vertexai.type.LiveServerToolCall [AddedClass]
error: Added class com.google.firebase.vertexai.type.LiveServerToolCallCancellation [AddedClass]
error: Method com.google.firebase.vertexai.type.LiveSession.receive has changed return type from kotlinx.coroutines.flow.Flow<com.google.firebase.vertexai.type.LiveContentResponse> to kotlinx.coroutines.flow.Flow<com.google.firebase.vertexai.type.LiveServerMessage> [ChangedType]


Please update the api.txt files for the subprojects being affected by this change by running ./gradlew ${subproject}:generateApiTxtFile. Also perform a major/minor bump accordingly.

author_association: COLLABORATOR
user: login: google-oss-bot
created_at: 2025-04-24T21:12:39Z
body: The public api surface has changed for the subproject firebase-vertexai:
error: Method com.google.firebase.vertexai.java.LiveSessionFutures.receive has changed return type from org.reactivestreams.Publisher<com.google.firebase.vertexai.type.LiveContentResponse> to org.reactivestreams.Publisher<com.google.firebase.vertexai.type.LiveServerMessage> [ChangedType]
error: Added constructor com.google.firebase.vertexai.type.FunctionCallPart(String,java.util.Map<java.lang.String,? extends kotlinx.serialization.json.JsonElement>,String) [AddedMethod]
error: Added method com.google.firebase.vertexai.type.FunctionCallPart.getId() [AddedMethod]
error: Added constructor com.google.firebase.vertexai.type.FunctionResponsePart(String,kotlinx.serialization.json.JsonObject,String) [AddedMethod]
error: Added method com.google.firebase.vertexai.type.FunctionResponsePart.getId() [AddedMethod]
error: Removed class com.google.firebase.vertexai.type.LiveContentResponse [RemovedClass]
error: Added class com.google.firebase.vertexai.type.LiveServerContent [AddedClass]
error: Added class com.google.firebase.vertexai.type.LiveServerSetupComplete [AddedClass]
error: Added class com.google.firebase.vertexai.type.LiveServerToolCall [AddedClass]
error: Added class com.google.firebase.vertexai.type.LiveServerToolCallCancellation [AddedClass]
error: Method com.google.firebase.vertexai.type.LiveSession.receive has changed return type from kotlinx.coroutines.flow.Flow<com.google.firebase.vertexai.type.LiveContentResponse> to kotlinx.coroutines.flow.Flow<com.google.firebase.vertexai.type.LiveServerMessage> [ChangedType]


Please update the api.txt files for the subprojects being affected by this change by running ./gradlew ${subproject}:generateApiTxtFile. Also perform a major/minor bump accordingly.

author_association: COLLABORATOR
user: login: google-oss-bot
created_at: 2025-04-24T21:20:21Z
body: <!DOCTYPE html>
<html><body><h1>Size Report <sup><a href="#ddqmoWil4h">1</a></sup></h1><h3>Affected Products</h3><ul><li><h4><code>firebase-ai</code></h4><table><thead><tr><th align="center">Type</th><th align="center">Base (7b7e11e)</th><th align="center">Merge (bfd745f)</th><th align="center">Diff</th></tr></thead><tbody><tr><td align="left">aar</td><td align="center">804 kB</td><td align="center">816 kB</td><td align="center">+12.1 kB (+1.5%)</td></tr><tr><td align="left">apk (aggressive)</td><td align="center">1.54 MB</td><td align="center">1.55 MB</td><td align="center">+5.16 kB (+0.3%)</td></tr><tr><td align="left">apk (release)</td><td align="center">9.51 MB</td><td align="center">9.51 MB</td><td align="center">+6.47 kB (+0.1%)</td></tr></tbody></table></li></ul><h3>Test Logs</h3><ul><li>Base (7b7e11e): <a href="https://github.com/firebase/firebase-android-sdk/actions/runs/14759580402">https://github.com/firebase/firebase-android-sdk/actions/runs/14759580402</a></li><li>Merge (bfd745f): <a href="https://github.com/firebase/firebase-android-sdk/actions/runs/14759958140">https://github.com/firebase/firebase-android-sdk/actions/runs/14759958140</a></li></ul><h1></h1><footer><ol><li id="ddqmoWil4h"><a href="https://storage.googleapis.com/firebase-sdk-metric-reports/ddqmoWil4h.html">https://storage.googleapis.com/firebase-sdk-metric-reports/ddqmoWil4h.html</a></li></ol></footer></body></html>
author_association: COLLABORATOR
user: login: rlazo
created_at: 2025-04-25T14:34:10Z
body: Be aware of https://github.com/firebase/firebase-android-sdk/pull/6907 and the need to make the changes to the new files

author_association: CONTRIBUTOR
user: login: daymxn
created_at: 2025-04-29T16:32:06Z
body: > Be aware of #6907 and the need to make the changes to the new files

I've updated the PR now that it's in
author_association: MEMBER