Skip to main content

Crate gemini_live

Crate gemini_live 

Source
Expand description

§gemini-live

High-performance, idiomatic Rust client for the Gemini Multimodal Live API.

Designed for real-time audio/video streaming where every allocation counts. See audio::AudioEncoder for the zero-allocation hot path, docs/design.md for performance goals, and docs/roadmap.md for known gaps and planned work.

§Architecture

The crate is organised in layers — each builds on the one below:

LayerModuleResponsibility
SessionsessionConnection lifecycle, reconnection, typed send/receive
TransporttransportWebSocket connection, TLS, frame I/O
CodeccodecJSON ↔ Rust; ServerMessageServerEvent decomposition
AudioaudioPCM encoding utilities and format constants
TypestypesStrongly-typed wire-format structs
ErrorserrorLayered error enums

§Quick start

use gemini_live::session::{Session, SessionConfig, ReconnectPolicy};
use gemini_live::transport::{Auth, TransportConfig};
use gemini_live::types::*;

let mut session = Session::connect(SessionConfig {
    transport: TransportConfig {
        auth: Auth::ApiKey(std::env::var("GEMINI_API_KEY")?),
        ..Default::default()
    },
    setup: SetupConfig {
        model: "models/gemini-3.1-flash-live-preview".into(),
        generation_config: Some(GenerationConfig {
            response_modalities: Some(vec![Modality::Text]),
            ..Default::default()
        }),
        ..Default::default()
    },
    reconnect: ReconnectPolicy::default(),
}).await?;

session.send_text("Hello!").await?;

while let Some(event) = session.next_event().await {
    match event {
        ServerEvent::ModelText(text) => print!("{text}"),
        ServerEvent::TurnComplete => println!("\n--- turn done ---"),
        _ => {}
    }
}

For Vertex AI, switch the transport endpoint and auth mode:

use gemini_live::session::{ReconnectPolicy, Session, SessionConfig};
use gemini_live::transport::{Auth, Endpoint, TransportConfig};
use gemini_live::types::*;

let mut session = Session::connect(SessionConfig {
    transport: TransportConfig {
        endpoint: Endpoint::VertexAi {
            location: "us-central1".into(),
        },
        auth: Auth::BearerToken(std::env::var("VERTEX_AI_ACCESS_TOKEN")?),
        ..Default::default()
    },
    setup: SetupConfig {
        model: std::env::var("VERTEX_MODEL")?,
        generation_config: Some(GenerationConfig {
            response_modalities: Some(vec![Modality::Text]),
            ..Default::default()
        }),
        ..Default::default()
    },
    reconnect: ReconnectPolicy::default(),
})
.await?;

Enable the optional vertex-auth crate feature if you want the library to obtain Vertex bearer tokens from Google Cloud Application Default Credentials instead of passing a static token string.

Re-exports§

pub use session::ReconnectPolicy;
pub use session::Session;
pub use session::SessionConfig;
pub use session::SessionStatus;
pub use transport::Auth;
pub use transport::BearerTokenProvider;
pub use transport::Connection;
pub use transport::Endpoint;
pub use transport::RawFrame;
pub use transport::TransportConfig;
pub use error::*;
pub use types::*;

Modules§

audio
Audio encoding utilities for the Gemini Live API.
codec
JSON ↔ Rust codec and semantic event decomposition.
error
Error types for each architectural layer.
session
Session layer — the primary interface for the Gemini Live API.
transport
WebSocket transport layer.
types
Strongly-typed representations of the Gemini Live wire protocol.