python Google ADK (Python) Releases · · 2.10.0

Google ADK for Python v2.10.0 Boosts Skill Lifecycles, DB Integrations, and Eval Metrics

sdkaigcpdeprecationengineermediapython-agentic
breaking deprecation feature patch

Google ADK for Python v2.10.0 introduces advanced skill lifecycle management, expanded database and model integration support, and richer efficiency metrics for agent evaluation. This release provides developers with dynamic control over agent resource usage, seamless vector and hybrid search capabilities via a new MongoDB toolset, and detailed insights into execution costs and latency. It enhances integration with OpenAI reasoning models and includes several behavior changes for BigQuery protected mode. Additionally, legacy live-audio modules are now deprecated, affecting engineers building sophisticated AI agents.

  • →add a duration efficiency metric to ADK eval
  • →add an EPHEMERAL skill lifecycle that lasts one turn (experimental, off by default; enable with ADK_ENABLE_SKILL_LIFECYCLE=1)
  • →add an opt-in unload_skill tool to SkillToolset (experimental, off by default; enable with ADK_ENABLE_SKILL_LIFECYCLE=1)
  • →add dev-only deploy endpoints for Agent Runtime, Cloud Run, and GKE
  • →add informational efficiency metrics (tokens, calls) to ADK eval
Features (40) ›
  • add a duration efficiency metric to ADK eval
  • add an EPHEMERAL skill lifecycle that lasts one turn (experimental, off by default; enable with ADK_ENABLE_SKILL_LIFECYCLE=1)
  • add an opt-in unload_skill tool to SkillToolset (experimental, off by default; enable with ADK_ENABLE_SKILL_LIFECYCLE=1)
  • add dev-only deploy endpoints for Agent Runtime, Cloud Run, and GKE
  • add informational efficiency metrics (tokens, calls) to ADK eval
  • add MongoDB toolset with vector and hybrid search
  • add name-based request processor helpers to BaseLlmFlow
  • add on_error handler to skill listing functions
  • add optional context_builder to RemoteA2aAgent , closes #3301
  • add programmatic skill activation APIs to SkillToolset
  • add skill lifecycle modes and an active-skill cap to SkillToolset (experimental, off by default; enable with ADK_ENABLE_SKILL_LIFECYCLE=1)
  • bigquery add default_project_id and default_dataset_id to BigQueryToolConfig
  • cli add gemini-3.8-flash to the adk create model options
  • cli auto-configure session and memory services on Agent Runtime
  • context add abort signal primitives to InvocationContext and Context; the Runner and workflows do not act on an abort yet
  • drop an unloaded skill's instructions from later requests (experimental, off by default; enable with ADK_ENABLE_SKILL_LIFECYCLE=1)
  • expose serving tier via RunConfig.service_tier
  • expose session options in api_server REST endpoint , closes #6342
  • integrations add a google-adk[openai] extra
  • integrations move the OpenAI models to google.adk.integrations.openai; google.adk.labs.openai still re-exports them
  • let SkillToolset notice that a loaded skill has changed
  • mcp identify ADK in the MCP clientInfo handshake
  • mcp identify ADK in the User-Agent of MCP HTTP requests
  • openai adapt request params for reasoning models on both surfaces
  • openai add api_key/base_url with per-request key resolution to OpenAILlm
  • openai add OpenAIGenerateContentConfig and per-model reasoning effort
  • openai honor tool_config mode and all tool declarations in OpenAILlm
  • openai report reasoning tokens on Chat Completions; add live tests
  • openai surface streaming usage and finish reason in OpenAILlm
  • openai use build_reasoning_effort for reasoning in OpenAIResponsesLlm
  • send the deferred service tier on interactions API requests
  • skills add SkillDiscoveryMode to control how the skill catalog is disclosed , closes #7092
  • stamp the Agent Registry URN as gen_ai.main_agent.id
  • stream partial function-call arguments across model adapters
  • telemetry allow per-feature enabling of experimental telemetry
  • tools add behavior field to control Live non-blocking function calls
  • when using interactions api with deferred tier, wait on an interaction operation
  • workflow filter rewound invocations during workflow rehydration
  • workflow let DEFAULT_ROUTE fan out to several nodes
  • workflow unwrap NodeTool in build_node and bind state in _ToolNode
Enhancements (4) ›
  • sessions add id DESC to events composite index to eliminate filesort
  • sessions cache TypeAdapter in State and support key iteration
  • trace a streamed model call once instead of once per chunk
  • workflow avoid redundant event scans in _apply_rewinds and NodeRunner
Fixes (115) ›
  • accept a client factory written against either httpx major
  • agents accept the default hint in request_confirmation
  • agents allow descriptionless BaseNode in LlmAgent tools
  • agents trigger after_agent_callback on cancellation
  • allow forwarding session ID as context_id for remote A2A agents
  • auth keep the OAuth2 client secret out of session state
  • auth report an auth scheme that carries no OAuth2 flows
  • bigquery reject writes protected mode cannot place in the session dataset
  • bigtable release the per-call data client in execute_sql
  • bound artifact reference resolution depth in load_artifact
  • build the Gemini API clients once per event loop
  • cli omit http_options from the generated recordings file
  • cli reject multi-line env values when generating the Dockerfile
  • cli use exec-form RUN/CMD in generated Dockerfiles and validate app names
  • cli validate the test name on every dev server test endpoint
  • coerce integral floats inside list[int] tool parameters
  • compaction stop backwards prompt token scan at compaction boundary
  • complete an A2A task whose run ends without a status message
  • confine agent builder file globs to the configured directory
  • confirmation skip confirmation requests authored by other agents before resolving history
  • core stop executing code found in the model's private reasoning
  • correct get_bigtable_data_client return annotation
  • do not match dollar-brace or escaped patterns in instructions , closes #5706
  • eval ignore UI-only InvocationEvent fields on eval case save
  • eval pin the specific version for safety_v1
  • exclude the local .adk folder from deployed agent images
  • extract URL fragment key-value pairs as query params
  • fence server-supplied tool description before reaching the model
  • flows hold a tool call that requires confirmation in the framework
  • flows keep the streaming flags when after_model_callback replaces a response , closes #7035
  • flows only hold a tool call when its confirmation hook answers True
  • flows prune orphaned function calls on interrupted turns
  • flows release a tool thread pool when its event loop closes
  • forward tool output schema on the LiteLLM path , closes #6784
  • give each LocalEvalService its own default UserSimulatorProvider
  • hide run_skill_script when no skill has a script , closes #6281
  • honor capability for schema and tools , closes #6954
  • instruct models to format code for non-builtin sandbox executors
  • integrations hold sandbox and BigQuery session bindings in process
  • join streamed reasoning into one thought part per block , closes #6895
  • keep the latest write when parallel tool calls update a state list
  • litellm report malformed tool-call arguments instead of raising , closes #5896 #6716
  • live enqueue background function response events
  • live screen live content that does not complete the turn
  • make shell JSON envelope parsing robust to other stdout garbage
  • mark a workflow's span failed when one of its nodes failed
  • match a Latin word embedded in unspaced-script text
  • match tool response by name instead of assuming first part , closes #6603
  • mcp only attach application default credentials over https
  • mcp rebuild a session the server reports it no longer holds , closes #7060
  • mcp report an api key auth scheme that declares no key location
  • mcp widen MCP bound to admit MCP 2.x
  • measure the compaction token threshold against the agent's own prompt
  • models keep the keys beside "result" in a Claude tool result , closes #7073
  • models say how to reach a third-party model when a bare name misses
  • only load artifacts listed for the current session
  • openai robustly parse Chat Completions responses (finish_reason, usage, choices)
  • openai serialize non-string system_instruction
  • openapi handle HTTP 401 in RestApiTool and recover stale OAuth2 credentials
  • persist sandbox session state and add warning for static sandbox in AgentEngineSandboxCodeExecutor
  • plugins verify BigQuery table readiness once, not on every restart , closes #7017
  • preserve Annotated metadata in tool declarations and arg conversion
  • preserve empty text and bytes in memory
  • preserve eval case order when updating , closes #7220
  • preserve file artifact creation timestamps
  • prevent cubic backtracking in _strip_json_code_fence
  • prevent filenames from colliding with version storage
  • raise a clear error when conformance replay recordings are missing , closes #7128
  • raise clear ImportError when VertexAiSearchTool bypass needs gcp
  • raise InvocationNotFoundError instead of bare ValueError on rewind
  • raise when evaluate or evaluate_eval_set evaluates zero cases , closes #6951
  • redact signed URIs and HTTP options from errors and logs
  • reject num_samples=0 in JudgeModelOptions at construction time
  • reject parallelism < 1 in LocalEvalService instead of hanging
  • reject reserved path segments with slashes in validate_path_segment , closes #6973
  • reject the reserved segment 'user' as a session_id , closes #7063
  • report an A2A stream that ends before the remote task finishes , closes #6585
  • report the event fields a session backend cannot store
  • require agent authorship before resume-dispatching a function call
  • resolve agent transfers from the caller's declared targets
  • resolve deepcopy recursion in VertexAiCodeExecutor , closes #1762
  • restore oldest-first Redis session lists
  • run on_event callbacks for before_run early exits , closes #7007
  • runners ensure after_run plugin callback executes on early generator exit
  • runners keep the caller's OpenTelemetry trace in sync Runner.run
  • sessions avoid redundant temp state processing in append_event and exclude temp keys from rewind delta
  • sessions avoid runtime index drop and guard concurrent index creation
  • sessions disable pool reset on return for StaticPool in DatabaseSessionService
  • sessions report the redacted database URL when migration cannot connect
  • sessions stop get_user_state aliasing stored user state
  • skip unreplayable function responses
  • stop a re-emitted output echo from reordering the replay sequence , closes #7027
  • stop Agent import loading authlib
  • stop background tools before the transfer delay , closes #7006
  • stop internal Agent Config subclassing from warning on plain imports , closes #6968
  • stop probing for mTLS credentials on every MCP session
  • stop retaining spans on servers with no debug trace endpoint , closes #6915
  • stop returned sessions aliasing scoped state
  • stop the multimodal tool results plugin sending media twice
  • StreamingResponseAggregator drops/duplicates function calls in streaming mode , closes #6566
  • support openapi basic auth , closes #5492
  • telemetry make google.adk.telemetry.tracing importable on OpenTelemetry 1.39; google.adk.telemetry.google_cloud still needs a newer OpenTelemetry
  • telemetry record only the function responses on a merged tool span
  • tools clarify google_search_agent instruction to use built-in grounding
  • tools propagate outer CancelledError in stop_streaming
  • tools stop ExampleTool crashing a live run that opens with no message
  • trace tool calls under the agent, not under the model call
  • use full query text and own logger in PreloadMemoryTool , closes #6884
  • validate and coerce function tool argument types (opt-in; enable with ADK_ENABLE_FUNCTION_TOOL_ARG_VALIDATION=1) , closes #4612
  • validate the detect_anomalies target data subquery
  • workflow allow resolved interrupts to resume without rerun_on_resume
  • workflow do not leak descendant isolation_scope to parent in _reconstruct_node_states
  • workflow isolate peer task-mode agents in dynamic run_node calls
  • workflow resume interrupted agent transfers in static workflows
  • workflow unwrap Content inputs for parallel workers after START
Maintenance (17) ›
  • add unit guides for the third-party and cloud integrations
  • agents add BaseAgent unit guide
  • agents add Context unit guide
  • agents add InvocationContext unit guide
  • agents add LlmAgent unit guide
  • apps describe the sliding-window compaction that actually runs
  • list the twenty guides missing from the guides index
  • make the single-turn node example runnable
  • models add developer unit guide for ServiceTier
  • readme point the eval quickstart at a sample that exists
  • remove the 1.x breaking-changes callout from the README
  • rewrite the unit guides for the third-party integrations
  • samples add a Grok-4.6-on-Vertex sample using the labs OpenAI model
  • samples add a hello-world OpenAI sample using the labs OpenAI model
  • sessions document runtime DDL and concurrent index guidelines
  • telemetry name the real do_not_elide parameter
  • workflow index BaseNode unit guide in documentation
Read the original announcement →

https://github.com/google/adk-python/releases/tag/v2.10.0

Related releases