Skip to content

feat(core): implement Runner.runLive and LlmAgent live flow#445

Open
tSte wants to merge 1 commit into
google:mainfrom
tSte:feat/run-live-flow
Open

feat(core): implement Runner.runLive and LlmAgent live flow#445
tSte wants to merge 1 commit into
google:mainfrom
tSte:feat/run-live-flow

Conversation

@tSte

@tSte tSte commented Jun 19, 2026

Copy link
Copy Markdown

Implements the bidirectional (live) orchestration that was left as a TODO after #409 (which added only the GeminiLlmConnection layer): runner.ts carried // TODO b/425992518: Implement runLive and LlmAgent.runLiveFlow threw not implemented.

  • Runner.runLive: opens the invocation, runs the before/on-event/after-run plugin hooks, drives agent.runLive, and persists events while skipping raw inline-audio blobs (shouldAppendLiveEvent).
  • LlmAgent.runLiveFlow: preprocess (same processors as runAsync) -> connect ->
    parallel send loop + receive loop -> tool execution -> sub-agent transfer. Reconnects transparently on goAway / recoverable drops when a session resumption handle is available, skipping history replay on resume.
  • InvocationContext.liveRequestQueue / liveSessionResumptionHandle.
  • LiveRequestQueue.get(abortSignal) to release a parked read on teardown.
  • RunConfig.contextWindowCompression, forwarded to the live connect config.
  • Gemini.connect: model-version-aware live API version routing and stripping of the Vertex-only sessionResumption.transparent flag on the AI Studio backend.

Adds core/test/runner/run_live_test.ts (16 tests covering realtime/audio, transcription persistence, tool calls, resumption capture, goAway reconnect, externally supplied handles, activity signals, sub-agent transfer) and liveApiVersion / transparent-strip coverage in google_llm_test.ts.

Please ensure you have read the contribution guide before creating a pull request.

Link to Issue or Description of Change

1. Link to an existing issue (if applicable):

  • Closes: #issue_number
  • Related: #issue_number

2. Or, if no issue exists, describe the change:

If applicable, please follow the issue templates to provide as much detail as
possible.

Problem:
A clear and concise description of what the problem is.

Solution:
A clear and concise description of what you want to happen and why you choose
this solution.

Testing Plan

Please describe the tests that you ran to verify your changes. This is required
for all PRs that are not small documentation or typo fixes.

Unit Tests:

  • I have added or updated unit tests for my change.
  • All unit tests pass locally.

Please include a summary of passed npm test results.

Manual End-to-End (E2E) Tests:

Please provide instructions on how to manually test your changes, including any
necessary setup or configuration. Please provide logs or screenshots to help
reviewers better understand the fix.

Checklist

  • I have read the CONTRIBUTING.md document.
  • I have performed a self-review of my own code.
  • I have commented my code, particularly in hard-to-understand areas.
  • I have added tests that prove my fix is effective or that my feature works.
  • New and existing unit tests pass locally with my changes.
  • I have manually tested my changes end-to-end.
  • Any dependent changes have been merged and published in downstream modules.

Additional context

Add any other context or screenshots about the feature request here.

@tSte tSte mentioned this pull request Jun 19, 2026
Implements the bidirectional (live) orchestration that was left as a TODO
after google#409 (which added only the GeminiLlmConnection layer): runner.ts
carried `// TODO b/425992518: Implement runLive` and LlmAgent.runLiveFlow
threw `not implemented`.

- Runner.runLive: opens the invocation, runs the before/on-event/after-run
  plugin hooks, drives agent.runLive, and persists events while skipping raw
  inline-audio blobs (shouldAppendLiveEvent).
- LlmAgent.runLiveFlow: preprocess (same processors as runAsync) -> connect ->
  parallel send loop + receive loop -> tool execution -> sub-agent transfer.
  Reconnects transparently on goAway / recoverable drops when a session
  resumption handle is available, skipping history replay on resume.
- InvocationContext.liveRequestQueue / liveSessionResumptionHandle.
- LiveRequestQueue.get(abortSignal) to release a parked read on teardown.
- RunConfig.contextWindowCompression, forwarded to the live connect config.
- Gemini.connect: model-version-aware live API version routing and stripping
  of the Vertex-only sessionResumption.transparent flag on the AI Studio
  backend.

Adds core/test/runner/run_live_test.ts (16 tests covering realtime/audio,
transcription persistence, tool calls, resumption capture, goAway reconnect,
externally supplied handles, activity signals, sub-agent transfer) and
liveApiVersion / transparent-strip coverage in google_llm_test.ts.
@tSte tSte force-pushed the feat/run-live-flow branch from 69ef687 to 95f92f2 Compare June 19, 2026 16:01
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant