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
-
ThinkingOffDisable thinking entirely
-
ThinkingDynamicModel 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.