From f6475cec0709fdcf23be890e3fa516dbdff3c547 Mon Sep 17 00:00:00 2001 From: 0xallam Date: Wed, 14 Jan 2026 19:21:10 -0800 Subject: [PATCH] chore(prompt): enforce single tool call per message and remove stop word usage --- strix/agents/StrixAgent/system_prompt.jinja | 4 ++-- strix/llm/llm.py | 3 ++- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/strix/agents/StrixAgent/system_prompt.jinja b/strix/agents/StrixAgent/system_prompt.jinja index 038e039..e839d6b 100644 --- a/strix/agents/StrixAgent/system_prompt.jinja +++ b/strix/agents/StrixAgent/system_prompt.jinja @@ -308,9 +308,9 @@ Tool calls use XML format: CRITICAL RULES: 0. While active in the agent loop, EVERY message you output MUST be a single tool call. Do not send plain text-only responses. -1. One tool call per message +1. Exactly one tool call per message — never include more than one ... block in a single LLM message. 2. Tool call must be last in message -3. EVERY tool call MUST end with . This is MANDATORY. Never omit the closing tag. The tag is your stop word - end your response immediately after it. +3. EVERY tool call MUST end with . This is MANDATORY. Never omit the closing tag. End your response immediately after . 4. Use ONLY the exact XML format shown above. NEVER use JSON/YAML/INI or any other syntax for tools or parameters. 5. Tool names must match exactly the tool "name" defined (no module prefixes, dots, or variants). - Correct: ... diff --git a/strix/llm/llm.py b/strix/llm/llm.py index 1f096f0..42f77fc 100644 --- a/strix/llm/llm.py +++ b/strix/llm/llm.py @@ -141,6 +141,8 @@ class LLM: accumulated = accumulated[ : accumulated.find("") + len("") ] + yield LLMResponse(content=accumulated) + break yield LLMResponse(content=accumulated) if chunks: @@ -189,7 +191,6 @@ class LLM: "messages": messages, "timeout": self.config.timeout, "stream_options": {"include_usage": True}, - "stop": [""], } if api_key := Config.get("llm_api_key"):