Merge pull request #3976 from pipecat-ai/aleix/fix-google-system-instruction-priority

Fix Google LLM system instruction priority
This commit is contained in:
Aleix Conchillo Flaqué
2026-03-10 10:48:28 -07:00
committed by GitHub
2 changed files with 12 additions and 7 deletions

1
changelog/3976.fixed.md Normal file
View File

@@ -0,0 +1 @@
- Fixed `GoogleLLMService` ignoring the `system_instruction` set via constructor or `GoogleLLMSettings` when a system message was also present in the context. The settings value now correctly takes priority, and a warning is logged when both are set.

View File

@@ -1011,12 +1011,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"]:
@@ -1029,7 +1033,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,
)