Google (Gemini & Vertex)
google-generativeai and vertexai auto-capture generate_content and streaming variants.
Two instrumentors, one per SDK: one for the Gemini API (google-generativeai) and one for Vertex AI (vertexai). Calls inside wrap your agent become llm spans. The provider field is google for Gemini and google-vertex for Vertex.
What's captured
| Call | Span kind | Auto-extracted |
|---|---|---|
GenerativeModel.generate_content | llm | model, tokens (usageMetadata), prompt, response |
generate_content streaming | llm | same, accumulated |
start_chat then send_message | llm | same, with chat history in input |
embed_content | llm | model, input tokens |
Install
# Gemini API
pip install google-generativeai opentelemetry-instrumentation-google-generativeai
# Vertex AI
pip install google-cloud-aiplatform opentelemetry-instrumentation-vertexaiA Node instrumentor (@opentelemetry/instrumentation-google-generativeai) is also available.
Minimal example — Gemini
import os, trodo
import google.generativeai as genai
trodo.init(site_id=os.environ['TRODO_SITE_ID'])
genai.configure(api_key=os.environ['GEMINI_API_KEY'])
model = genai.GenerativeModel('gemini-2.5-flash')
with trodo.wrap_agent('gemini-bot') as run:
r = model.generate_content('Explain vector databases in one sentence.')
run.set_output(r.text)Minimal example — Vertex
import os, trodo, vertexai
from vertexai.generative_models import GenerativeModel
trodo.init(site_id=os.environ['TRODO_SITE_ID'])
vertexai.init(project=os.environ['GCP_PROJECT'], location='us-central1')
model = GenerativeModel('gemini-2.5-pro')
with trodo.wrap_agent('vertex-bot') as run:
r = model.generate_content('Explain vector databases in one sentence.')
run.set_output(r.text)Tokens come from usage_metadata: prompt_token_count maps to input tokens and candidates_token_count to output tokens.