Fix Google LLM system instruction priority

Constructor/settings system_instruction now takes priority over the
context system message. Previously the context value would overwrite
the constructor value on every call. Warn when both are set.
This commit is contained in:
Aleix Conchillo Flaqué
2026-03-10 09:25:42 -07:00
parent 54c767cce3
commit 153705f05b

View File

@@ -997,12 +997,16 @@ class GoogleLLMService(LLMService):
self, params_from_context: GeminiLLMInvocationParams
) -> AsyncIterator[GenerateContentResponse]:
messages = params_from_context["messages"]
if (
params_from_context["system_instruction"]
and self._settings.system_instruction != params_from_context["system_instruction"]
):
logger.debug(f"System instruction changed: {params_from_context['system_instruction']}")
self._settings.system_instruction = params_from_context["system_instruction"]
# Constructor/settings system instruction takes priority over context.
if self._settings.system_instruction and params_from_context["system_instruction"]:
logger.warning(
f"{self}: Both system_instruction and a system message in context are"
" set. Using system_instruction."
)
system_instruction = (
self._settings.system_instruction or params_from_context["system_instruction"]
)
tools = []
if params_from_context["tools"]:
@@ -1015,7 +1019,7 @@ class GoogleLLMService(LLMService):
# Build generation parameters
generation_params = self._build_generation_params(
system_instruction=self._settings.system_instruction,
system_instruction=system_instruction,
tools=tools,
tool_config=tool_config,
)