Expose turnComplete control for ADK Java live content sends
Maintainers usually reply within 1 day
Assessment
This issue has not been assessed yet.
Description
🔴 Required Information
Is your feature request related to a specific problem?
Yes. ADK Java live sessions currently expose LiveRequestQueue.content(Content), but there is no public way to control whether that content completes the current live turn.
For normal user input, completing the turn is correct. But some live applications need to append content to an already-open live session without immediately asking the model to
generate.
The lower-level GenAI Java live API supports turnComplete, but ADK Java does not currently surface it through LiveRequestQueue, LiveRequest, or BaseLlmConnection.
Describe the Solution You'd Like
Please expose an additive API for live content sends that allows callers to set turnComplete.
Example:
requestQueue.content(content, false);
Existing behavior should remain unchanged:
requestQueue.content(content); // defaults to current behavior
### Impact on your work
We are building long-running Gemini Live / ADK Java sessions where backend services may need to update live session context without treating the update as a normal user transcript turn.
Without this API, applications must work around the behavior by suppressing model output after certain content sends. That is less precise because the model may still be asked to
generate even when the caller only wanted to append content.
This is needed for current live-session work, but there is no hard public launch deadline.
### Willingness to contribute
Yes. I am willing to submit a PR if the maintainers agree with the API direction.
———
## 🟡 Recommended Information
### Describe Alternatives You've Considered
1. Application-level suppression
Track when special content is enqueued, suppress model output until the next turnComplete=true, and avoid transcript persistence for that output window.
This works as a workaround, but ADK still asks the model to generate.
2. Custom BaseLlmConnection
Implement a custom Gemini live connection that sends LiveSendClientContentParameters.turnComplete(false).
This would duplicate ADK internals and increase maintenance risk.
3. Reflection or private API access
Not recommended.
### Proposed API / Implementation
One possible additive API:
public final class LiveRequestQueue {
public void content(Content content) {
processor.onNext(LiveRequest.builder().content(content).build());
}
public void content(Content content, boolean turnComplete) {
processor.onNext(
LiveRequest.builder()
.content(content)
.turnComplete(turnComplete)
.build());
}
}
LiveRequest could carry:
public abstract Optional<Boolean> turnComplete();
The live send loop could dispatch:
connection.sendContent(
request.content().get(),
request.turnComplete().orElse(true));
BaseLlmConnection could preserve compatibility with a default method:
default Completable sendContent(Content content, boolean turnComplete) {
return sendContent(content);
}
Then GeminiLlmConnection can pass the flag through:
LiveSendClientContentParameters.builder()
.turns(ImmutableList.of(content))
.turnComplete(turnComplete)
.build();
### Additional Context
This should be backward compatible if LiveRequestQueue.content(Content) continues to behave exactly as it does today, and only callers using the new overload opt into explicit turn-
completion behavior.
The lower-level live API already supports the concept; this request is mainly about exposing that capability through ADK Java's live queue abstraction.
- Dominant language
- Java
- Stars
- 1.7k
- Forks
- 431
- Avg merge
- 3d 2h
- Merged PRs (30d)
- 46
Getting set up
Starts the project's dev container in your browser, under your own GitHub account.
- No Dockerfile or Docker Compose file
- Has a pull request template
- Read the contributing guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from google/adk-java
-
GeminiUtil placeholder user turn ("Continue output. DO NOT look at this line ...") is flagged by prompt injection filtersPossibly taken @innoprej claimed this today. Open
Difficulty 2/5 1-3 hours Newbie friendliness 76/100
Maintainers usually reply within 1 day
-
[spring-ai] ToolConverter silently drops enum and items from tool parameter schemasPossibly taken @hirematha claimed this 3 days ago. Openneeds review
Difficulty 2/5 1-3 hours Newbie friendliness 76/100
google/adk-java#1609 · 2 comments · 1 assignee ·
Maintainers usually reply within 1 day
-
[spring-ai] Streaming responses ending with CJK punctuation (。!?) are misclassified as partial and never persisted to the sessionPossibly taken @hirematha claimed this 3 days ago. Openwaiting on reporter
Difficulty 2/5 1-3 hours Newbie friendliness 84/100
google/adk-java#1608 · 2 comments · 1 assignee ·
Maintainers usually reply within 1 day
-
[core] Client disconnects don't cancel the model stream (per-step flow is cached) — and there is no public API to cancel an in-flight runPossibly taken @hemasekhar-p claimed this 2 days ago. Openneeds review
google/adk-java#1618 · 6 comments · 1 assignee ·
Maintainers usually reply within 1 day
-
[spring-ai] Bridge drops reasoning_content (thinking) — surface it as partial events and/or persist itPossibly taken @hemasekhar-p claimed this 2 days ago. Openneeds review
google/adk-java#1616 · 1 comment · 1 assignee ·
Maintainers usually reply within 1 day
Similar issues
-
waiting-for-triage
Difficulty 1/5 Under an hour Newbie friendliness 72/100
spring-cloud/spring-cloud-openfeign#1443 ·
Maintainers usually reply within 1 day
-
Difficulty 1/5 1-3 hours Newbie friendliness 84/100
ADORSYS-GIS/keycloak-oid4vp-plugin#221 ·
Maintainers usually reply within 2 days
-
status: team-only type: dependency-upgrade
Difficulty 2/5 1-3 hours Newbie friendliness 65/100
spring-projects/spring-boot#52099 ·
Maintainers usually reply within 1 day
-
Difficulty 2/5 1-3 hours Newbie friendliness 67/100
tchiotludo/akhq#3307 · 1 reaction ·
Maintainers usually reply within 1 day
-
Difficulty 2/5 1-3 hours Newbie friendliness 75/100
objectionary/jeo-maven-plugin#1885 ·
Maintainers usually reply within 4 days