starlet/gemini

Google Gemini provider for starlet.

Uses the Gemini API via Google AI Studio.

Usage

import starlet
import starlet/gemini

let client = gemini.new(api_key)

starlet.chat(client, "gemini-2.5-flash")
|> starlet.user("Hello!")
|> starlet.send()

Thinking Mode

For Gemini 2.5+ models, configure thinking:

starlet.chat(client, "gemini-2.5-flash")
|> gemini.with_thinking(gemini.ThinkingDynamic)
|> starlet.user("Solve this step by step...")
|> starlet.send()

Types

Information about an available model.

pub type Model {
  Model(id: String, display_name: String)
}

Constructors

  • Model(id: String, display_name: String)

Thinking budget for Gemini 2.5+ models.

pub type ThinkingBudget {
  ThinkingOff
  ThinkingDynamic
  ThinkingFixed(tokens: Int)
}

Constructors

  • ThinkingOff

    Disable thinking entirely

  • ThinkingDynamic

    Model adjusts budget based on request complexity

  • ThinkingFixed(tokens: Int)

    Fixed token budget (1-32768)

Values

pub fn list_models(
  api_key: String,
) -> Result(List(Model), starlet.StarletError)

Lists available Gemini models.

pub fn list_models_with_base_url(
  api_key: String,
  base_url: String,
) -> Result(List(Model), starlet.StarletError)

Lists available Gemini models with a custom base URL.

pub fn new(api_key: String) -> starlet.Client(@internal Ext)

Creates a new Gemini client with the given API key. Uses the default base URL: https://generativelanguage.googleapis.com

pub fn new_with_base_url(
  api_key: String,
  base_url: String,
) -> starlet.Client(@internal Ext)

Creates a new Gemini client with a custom base URL.

pub fn thinking(
  turn: starlet.Turn(t, f, @internal Ext),
) -> option.Option(String)

Get the thinking content from a Gemini turn (if present).

pub fn with_thinking(
  chat: starlet.Chat(t, f, s, @internal Ext),
  budget: ThinkingBudget,
) -> Result(
  starlet.Chat(t, f, s, @internal Ext),
  starlet.StarletError,
)

Enable thinking mode for Gemini 2.5+ models. Validates that ThinkingFixed is within range 1-32768.

Search Document