Skip to content

chore(release/candidate): release 2.10.0 - #7272

Merged
wyf7107 merged 8 commits into
release/candidatefrom
release-please--branches--release/candidate--components--google-adk
Sep 25, 2026
Merged

wyf7107 merged 8 commits into
release/candidatefrom
release-please--branches--release/candidate--components--google-adk

Conversation

@adk-bot

@adk-bot adk-bot commented Sep 24, 2026 •

Copy link
Copy Markdown
Collaborator

2.10.0 (2026-09-24)

Highlights

This release introduces advanced skill lifecycle management, expands database and model integration support, and brings richer efficiency metrics to agent evaluation.

  • Skills: Control resource usage and tool persistence dynamically using new ephemeral lifecycles and active skill limits (experimental; enable with ADK_ENABLE_SKILL_LIFECYCLE=1). (43b73e4)
  • Database Integrations: Perform high-performance vector and hybrid searches seamlessly within your agent flows with the new MongoDB toolset. (0961ced)
  • Evaluation: Optimize agent execution costs and latency with new evaluation metrics for tracking duration, token consumption, and model call counts. (2d428ea)
  • Model Support: Integrate OpenAI reasoning models more effectively with automated request parameter adaptation and precise reasoning token reporting. (52a2f0f)

Behavior changes

  • BigQuery protected write mode now runs a non-SELECT statement only when the dry run places it in the session's anonymous dataset, so multi-statement scripts, CALL, EXPORT DATA and other statements the dry run gives no destination are rejected. (8b883d0)
  • BigQuery protected mode keeps its BigQuery session in process memory instead of session state, so its temporary tables do not survive a restart or carry over to another replica. (094012b)
  • OpenAIResponsesLlm ignores thinking_config (thinking_level / thinking_budget) with a warning; use OpenAIGenerateContentConfig.effort instead. (b3d1392)
  • AgentEvaluator.evaluate and evaluate_eval_set raise ValueError when no eval cases are evaluated, instead of passing. (9dbc2ae)
  • Instruction templating leaves ${var} and backslash-escaped \{var} as written instead of filling them from state. (0caecd2)
  • Legacy live-audio modules under google.adk.flows.llm_flows (audio_cache_manager, audio_transcriber, transcription_manager) emit a DeprecationWarning on import; move to google.adk.live. Test suites run with -W error will fail on these imports. (bf2bc56)
All changes

Features

  • add a duration efficiency metric to ADK eval (49e7264)
  • add an EPHEMERAL skill lifecycle that lasts one turn (experimental, off by default; enable with ADK_ENABLE_SKILL_LIFECYCLE=1) (f938abd)
  • add an opt-in unload_skill tool to SkillToolset (experimental, off by default; enable with ADK_ENABLE_SKILL_LIFECYCLE=1) (ce53a36)
  • add dev-only deploy endpoints for Agent Runtime, Cloud Run, and GKE (1235104)
  • add informational efficiency metrics (tokens, calls) to ADK eval (2d428ea)
  • add MongoDB toolset with vector and hybrid search (0961ced)
  • add name-based request processor helpers to BaseLlmFlow (fd335cd)
  • add on_error handler to skill listing functions (9b220e7)
  • add optional context_builder to RemoteA2aAgent (322e3bf), closes #3301
  • add programmatic skill activation APIs to SkillToolset (a0f3955)
  • add skill lifecycle modes and an active-skill cap to SkillToolset (experimental, off by default; enable with ADK_ENABLE_SKILL_LIFECYCLE=1) (43b73e4)
  • bigquery: add default_project_id and default_dataset_id to BigQueryToolConfig (6f301fc)
  • cli: add gemini-3.8-flash to the adk create model options (6592ee5)
  • cli: auto-configure session and memory services on Agent Runtime (fede561)
  • context: add abort signal primitives to InvocationContext and Context; the Runner and workflows do not act on an abort yet (d99b23f)
  • drop an unloaded skill's instructions from later requests (experimental, off by default; enable with ADK_ENABLE_SKILL_LIFECYCLE=1) (accb906)
  • expose serving tier via RunConfig.service_tier (3e3d1dc)
  • expose session options in api_server REST endpoint (fa4719e), closes #6342
  • integrations: add a google-adk[openai] extra (9be86bf)
  • integrations: move the OpenAI models to google.adk.integrations.openai; google.adk.labs.openai still re-exports them (95c0591)
  • let SkillToolset notice that a loaded skill has changed (f848b7e)
  • mcp: identify ADK in the MCP clientInfo handshake (5117f28)
  • mcp: identify ADK in the User-Agent of MCP HTTP requests (061dcd6)
  • openai: adapt request params for reasoning models on both surfaces (137eba8)
  • openai: add api_key/base_url with per-request key resolution to OpenAILlm (56aabce)
  • openai: add OpenAIGenerateContentConfig and per-model reasoning effort (bb9023d)
  • openai: honor tool_config mode and all tool declarations in OpenAILlm (ed758bb)
  • openai: report reasoning tokens on Chat Completions; add live tests (52a2f0f)
  • openai: surface streaming usage and finish reason in OpenAILlm (ed030cb)
  • openai: use build_reasoning_effort for reasoning in OpenAIResponsesLlm (b3d1392)
  • send the deferred service tier on interactions API requests (cc912d5)
  • skills: add SkillDiscoveryMode to control how the skill catalog is disclosed (3d3c1d9), closes #7092
  • stamp the Agent Registry URN as gen_ai.main_agent.id (5c3f64e)
  • stream partial function-call arguments across model adapters (f449780)
  • telemetry: allow per-feature enabling of experimental telemetry (0add163)
  • tools: add behavior field to control Live non-blocking function calls (6189b2e)
  • when using interactions api with deferred tier, wait on an interaction operation (b011fb2)
  • workflow: filter rewound invocations during workflow rehydration (ab4dba6)
  • workflow: let DEFAULT_ROUTE fan out to several nodes (ffc191b)
  • workflow: unwrap NodeTool in build_node and bind state in _ToolNode (5c59a73)

Bug Fixes

  • accept a client factory written against either httpx major (b726964)
  • agents: accept the default hint in request_confirmation (768969d)
  • agents: allow descriptionless BaseNode in LlmAgent tools (6373f23)
  • agents: trigger after_agent_callback on cancellation (37aa730)
  • allow forwarding session ID as context_id for remote A2A agents (e10a1be)
  • auth: keep the OAuth2 client secret out of session state (9b9aac0)
  • auth: report an auth scheme that carries no OAuth2 flows (b22cfc4)
  • bigquery: reject writes protected mode cannot place in the session dataset (8b883d0)
  • bigtable: release the per-call data client in execute_sql (f39cbf5)
  • bound artifact reference resolution depth in load_artifact (87b9f25)
  • build the Gemini API clients once per event loop (8164341)
  • cli: omit http_options from the generated recordings file (09326ca)
  • cli: reject multi-line env values when generating the Dockerfile (8192d1b)
  • cli: use exec-form RUN/CMD in generated Dockerfiles and validate app names (9327437)
  • cli: validate the test name on every dev server test endpoint (4c2bafb)
  • coerce integral floats inside list[int] tool parameters (b1cba29)
  • compaction: stop backwards prompt token scan at compaction boundary (4d9abb5)
  • complete an A2A task whose run ends without a status message (9750c4c)
  • confine agent builder file globs to the configured directory (896a29a)
  • confirmation: skip confirmation requests authored by other agents before resolving history (e19ce05)
  • core: stop executing code found in the model's private reasoning (a2a2f66)
  • correct get_bigtable_data_client return annotation (c673c59)
  • do not match dollar-brace or escaped patterns in instructions (0caecd2), closes #5706
  • eval: ignore UI-only InvocationEvent fields on eval case save (a4a50a4)
  • eval: pin the specific version for safety_v1 (997f408)
  • exclude the local .adk folder from deployed agent images (c409bd3)
  • extract URL fragment key-value pairs as query params (0cfe43b)
  • fence server-supplied tool description before reaching the model (a519b6f)
  • flows: hold a tool call that requires confirmation in the framework (1d0daeb)
  • flows: keep the streaming flags when after_model_callback replaces a response (39e4538), closes #7035
  • flows: only hold a tool call when its confirmation hook answers True (659e28f)
  • flows: prune orphaned function calls on interrupted turns (54274cd)
  • flows: release a tool thread pool when its event loop closes (7ae1c9b)
  • forward tool output schema on the LiteLLM path (fca7b88), closes #6784
  • give each LocalEvalService its own default UserSimulatorProvider (55d47ae)
  • hide run_skill_script when no skill has a script (d8d9715), closes #6281
  • honor capability for schema and tools (e37af14), closes #6954
  • instruct models to format code for non-builtin sandbox executors (8aafa4e)
  • integrations: hold sandbox and BigQuery session bindings in process (094012b)
  • join streamed reasoning into one thought part per block (fed0e88), closes #6895
  • keep the latest write when parallel tool calls update a state list (d42a3be)
  • litellm: report malformed tool-call arguments instead of raising (75d84b1), closes #5896 #6716
  • live: enqueue background function response events (7807005)
  • live: screen live content that does not complete the turn (58b4fab)
  • make shell JSON envelope parsing robust to other stdout garbage (b07ec93)
  • mark a workflow's span failed when one of its nodes failed (dfc4b58)
  • match a Latin word embedded in unspaced-script text (13ecc31)
  • match tool response by name instead of assuming first part (f199858), closes #6603
  • mcp: only attach application default credentials over https (5a018c9)
  • mcp: rebuild a session the server reports it no longer holds (86ea33d), closes #7060
  • mcp: report an api key auth scheme that declares no key location (d7370e1)
  • mcp: widen MCP bound to admit MCP 2.x (d64dcfa)
  • measure the compaction token threshold against the agent's own prompt (8ccea93)
  • models: keep the keys beside "result" in a Claude tool result (ffb5363), closes #7073
  • models: say how to reach a third-party model when a bare name misses (87ccdc7)
  • only load artifacts listed for the current session (cb7c469)
  • openai: robustly parse Chat Completions responses (finish_reason, usage, choices) (f28d28a)
  • openai: serialize non-string system_instruction (783463d)
  • openapi: handle HTTP 401 in RestApiTool and recover stale OAuth2 credentials (9511479)
  • persist sandbox session state and add warning for static sandbox in AgentEngineSandboxCodeExecutor (73ab76d)
  • plugins: verify BigQuery table readiness once, not on every restart (a9cf81f), closes #7017
  • preserve Annotated metadata in tool declarations and arg conversion (2ecb3fb)
  • preserve empty text and bytes in memory (df55309)
  • preserve eval case order when updating (a6c6623), closes #7220
  • preserve file artifact creation timestamps (e93ff5b)
  • prevent cubic backtracking in _strip_json_code_fence (3a06a86)
  • prevent filenames from colliding with version storage (26e8af2)
  • raise a clear error when conformance replay recordings are missing (7a1b49f), closes #7128
  • raise clear ImportError when VertexAiSearchTool bypass needs gcp (4e73b7d)
  • raise InvocationNotFoundError instead of bare ValueError on rewind (fc16a78)
  • raise when evaluate or evaluate_eval_set evaluates zero cases (9dbc2ae), closes #6951
  • redact signed URIs and HTTP options from errors and logs (f425287)
  • reject num_samples=0 in JudgeModelOptions at construction time (85e0868)
  • reject parallelism < 1 in LocalEvalService instead of hanging (9beb524)
  • reject reserved path segments with slashes in validate_path_segment (5e29872), closes #6973
  • reject the reserved segment 'user' as a session_id (b8de426), closes #7063
  • report an A2A stream that ends before the remote task finishes (e29ee23), closes #6585
  • report the event fields a session backend cannot store (3e1ae9f)
  • require agent authorship before resume-dispatching a function call (2c61b84)
  • resolve agent transfers from the caller's declared targets (1538efe)
  • resolve deepcopy recursion in VertexAiCodeExecutor (b3fe92b), closes #1762
  • restore oldest-first Redis session lists (6863842)
  • run on_event callbacks for before_run early exits (63e918a), closes #7007
  • runners: ensure after_run plugin callback executes on early generator exit (ba89707)
  • runners: keep the caller's OpenTelemetry trace in sync Runner.run (1760b06)
  • sessions: avoid redundant temp state processing in append_event and exclude temp keys from rewind delta (52b247e)
  • sessions: avoid runtime index drop and guard concurrent index creation (cd6dee0)
  • sessions: disable pool reset on return for StaticPool in DatabaseSessionService (8ff50af)
  • sessions: report the redacted database URL when migration cannot connect (1579927)
  • sessions: stop get_user_state aliasing stored user state (dd96b81)
  • skip unreplayable function responses (7dcfade)
  • stop a re-emitted output echo from reordering the replay sequence (4b819ab), closes #7027
  • stop Agent import loading authlib (ac1d51b)
  • stop background tools before the transfer delay (c79f60f), closes #7006
  • stop internal Agent Config subclassing from warning on plain imports (3699fad), closes #6968
  • stop probing for mTLS credentials on every MCP session (dfc96d0)
  • stop retaining spans on servers with no debug trace endpoint (7560061), closes #6915
  • stop returned sessions aliasing scoped state (557643b)
  • stop the multimodal tool results plugin sending media twice (a4d97b7)
  • StreamingResponseAggregator drops/duplicates function calls in streaming mode (3cf4ce2), closes #6566
  • support openapi basic auth (f2fe475), closes #5492
  • telemetry: make google.adk.telemetry.tracing importable on OpenTelemetry 1.39; google.adk.telemetry.google_cloud still needs a newer OpenTelemetry (8f1323a)
  • telemetry: record only the function responses on a merged tool span (42358b1)
  • tools: clarify google_search_agent instruction to use built-in grounding (56d3cae)
  • tools: propagate outer CancelledError in stop_streaming (b8836bd)
  • tools: stop ExampleTool crashing a live run that opens with no message (1414fac)
  • trace tool calls under the agent, not under the model call (83d966c)
  • use full query text and own logger in PreloadMemoryTool (82687cf), closes #6884
  • validate and coerce function tool argument types (opt-in; enable with ADK_ENABLE_FUNCTION_TOOL_ARG_VALIDATION=1) (24b37e1), closes #4612
  • validate the detect_anomalies target data subquery (60d0a9b)
  • workflow: allow resolved interrupts to resume without rerun_on_resume (307d041)
  • workflow: do not leak descendant isolation_scope to parent in _reconstruct_node_states (2fb34bc)
  • workflow: isolate peer task-mode agents in dynamic run_node calls (ddbb59e)
  • workflow: resume interrupted agent transfers in static workflows (97aefd8)
  • workflow: unwrap Content inputs for parallel workers after START (e80677d)

Performance Improvements

  • sessions: add id DESC to events composite index to eliminate filesort (a00a2a9)
  • sessions: cache TypeAdapter in State and support key iteration (220acfd)
  • trace a streamed model call once instead of once per chunk (733162e)
  • workflow: avoid redundant event scans in _apply_rewinds and NodeRunner (f5ef8df)

Documentation

  • add unit guides for the third-party and cloud integrations (3d70669)
  • agents: add BaseAgent unit guide (7d42b78)
  • agents: add Context unit guide (c03683a)
  • agents: add InvocationContext unit guide (5f3b6f0)
  • agents: add LlmAgent unit guide (75bf1dc)
  • apps: describe the sliding-window compaction that actually runs (9cb4eed)
  • list the twenty guides missing from the guides index (68204f5)
  • make the single-turn node example runnable (06d4895)
  • models: add developer unit guide for ServiceTier (0636bf8)
  • readme: point the eval quickstart at a sample that exists (c3f4e63)
  • remove the 1.x breaking-changes callout from the README (d69f995)
  • rewrite the unit guides for the third-party integrations (1addd76)
  • samples: add a Grok-4.6-on-Vertex sample using the labs OpenAI model (40a0a8d)
  • samples: add a hello-world OpenAI sample using the labs OpenAI model (eb1a002)
  • sessions: document runtime DDL and concurrent index guidelines (0002760)
  • telemetry: name the real do_not_elide parameter (c7ae45a)
  • workflow: index BaseNode unit guide in documentation (692b40a)

@adk-bot
adk-bot force-pushed the release-please--branches--release/candidate--components--google-adk branch from 466adcd to 57fa7dc Compare September 24, 2026 21:16
@github-actions

Copy link
Copy Markdown

Release artifact check: PASS

Comparing 2.10.0 against 2.9.2.
Modules swept: 764 candidate, 722 baseline.

No module regressed against the baseline.

New modules that do not import (3)

Not a failure. New modules usually sit behind an optional extra, so this is expected on a bare install -- but a module that is meant to work without extras belongs on the list above, so it is worth a glance.

  • google.adk.a2a.agent._remote_a2a_agent
    • ModuleNotFoundError: No module named 'a2a'
  • google.adk.integrations.openai._openai_llm
    • ImportError: The 'openai' package is not installed. Please install it with pip install "google-adk[openai]" to use the OpenAILlm.
  • google.adk.integrations.openai._openai_responses_llm
    • ImportError: The 'openai' package is not installed. Please install it with pip install "google-adk[openai]" to use the OpenAI Responses API models.
No longer shipped (12)
  • google.adk.flows.llm_flows._batch_tool_executor
  • google.adk.flows.llm_flows._content_compaction
  • google.adk.flows.llm_flows._invocation_utils
  • google.adk.flows.llm_flows._output_schema_processor
  • google.adk.flows.llm_flows._resume_utils
  • google.adk.flows.llm_flows._tool_call_rearranger
  • google.adk.flows.llm_flows._tool_caller
  • google.adk.flows.llm_flows._tool_error_handler
  • google.adk.labs.openai._openai_llm
  • google.adk.labs.openai._openai_responses_llm
  • google.adk.labs.openai._openai_schema
  • google.adk.workflow._schedule_dynamic_node

@wyf7107 wyf7107 changed the title chore(release/candidate): release 3.0.0 chore(release/candidate): release 2.10.0 Sep 24, 2026
@wyf7107
wyf7107 merged commit 644cc16 into release/candidate Sep 25, 2026
27 of 30 checks passed
@wyf7107
wyf7107 deleted the release-please--branches--release/candidate--components--google-adk branch September 25, 2026 18:58
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants