pub struct GeminiProvider { /* private fields */ }Expand description
Gemini provider supporting multiple authentication methods.
Implementations§
Source§impl GeminiProvider
impl GeminiProvider
Sourcepub fn new(api_key: Option<&str>) -> Self
pub fn new(api_key: Option<&str>) -> Self
Create a new Gemini provider.
Authentication priority:
- Explicit API key passed in
GEMINI_API_KEYenvironment variableGOOGLE_API_KEYenvironment variable- Gemini CLI OAuth tokens (
~/.gemini/oauth_creds.json)
Sourcepub fn new_with_auth(
api_key: Option<&str>,
auth_service: AuthService,
profile_override: Option<String>,
) -> Self
pub fn new_with_auth( api_key: Option<&str>, auth_service: AuthService, profile_override: Option<String>, ) -> Self
Create a new Gemini provider with managed OAuth from auth-profiles.json.
Authentication priority:
- Explicit API key passed in
GEMINI_API_KEYenvironment variableGOOGLE_API_KEYenvironment variable- Managed OAuth from auth-profiles.json (if auth_service provided)
- Gemini CLI OAuth tokens (
~/.gemini/oauth_creds.json)
Sourcepub fn has_cli_credentials() -> bool
pub fn has_cli_credentials() -> bool
Check if Gemini CLI is configured and has valid credentials
Sourcepub fn has_any_auth() -> bool
pub fn has_any_auth() -> bool
Check if any Gemini authentication is available
Sourcepub fn auth_source(&self) -> &'static str
pub fn auth_source(&self) -> &'static str
Get authentication source description for diagnostics. Uses the stored enum variant — no env var re-reading at call time.
Trait Implementations§
Source§impl Provider for GeminiProvider
impl Provider for GeminiProvider
Source§fn capabilities(&self) -> ProviderCapabilities
fn capabilities(&self) -> ProviderCapabilities
Query provider capabilities. Read more
Source§fn chat_with_system<'life0, 'life1, 'life2, 'life3, 'async_trait>(
&'life0 self,
system_prompt: Option<&'life1 str>,
message: &'life2 str,
model: &'life3 str,
temperature: f64,
) -> Pin<Box<dyn Future<Output = Result<String>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
'life3: 'async_trait,
fn chat_with_system<'life0, 'life1, 'life2, 'life3, 'async_trait>(
&'life0 self,
system_prompt: Option<&'life1 str>,
message: &'life2 str,
model: &'life3 str,
temperature: f64,
) -> Pin<Box<dyn Future<Output = Result<String>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
'life3: 'async_trait,
One-shot chat with optional system prompt. Read more
Source§fn chat_with_history<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
messages: &'life1 [ChatMessage],
model: &'life2 str,
temperature: f64,
) -> Pin<Box<dyn Future<Output = Result<String>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn chat_with_history<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
messages: &'life1 [ChatMessage],
model: &'life2 str,
temperature: f64,
) -> Pin<Box<dyn Future<Output = Result<String>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
Multi-turn conversation. Default implementation extracts the last user
message and delegates to
chat_with_system.Source§fn warmup<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn warmup<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Warm up the HTTP connection pool (TLS handshake, DNS, HTTP/2 setup).
Default implementation is a no-op; providers with HTTP clients should override.
Source§fn convert_tools(&self, tools: &[ToolSpec]) -> ToolsPayload
fn convert_tools(&self, tools: &[ToolSpec]) -> ToolsPayload
Convert tool specifications to provider-native format. Read more
Source§fn simple_chat<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
message: &'life1 str,
model: &'life2 str,
temperature: f64,
) -> Pin<Box<dyn Future<Output = Result<String>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn simple_chat<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
message: &'life1 str,
model: &'life2 str,
temperature: f64,
) -> Pin<Box<dyn Future<Output = Result<String>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
Simple one-shot chat (single user message, no explicit system prompt). Read more
Source§fn chat<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
request: ChatRequest<'life1>,
model: &'life2 str,
temperature: f64,
) -> Pin<Box<dyn Future<Output = Result<ChatResponse>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn chat<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
request: ChatRequest<'life1>,
model: &'life2 str,
temperature: f64,
) -> Pin<Box<dyn Future<Output = Result<ChatResponse>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
Structured chat API for agent loop callers.
Source§fn supports_native_tools(&self) -> bool
fn supports_native_tools(&self) -> bool
Whether provider supports native tool calls over API.
Source§fn supports_vision(&self) -> bool
fn supports_vision(&self) -> bool
Whether provider supports multimodal vision input.
Source§fn chat_with_tools<'life0, 'life1, 'life2, 'life3, 'async_trait>(
&'life0 self,
messages: &'life1 [ChatMessage],
_tools: &'life2 [Value],
model: &'life3 str,
temperature: f64,
) -> Pin<Box<dyn Future<Output = Result<ChatResponse>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
'life3: 'async_trait,
fn chat_with_tools<'life0, 'life1, 'life2, 'life3, 'async_trait>(
&'life0 self,
messages: &'life1 [ChatMessage],
_tools: &'life2 [Value],
model: &'life3 str,
temperature: f64,
) -> Pin<Box<dyn Future<Output = Result<ChatResponse>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
'life3: 'async_trait,
Chat with tool definitions for native function calling support.
The default implementation falls back to chat_with_history and returns
an empty tool_calls vector (prompt-based tool use only).
Source§fn supports_streaming(&self) -> bool
fn supports_streaming(&self) -> bool
Whether provider supports streaming responses.
Default implementation returns false.
Source§fn supports_streaming_tool_events(&self) -> bool
fn supports_streaming_tool_events(&self) -> bool
Whether provider can emit structured tool-call stream events. Read more
Source§fn stream_chat_with_system(
&self,
_system_prompt: Option<&str>,
_message: &str,
_model: &str,
_temperature: f64,
_options: StreamOptions,
) -> BoxStream<'static, StreamResult<StreamChunk>>
fn stream_chat_with_system( &self, _system_prompt: Option<&str>, _message: &str, _model: &str, _temperature: f64, _options: StreamOptions, ) -> BoxStream<'static, StreamResult<StreamChunk>>
Streaming chat with optional system prompt.
Returns an async stream of text chunks.
Default implementation falls back to non-streaming chat.
Source§fn stream_chat_with_history(
&self,
messages: &[ChatMessage],
model: &str,
temperature: f64,
options: StreamOptions,
) -> BoxStream<'static, StreamResult<StreamChunk>>
fn stream_chat_with_history( &self, messages: &[ChatMessage], model: &str, temperature: f64, options: StreamOptions, ) -> BoxStream<'static, StreamResult<StreamChunk>>
Streaming chat with history.
Default implementation extracts the last user message and delegates to
stream_chat_with_system, mirroring the non-streaming chat_with_history.Source§fn stream_chat(
&self,
request: ChatRequest<'_>,
model: &str,
temperature: f64,
options: StreamOptions,
) -> BoxStream<'static, StreamResult<StreamEvent>>
fn stream_chat( &self, request: ChatRequest<'_>, model: &str, temperature: f64, options: StreamOptions, ) -> BoxStream<'static, StreamResult<StreamEvent>>
Structured streaming chat interface. Read more
Auto Trait Implementations§
impl Freeze for GeminiProvider
impl !RefUnwindSafe for GeminiProvider
impl Send for GeminiProvider
impl Sync for GeminiProvider
impl Unpin for GeminiProvider
impl UnsafeUnpin for GeminiProvider
impl !UnwindSafe for GeminiProvider
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
Mutably borrows from an owned value. Read more
Source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Convert
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can
then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.Source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Convert
Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be
further downcast into Rc<ConcreteType> where ConcreteType implements Trait.Source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
Convert
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
Convert
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.Source§impl<T> DowncastSync for T
impl<T> DowncastSync for T
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§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>
Converts
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>
Converts
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