From e2b460374a3b7a6116c69e41a6cd14026c1134e6 Mon Sep 17 00:00:00 2001 From: Brandon Hancock Date: Thu, 6 Feb 2025 10:10:23 -0500 Subject: [PATCH] Include fix for o1 models not supporting system messages --- src/crewai/agent.py | 2 ++ src/crewai/agents/crew_agent_executor.py | 3 +++ src/crewai/llm.py | 10 ++++++++++ 3 files changed, 15 insertions(+) diff --git a/src/crewai/agent.py b/src/crewai/agent.py index 22f08284e..c6790a82e 100644 --- a/src/crewai/agent.py +++ b/src/crewai/agent.py @@ -290,6 +290,8 @@ class Agent(BaseAgent): response_template=self.response_template, ).task_execution() + print("PROMPT:") + print(prompt) stop_words = [self.i18n.slice("observation")] if self.response_template: diff --git a/src/crewai/agents/crew_agent_executor.py b/src/crewai/agents/crew_agent_executor.py index ed89008fd..0d6d1f07f 100644 --- a/src/crewai/agents/crew_agent_executor.py +++ b/src/crewai/agents/crew_agent_executor.py @@ -94,6 +94,9 @@ class CrewAgentExecutor(CrewAgentExecutorMixin): user_prompt = self._format_prompt(self.prompt.get("prompt", ""), inputs) self.messages.append(self._format_msg(user_prompt)) + print("MESSAGES:") + print(self.messages) + self._show_start_logs() self.ask_for_human_input = bool(inputs.get("ask_for_human_input", False)) diff --git a/src/crewai/llm.py b/src/crewai/llm.py index 1e52773a1..0f8f62a8d 100644 --- a/src/crewai/llm.py +++ b/src/crewai/llm.py @@ -216,6 +216,13 @@ class LLM: if isinstance(messages, str): messages = [{"role": "user", "content": messages}] + # For O1 models, system messages are not supported. + # Convert any system messages into assistant messages. + if self.model.lower() in {"o1-preview", "o1-mini"}: + for message in messages: + if message.get("role") == "system": + message["role"] = "assistant" + with suppress_warnings(): if callbacks and len(callbacks) > 0: self.set_callbacks(callbacks) @@ -259,6 +266,9 @@ class LLM: text_response = response_message.content or "" tool_calls = getattr(response_message, "tool_calls", []) + print("MESSAGES IN LLM:") + print(messages) + # --- 3) Handle callbacks with usage info if callbacks and len(callbacks) > 0: for callback in callbacks: