Skip to content
This repository was archived by the owner on Mar 19, 2026. It is now read-only.

Commit 0c2ddc0

Browse files
committed
Add flag for removing all system messages
1 parent af51a90 commit 0c2ddc0

File tree

2 files changed

+17
-9
lines changed

2 files changed

+17
-9
lines changed

src/controlflow/events/message_compiler.py

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -113,19 +113,22 @@ def convert_system_messages(
113113
messages: list[BaseMessage], rules: LLMRules
114114
) -> list[BaseMessage]:
115115
"""
116-
Converts system messages to human messages if the LLM doesnt support system messages.
116+
Converts system messages to human messages if the LLM doesnt support system messages, either at all or in the first position.
117117
"""
118-
if not messages or not rules.require_system_message_first:
119-
return messages
120118

121119
new_messages = []
122-
for message in messages:
120+
for i, message in enumerate(messages):
123121
if isinstance(message, SystemMessage):
124-
new_messages.append(
125-
HumanMessage(
126-
content=f"ORCHESTRATOR: {message.content}", name=message.name
122+
# if system messages are not supported OR if they must be first and this is not the first message
123+
# THEN convert the message to a human message
124+
if not rules.allow_system_messages or (
125+
i > 0 and rules.require_system_message_first
126+
):
127+
new_messages.append(
128+
HumanMessage(
129+
content=f"ORCHESTRATOR: {message.content}", name=message.name
130+
)
127131
)
128-
)
129132
else:
130133
new_messages.append(message)
131134
return new_messages
@@ -249,7 +252,9 @@ def compile_to_messages(self, agent: "Agent") -> list[BaseMessage]:
249252
messages = break_up_consecutive_ai_messages(messages, rules=context.llm_rules)
250253
messages = format_message_name(messages, rules=context.llm_rules)
251254

255+
messages = system_prompt + messages
256+
252257
# this should go last
253258
messages = convert_system_messages(messages, rules=context.llm_rules)
254259

255-
return system_prompt + messages
260+
return messages

src/controlflow/llm/rules.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,9 @@ class LLMRules(ControlFlowModel):
2222
# require at least one non-system message
2323
require_at_least_one_message: bool = False
2424

25+
# system messages are supported as a role
26+
allow_system_messages: bool = True
27+
2528
# system messages can only be provided as the very first message in a thread
2629
require_system_message_first: bool = False
2730

0 commit comments

Comments
 (0)