windlass.providers.llm.gemini¶
gemini
¶
Google Gemini adapter.
Gemini's API names things differently from everyone else: turns are contents
with parts, the assistant role is model, tools are function_declarations
grouped under a Tool, and generation options live in a nested
generation_config. This adapter absorbs all of that.
Install with::
pip install "windlass[gemini]"
Example
from windlass import Windlass # doctest: +SKIP Windlass.llm("gemini", model="gemini-2.0-flash") # doctest: +SKIP
GeminiLLM
¶
GeminiLLM(
model: str = "",
*,
api_key: str | None = None,
vertexai: bool = False,
project: str | None = None,
location: str | None = None,
**config: Any
)
Bases: LLM
Chat completions via the google-genai SDK.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
model
|
str
|
Model id, e.g. |
''
|
api_key
|
str | None
|
Credential. Falls back to |
None
|
vertexai
|
bool
|
Route through Vertex AI instead of the Gemini Developer API. |
False
|
project
|
str | None
|
GCP project id (Vertex only). |
None
|
location
|
str | None
|
GCP region (Vertex only). |
None
|
**config
|
Any
|
Forwarded to :class: |
{}
|
Raises:
| Type | Description |
|---|---|
MissingDependencyError
|
When |
AuthenticationError
|
When no API key can be found and Vertex is off. |
Source code in src\windlass\providers\llm\gemini.py
default_model
classmethod
¶
native
¶
agenerate
async
¶
agenerate(
messages: list[Message], *, tools: list[dict[str, Any]] | None = None, **kwargs: Any
) -> Completion
Request one generation.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
messages
|
list[Message]
|
The conversation. |
required |
tools
|
list[dict[str, Any]] | None
|
Gemini-format function declarations. |
None
|
**kwargs
|
Any
|
Request overrides. |
{}
|
Returns:
| Type | Description |
|---|---|
Completion
|
The completion. |
Raises:
| Type | Description |
|---|---|
ProviderError
|
For any API failure. |
Source code in src\windlass\providers\llm\gemini.py
astream_generate
async
¶
astream_generate(
messages: list[Message], *, tools: list[dict[str, Any]] | None = None, **kwargs: Any
) -> AsyncIterator[StreamEvent]
Stream a generation.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
messages
|
list[Message]
|
The conversation. |
required |
tools
|
list[dict[str, Any]] | None
|
Gemini-format function declarations. |
None
|
**kwargs
|
Any
|
Request overrides. |
{}
|
Yields:
| Type | Description |
|---|---|
AsyncIterator[StreamEvent]
|
Text deltas, then tool calls, then |
Source code in src\windlass\providers\llm\gemini.py
to_gemini_contents
¶
Translate Windlass messages into Gemini's contents format.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
messages
|
list[Message]
|
The conversation. |
required |
Returns:
| Type | Description |
|---|---|
str
|
A |
list[dict[str, Any]]
|
renamed to |
Example
from windlass.core.types import Message system, contents = to_gemini_contents([Message.user("hi")]) contents[0]["role"] 'user'