fix: Bug when callback_context_invocation_context is missing in GlobalInstructionPlugin

Merge #3163
END_PUBLIC

Hello,
Since global_instruction has been deprecated, I’m migrating to GlobalInstructionPlugin.
During the migration, I encountered an error and am submitting this PR to fix it.

In [df05ed6](https://github.com/google/adk-python/commit/df05ed6b3b7b218d85fddc1acd6617802cdf6f2a) ,
GlobalInstructionPlugin references invocation_context, but CallbackContext actually contains _invocation_context.
This mismatch always causes an error during execution.

COPYBARA_INTEGRATE_REVIEW=https://github.com/google/adk-python/pull/3180 from UlookEE:fix_global_instruction_plugin e289a12d69812f0abcfe77db0114fdb2045b31bc
PiperOrigin-RevId: 827682501
This commit is contained in:
Haegyun Lee
2025-11-03 15:54:54 -08:00
committed by Copybara-Service
parent c33a680b54
commit f81ebdb622
2 changed files with 7 additions and 8 deletions
@@ -79,9 +79,8 @@ class GlobalInstructionPlugin(BasePlugin):
return None return None
# Resolve the global instruction (handle both string and InstructionProvider) # Resolve the global instruction (handle both string and InstructionProvider)
readonly_context = ReadonlyContext(callback_context.invocation_context)
final_global_instruction = await self._resolve_global_instruction( final_global_instruction = await self._resolve_global_instruction(
readonly_context callback_context
) )
if not final_global_instruction: if not final_global_instruction:
@@ -43,7 +43,7 @@ async def test_global_instruction_plugin_with_string():
mock_invocation_context.session = mock_session mock_invocation_context.session = mock_session
mock_callback_context = Mock(spec=CallbackContext) mock_callback_context = Mock(spec=CallbackContext)
mock_callback_context.invocation_context = mock_invocation_context mock_callback_context._invocation_context = mock_invocation_context
llm_request = LlmRequest( llm_request = LlmRequest(
model="gemini-1.5-flash", model="gemini-1.5-flash",
@@ -80,10 +80,10 @@ async def test_global_instruction_plugin_with_instruction_provider():
) )
mock_invocation_context = Mock(spec=InvocationContext) mock_invocation_context = Mock(spec=InvocationContext)
mock_invocation_context.session = mock_session
mock_callback_context = Mock(spec=CallbackContext) mock_callback_context = Mock(spec=CallbackContext)
mock_callback_context.invocation_context = mock_invocation_context mock_callback_context._invocation_context = mock_invocation_context
mock_callback_context.session = mock_session
llm_request = LlmRequest( llm_request = LlmRequest(
model="gemini-1.5-flash", model="gemini-1.5-flash",
@@ -119,7 +119,7 @@ async def test_global_instruction_plugin_empty_instruction():
mock_invocation_context.session = mock_session mock_invocation_context.session = mock_session
mock_callback_context = Mock(spec=CallbackContext) mock_callback_context = Mock(spec=CallbackContext)
mock_callback_context.invocation_context = mock_invocation_context mock_callback_context._invocation_context = mock_invocation_context
llm_request = LlmRequest( llm_request = LlmRequest(
model="gemini-1.5-flash", model="gemini-1.5-flash",
@@ -156,7 +156,7 @@ async def test_global_instruction_plugin_leads_existing():
mock_invocation_context.session = mock_session mock_invocation_context.session = mock_session
mock_callback_context = Mock(spec=CallbackContext) mock_callback_context = Mock(spec=CallbackContext)
mock_callback_context.invocation_context = mock_invocation_context mock_callback_context._invocation_context = mock_invocation_context
llm_request = LlmRequest( llm_request = LlmRequest(
model="gemini-1.5-flash", model="gemini-1.5-flash",
@@ -191,7 +191,7 @@ async def test_global_instruction_plugin_prepends_to_list():
mock_invocation_context.session = mock_session mock_invocation_context.session = mock_session
mock_callback_context = Mock(spec=CallbackContext) mock_callback_context = Mock(spec=CallbackContext)
mock_callback_context.invocation_context = mock_invocation_context mock_callback_context._invocation_context = mock_invocation_context
llm_request = LlmRequest( llm_request = LlmRequest(
model="gemini-1.5-flash", model="gemini-1.5-flash",