Skip to content
ISSUE 001·LIVE·08:04 IL
← Journal/2026-11-03·9 min·google adk

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.

By Harel Asaf·AI Builder·Tel Aviv

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 under gen_ai.client.inference.operation.details.
  • The call_llm span is no longer emitted.
  • gcp.vertex.agent.* attributes changed to gen_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:

  • TelemetryConfig has four fields: capture_message_content, genai_semconv_stability_opt_in, adk_experimental_telemetry_opt_in and experimental_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=false silences ADK's own legacy spans only. capture_message_content=NO_CONTENT silences everything. EVENT_ONLY also turns legacy span content off.
  • An unrecognized value for the content variable resolves to NO_CONTENT without a warning.
  • When content is suppressed, the legacy attributes are set to the string "{}", not dropped.
  • If opentelemetry-instrumentation-google-genai is 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, invocation and gcp.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_SPANS and OTEL_INSTRUMENTATION_GENAI_CAPTURE_MESSAGE_CONTENT explicitly 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_36 before 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.

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

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