Skip to main content

GeminiClient

Struct GeminiClient 

Source
pub struct GeminiClient { /* private fields */ }
Expand description

Gemini client for generating completions

Implementations§

Source§

impl GeminiClient

Source

pub fn new(api_key: impl Into<String>) -> Result<Self>

Create a new Gemini client with the provided API key.

§Arguments
  • api_key - Your Google Gemini API key
§Examples
let client = GeminiClient::new("your-gemini-api-key")?;
Source

pub fn from_env() -> Result<Self>

Create a new Gemini client by reading the API key from the GEMINI_API_KEY environment variable.

§Errors

Returns an error if GEMINI_API_KEY is not set.

§Examples
let client = GeminiClient::from_env()?;
Source§

impl GeminiClient

Source

pub fn model<M: Into<Model>>(self, model: M) -> Self

Set the model to use. Accepts either a Model enum variant or a string.

When a string is provided, it will be converted to a Model enum. If the string matches a known model variant, that variant is used; otherwise, it becomes Custom(name). This allows using any model name, including new models or local LLMs, without needing to update the enum.

Source

pub fn temperature(self, temp: f32) -> Self

Set the temperature (0.0 to 1.0, lower = more deterministic)

Source

pub fn max_tokens(self, max: u32) -> Self

Set the maximum tokens to generate

Source

pub fn timeout(self, timeout: Duration) -> Self

Set the timeout for HTTP requests.

This sets the total timeout for each HTTP request made by the client (connection + response). The connect phase additionally keeps the default connect timeout of 30 seconds (DEFAULT_CONNECT_TIMEOUT).

If not called, requests use the default timeout of 5 minutes (DEFAULT_REQUEST_TIMEOUT).

§Arguments
  • timeout - Timeout duration (e.g., Duration::from_secs(30) for 30 seconds)
Source

pub fn max_retries(self, max_retries: usize) -> Self

Set the maximum number of retry attempts for validation errors.

When materialize encounters a validation error, it will automatically retry up to this many times, including the validation error message in subsequent attempts.

The default is 3 retries. Use .no_retries() to disable retries entirely.

§Arguments
  • max_retries - Maximum number of retry attempts (0 = no retries, only single attempt)
§Examples
let client = OpenAIClient::new("api-key")?
    .max_retries(5);  // Increase to 5 retries (default is 3)
Source

pub fn no_retries(self) -> Self

Disable automatic retries on validation errors.

By default, the client retries up to 3 times when validation errors occur. Use this method to disable retries and fail immediately on the first error.

§Examples
let client = OpenAIClient::new("api-key")?
    .no_retries();  // Fail immediately on validation errors
Source§

impl GeminiClient

Source

pub fn base_url(self, base_url: impl Into<String>) -> Self

Set a custom base URL for Gemini-compatible APIs.

§Arguments
  • base_url - Base URL without trailing slash (e.g., “http://localhost:1234/v1beta” or “https://api.example.com/v1beta”)
Source

pub fn thinking_level(self, level: ThinkingLevel) -> Self

Set the thinking level for Gemini 3.x models.

Controls the depth of reasoning the model applies to prompts. Higher thinking levels provide deeper reasoning but increase latency.

§Thinking Levels for Gemini 3 Flash
  • Minimal: Engages in minimal reasoning, ideal for high-throughput applications
  • Low: Reduces latency and cost, appropriate for straightforward tasks (default)
  • Medium: Provides balanced reasoning for most tasks
  • High: Offers deep reasoning, suitable for complex problem-solving
§Thinking Levels for Gemini 3.1 Pro
  • Low: Minimizes latency and cost, suitable for simple tasks
  • High: Maximizes reasoning depth for complex tasks
§Example
use rstructor::{GeminiClient, ThinkingLevel};

let client = GeminiClient::from_env()?
    .thinking_level(ThinkingLevel::High);

Trait Implementations§

Source§

impl Clone for GeminiClient

Source§

fn clone(&self) -> GeminiClient

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl From<GeminiClient> for AnyClient

Available on crate feature gemini only.
Source§

fn from(client: GeminiClient) -> Self

Converts to this type from the input type.
Source§

impl LLMClient for GeminiClient

Source§

fn list_models<'life0, 'async_trait>( &'life0 self, ) -> Pin<Box<dyn Future<Output = Result<Vec<ModelInfo>>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

Fetch available models from Gemini’s API.

Returns a list of Gemini models that support content generation.

Source§

fn from_env() -> Result<Self>

Create a new client by reading the API key from an environment variable. Read more
Source§

fn materialize<'life0, 'life1, 'async_trait, T>( &'life0 self, prompt: &'life1 str, ) -> Pin<Box<dyn Future<Output = Result<T>> + Send + 'async_trait>>
where T: Instructor + DeserializeOwned + Send + 'static + 'async_trait, Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Materialize a structured object of type T from a prompt. Read more
Source§

fn materialize_with_media<'life0, 'life1, 'life2, 'async_trait, T>( &'life0 self, prompt: &'life1 str, media: &'life2 [MediaFile], ) -> Pin<Box<dyn Future<Output = Result<T>> + Send + 'async_trait>>
where T: Instructor + DeserializeOwned + Send + 'static + 'async_trait, Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait, 'life2: 'async_trait,

Materialize a structured object with media references (if supported). Read more
Source§

fn materialize_with_metadata<'life0, 'life1, 'async_trait, T>( &'life0 self, prompt: &'life1 str, ) -> Pin<Box<dyn Future<Output = Result<MaterializeResult<T>>> + Send + 'async_trait>>
where T: Instructor + DeserializeOwned + Send + 'static + 'async_trait, Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Materialize a structured object with metadata (token usage). Read more
Source§

fn generate<'life0, 'life1, 'async_trait>( &'life0 self, prompt: &'life1 str, ) -> Pin<Box<dyn Future<Output = Result<String>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Raw completion without structure (returns plain text). Read more
Source§

fn generate_with_media<'life0, 'life1, 'life2, 'async_trait>( &'life0 self, prompt: &'life1 str, media: &'life2 [MediaFile], ) -> Pin<Box<dyn Future<Output = Result<String>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait, 'life2: 'async_trait,

Raw text completion with media attachments (if supported). Read more
Source§

fn generate_with_metadata<'life0, 'life1, 'async_trait>( &'life0 self, prompt: &'life1 str, ) -> Pin<Box<dyn Future<Output = Result<GenerateResult>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Raw completion with metadata (token usage). Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> PolicyExt for T
where T: ?Sized,

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow only if self and other return Action::Follow. Read more
Source§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow if either self or other returns Action::Follow. Read more
Source§

impl<C> RequestExt for C
where C: LLMClient + ?Sized,

Source§

fn request(&self) -> Request<'_, Self>

Start an empty request.
Source§

fn with_system(&self, system: impl Into<String>) -> Request<'_, Self>

Start a request with system/context instructions.
Source§

fn with_media<'a>(&'a self, media: &'a [MediaFile]) -> Request<'a, Self>

Start a request with attached media (images, or PDFs where the provider supports them).
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more