gemini_genai_rs/
lib.rs

1#![warn(missing_docs)]
2//! # gemini-live
3//!
4//! Full Rust equivalent of Google's `@google/genai` SDK.
5//! Wire protocol, transport, types, auth, plus REST API modules (feature-gated).
6//!
7//! ## Layers
8//!
9//! - **Protocol**: Wire-format types mapping 1:1 to the API (`protocol/`)
10//! - **Transport**: WebSocket connection with reconnection and flow control (`transport/`)
11//! - **Session**: Session handle with command/event channels and phase FSM (`session/`)
12//! - **Buffer**: Lock-free SPSC ring buffer and adaptive jitter buffer (`buffer/`)
13//! - **VAD**: Voice activity detection with adaptive noise floor (`vad/`)
14//! - **Flow**: Barge-in detection and turn detection (`flow/`)
15//! - **Telemetry**: OTel spans, structured logging, Prometheus metrics (`telemetry/`)
16
17#[cfg(feature = "batches")]
18pub mod batches;
19pub mod buffer;
20#[cfg(feature = "caches")]
21pub mod caches;
22#[cfg(feature = "chats")]
23pub mod chats;
24pub mod client;
25#[cfg(feature = "embed")]
26pub mod embed;
27#[cfg(feature = "files")]
28pub mod files;
29#[cfg(feature = "generate")]
30pub mod generate;
31#[cfg(feature = "models")]
32pub mod models;
33pub mod protocol;
34pub mod quick;
35pub mod session;
36pub mod telemetry;
37#[cfg(feature = "tokens")]
38pub mod tokens;
39pub mod transport;
40#[cfg(feature = "tunings")]
41pub mod tunings;
42pub mod turn;
43#[cfg(feature = "vad")]
44pub mod vad;
45
46// Top-level re-exports for convenience.
47pub use client::Client;
48pub use quick::{quick_connect, quick_connect_vertex};
49
50/// Convenient re-exports for wire-level usage.
51pub mod prelude {
52    // Protocol types
53    pub use crate::protocol::messages::*;
54    pub use crate::protocol::types::*;
55    pub use crate::protocol::Platform;
56
57    // Transport
58    pub use crate::transport::auth::{
59        AuthProvider, GoogleAIAuth, GoogleAITokenAuth, ServiceEndpoint, VertexAIAuth,
60    };
61    pub use crate::transport::recording::{
62        read_wire_log, FileWireRecorder, MemoryWireRecorder, RecordingCodec, WireDirection,
63        WireEntry, WireLogError, WireRecorder, WireRecorderHandle,
64    };
65    pub use crate::transport::replay::{ReplayControl, ReplayTransport};
66    pub use crate::transport::ws::{MockTransport, Transport, TungsteniteTransport};
67    pub use crate::transport::{
68        connect, connect_with, Codec, CodecError, ConnectBuilder, JsonCodec, TransportConfig,
69    };
70
71    // Session
72    pub use crate::session::{
73        recv_event, AuthError, ResumeInfo, SessionCommand, SessionError, SessionEvent,
74        SessionHandle, SessionPhase, SessionReader, SessionWriter, SetupError, WebSocketError,
75    };
76
77    // Buffers
78    pub use crate::buffer::{bytes_to_i16, i16_to_bytes, into_shared};
79    pub use crate::buffer::{AudioJitterBuffer, JitterConfig, SpscRing};
80
81    // VAD
82    #[cfg(feature = "vad")]
83    pub use crate::vad::{VadConfig, VadEvent, VoiceActivityDetector};
84
85    // Flow
86    pub use crate::turn::{
87        BargeInAction, BargeInConfig, BargeInDetector, TurnDetectionConfig, TurnDetectionEvent,
88        TurnDetector,
89    };
90
91    // Telemetry
92    pub use crate::telemetry::TelemetryConfig;
93
94    // Safety types (shared across all APIs)
95    pub use crate::protocol::types::{
96        CitationMetadata, CitationSource, FileData, FinishReason, HarmBlockThreshold, HarmCategory,
97        HarmProbability, SafetyRating, SafetySetting,
98    };
99
100    // Client
101    #[cfg(feature = "http")]
102    pub use crate::client::http::{HttpClient, HttpConfig, HttpError};
103    pub use crate::client::Client;
104
105    // Generate API
106    #[cfg(feature = "generate")]
107    pub use crate::generate::{
108        Candidate, GenerateContentConfig, GenerateContentResponse, GenerateError,
109    };
110
111    // Tokens API
112    #[cfg(feature = "tokens")]
113    pub use crate::tokens::{CountTokensResponse, TokensError};
114
115    // Models API
116    #[cfg(feature = "models")]
117    pub use crate::models::{ListModelsResponse, ModelInfo, ModelsError};
118
119    // Embed API
120    #[cfg(feature = "embed")]
121    pub use crate::embed::{
122        ContentEmbedding, EmbedContentConfig, EmbedContentResponse, EmbedError, TaskType,
123    };
124
125    // Files API
126    #[cfg(feature = "files")]
127    pub use crate::files::{
128        File, FileSource, FileState, FilesError, ListFilesResponse, UploadFileConfig,
129    };
130
131    // Caches API
132    #[cfg(feature = "caches")]
133    pub use crate::caches::{
134        CachedContent, CachedContentUsageMetadata, CachesError, CreateCachedContentConfig,
135        ListCachedContentsResponse, UpdateCachedContentRequest,
136    };
137
138    // Tunings API
139    #[cfg(feature = "tunings")]
140    pub use crate::tunings::{
141        CreateTuningJobConfig, ListTuningJobsResponse, SupervisedTuningSpec, TuningHyperParameters,
142        TuningJob, TuningJobState, TuningsError,
143    };
144
145    // Batches API
146    #[cfg(feature = "batches")]
147    pub use crate::batches::{
148        BatchJob, BatchJobDestination, BatchJobSource, BatchJobState, BatchesError,
149        CreateBatchJobConfig, ListBatchJobsResponse,
150    };
151
152    // Chat API
153    #[cfg(feature = "chats")]
154    pub use crate::chats::ChatSession;
155
156    // Quick-start
157    pub use crate::quick::{quick_connect, quick_connect_vertex};
158}