diff --git a/.github/.release-please-manifest.json b/.github/.release-please-manifest.json index a00a190418..6ed9c80128 100644 --- a/.github/.release-please-manifest.json +++ b/.github/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "2.6.3" + ".": "2.7.0" } diff --git a/CHANGELOG.md b/CHANGELOG.md index 1503128777..ed93c2b12c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,261 @@ # Changelog +## [2.7.0](https://github.com/google/adk-python/compare/v2.6.3...v2.7.0) (2026-08-13) + +### Highlights + +A correctness release: most of the work went into what an agent sends to the model and what it gets back, alongside a long tail of fixes across tools, sessions, evaluation and the CLI. + +* **Models declare their own capabilities**: an agent pairs an output schema with tools when the model actually supports it, instead of ADK inferring support from the model id. ([2aff82c](https://github.com/google/adk-python/commit/2aff82c30923e5f7df5ce4101db52bce82740329), [dc5dbfa](https://github.com/google/adk-python/commit/dc5dbfa2e475f2461177e80f7fa28c96a2bc3592)) +* **Tools can return media**: a tool's function response carries images and other media straight back to the model, on Gemini and on Anthropic, LiteLLM, Apigee and OCI alike. ([df9d6de](https://github.com/google/adk-python/commit/df9d6dec58f4cb22a1010b72e9fd8d347ce8145a), [703cf43](https://github.com/google/adk-python/commit/703cf43f6b03550ec2b02def526f3f4ba98f7abd)) +* **Conversation history keeps what Gemini needs**: thought signatures, server-side tool call parts, and every result of a parallel function call survive the round trip. ([d4ed347](https://github.com/google/adk-python/commit/d4ed3475397d16f9eb8d851f8945a6ed8121b6a8), [e908137](https://github.com/google/adk-python/commit/e908137125f9e14b3061f45f34f5379b48693313), [93dff41](https://github.com/google/adk-python/commit/93dff41417e81bad6150bd91acf1d73dedc298dc)) +* **Jinja2 instruction templates**: pass `use_jinja2=True` to `inject_session_state` and an instruction can use conditionals and loops over session state, with artifacts loaded through a `{{ artifact("name") }}` helper. Jinja2 stays an optional dependency and the regex engine remains the default. ([4a00a34](https://github.com/google/adk-python/commit/4a00a344cfa03062f74e71dac0a5580514d9cea4)) +* **Faster startup and hot paths**: `import google.adk` does less work, and the request path avoids Pydantic round-trips and quadratic streaming accumulation in the LiteLLM adapter. ([8806dc2](https://github.com/google/adk-python/commit/8806dc2bd8fb37004dee9ca50d9e774481f89afb), [9e1adde](https://github.com/google/adk-python/commit/9e1addedfff7e35e95a2ad120c8b30fe543af04c), [36fd2c8](https://github.com/google/adk-python/commit/36fd2c8e0cf9dddec66bb0c109518cdc2fbdb3b6)) + +#### Breaking changes + +* **`pyarrow` left the `gcp` extra**: it lives in the new `bigquery-analytics` extra, which takes roughly 50 MB off `pip install google-adk[gcp]`. If you use `BigQueryAgentAnalyticsPlugin`, install `google-adk[bigquery-analytics]`. ([ac71709](https://github.com/google/adk-python/commit/ac717091f6644f348c6f7e65a43cc0475a28fe45)) + +### ⚠ BREAKING CHANGES + +* **deps:** move pyarrow out of the gcp extra + +
+All 212 changes + +### Features + +* accept a pre-configured client on the labs OpenAI model ([461205c](https://github.com/google/adk-python/commit/461205c8bac7f8679dc38a818c7839f18e855e95)), closes [#4180](https://github.com/google/adk-python/issues/4180) +* add express mode telemetry logging for ADK CLI onboarding ([4ccc6be](https://github.com/google/adk-python/commit/4ccc6be6d4229adea8f7738b1444b1683673d145)) +* add gen_ai.agent.name attribute to execute_tool spans ([1a80962](https://github.com/google/adk-python/commit/1a80962124d54dbbb052327c00c7ba9f215fb39b)) +* add Jinja2 templating with use_jinja2 flag ([4a00a34](https://github.com/google/adk-python/commit/4a00a344cfa03062f74e71dac0a5580514d9cea4)), closes [#2942](https://github.com/google/adk-python/issues/2942) +* add option to save eval results to CSV ([3bbc8ed](https://github.com/google/adk-python/commit/3bbc8ed2cf8c719f163b9a6d9de5833ec05a1675)), closes [#2652](https://github.com/google/adk-python/issues/2652) +* add parent terminal grouping and TTL pruning to ADK CLI telemetry ([2c6a7ff](https://github.com/google/adk-python/commit/2c6a7ffb4a8f46e2bf94359290476a2664ddf8b6)) +* **agent:** add native task mode support to root LlmAgent ([dd0de52](https://github.com/google/adk-python/commit/dd0de5229fb21ff93c07da5124a9a0aee82b3eea)) +* Allow clients using the load_artifacts_tool to customize how attachment data is fed to the LLM ([b66cba2](https://github.com/google/adk-python/commit/b66cba28097e5922786571bc46224030a9c08d57)) +* capture TTY connectivity in CLI environment telemetry ([c12a025](https://github.com/google/adk-python/commit/c12a025184cec7859d829d8ce7178ddbe3e2e302)) +* **cli:** auto-discover test_config.json for single eval file in adk eval ([0477e57](https://github.com/google/adk-python/commit/0477e5743bdf5e0cce5a698951c7b70a07baa80a)), closes [#4410](https://github.com/google/adk-python/issues/4410) +* enforce unit guide requirement for new Python files ([942b38d](https://github.com/google/adk-python/commit/942b38df34a3963618f92ced9499b863de5a082d)) +* **environment:** Add support for executing skill scripts within an Environment ([fa31b6c](https://github.com/google/adk-python/commit/fa31b6ca9886eb48b9ac9c0dfe4f70c4443e1488)) +* **evaluation:** add optional eval set result persistence to AgentEvaluator ([76027dd](https://github.com/google/adk-python/commit/76027ddb2f1f932d45dc0611c07c08b6025c2774)) +* **eventarc:** Support Context callables and correct OMIT behavior ([a3bd111](https://github.com/google/adk-python/commit/a3bd11152db6562054db1c509ec44509436d99e7)) +* Extend HTTP trace debugging to MCP Toolset operations ([6d8045c](https://github.com/google/adk-python/commit/6d8045c23fe0b6624d2dd928a2a21e1c07ad8957)) +* honor model-declared capabilities when pairing an output schema with tools ([dc5dbfa](https://github.com/google/adk-python/commit/dc5dbfa2e475f2461177e80f7fa28c96a2bc3592)) +* honor return_direct on Langchain tools wrapped by LangchainTool ([c2249f3](https://github.com/google/adk-python/commit/c2249f390e3d67a6c4eb6aa4dffc7b2aca8c3f13)), closes [#2157](https://github.com/google/adk-python/issues/2157) +* Introduce a capability reporting system for LLM models ([2aff82c](https://github.com/google/adk-python/commit/2aff82c30923e5f7df5ce4101db52bce82740329)) +* **labs/antigravity:** allow mode='single_turn' AntigravityAgents to be sub-agents ([6ed484d](https://github.com/google/adk-python/commit/6ed484dc8762efe42cdaf6286c20fbab177ba5e8)) +* let McpToolset reuse the MCP server's tool list ([9cd5975](https://github.com/google/adk-python/commit/9cd5975380ad977d7e38f926a1d993eb295c9457)) +* let tools return media in the function response ([df9d6de](https://github.com/google/adk-python/commit/df9d6dec58f4cb22a1010b72e9fd8d347ce8145a)) +* **live:** forward safety_settings from generate_content_config to the Live API ([0a6d05d](https://github.com/google/adk-python/commit/0a6d05da3b6ce912fa6f53eef1d97f638522817c)) +* **plugins:** add BigQuery Agent Analytics delivery and termination observability ([04b8b72](https://github.com/google/adk-python/commit/04b8b72709f6d17b503cf674c8ac1b89798f655e)) +* Promote Data Agent tools to stable ([fd33158](https://github.com/google/adk-python/commit/fd33158f3db2cbb2faf9aab9f82836949fa274fd)) +* record implicit vs explicit context cache type in analytics ([5072828](https://github.com/google/adk-python/commit/5072828f70ca3c1c9bb98650fb4b596ce3895ba6)) +* **skills:** support non-blocking skill loading in async runtimes ([61ddc5f](https://github.com/google/adk-python/commit/61ddc5fa8e850ac9082fc260d26cd10e3388d6e4)), closes [#6057](https://github.com/google/adk-python/issues/6057) +* Stop using the obsolete Gemini 1.x / Gemini 2+ model-id check in ADK ([745de0a](https://github.com/google/adk-python/commit/745de0ac13c4f2d5b3b158cf8431feb3156ea4fa)) +* Stop using the obsolete Gemini 1.x / Gemini 2+ model-id check in ADK url context tool ([eaab262](https://github.com/google/adk-python/commit/eaab26219ad4b14c3b4ae1f3d06571e072a830cc)) +* support audio_stream_end for realtime input ([0f738a5](https://github.com/google/adk-python/commit/0f738a549413713a059fd24b12e7f34580f6613a)) +* Support elicitation_callback in McpToolset ([4824619](https://github.com/google/adk-python/commit/48246195ac55f7cf57c7dbe74c511bf43a787e20)) +* **telemetry:** add feature gate for experimental telemetry ([75fb254](https://github.com/google/adk-python/commit/75fb2544e1d4b9e8753f1a30dc4dc3ad4097a7b9)) +* **telemetry:** Expand load_skill telemetry ([bddbb3d](https://github.com/google/adk-python/commit/bddbb3dd8cedb3a2e49449573d87ff51f846df40)) +* update skill model to include its origin ([08bd589](https://github.com/google/adk-python/commit/08bd5890552d33ed17ae3640c61992cec9065d25)) +* warn when agent transfer runs without a context cache config ([0cf10a5](https://github.com/google/adk-python/commit/0cf10a543ec9aef582f83fe216eaa2b7e28d26eb)) + + +### Bug Fixes + +* **a2a:** adopt a directly supplied agent card's description ([4f58306](https://github.com/google/adk-python/commit/4f583064778bcacd7ea7baa1fbe16fdd0aa2e630)) +* **a2a:** flatten human-input responses on resume to avoid mixing them with text ([aec7aa3](https://github.com/google/adk-python/commit/aec7aa33c8c6b16a15dcfb79bd3dd7689c206924)) +* add .adk/ to the .gitignore generated by adk create ([374aab3](https://github.com/google/adk-python/commit/374aab372a0359226f52ec921b98741fecf8704d)), closes [#6647](https://github.com/google/adk-python/issues/6647) +* add 20MB file size validation to SaveFilesAsArtifactsPlugin ([9827790](https://github.com/google/adk-python/commit/98277905ba1b3445474dc3334427aad31617573c)), closes [#3751](https://github.com/google/adk-python/issues/3751) +* Add regional and MREP endpoint routing for DataAgentToolset ([20842eb](https://github.com/google/adk-python/commit/20842eb8e035a6e128b7585ca81f4625e00147c2)) +* **adk:** share a single component-owner map between the triaging agents ([1ad0543](https://github.com/google/adk-python/commit/1ad05439e0381ca863c182e8051affb4db7fadd1)) +* allow injecting credentials into VertexAiMemoryBankService ([18903ca](https://github.com/google/adk-python/commit/18903cadb5968b427220933d5ad1b42ea90dbc2c)) +* **artifacts:** list artifacts nested under another artifact from disk ([a5864a0](https://github.com/google/adk-python/commit/a5864a0ed6050c5d3498ceae856f8783746e419b)) +* **artifacts:** reject rooted, drive-qualified and traversing artifact paths ([2716ad5](https://github.com/google/adk-python/commit/2716ad55b8e9eb0c4f719f65bdc0b3f2a26cc551)) +* **artifacts:** sort and guard GCS artifact version listing ([1f354b8](https://github.com/google/adk-python/commit/1f354b8937c16efbfd689b16ca2d56e77cbe93e8)) +* **artifacts:** stop conflating an artifact with the artifacts nested under it ([08d21cc](https://github.com/google/adk-python/commit/08d21cc35569939d033fdac296e349be7c5d2268)) +* attribute a compaction summary to the agent reading it ([c20ccef](https://github.com/google/adk-python/commit/c20ccefe5ef5e21f974923b8a8c9c3817e79787b)) +* **auth:** set a request timeout on OAuth2 token exchange and refresh ([3f3c8f5](https://github.com/google/adk-python/commit/3f3c8f527d23702ea6e077ead63d32438a85b0bd)) +* block the whole standard library in agent-config code references ([a16f6da](https://github.com/google/adk-python/commit/a16f6da3314b8dcd9925884cd6fc7fc9ffdd570d)) +* bound Apigee completions HTTP client timeout and redirects ([f57a67d](https://github.com/google/adk-python/commit/f57a67d638a71899404dba2d4899ff42459e9f09)) +* bound the entries and bytes read from a skill zip archive ([fa136c4](https://github.com/google/adk-python/commit/fa136c432a416706b12f667110e3742e422c0311)) +* **bqaa:** skip synchronous log flush to prevent blocking responses ([6fd7eaf](https://github.com/google/adk-python/commit/6fd7eaf92a59ffb13806281d51628136e812cc6d)) +* call build_planning_instruction on custom planners ([2bdf4de](https://github.com/google/adk-python/commit/2bdf4debd0f657a4666471ec0c6dcaadd9c8c51f)) +* **ci:** run the update-constraints hook in check mode ([74e7167](https://github.com/google/adk-python/commit/74e7167d13a75b8eaab6e30a7af39e8c55315fc0)) +* **ci:** stop CI resolving against half-published PyPI releases ([f4b432d](https://github.com/google/adk-python/commit/f4b432db114e58aa8f406017bf5e1b871d31e1bf)) +* **cli:** implement early telemetry recording for long-running web servers and log successful exit code upon routine teardown ([77726c5](https://github.com/google/adk-python/commit/77726c55b33d6da1688a3d6893fe5e474d79116b)) +* **cli:** normalize trigger user ids for sessions ([e03dbab](https://github.com/google/adk-python/commit/e03dbab2d480d85f2ae3f61e66e1ace5344d1727)) +* **cli:** stream_reasoning_engine raises StopIteration RuntimeError on sync generators ([aa9c187](https://github.com/google/adk-python/commit/aa9c187f46e7ce06cdab28f0dcd51ba7c1497ee7)) +* **cli:** track full server duration and log routine Ctrl+C termination as success ([0fcfe99](https://github.com/google/adk-python/commit/0fcfe99a50e75795407af7cd281a4b45580fef44)) +* **cli:** update gcloud command to use beta flag ([9630559](https://github.com/google/adk-python/commit/9630559830da28a187ba75ef1c26c64780dd7987)) +* coerce non-string enum values to strings on string-typed Gemini schemas ([30f32e3](https://github.com/google/adk-python/commit/30f32e3a9599ee165a323a8c72bfae2bb308cb95)), closes [#3401](https://github.com/google/adk-python/issues/3401) +* collect eval state from workflow nodes ([568b4f6](https://github.com/google/adk-python/commit/568b4f6b54d63dd8f5be16a6b704ecec8816bab3)) +* constrain the RPC targets of a network-fetched A2A agent card ([16cbb7d](https://github.com/google/adk-python/commit/16cbb7d1c6020ec9a2d26ef97b6041410f0d256c)) +* **core:** stop the Cloud Run sandbox executor waiting forever ([a39e71a](https://github.com/google/adk-python/commit/a39e71aace8490772b9fb554713ba964f7225adf)) +* declare the redis extra that RedisSessionService asks for ([957dc2b](https://github.com/google/adk-python/commit/957dc2bd9fae932ee56aa8d4bffeb6331c10607f)) +* **deps:** exclude LangGraph releases with unsafe checkpoint loading ([1b12ee3](https://github.com/google/adk-python/commit/1b12ee39ab07897d2290bcce2551625ed422e060)) +* **deps:** exclude nltk 3.10.1, which breaks venvs living inside the working directory ([1a0c3bd](https://github.com/google/adk-python/commit/1a0c3bd49f512dc3b01e3e83185a6315ae3e954b)) +* **deps:** stop the published constraints from pinning google-adk itself ([c44c543](https://github.com/google/adk-python/commit/c44c543e938d259c4ce145b66c62873bd9d330ec)) +* disable dev endpoints for production deployment both AE and Cloud Run ([b795a9b](https://github.com/google/adk-python/commit/b795a9ba8680f70ca4e705a80e4d0951ad0a0e60)) +* emit additional_properties with value type schema in dict branch ([93f57f4](https://github.com/google/adk-python/commit/93f57f472796bc8ccdf922fcc085169e1585768a)), closes [#4868](https://github.com/google/adk-python/issues/4868) +* **eval:** fail the eval when an agent crashes before any metric runs ([efeec70](https://github.com/google/adk-python/commit/efeec703dad61357ad1d79860a4696d4801ce487)) +* **eval:** grade judge metrics against the criterion's threshold ([bcce415](https://github.com/google/adk-python/commit/bcce415ee80fa008dee796d8a6f24ebb77d6f6f8)) +* **eval:** grade rouge metric against its criterion threshold ([83f7912](https://github.com/google/adk-python/commit/83f79123aae4d2473f1fe374a696250cca60de5d)) +* **evaluation:** validate path segments in GCS eval set/result managers ([a56f6e1](https://github.com/google/adk-python/commit/a56f6e13ae38296b608808c7a3b37efe4b8c862e)) +* fix inconsistencies in sample paper content and naming ([423434a](https://github.com/google/adk-python/commit/423434aa9dbe04837dec84fac9223f3b331f3c25)), closes [#6651](https://github.com/google/adk-python/issues/6651) +* Fix permissions for release cherry pick workflow ([07a37da](https://github.com/google/adk-python/commit/07a37da11bfd96d73d1a78cd9fb0ac1fb4d786b8)) +* **flows:** count compositional function calling against max_llm_calls ([bb9709d](https://github.com/google/adk-python/commit/bb9709d74b0ce7c316de162531cb9f7dad28042a)) +* **flows:** inject transfer_to_agent tool for HITL confirmation resume ([0897bee](https://github.com/google/adk-python/commit/0897bee6a01928cc89a2ba229d42834f77b33e85)), closes [#5633](https://github.com/google/adk-python/issues/5633) +* gate --sandbox-launcher behind gcloud beta run deploy ([547f1eb](https://github.com/google/adk-python/commit/547f1ebaf42ed5dbc81755bf9dd0919190778ee6)), closes [#6511](https://github.com/google/adk-python/issues/6511) +* guard reads in the local API server against DNS rebinding ([2cf4fd1](https://github.com/google/adk-python/commit/2cf4fd1ddcceea93d60df8eb6c0a7e775e867230)) +* handle non-numeric OpenAPI response keys in return-doc generation ([b5be64c](https://github.com/google/adk-python/commit/b5be64c075ae3068d96bc3e0bf6930e4526fce55)) +* handle optional and union pydantic models with string annotations ([94d08cd](https://github.com/google/adk-python/commit/94d08cd69ff97d8c59ac9af4d26e40316bbb3102)) +* honor Apigee request timeouts ([2547db6](https://github.com/google/adk-python/commit/2547db61dd4599d5e0ac2f77cd0b45f5ded6b498)) +* honor num_recent_events=0 in VertexAiSessionService.get_session ([923dee7](https://github.com/google/adk-python/commit/923dee79707049d93e94d081a90f7aa70e0896f2)) +* ignore unsafe A2A peer-supplied event actions metadata ([0ba7d3c](https://github.com/google/adk-python/commit/0ba7d3cba7004c0fcc0a05f1f4cfb6ea78e38f91)) +* import jinja2 lazily so it is not a required dependency ([f828667](https://github.com/google/adk-python/commit/f828667ee07f620e4680dd7acd460ee324302163)) +* install every optional runtime dependency with the all extra ([f5c09dc](https://github.com/google/adk-python/commit/f5c09dce1120bdc14f12026dd5fb6a3ee401b8dc)) +* isolate per-toolset failures in additional-tools resolution ([cdf895f](https://github.com/google/adk-python/commit/cdf895fe2c5f621fa522b2f938bde7ee7ffe16ea)) +* keep agent instructions out of the published A2A agent card ([efdecf4](https://github.com/google/adk-python/commit/efdecf4c457639fb8bee793dc2c7b54e59140a94)) +* keep preloaded context turn-scoped ([be103fb](https://github.com/google/adk-python/commit/be103fbd2f2ef4804afd691e37de53def2b4f934)) +* keep regular-tool FRs on mixed task turns ([4cab3ac](https://github.com/google/adk-python/commit/4cab3ac1bfb7ad2be264cf2adae32685fe695338)), closes [#6581](https://github.com/google/adk-python/issues/6581) +* keep server-side tool call parts in conversation history ([e908137](https://github.com/google/adk-python/commit/e908137125f9e14b3061f45f34f5379b48693313)) +* keep subpackages reachable as attributes of a lazy package ([ae5118d](https://github.com/google/adk-python/commit/ae5118d5b20d031def0d60f2439b6748428656c8)) +* keep thought signature parts in conversation history ([d4ed347](https://github.com/google/adk-python/commit/d4ed3475397d16f9eb8d851f8945a6ed8121b6a8)) +* keep thought signatures when merging streamed text ([fae470f](https://github.com/google/adk-python/commit/fae470f7bd8fd96341e78af6f069f5410d65f3d8)) +* Key directory-loaded skill resources with forward slashes ([bc2c97c](https://github.com/google/adk-python/commit/bc2c97cbdf086c08aca345225a63e69992d28341)) +* key in-memory memory store by app_name and user_id tuple ([fd8f7eb](https://github.com/google/adk-python/commit/fd8f7eb2a31e62c892751943b941e141d2e87f59)) +* kill runaway code on timeout in container and local executors ([27548e3](https://github.com/google/adk-python/commit/27548e392f8a8503609a6abce0fb8081e8fb24f5)) +* **labs/antigravity:** report node input and output from AntigravityAgent ([fd7df0e](https://github.com/google/adk-python/commit/fd7df0e75bd0c768f8669c51d9e5261705b4ab76)) +* lift file references and nested parts out of tool results ([22f5546](https://github.com/google/adk-python/commit/22f55462fdbf629eee386a27f1159de15c2edbdd)), closes [#2577](https://github.com/google/adk-python/issues/2577) +* **litellm:** convert http_options.timeout from milliseconds to seconds ([e74917e](https://github.com/google/adk-python/commit/e74917e71905bb9d341302ce059c46245b7b727f)) +* **live:** end the Live agent when `task_completed` is called in parallel ([cebfd74](https://github.com/google/adk-python/commit/cebfd74afc786a573fbf425a52aefe3873d38e68)) +* **live:** transfer to the target agent regardless of function response order ([c198695](https://github.com/google/adk-python/commit/c1986951236b96db4726afd5e920ad7e9783fef2)) +* lower oneOf to anyOf so a union schema reaches Gemini intact ([4da8dd7](https://github.com/google/adk-python/commit/4da8dd7f8bff9a9ff84a23cb707ac5696512cb60)) +* make advertised tool names match the names tools are registered under ([b26d4f6](https://github.com/google/adk-python/commit/b26d4f67cb99046be5819c7da163cc79a7c2acbc)) +* make parallel worker failure propagation test deterministic ([308c818](https://github.com/google/adk-python/commit/308c818867ecefdf68b13eca73a11e5b618b6746)) +* mark the session type decorators as safe for statement caching ([e182146](https://github.com/google/adk-python/commit/e182146f9532474f8d2224368b07ba058223fffa)) +* **mcp:** bound the wait for an MCP session to become ready ([de200b5](https://github.com/google/adk-python/commit/de200b50bc6e7d37ad6665e2a2a852221e4d18f6)) +* **mcp:** reject stdio MCP servers declared in agent configs by default ([a61d8ec](https://github.com/google/adk-python/commit/a61d8ecf294515016a42080cc833fd8f73915695)) +* **memory:** scope Vertex RAG retrieval to the requesting app and user ([fbeab00](https://github.com/google/adk-python/commit/fbeab000103fb67440b2ccbbc566a1b44723e643)) +* **models:** honor an LLM registered after that name was resolved ([03f44c8](https://github.com/google/adk-python/commit/03f44c8e108e43f13c1de5acb53a88940f9e77f1)) +* **models:** keep streamed usage metadata when a later chunk reports none ([aebb2a1](https://github.com/google/adk-python/commit/aebb2a13b35159723286caf00e736811dfa415c7)) +* **models:** report a missing Anthropic credential when the client is built ([42f220a](https://github.com/google/adk-python/commit/42f220a61bb620e3c08d4e4d08098ea5857c436e)) +* **models:** report Anthropic thinking tokens without double counting output ([a95b008](https://github.com/google/adk-python/commit/a95b008f91d82f1acd8c686e5a0d861aed707c20)) +* **models:** use the reported total token count for interactions usage ([955325d](https://github.com/google/adk-python/commit/955325ddbbe7163d19bd32f3ac822eb3c498f6ee)) +* **models:** wrap Anthropic rate limit errors ([cde301b](https://github.com/google/adk-python/commit/cde301ba68dc2970465b1b847fa805aad6f1f2ed)) +* narrow broad except in OAuth2 credential refresher ([7d16478](https://github.com/google/adk-python/commit/7d164786f4cc97df7bfb53c2793a55963a481260)) +* omit HTTP options from Gemini debug logs ([d63a255](https://github.com/google/adk-python/commit/d63a255880115d98bcc1f7260b461d2d338bd270)) +* order database sessions deterministically ([8455cf8](https://github.com/google/adk-python/commit/8455cf8afcbbda23f4ebdddcaa83cdbea3124562)), closes [#6272](https://github.com/google/adk-python/issues/6272) +* order list_sessions results by last update time ([53e1afb](https://github.com/google/adk-python/commit/53e1afbcb5b211ad097985594a038bab49e2f509)), closes [#6272](https://github.com/google/adk-python/issues/6272) [#6431](https://github.com/google/adk-python/issues/6431) +* prefer application/json for OpenAPI return type docs ([9b4b2c5](https://github.com/google/adk-python/commit/9b4b2c51c64c8066b770ed6e2e7287ec32703697)) +* preserve all tool results for parallel function calls ([93dff41](https://github.com/google/adk-python/commit/93dff41417e81bad6150bd91acf1d73dedc298dc)), closes [#6589](https://github.com/google/adk-python/issues/6589) +* preserve function-tool preflight in thread pool ([0156bc5](https://github.com/google/adk-python/commit/0156bc5a91845930e233ec04f5c725f9bf0be3ed)) +* preserve per-part media fields across A2A conversion ([1a9d003](https://github.com/google/adk-python/commit/1a9d003a6ac30bac8ed3b64ddd9ab0425d48021b)) +* preserve required body properties ([9b31268](https://github.com/google/adk-python/commit/9b31268d17d9dc000914ee515d458963ea0dca53)), closes [#6503](https://github.com/google/adk-python/issues/6503) +* preserve turns when stale compaction loses ([40ccbee](https://github.com/google/adk-python/commit/40ccbeec6f23939cd676ecc43ab1b99dc2774616)) +* prevent update_constraints.sh from rewriting files when dependencies are unchanged ([470d59e](https://github.com/google/adk-python/commit/470d59e4a3a0edc7d906dfa02228ddde5c8dad7d)) +* propagate context cache config to the AgentTool sub-runner ([5835f5a](https://github.com/google/adk-python/commit/5835f5a4e5cf8334573e8bac6a76a69187cfa2c9)) +* propagate context cache config to the AgentTool sub-runner ([9488408](https://github.com/google/adk-python/commit/948840820095b9bb7d1e5a5b906b46201d5c11bd)) +* prune orphaned function responses instead of failing the request ([73e8625](https://github.com/google/adk-python/commit/73e862546c077e4416667bc422131efa6b0f1477)) +* read and write eval data files as utf-8 ([2e878ed](https://github.com/google/adk-python/commit/2e878ed4120b1009080ec4bd189cf8b436d03ccf)) +* redact credential values from auto-tracing span attributes ([fd44a63](https://github.com/google/adk-python/commit/fd44a633d63af0ea23edfc8c7e20f01e2ffd702b)) +* redact database password from session service errors and logs ([4ad3ecc](https://github.com/google/adk-python/commit/4ad3ecccec39d43f7256a1f8fa4e764716012d51)) +* redact secret credentials from AuthCredential repr and error messages ([beb66ee](https://github.com/google/adk-python/commit/beb66ee15de58f5b773efce8bd63b94c3e5f0532)) +* refuse MCP tools that take a reserved ADK tool name ([77d4647](https://github.com/google/adk-python/commit/77d4647c8ec771600bb822bd33d57929d046317c)) +* Reject reserved ADK tool names in McpTool initialization ([2785aa9](https://github.com/google/adk-python/commit/2785aa9a5d2a3f71d85a1c05ae246c1cd2ad1697)) +* remove invalid event from 10_burgers sample test trace ([6930be4](https://github.com/google/adk-python/commit/6930be4305238660ad5cae7f50f44f400dee2c31)) +* resolve Claude 5 model names to the Claude LLM class ([e300ae7](https://github.com/google/adk-python/commit/e300ae7aa6a50ec0f71c01dc3b7291f4111a3f90)) +* resolve GitHub Actions CI collection and flakiness issues ([4e65350](https://github.com/google/adk-python/commit/4e65350eeee3c9fd075986464dffcffe68ea4dbd)) +* resolve shared-state concurrency contention in GCP auth provider using thread-local REST client caching ([b1c6f44](https://github.com/google/adk-python/commit/b1c6f44da559bba167d0013de3ea82e5ca466444)) +* resolve zizmor security findings in GitHub Actions workflows ([0075954](https://github.com/google/adk-python/commit/00759548aa8978257e31daf9681ba6ef3092c5f4)) +* restrict builder YAML code references to the app being edited ([8995005](https://github.com/google/adk-python/commit/899500510d6820734d2c83857aea9f958dea8ed5)), closes [#5292](https://github.com/google/adk-python/issues/5292) +* return schema validation feedback to models ([b5b27cb](https://github.com/google/adk-python/commit/b5b27cb074d00f2e6889098514d8f716bc1cdfad)) +* revert runtime behavior changed by the strict-typing pass ([3eae315](https://github.com/google/adk-python/commit/3eae315d367e1679fb712f78312a6170c36ea62b)) +* rollback reject reserved ADK tool names in McpTool initialization ([53b8a4d](https://github.com/google/adk-python/commit/53b8a4d6daf1df9595e80790bcb1f1ecf8b9c2b4)) +* route apigee, o-series and unlisted LiteLLM provider models ([d58caa6](https://github.com/google/adk-python/commit/d58caa6c7804e613609e0d1a66cc0194a17cac3b)) +* run synchronous OAuth2 token calls off the event loop ([b0f52f0](https://github.com/google/adk-python/commit/b0f52f0d970e16877d748284b6a68664385fb97f)) +* **samples:** fail the maintenance run when issue discovery dies mid-page ([cf42e86](https://github.com/google/adk-python/commit/cf42e866cd755505e6571a9b830d1ee1d7df4631)) +* **samples:** make the human-in-the-loop sample respect the human's decision ([d92bb42](https://github.com/google/adk-python/commit/d92bb42ccfeac7255ad367974d79629ef368db32)) +* **samples:** make the MCP auth sample actually enforce auth, move MCP samples off the deprecated toolset name, and correct code execution claims ([c840dbe](https://github.com/google/adk-python/commit/c840dbe991dfb77c0ba2b61317913e64f0bab159)) +* **samples:** repair integrations samples that no longer run against the current API ([64dddf2](https://github.com/google/adk-python/commit/64dddf2bf3cb98db7a504bde681642aa729d6cf9)) +* **samples:** repair the adk_team samples against the current API ([41ec592](https://github.com/google/adk-python/commit/41ec5926ab4eb57f9dfd1aa92498bb882abf53be)) +* **samples:** repair the core, tools, plugins and skills samples ([c620a73](https://github.com/google/adk-python/commit/c620a7347c30bd2ee04d9612518b185ce69d728a)) +* **samples:** repair the session database migration recipe ([161f2b3](https://github.com/google/adk-python/commit/161f2b32b45bf47e765570584c7e7467cb55bbdd)) +* **samples:** repair the workflow samples that produce the wrong output ([a308848](https://github.com/google/adk-python/commit/a3088489696f90f82fbb44f46c766d3cfcb469b5)) +* **samples:** report failed stale agent audits and exit non-zero ([5418b73](https://github.com/google/adk-python/commit/5418b731564743aa7b981fd77741fb1cb5242faa)), closes [#6520](https://github.com/google/adk-python/issues/6520) +* **samples:** separate skipped from failed issues in the monitoring agent ([d8d8a6e](https://github.com/google/adk-python/commit/d8d8a6ef16eebf925e7ef8229a883f833d47bc4d)) +* scope custom metrics per registry and trust only the config path ([5d2aca0](https://github.com/google/adk-python/commit/5d2aca08eb47e78d5915cd27c41db1541d9b18f8)) +* scope file artifact reads and deletes to the requesting app ([c27d868](https://github.com/google/adk-python/commit/c27d8688ed9ea619587ad96cbfd641c34dd7340c)) +* scope LangGraph checkpointer thread id to app and user ([19e2a72](https://github.com/google/adk-python/commit/19e2a7283f1de16e206f84ade687f9f16f0274cb)) +* scope skip_summarization text-append to AgentTool ([84c7711](https://github.com/google/adk-python/commit/84c771105294e1c3dd7620c5f775e4ce0c1b3992)), closes [#6230](https://github.com/google/adk-python/issues/6230) +* Secure and harden FileArtifactService against tampered metadata and partial writes ([c567203](https://github.com/google/adk-python/commit/c5672030b7b9c76967a18665120c8ac36e5c7fef)) +* select the mTLS endpoint only when a client certificate exists ([f324d1b](https://github.com/google/adk-python/commit/f324d1beed830c35d00727ddb973a46cb644007f)) +* send media attached to a tool response to non-Gemini models ([703cf43](https://github.com/google/adk-python/commit/703cf43f6b03550ec2b02def526f3f4ba98f7abd)) +* serialize merged tool calls instead of recording a placeholder ([6ec23cc](https://github.com/google/adk-python/commit/6ec23ccbb8e7c5e07f06493f49559382bfb103bc)) +* **sessions:** make event reads deterministic and timezone-correct ([4ca975e](https://github.com/google/adk-python/commit/4ca975eb9acd30a64b2c8615a93d31dada63052c)) +* **sessions:** store and filter event timestamps in UTC ([1b8ed3d](https://github.com/google/adk-python/commit/1b8ed3d9c0b125852df1902dd32b65bcab63ce1d)) +* **skills:** load binary references and assets as bytes instead of skipping them ([3f21e89](https://github.com/google/adk-python/commit/3f21e891d74a8dc20b8af525d5b848dfe0ab14b3)) +* stop live tool execution from bypassing run_async ([8b9d222](https://github.com/google/adk-python/commit/8b9d22228c3503376e121bfe6720c0bf38ba076f)) +* stop LlmAgent resume path from ending parent on pause ([3bb1011](https://github.com/google/adk-python/commit/3bb10115d3ae69cfc42bebcdfa4a935031c8e1a1)), closes [#6017](https://github.com/google/adk-python/issues/6017) +* stop logging the full live LlmRequest in base_llm_flow ([6fb5e04](https://github.com/google/adk-python/commit/6fb5e04fcd68de404e1714a4fcdb7f3d17914c8c)) +* stop marking defaulted output_schema fields as required ([d4ec2fc](https://github.com/google/adk-python/commit/d4ec2fc382db84362d6116d424a5eb56ebd14403)) +* stop per-run HTTP options and labels leaking onto the agent ([8160d47](https://github.com/google/adk-python/commit/8160d47805a8ae16befd29ac847f280b7b5a40a8)) +* Stop re-validating already-consumed tool confirmations ([76d5723](https://github.com/google/adk-python/commit/76d5723f74217750d874118fda2bd31befd9f8b6)) +* stop request assembly writing into the agent's own config ([0730d73](https://github.com/google/adk-python/commit/0730d73cb183403dd1afe92393b9fbf513a9073d)) +* strip markdown and typographic decoration from rubric text ([bf8388a](https://github.com/google/adk-python/commit/bf8388aaed968c11552977799899b242df1fdab2)), closes [#6072](https://github.com/google/adk-python/issues/6072) +* support fallback OAuth token and prefixless credential lookups ([f4e7233](https://github.com/google/adk-python/commit/f4e7233469e3595336dfb0d84c281b2f6245ce4c)), closes [#4712](https://github.com/google/adk-python/issues/4712) +* Support multi-content responses from agents within AgentTool ([e805872](https://github.com/google/adk-python/commit/e8058726c8735bc3f58c43f5ebf215d83a76e8cd)) +* Support multi-content responses from agents within AgentTool ([544831c](https://github.com/google/adk-python/commit/544831c042640cf68a596c73551ed66e7e5c91fd)) +* **telemetry:** mark failed tool spans as errors and fix provider naming ([6396ce6](https://github.com/google/adk-python/commit/6396ce60f9e3f6d6b20aaa3d108ed8094d9094dc)) +* **telemetry:** summarize inline binary data instead of writing it to a span ([fbf5bd5](https://github.com/google/adk-python/commit/fbf5bd5fad4621bf4187c231846baedc90ea6d40)) +* **test:** tolerate both click exit codes when a group is invoked without a subcommand ([bb9465b](https://github.com/google/adk-python/commit/bb9465bc486abf963f2d282016e860104d38b154)) +* **tools:** recognize Context | None as the context parameter ([c457556](https://github.com/google/adk-python/commit/c4575560e6e58415a854e31ffbbcc2e36ac46f14)) +* **tools:** stop gcs clients being shared across credentials ([3d29750](https://github.com/google/adk-python/commit/3d2975025bfecd5fe63f1669cf3336c7340f02ac)) +* Update CI workflow to use uv and adjust codespell configuration ([566fca3](https://github.com/google/adk-python/commit/566fca3fa9ac35c812a3b9a1804a130d9b726ed4)) +* use _GCLOUD_CMD for gcloud calls in GKE deploy on Windows ([f0b3ca6](https://github.com/google/adk-python/commit/f0b3ca601adee824d400ed555868155188e41535)) +* Use official SDK for credential finalization in GCP auth sample ([6ccb837](https://github.com/google/adk-python/commit/6ccb83734ed22e79737406a54a9a205f3feed0ab)) +* use typing.Optional in cleanup_unused_files to fix parse error ([cbedafd](https://github.com/google/adk-python/commit/cbedafd9e4c18d462dc571e1bb079177a496ef51)) +* validate audio sample rates ([d24c84c](https://github.com/google/adk-python/commit/d24c84cdd90d8b2cc78f4162c42d14b53b8f37d6)) +* validate skill name before building Agent Registry skill URL ([11101ac](https://github.com/google/adk-python/commit/11101acc681022d5b06e9ddcb99ca86f0e5c35e8)) +* validate urls before computer use navigate opens them ([b0fff3f](https://github.com/google/adk-python/commit/b0fff3f02d0a4f573c3ef17d6afef4a483c1efdd)) +* wire App plugins through eval paths ([73ecb5b](https://github.com/google/adk-python/commit/73ecb5b535a7fde3e604eeb1148442f9cc5699c4)), closes [#5503](https://github.com/google/adk-python/issues/5503) +* **workflow:** keep jittered retry delay within max_delay ([b333c85](https://github.com/google/adk-python/commit/b333c859084f9ca036887e42269a5543ade8c7e3)) + + +### Performance Improvements + +* avoid Pydantic deep-copy / dump-validate round-trips and precompile regex ([9e1adde](https://github.com/google/adk-python/commit/9e1addedfff7e35e95a2ad120c8b30fe543af04c)) +* avoid quadratic streaming accumulation in the LiteLLM adapter ([36fd2c8](https://github.com/google/adk-python/commit/36fd2c8e0cf9dddec66bb0c109518cdc2fbdb3b6)) +* drop use_attribute_docstrings from LlmCapabilities ([d42e222](https://github.com/google/adk-python/commit/d42e222c4f32763dcd2eaa4193a97b37d43abda1)) +* improve adk import loading ([8806dc2](https://github.com/google/adk-python/commit/8806dc2bd8fb37004dee9ca50d9e774481f89afb)) +* memoize the model adapter resolved from LlmAgent.model ([490946b](https://github.com/google/adk-python/commit/490946ba3234ce68a8ec33bf4093fd9597d1abdf)) +* reuse one execute_sql function object across BigQuery toolsets ([bfe33b1](https://github.com/google/adk-python/commit/bfe33b1c4a4e6e2d6e393a60515d778a15cf1577)) + + +### Documentation + +* add a test-file placement rule to the testing style guide ([d64f1af](https://github.com/google/adk-python/commit/d64f1afb6284e3d26b8272f16d19a99be307a33c)) +* add App unit guide ([d24ec83](https://github.com/google/adk-python/commit/d24ec83ccdc22cb79f635e86613ae35be622975d)) +* add artifact service unit guide ([b8c099d](https://github.com/google/adk-python/commit/b8c099d37fdd938886f2b90a70316936a68d8ba7)) +* add memory service unit guide ([aac410a](https://github.com/google/adk-python/commit/aac410a66f9282c3d6b2bc1bc85995cbd74fa4ab)) +* add model registry unit guide ([2353dde](https://github.com/google/adk-python/commit/2353dde8e9081439d8d9f8358469ddf44ce997fc)) +* add session State unit guide ([5a2a59b](https://github.com/google/adk-python/commit/5a2a59b74fe22dfafe8133a50858610da3997e03)) +* add Session unit guide ([3df5a65](https://github.com/google/adk-python/commit/3df5a6519a626368aea4f7fd3e26fd5a56ba5477)) +* add tool authentication unit guide ([78a4ee2](https://github.com/google/adk-python/commit/78a4ee2c69cadc025bf2aa7c7e98f90e6da31923)) +* correct the list of built-in agent skills ([4cad8cc](https://github.com/google/adk-python/commit/4cad8cc958963ab2818d8f18de0643a3a04697fd)) +* fix broken README links and publish the constraints files ([06111f1](https://github.com/google/adk-python/commit/06111f127bf01ba24bad468e4c7ccb2a82ede4bf)) +* fix mcp sample link ([5647699](https://github.com/google/adk-python/commit/56476999931f2b32f8e112b4665cda32dac31b71)), closes [#6490](https://github.com/google/adk-python/issues/6490) +* note the adk web/api servers are unauthenticated and local-only ([76c64ef](https://github.com/google/adk-python/commit/76c64efd003f142e5374965d695e4792d1bcba7b)) + + +### Miscellaneous Chores + +* **deps:** move pyarrow out of the gcp extra ([ac71709](https://github.com/google/adk-python/commit/ac717091f6644f348c6f7e65a43cc0475a28fe45)) +* release this candidate as 2.7.0 ([e22b75a](https://github.com/google/adk-python/commit/e22b75aac1b86c9d264cb3def4965df218acf471)) + +
+ ## [2.6.3](https://github.com/google/adk-python/compare/v2.6.2...v2.6.3) (2026-08-07) diff --git a/src/google/adk/version.py b/src/google/adk/version.py index 9f990acfef..a9f3380a6f 100644 --- a/src/google/adk/version.py +++ b/src/google/adk/version.py @@ -13,4 +13,4 @@ # limitations under the License. # version: major.minor.patch -__version__ = "2.6.3" +__version__ = "2.7.0"