pub struct LiveSessionBuilder { /* private fields */ }Expand description
Builder for a callback-driven Live session.
Combines SessionConfig, EventCallbacks, tool dispatching, extractors,
computed state, phase machines, watchers, and temporal patterns into a
single connection setup. Call connect() to establish
the WebSocket connection and start the three-lane event processor.
For ergonomic usage, prefer the L2 Live builder from gemini-adk-fluent-rs
which wraps this with a fluent API.
Implementations§
Source§impl LiveSessionBuilder
impl LiveSessionBuilder
Sourcepub fn new(config: SessionConfig) -> Self
pub fn new(config: SessionConfig) -> Self
Create a new builder with the given session config.
Sourcepub fn redaction(self, redactor: TranscriptRedactor) -> Self
pub fn redaction(self, redactor: TranscriptRedactor) -> Self
Install transcript redaction — see
redaction::TranscriptRedactor.
Applied at the event router, before callbacks, the transcript buffer, extraction, or persistence see the text. An inactive redactor (no rules enabled) is dropped rather than installed.
Sourcepub fn clock(self, clock: SharedClock) -> Self
pub fn clock(self, clock: SharedClock) -> Self
Read the time from clock instead of the system clock.
Installed on the session State (see
State::set_clock), so temporal
patterns, phase durations, resolver cache expiry, the session:
timing signals and journal timestamps all follow it. Pass a
ManualClock to make timing decisions
reproducible in tests; replay installs one driven by the recording.
Sourcepub fn middleware(self, layer: Arc<dyn Middleware>) -> Self
pub fn middleware(self, layer: Arc<dyn Middleware>) -> Self
Add a middleware layer.
Layers run around tool dispatch in the control lane: before_tool
(a returned error vetoes the call), after_tool, and on_tool_error.
Multiple calls accumulate in order.
Sourcepub fn flow_monitor(self, monitor: FlowMonitor) -> Self
pub fn flow_monitor(self, monitor: FlowMonitor) -> Self
Attach a governed-flow monitor (built from a Flow + Mode). The
monitor becomes the main layer of a FlowStack
with no digressions.
Sourcepub fn flow_stack(self, stack: FlowStack) -> Self
pub fn flow_stack(self, stack: FlowStack) -> Self
Attach a governed-flow stack: the main flow plus its digressions and
repair policies. This is the one governance object the control plane
drives; flow_monitor is the no-digression special case.
Sourcepub fn state(self, state: State) -> Self
pub fn state(self, state: State) -> Self
Provide a pre-created State to use for this session.
If not set, a new State is created at connect time. Use this when the State needs to be shared with tools or other components before the session connects.
Sourcepub fn greeting(self, prompt: impl Into<String>) -> Self
pub fn greeting(self, prompt: impl Into<String>) -> Self
Set a greeting prompt sent on connect to trigger the model to speak first.
Sourcepub fn dispatcher(self, dispatcher: ToolDispatcher) -> Self
pub fn dispatcher(self, dispatcher: ToolDispatcher) -> Self
Set the tool dispatcher for auto-dispatch of tool calls.
Sourcepub fn callbacks(self, callbacks: EventCallbacks) -> Self
pub fn callbacks(self, callbacks: EventCallbacks) -> Self
Set the event callbacks.
Sourcepub fn extractor(self, extractor: Arc<dyn TurnExtractor>) -> Self
pub fn extractor(self, extractor: Arc<dyn TurnExtractor>) -> Self
Add a turn extractor that runs between turns.
Sourcepub fn computed(self, registry: ComputedRegistry) -> Self
pub fn computed(self, registry: ComputedRegistry) -> Self
Set the computed variable registry for derived state.
Sourcepub fn phase_machine(self, machine: PhaseMachine) -> Self
pub fn phase_machine(self, machine: PhaseMachine) -> Self
Set the phase machine for declarative conversation phase management.
Sourcepub fn watchers(self, registry: WatcherRegistry) -> Self
pub fn watchers(self, registry: WatcherRegistry) -> Self
Set the watcher registry for state change watchers.
Sourcepub fn temporal(self, registry: TemporalRegistry) -> Self
pub fn temporal(self, registry: TemporalRegistry) -> Self
Set the temporal pattern registry.
Sourcepub fn tool_execution_mode(
self,
tool_name: impl Into<String>,
mode: ToolExecutionMode,
) -> Self
pub fn tool_execution_mode( self, tool_name: impl Into<String>, mode: ToolExecutionMode, ) -> Self
Set the execution mode for a named tool.
Tools default to ToolExecutionMode::Standard. Set to
ToolExecutionMode::Background for zero-dead-air execution.
Sourcepub fn soft_turn_timeout(self, timeout: Duration) -> Self
pub fn soft_turn_timeout(self, timeout: Duration) -> Self
Enable soft turn detection for proactive silence awareness.
When proactiveAudio is enabled, the model may choose not to respond.
This sets a timeout after VAD end — if the model stays silent, a
lightweight “soft turn” fires to keep state updated without forcing
the model to speak.
Sourcepub fn steering_mode(self, mode: SteeringMode) -> Self
pub fn steering_mode(self, mode: SteeringMode) -> Self
Set the steering mode for how the phase machine delivers instructions.
Sourcepub fn context_delivery(self, mode: ContextDelivery) -> Self
pub fn context_delivery(self, mode: ContextDelivery) -> Self
Set the context delivery timing.
Immediate(default): send batched context during TurnComplete.Deferred: queue context and flush with next user send.
Sourcepub fn delivery(self, delivery: DeliveryConfig) -> Self
pub fn delivery(self, delivery: DeliveryConfig) -> Self
Set the fast-lane delivery (backpressure) policy per event class.
Defaults to all-Lossless, which
preserves the historical send().await routing behavior. Opt classes
into LossyDropNewest to
keep the router from stalling when a fast-lane consumer falls behind.
Sourcepub fn repair(self, config: RepairConfig) -> Self
pub fn repair(self, config: RepairConfig) -> Self
Enable the conversation repair protocol.
Tracks need fulfillment per phase and nudges the model when the conversation stalls on gathering required information.
Sourcepub fn persistence(self, backend: Arc<dyn SessionPersistence>) -> Self
pub fn persistence(self, backend: Arc<dyn SessionPersistence>) -> Self
Set a session persistence backend for surviving process restarts.
Sourcepub fn session_id(self, id: impl Into<String>) -> Self
pub fn session_id(self, id: impl Into<String>) -> Self
Set the session ID for persistence.
Sourcepub fn tool_advisory(self, enabled: bool) -> Self
pub fn tool_advisory(self, enabled: bool) -> Self
Enable or disable tool availability advisory on phase transitions.
Sourcepub fn telemetry_interval(self, interval: Duration) -> Self
pub fn telemetry_interval(self, interval: Duration) -> Self
Set the periodic telemetry emission interval.
When set, the processor periodically emits LiveEvent::Telemetry
and LiveEvent::TurnMetrics to the event stream.
Sourcepub async fn connect(self) -> Result<LiveHandle, AgentError>
pub async fn connect(self) -> Result<LiveHandle, AgentError>
Connect to Gemini and start the three-lane event processor.
This is a thin orchestrator over three explicit, behavior-preserving stages:
into_plan— pure derivation/validation of the resolved startup configuration (SessionPlan); no I/O, no spawning.- Connect the L0 transport using the plan’s resolved
SessionConfig. build_runtime— assemble the runtime wiring (channels, shared state, dispatcher, control plane) from the plan + connected session.spawn_lanes— spawn the telemetry/event/tool lanes and return the assembledLiveHandle.
Sourcepub async fn connect_with_transport<T: Transport>(
self,
transport: T,
) -> Result<LiveHandle, AgentError>
pub async fn connect_with_transport<T: Transport>( self, transport: T, ) -> Result<LiveHandle, AgentError>
connect over transport instead of a WebSocket to
Gemini: the whole runtime (phases, tools, extractors, watchers, flow
governance) runs as it would live, against whatever the transport
answers.
Use it to test a session without a network or a credential, over a
ReplayTransport
scripted with server frames. The transport is not reconnected if it
closes.
Auto Trait Implementations§
impl !Freeze for LiveSessionBuilder
impl !RefUnwindSafe for LiveSessionBuilder
impl Send for LiveSessionBuilder
impl Sync for LiveSessionBuilder
impl Unpin for LiveSessionBuilder
impl !UnwindSafe for LiveSessionBuilder
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
§impl<T> FutureExt for T
impl<T> FutureExt for T
§fn with_context(self, otel_cx: Context) -> WithContext<Self>
fn with_context(self, otel_cx: Context) -> WithContext<Self>
§fn with_current_context(self) -> WithContext<Self>
fn with_current_context(self) -> WithContext<Self>
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
T in a tonic::Request§impl<L> LayerExt<L> for L
impl<L> LayerExt<L> for L
§fn named_layer<S>(&self, service: S) -> Layered<<L as Layer<S>>::Service, S>where
L: Layer<S>,
fn named_layer<S>(&self, service: S) -> Layered<<L as Layer<S>>::Service, S>where
L: Layer<S>,
Layered].