#[non_exhaustive]pub struct LiveModelProfile {
pub thinking: bool,
pub thinking_level_required: bool,
pub affective_dialog_flag: bool,
pub proactivity_flag: bool,
pub vertex_async_tools: bool,
pub context_update: bool,
pub code_execution: bool,
}Expand description
What a Live model accepts in its setup message, as far as this crate knows.
The model catalog moves faster than releases, so this is keyed on the
model name and errs toward sending what the caller set: only models known
to reject or ignore a field have it removed. Anything unrecognised gets
LiveModelProfile::DEFAULT — every field passes through. Platform rules
that hold for every model (Google AI has no proactivity, for one) live
on SessionConfig, not here.
let p = LiveModelProfile::of(&ModelId::LIVE_3_8);
assert!(!p.thinking && !p.affective_dialog_flag && p.vertex_async_tools);
assert!(p.context_update);
let x = LiveModelProfile::of(&ModelId::LIVE_3_8_EXTENDED_THINKING);
assert!(x.thinking && x.thinking_level_required);
let native = LiveModelProfile::of(&ModelId::LIVE_2_5_FLASH_NATIVE_AUDIO);
assert_eq!(native, LiveModelProfile::GEMINI_2_5_NATIVE_AUDIO);
assert!(!native.code_execution && !p.code_execution);Fields (Non-exhaustive)§
This struct is marked as non-exhaustive
Struct { .. } syntax; cannot be matched against without a wildcard ..; and struct update syntax will not work.thinking: boolAccepts thinkingConfig. Vertex AI Live strips it for every model
except those that require a thinking level.
thinking_level_required: boolRequires thinkingConfig.thinkingLevel: the setup is refused without
it (“Thinking level must be specified for this model”).
affective_dialog_flag: boolAccepts the enableAffectiveDialog flag. Gemini 3.8 Live has
affective dialogue always on and closes the session (1007) when the
flag is sent.
proactivity_flag: boolAccepts the proactivity config. Always on in Gemini 3.8 Live, whose
docs say not to send it.
vertex_async_tools: boolAccepts behavior / scheduling on Vertex AI (Google AI always
does).
context_update: boolAccepts a contextUpdate message, which replaces the declared tools
and the system instruction mid-session. Gemini 2.5 Live closes the
session over one (1007, “Request contains an invalid argument”).
code_execution: boolAccepts the built-in codeExecution tool on Google AI. Gemini 3.8
Live, 3.8 Live Extended Thinking and 2.5 native audio close the
session at setup over it (1007, “Code Execution tool is not supported
for this model”; measured 2026-10-11). Vertex AI was not measured.
Implementations§
Source§impl LiveModelProfile
impl LiveModelProfile
Sourcepub const GEMINI_2_5_NATIVE_AUDIO: Self
pub const GEMINI_2_5_NATIVE_AUDIO: Self
Gemini 2.5 native audio: as DEFAULT, without the
codeExecution tool.
Sourcepub const GEMINI_3_8_LIVE: Self
pub const GEMINI_3_8_LIVE: Self
Gemini 3.8 Live. No thinking: thinkingLevel is refused and a
thinking budget has no effect.
Sourcepub const GEMINI_3_8_LIVE_EXTENDED_THINKING: Self
pub const GEMINI_3_8_LIVE_EXTENDED_THINKING: Self
Gemini 3.8 Live Extended Thinking: requires thinkingLevel, and
answers a question that needs thought in a later turn (a spoken
holding line first, interactionStatus: IN_PROGRESS).
Trait Implementations§
Source§impl Clone for LiveModelProfile
impl Clone for LiveModelProfile
Source§fn clone(&self) -> LiveModelProfile
fn clone(&self) -> LiveModelProfile
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreimpl Copy for LiveModelProfile
Source§impl Debug for LiveModelProfile
impl Debug for LiveModelProfile
impl Eq for LiveModelProfile
Source§impl PartialEq for LiveModelProfile
impl PartialEq for LiveModelProfile
impl StructuralPartialEq for LiveModelProfile
Auto Trait Implementations§
impl Freeze for LiveModelProfile
impl RefUnwindSafe for LiveModelProfile
impl Send for LiveModelProfile
impl Sync for LiveModelProfile
impl Unpin for LiveModelProfile
impl UnsafeUnpin for LiveModelProfile
impl UnwindSafe for LiveModelProfile
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<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.§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> ⓘ
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].