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/activateExport the API key
export GOOGLE_API_KEY=your_google_api_key_hereInstall dependencies
uv pip install -U agno google-genaiRun the example
python gemini_embedder.py