ADK Python SDK v2.8.0 Enhances AI Agent Development and Observability
sdkaiazuregcpgaengineermediapython-agentic
feature patch
The google/adk-python v2.8.0 release introduces significant features and bug fixes for the Agent Development Kit, aiming to improve AI agent development workflows. Key enhancements include native task mode for RemoteA2aAgent, new tools for data agent management, a Model Armor guardrail plugin, and NVIDIA NIM integration. The update also brings experimental telemetry for LLM token usage and call counts, alongside improved live streaming tools and Vertex AI API configuration. These changes empower developers with greater control, improved debugging, and enhanced security for building, evaluating, and operating AI agents.
- →add native task mode support to RemoteA2aAgent
- →add ADK_MAX_LLM_CALLS environment variable to configure max LLM calls limit
- →add create_data_agent tool to data_agent toolset
- →add delete_data_agent tool to data_agent toolset
- →add location parameter to list_accessible_data_agents in data_agent toolset
Features (31) ›
- a2a add native task mode support to RemoteA2aAgent
- add ADK_MAX_LLM_CALLS environment variable to configure max LLM calls limit
- add create_data_agent tool to data_agent toolset
- add delete_data_agent tool to data_agent toolset
- add location parameter to list_accessible_data_agents in data_agent toolset
- add Model Armor guardrail plugin
- add nvidia nim integration sample
- add sample for skill state injection via adk_inject_state
- add spreadsheet mime types to load_artifact_tool
- add update_data_agent tool to data_agent toolset
- allow configuring Vertex AI API version , closes #3246
- allow streaming tools to set response scheduling per yield
- antigravity capture client-side tool outcomes for a function_response
- cli Support Cloud Build worker pools for Agent Engine deploy
- eval support custom metrics in AgentEvaluator
- guard against SQL injection vulnerabilities in BigQuery tools
- live Add VIDEO to the allowed modalities in the ADK API server
- live let a live streaming tool send messages to the user directly
- live run before and after model callbacks in live mode
- live surface live interaction_status on LlmResponse and Event
- live use RunConfig.session_resumption.handle when opening a live session
- mcp report MCP HTTP exchanges as OpenTelemetry log records
- parallelize LLM-as-judge evaluation using asyncio.gather()
- preserve field descriptions in set_model_response schema , closes #6707
- record context cache state on the LLM call span
- resolve auth for RemoteA2aAgent in AgentRegistry
- support auth_scheme and auth_credential in RemoteA2aAgent
- support injecting custom LLM clients into Gemini and AnthropicLlm , closes #5027
- support memory_id and allowed_topics in Vertex Memory Bank
- support opt-in session retention in MultimodalToolResultsPlugin , closes #6695
- support sub-agent escalation event in ParallelAgent , closes #5104
Enhancements (7) ›
- buffer streamed function call arguments instead of concatenating
- key the Pub/Sub publisher cache on its options' value
- remove redundant event scans in prompt assembly
- remove redundant event scans in prompt assembly
- resolve the optional id-pairing providers once, not per request
- run local code execution in a plain child interpreter
- run the Google credential refresh off the event loop
Fixes (99) ›
- a2a keep file payloads out of the debug log line
- agents report which toolset an agent lost when one fails to load
- artifacts Publish file artifact versions atomically
- auth take the auth scheme from the request, not the client's response
- avoid O(n^2) deep event comparison during rehydration , closes #6657
- block yaml and ruamel deserialization in agent-config code references
- cache read write token counts in LiteLLM and Anthropic models , closes #5835
- check every function response, not just the first, when inferring which invocation to resume
- cli clean up pytest subprocesses on test-client disconnect
- cli Preserve non-ASCII text in adk test --rebuild, Web UI test saving, and CLI JSONL
- cli report env var names instead of values when overriding env_vars
- count tool call and response chars in compaction
- declare a2a-sdk[http-server] so the a2a extra can serve
- deduplicate events in InMemorySessionService.append_event , closes #5723
- deliver parallel sub-agent failures to the caller , closes #5455
- detect MCP tool errors under either field spelling
- disable Windows glob expansion for CLI args , closes #6248
- emit Anthropic prompt cache breakpoints for ContextCacheConfig , closes #5395
- fence relayed agent output so it cannot pose as instructions
- filter thought parts from A2A client user-facing response , closes #4676
- Fix built-in search tools in agent hierarchy when transfer_to_agent is present
- Fix crashes and cross-invocation leaks from copying RunConfig.http_options
- flows pair a function response with the call it answers , closes #6761
- flows sort function_call.args when rendering cross-agent context
- Guard invocation_context.branch assignment against mock SessionService instances
- guard against Content with no parts in _content_to_message_param
- handle read-only .git files in deploy cleanup on Windows
- honor before_run_callback early-exit for Workflow runs , closes #6013
- honor ContextCacheConfig on the LiteLLM path
- improve clarity and actionable context in error messages
- include grounding metadata in rubric judge prompt , closes #5831
- integrations send api registry credentials only to google api endpoints
- keep non-text static_instruction as a stable request prefix , closes #6652
- keep session identity across single-turn node contexts , closes #6691
- keep tool calls at most once
- live stop background tool tasks when a live agent run ends
- live stop live runs from writing back into the caller's RunConfig
- make SqliteSessionService state merges use dict.update() semantics , closes #6728
- mcp evict idle sessions from the MCP session pool
- only attach default credentials to https endpoints
- only emit --gemini_enterprise_app_name for adk_version >= 2.2.0
- pass file metadata tuple to Azure for PDF uploads , closes #6539
- percent-encode path parameter values in RestApiTool
- point to Gemini Enterprise registration docs after agent_engine deploy , closes #6633
- populate developer_instructions when invocation_events is empty , closes #5593
- prefer the function response's own invocation over a caller-supplied id on the node path
- prevent contextvars leak across async generators , closes #5722
- prevent duplicate function execution when support_cfc is enabled
- prevent duplicate OAuth prompts and fix tool resumption
- prevent duplicate synthetic user event on single-turn agent resumption
- prevent prompt injection via GitHub event data in workflows
- rank and bound the results of InMemoryMemoryService.search_memory
- re-raise agent errors from the synchronous Runner.run()
- read long-running function name from data, not metadata , closes #6295
- redact credentials from DebugLoggingPlugin output file
- redact credentials from generate_content_config.http_options in debug logs
- reject negative recent-event limits
- reject tool confirmations arriving over A2A , closes #6461
- report root_agent type mismatch instead of 'No root_agent found' , closes #6606
- resolve Claude 5 model names in the LLM registry
- resolve NameError in legacy create-eval-set route
- resolve nested provider behind litellm_proxy prefix , closes #6538
- resolve server disconnect logs
- resolve systemic parts[0] indexing bugs , closes #6616
- Restore invocation_context.branch from session history when executing a non-root agent node or resuming a sub-agent in Runner
- restrict unpickling of legacy v0 session event actions , closes #5634
- resume an invocation whose user message leads with a non-text part
- revert the A2A guard that broke every HITL tool confirmation
- route workflow IDs and retry jitter through platform seams
- samples widen numeric tool parameters to match their docstrings
- sanitize state deltas before writing them to JSON state columns
- send the required list on a CrewAI or LangChain function declaration
- sessions dedupe InMemorySessionService events by equality not id
- sessions load legacy v0 event actions with the restricted unpickler
- sessions stop dropping event actions on v0 PostgreSQL migration
- skills skip search results that fail frontmatter validation , closes #6838
- skip non-agent directories in AgentLoader.list_agents()
- skip non-numeric response keys in generate_return_doc , closes #6174
- stop re-sending thought summaries as conversation history
- stop re-sending thought summaries as conversation history
- stop RemoteA2aAgent forwarding credential requests to the remote peer
- stop the session liveness probe from crashing when the SDK moves its streams
- strip internal planning tags from PlanReActPlanner output , closes #3378
- telemetry End the inference span when the inference ends
- telemetry record call_llm span attributes when a plugin short-circuits the model call
- tools report no match instead of raising on empty retrieval
- tools run AgentTool nested agent in unary mode
- tools run an agent tool under the caller's RunConfig
- trigger Gemini 3.x Live response after sending conversation history
- update unit guide skill to exclude internal implementation details
- use OAuth2 client-credentials scheme for OpenAPI SA helpers , closes #6656
- use Unicode-aware keyword extraction in InMemoryMemoryService , closes #5501
- validate session initialization events , closes #5290
- validate SQL identifiers in Spanner search tool , closes #5913
- workflow cancel parallel worker items when the worker is cancelled
- workflow declare abc.ABC on BaseNode so abstract subclasses type-check
- workflow do not act on function calls in partial events , closes #6583
- workflow honor START as a satisfied JoinNode predecessor
- workflow resume node auth from the node's own auth config
Maintenance (9) ›
- add audio_stream_end documentation for realtime input
- correct node schema docstrings about which variants validate
- correct the documented contract of the invocation-subtree event filter
- fix typos and grammar in README
- guides add developer unit guide for BaseCodeExecutor
- guides add developer unit guide for BasePlanner
- guides add developer unit guide for Runner and Runner Live Streaming
- repair the workflow guides and document BaseNode
- tell sample creator skill not to prefix dirs with $category or suffix with _agent
Read the original announcement →
https://github.com/google/adk-python/releases/tag/v2.8.0
Related releases
- Pydantic-AI v2.35.1 Patch Release Addresses Bedrock and Temporal Bugs Pydantic AI Releases ·
- Pydantic-AI v2.35.0 Adds Features, Fixes Bugs, and Deprecates `RunContext` APIs Pydantic AI Releases ·
- Pydantic-AI v2.34.0 Introduces LangChain Migration and GLM-5.3 Support Pydantic AI Releases ·
- pydantic-ai v2.33.0 Enhances Anthropic SDK Compatibility, Resolves Runtime Issues Pydantic AI Releases ·
- Pydantic-AI v2.32.2 Delivers Critical Bug Fixes Pydantic AI Releases ·
- Pydantic-AI v2.32.1 Patch Addresses Agent Execution and Anthropic Integration Bugs Pydantic AI Releases ·