From 7b2808bdf687ab4d4c66ad3265d31e17dea79ecb Mon Sep 17 00:00:00 2001 From: hxaxd Date: Fri, 10 Jul 2026 23:31:22 +0800 Subject: [PATCH] fix(models): Allow instruction-only context caches Omit the contents field when the cacheable prefix is empty so the Google Gen AI SDK can create a cache from the system instruction and tools. Add a regression assertion for the zero-prefix request. Fixes #6363 --- src/google/adk/models/gemini_context_cache_manager.py | 2 +- tests/unittests/agents/test_gemini_context_cache_manager.py | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/google/adk/models/gemini_context_cache_manager.py b/src/google/adk/models/gemini_context_cache_manager.py index 801ac1351e..e4cc2f9bfa 100644 --- a/src/google/adk/models/gemini_context_cache_manager.py +++ b/src/google/adk/models/gemini_context_cache_manager.py @@ -447,7 +447,7 @@ async def _create_gemini_cache( with tracer.start_as_current_span("create_cache") as span: # Prepare cache contents (first N contents + system instruction + tools) - cache_contents = llm_request.contents[:cache_contents_count] + cache_contents = llm_request.contents[:cache_contents_count] or None cache_config = types.CreateCachedContentConfig( contents=cache_contents, diff --git a/tests/unittests/agents/test_gemini_context_cache_manager.py b/tests/unittests/agents/test_gemini_context_cache_manager.py index 9e67706680..1d95c4e46f 100644 --- a/tests/unittests/agents/test_gemini_context_cache_manager.py +++ b/tests/unittests/agents/test_gemini_context_cache_manager.py @@ -989,6 +989,8 @@ async def test_fingerprint_only_metadata_transitions_to_active_cache( assert result_2.contents_count == 0 # Preserved from prefix assert result_2.invocations_used == 1 self.manager.genai_client.aio.caches.create.assert_called_once() + create_call = self.manager.genai_client.aio.caches.create.call_args + assert create_call.kwargs["config"].contents is None async def test_dynamic_instruction_does_not_break_initial_cache_fingerprint( self,