Gemini Embedder

Generate Gemini embeddings with an explicit retrieval task type and vector dimension.

GeminiEmbedder defaults to gemini-embedding-001, 1536 dimensions, and the RETRIEVAL_QUERY task type.

from math import sqrt

from agno.knowledge.embedder.google import GeminiEmbedder


def normalize(vector: list[float]) -> list[float]:
    magnitude = sqrt(sum(value * value for value in vector))
    return [value / magnitude for value in vector] if magnitude else vector


document_embedder = GeminiEmbedder(
    id="gemini-embedding-001",
    dimensions=1536,
    task_type="RETRIEVAL_DOCUMENT",
)
query_embedder = GeminiEmbedder(
    id="gemini-embedding-001",
    dimensions=1536,
    task_type="RETRIEVAL_QUERY",
)

document_vector = normalize(
    document_embedder.get_embedding(
        "The quick brown fox jumps over the lazy dog."
    )
)
query_vector = normalize(query_embedder.get_embedding("Which animal jumps?"))

print(f"Document dimensions: {len(document_vector)}")
print(f"Query dimensions: {len(query_vector)}")

GeminiEmbedder currently applies one configured task_type to every call. A single instance used by a vector database therefore applies the same task type to document insertion and query search. gemini-embedding-001 distinguishes RETRIEVAL_DOCUMENT from RETRIEVAL_QUERY.

Google requires manual L2 normalization for gemini-embedding-001 vectors shorter than 3072 dimensions. The example normalizes Agno's 1536-dimensional default. GeminiEmbedder returns the provider values unchanged.

Run the Example

Set up your virtual environment

uv venv --python 3.12
source .venv/bin/activate

Export the API key

export GOOGLE_API_KEY=your_google_api_key_here

Install dependencies

uv pip install -U agno google-genai

Run the example

python gemini_embedder.py

Developer Resources