Closed stevensu1977 closed 2 weeks ago
I found reason in langchain_community/chat_models/bedrock, there always raise Value error , crewai may use different messages order , I'm not sure every agent frame have same order , so I add "_move_system_to_front", always put system at first .
if need I can submit PR for this issue.
messages order check code :
for i, message in enumerate(messages):
if message.type == "system":
if i != 0:
raise ValueError("System message must be at beginning of message list.")
if not isinstance(message.content, str):
raise ValueError(
"System message must be a string, "
f"instead was: {type(message.content)}"
)
system = message.content
continue
I add help function , now it's working.
def _move_system_to_front(messages):
system_messages = [msg for msg in messages if msg.type== 'system']
non_system_messages = [msg for msg in messages if msg.type != 'system']
return system_messages + non_system_messages
......
system: Optional[str] = None
formatted_messages: List[Dict] = []
messages=_move_system_to_front(messages)
for i, message in enumerate(messages):
if message.type == "system":
if i != 0:
raise ValueError("System message must be at beginning of message list.")
if not isinstance(message.content, str):
raise ValueError(
"System message must be a string, "
f"instead was: {type(message.content)}"
)
system = message.content
continue
Checked other resources
Example Code
I only use BedrockChat replace ChatAnthropic , get error.
my code
Error Message and Stack Trace (if applicable)
"Failed to convert text into a pydantic model due to the following error: System message must be at beginning of message list"
Description
I use crewai with langchain
System Info
langchain==0.1.11 langchain-anthropic==0.1.4 langchain-community==0.0.27 langchain-core==0.1.30 langchain-openai==0.0.5 langchain-text-splitters==0.0.1