telemetry-dev-google-genai
Google GenAI (Gemini) SDK instrumentation for telemetry.dev. It wraps the official google-genai Python SDK and emits telemetry.dev generation and embedding spans through telemetry-dev.
Install
pip install telemetry-dev-google-genai
Initialize the core SDK first:
import telemetry_dev
telemetry_dev.init(
api_key="td_live_...",
base_url="http://localhost:4318",
service_name="my-service",
)
Per-client wrapping
from google import genai
from telemetry_dev_google_genai import wrap_google_genai
client = wrap_google_genai(genai.Client(api_key="..."))
client.models.generate_content(
model="gemini-2.5-flash",
contents=[{"role": "user", "parts": [{"text": "Tell me a joke about OpenTelemetry"}]}],
)
Use this when you want explicit control over which clients are instrumented. wrap_google_genai patches both sync client.models and async client.aio.models.
Global instrumentation
from google import genai
from telemetry_dev_google_genai import instrument_google_genai, uninstrument_google_genai
instrument_google_genai()
client = genai.Client(api_key="...")
try:
client.models.generate_content(
model="gemini-2.5-flash",
contents="Tell me a joke about OpenTelemetry",
)
finally:
uninstrument_google_genai()
Use this as the app-wide one-liner at startup when all GenAI clients should be instrumented.
Instrumented surfaces
Sync and async variants are covered:
client.models.generate_content(...)/client.aio.models.generate_content(...)client.models.generate_content_stream(...)/client.aio.models.generate_content_stream(...)client.models.embed_content(...)/client.aio.models.embed_content(...)generate_images(...),edit_image(...),upscale_image(...), andgenerate_videos(...)on sync and async models
client.chats.create(...).send_message(...) and send_message_stream(...) are covered automatically because they call the wrapped models methods.
When generate_videos(...) returns a nonterminal operation, its span completes only after
operations.get(...) on the same wrapped client observes that operation in a terminal state. An
operation polled by another client or process cannot complete the submission span. If the wrapped
client closes, instrumentation is removed, or the bounded operation tracker evicts an uncompleted
operation, the submission span ends with an error instead of remaining open.
What gets captured
| Gemini signal | telemetry.dev field / attribute |
|---|---|
model |
model |
contents |
input |
config.system_instruction |
system_instructions |
sampling params (temperature, top_p, top_k, seed, penalties, max_output_tokens, stop_sequences) |
same-named span fields |
| JSON / schema output config | output_type (json or text) |
config.candidate_count |
gen_ai.request.choice.count |
config.tools |
gen_ai.tool.definitions |
config.tool_config, safety_settings, thinking_config, labels, cached_content, response_modalities |
google_genai.request.* attributes |
| response IDs, model version, finish reasons, output messages, usage tokens (including TEXT/IMAGE/AUDIO prompt, candidate, and cache details) | mapped span fields |
| block/safety/grounding/url-context metadata | google_genai.response.* attributes |
| AFC history on the final response | replaces span input; sets google_genai.automatic_function_calling=true |
The integration maps native Gemini request/response shapes directly. It never mutates caller requests.
Streaming
Gemini streams already include cumulative usage_metadata on chunks, so no request injection is needed. Stream spans record time-to-first-chunk, aggregate text parts (merging consecutive text with the same thought flag), last-seen usage/finish reasons, and end once when the stream completes, errors, or is closed.
Automatic function calling (AFC)
When Python callables are passed in tools, the SDK may run an internal AFC loop across multiple transport calls. The integration emits one span for the public generate_content call and, when present, sets span input to automatic_function_calling_history.
Embeddings
Embedding calls emit gen_ai.operation.name = "embeddings", request model/input, embedding count/dimension attributes, optional token usage, and optional billable character counts. Embedding vectors are not captured as output.
Provider values
- Gemini Developer API clients record provider
gcp.gemini. - Vertex AI clients (
vertexai=True) record providergcp.vertex_ai.
Fail-open guarantee
Mapping code is defensive; wrapped calls return the SDK response unchanged and re-raise exceptions untouched. Telemetry bugs never break callers.
Limitations
- Not instrumented:
count_tokens,compute_tokens,live,caches,files,tunings,batches. - Media operations capture text prompts, model/provider attribution, non-binary media references such as URIs and MIME types, and
gen_ai.operation.name=generate_content. Image, video, and reference-image bytes are never captured. Image and video operations emit the correspondinggen_ai.output.type. - Deliberately not captured: logprobs, citation metadata,
create_time,sdk_http_response. - Unconsumed streams end their spans only when the stream is exhausted, errors, or is closed.
Metadata
Release files for telemetry-dev-google-genai 0.1.4
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| telemetry_dev_google_genai-0.1.4.tar.gz | 15.5 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| telemetry_dev_google_genai-0.1.4-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 32.0 kB
Release files / telemetry_dev_google_genai-0.1.4.tar.gz
| Download URL | telemetry_dev_google_genai-0.1.4.tar.gz |
|---|---|
| Size | 15.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
6899685fe0528a2063f6901c8ec48f7416e869b70f06bc24dc8b0747e980daad
|
|
BLAKE2b-256 checksum How to use checksums |
217f12d6bd941f6cc022508be31faab627c43134d82f5a4abe40f8a61c4dbe9e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.5 {"installer":{"name":"uv","version":"0.12.5","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / telemetry_dev_google_genai-0.1.4-py3-none-any.whl
| Download URL | telemetry_dev_google_genai-0.1.4-py3-none-any.whl |
|---|---|
| Size | 16.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
d766cfa566454b4c0e32619a778a40c1c9aec7f0608a3e6835931b8578c220de
|
|
BLAKE2b-256 checksum How to use checksums |
8d08aead1de59c4422ddab7431d0a47600446ac97863cf6534d6dcb7ebdad580
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.5 {"installer":{"name":"uv","version":"0.12.5","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|