From ede0c15bcbdb04a29517c0ab7a225bfbc6d2c971 Mon Sep 17 00:00:00 2001 From: majiayu000 <1835304752@qq.com> Date: Mon, 29 Dec 2025 00:54:25 +0800 Subject: [PATCH] Switch from system prompt to instructions parameter Use the Responses API's `instructions` parameter instead of including system messages in the input. This aligns with OpenAI's recommended approach for the Responses API. Fixes #10 Signed-off-by: majiayu000 <1835304752@qq.com> --- llm_openai.py | 4 ++-- tests/test_openai.py | 20 ++++++++++++++++++++ 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/llm_openai.py b/llm_openai.py index 4013c31..80ee5fb 100644 --- a/llm_openai.py +++ b/llm_openai.py @@ -249,8 +249,6 @@ def _build_messages(self, prompt, conversation): "arguments": json.dumps(tool_call.arguments), } ) - if prompt.system and prompt.system != current_system: - messages.append({"role": "system", "content": prompt.system}) if not prompt.attachments: messages.append({"role": "user", "content": prompt.prompt or ""}) else: @@ -275,6 +273,8 @@ def _build_messages(self, prompt, conversation): def _build_kwargs(self, prompt, conversation): messages = self._build_messages(prompt, conversation) kwargs = {"model": self.model_name, "input": messages} + if prompt.system: + kwargs["instructions"] = prompt.system for option in ( "max_output_tokens", "temperature", diff --git a/tests/test_openai.py b/tests/test_openai.py index bb83185..265eb88 100644 --- a/tests/test_openai.py +++ b/tests/test_openai.py @@ -76,3 +76,23 @@ def simple_tool(number): ) output = chain_response.text() assert output == snapshot + + +def test_instructions_in_kwargs(): + """Test that system prompt is sent as instructions parameter, not as a system message.""" + model = llm.get_model("openai/gpt-4o-mini") + prompt = llm.Prompt( + model=model, + prompt="say hi", + system="You are a friendly assistant who speaks like a pirate", + options=model.Options() + ) + kwargs = model._build_kwargs(prompt, conversation=None) + + # Verify instructions parameter is set + assert kwargs["instructions"] == "You are a friendly assistant who speaks like a pirate" + + # Verify no system message in input + for item in kwargs["input"]: + if isinstance(item, dict): + assert item.get("role") != "system"