Google ADK Python 2.13.0: The Telemetry Schema Flip and Where Prompt Content Goes Now
ADK Python 2.13.0 removes the call_llm span by default and moves to OpenTelemetry GenAI conventions. I read the release notes, the breaking-change commit, the TelemetryConfig guide and the source at the tag, and found the guide and the code describe different defaults.
Google's ADK for Python v2.13.0 was published on GitHub on October 23, 2026, and its one listed breaking change is telemetry. By default ADK now emits the OpenTelemetry GenAI schema, call_llm spans are gone, and many gcp.vertex.agent.* attributes became gen_ai.*. If your dashboards or alerts key on call_llm, they change on upgrade unless you set ADK_TELEMETRY_SCHEMA_VERSION_OPT_IN=otel_semconv_1_36. The same release also ships a TelemetryConfig guide that says prompts are written to spans by default. Read next to the code, that guide describes the old schema.
I read the v2.13.0 release notes, the breaking-change commit message, the TelemetryConfig guide at the tag, and the schema and tracing source files at the tag through the GitHub API. I did not install ADK, run an agent, or look at a trace. Where I infer behavior from code, I say so.
What the release says
The release notes' breaking changes section has one item: telemetry "defaults to OpenTelemetry GenAI v2 (otel_semconv_1_44, removing call_llm)". To keep the legacy v1 schema, set ADK_TELEMETRY_SCHEMA_VERSION_OPT_IN=otel_semconv_1_36.
The commit behind it, "Deprecate call_llm span and OpenTelemetry 1.36 GenAI semconv", lists the notable changes:
- Separate
gen_ai.*OpenTelemetry logs are unified undergen_ai.client.inference.operation.details. - The
call_llmspan is no longer emitted. gcp.vertex.agent.*attributes changed togen_ai.*where equivalents exist.
It says the old schema is supported "at least until 31st of March 2027".
What the code at the tag says
The _schema_version.py docstring defines the two values. 2 or otel_semconv_1_44 is the default: GenAI semconv aligned, invoke_workflow replaces invocation, there is no call_llm span, tool content is gen_ai.tool.call.*, and the experimental GenAI semconv is the default. 1 or otel_semconv_1_36 is the legacy format. It says 1 is supported until at least 2027-03-31, "then removed with this knob".
The resolver is short: it returns 1 only if the variable is set to 1 or otel_semconv_1_36, and 2 for anything else, including an unset or misspelled value. So a typo in the variable leaves you on the new schema.
In tracing.py, _start_call_llm_span returns nothing under schema 2, and trace_call_llm is described as a no-op there. For tool calls, the legacy branch writes gcp.vertex.agent.tool_call_args and tool_response when should_add_content_to_legacy_spans is true. The non-legacy branch writes gen_ai.tool.call.arguments and the result only when should_add_content_to_experimental_spans is true.
The guide and the code disagree on the default
The TelemetryConfig guide at the same tag opens with a privacy claim: with no configuration, "prompt and response content is written to ADK's spans". Its table sets should_add_content_to_legacy_spans to True by default and should_add_content_to_experimental_spans to False. It says the user's message appears in full on the call_llm span under gcp.vertex.agent.llm_request. It does not mention otel_semconv_1_44 or ADK_TELEMETRY_SCHEMA_VERSION_OPT_IN; I searched the file for both.
Under the new default, per the code above, there is no call_llm span, and tool content on spans follows the experimental property, which the guide lists as False by default. My reading is that a default install on 2.13.0 no longer puts tool arguments on spans, and the guide's headline example applies only after you pin the legacy schema. I did not run an agent to confirm this, and the guide does not say it. Treat it as unverified.
Other facts from the guide are consistent either way:
TelemetryConfighas four fields:capture_message_content,genai_semconv_stability_opt_in,adk_experimental_telemetry_opt_inandexperimental_features_opt_in.- Resolution order is the admin lock
ADK_TELEMETRY_IGNORE_RUN_CONFIG, then the per-request field, then the environment variable, then the default. ADK_CAPTURE_MESSAGE_CONTENT_IN_SPANS=falsesilences ADK's own legacy spans only.capture_message_content=NO_CONTENTsilences everything.EVENT_ONLYalso turns legacy span content off.- An unrecognized value for the content variable resolves to
NO_CONTENTwithout a warning. - When content is suppressed, the legacy attributes are set to the string
"{}", not dropped. - If
opentelemetry-instrumentation-google-genaiis installed, it creates the inference span itself and per-request overrides do not reach that span.
What else is in 2.13.0
The release highlights also list 12 experimental features promoted to stable, a TypesafeClassifier and ClassifierNode for workflow routing, live audio with barge-in, MongoDbSessionService and MongoDbMemoryService (both experimental), and a claim of up to 8x faster execution turns for string-model agents. These are release-note statements. I did not read those guides or test the performance claim.
What I would check
These are my untested suggestions, not documented behavior.
- Before upgrading, search your alert rules, dashboards and log queries for
call_llm,invocationandgcp.vertex.agent. Those names are what the release says changed. - Run one agent in staging on each schema value and diff the exported spans. The comparison tells you more than either document.
- Set
ADK_CAPTURE_MESSAGE_CONTENT_IN_SPANSandOTEL_INSTRUMENTATION_GENAI_CAPTURE_MESSAGE_CONTENTexplicitly in the deployment instead of relying on defaults. Do not depend on my reading of which way the default went. - If privacy is the reason you care, check the exported attributes for prompt text yourself on both schemas.
- Plan to leave
otel_semconv_1_36before March 31, 2027, since the code says it is removed after that.
What I would not conclude
- I would not conclude prompts are never exported on 2.13.0. Log records and the experimental span path are separate, and I did not trace them.
- I would not conclude the guide is wrong in general. It reads as accurate for the legacy schema.
- I would not conclude the promoted-to-stable features or the speedup claim hold for your workload.
- I would not conclude anything about ADK Java or Kotlin. This covers the Python package only.
Frequently asked questions
What changed in ADK Python 2.13.0 telemetry?
The default schema is now OpenTelemetry GenAI v2, also named otel_semconv_1_44. The call_llm span is no longer emitted, invoke_workflow replaces invocation, and many gcp.vertex.agent.* attributes became gen_ai.*.
How do I keep the old telemetry?
Set ADK_TELEMETRY_SCHEMA_VERSION_OPT_IN=otel_semconv_1_36. The code says it is supported until at least 2027-03-31.
Does a typo in that variable keep the old schema?
No. The resolver returns the legacy schema only for 1 or otel_semconv_1_36. Anything else resolves to the new one.
Does ADK still put prompts on spans by default?
The guide says yes for legacy spans. The code under the new default has no call_llm span and gates tool content on the experimental property, which the guide lists as off. I did not run it, so verify on your own traces.
What is the difference between the two ways to turn content off?
Per the guide, ADK_CAPTURE_MESSAGE_CONTENT_IN_SPANS=false silences ADK's legacy spans only, while capture_message_content=NO_CONTENT silences everything.
Can application code override a platform telemetry policy?
Per the guide, setting ADK_TELEMETRY_IGNORE_RUN_CONFIG to 1 or true makes ADK ignore the per-request fields.
Did you run it?
No. I read the release notes, a commit message, a guide and source files. I did not install ADK or inspect any trace.
Sources
All read on November 3, 2026.
- adk-python v2.13.0 release notes
- Telemetry breaking-change commit
- TelemetryConfig guide at v2.13.0
- _schema_version.py at v2.13.0
- tracing.py at v2.13.0
Not read: the config source that defines the defaults, the OpenTelemetry GenAI specification, the guides for classifiers, MongoDB and live audio, and any exported trace.
Related reading
- ADK for Kotlin: What Google's README Says About Android, Java Interop and an Unauthenticated Server
Google's Agent Development Kit for Kotlin is an Apache 2.0 toolkit with Java interop, on-device Android models and an HTTP server. What the README says, where it contradicts itself on stability, and what to check first.
- MCP TypeScript SDK 2.4.0: Serving Agent Skills Over MCP (SEP-2640) and What the Spec Says to Distrust
The MCP TypeScript SDK 2.4.0 adds a Skills extension that lets a server publish SKILL.md folders to clients. I read the release notes, the SDK guides and the pinned extension spec to see how listing, digests and the security rules work.
- Microsoft Agent Framework for Go: What the Public Preview README Says Is Built, and What Is Not
Microsoft's Agent Framework for Go is in public preview, with v0.2.0 adding embeddings and vector stores. I read the README, the feature comparison doc and the release notes to list what exists, what is marked not implemented, and where the README disagrees with itself.
The build log
Follow the work.
New essays and prototypes, in your feed reader. Email subscriptions are paused while I connect a working delivery service. No email is collected here.
Follow via RSS