@@ -1497,3 +1497,58 @@ def test_format_image(image_url: str, expected_media_type: str) -> None:
14971497 }
14981498
14991499 mock_loader_instance .load_bytes .assert_called_once_with (image_url )
1500+
1501+
1502+ def test_format_messages_anthropic_system_not_first () -> None :
1503+ """Test that system messages are accepted when not at position 0.
1504+
1505+ Regression test for https://github.com/langchain-ai/langchain-google/issues/1022
1506+ """
1507+ messages = [
1508+ HumanMessage (content = "Hello" ),
1509+ AIMessage (content = "Hi there!" ),
1510+ SystemMessage (content = "You are a helpful assistant." ),
1511+ HumanMessage (content = "What is 2+2?" ),
1512+ ]
1513+ system_messages , formatted_messages = _format_messages_anthropic (
1514+ messages , project = "test-project"
1515+ )
1516+
1517+ assert system_messages == [{"type" : "text" , "text" : "You are a helpful assistant." }]
1518+ # System message should be extracted; remaining messages should be formatted
1519+ assert len (formatted_messages ) == 3
1520+ assert formatted_messages [0 ]["role" ] == "user"
1521+ assert formatted_messages [1 ]["role" ] == "assistant"
1522+ assert formatted_messages [2 ]["role" ] == "user"
1523+
1524+
1525+ def test_format_messages_anthropic_consecutive_system_merged () -> None :
1526+ """Test that consecutive system messages are merged into one."""
1527+ messages = [
1528+ SystemMessage (content = "Rule 1." ),
1529+ SystemMessage (content = "Rule 2." ),
1530+ HumanMessage (content = "Hello" ),
1531+ ]
1532+ system_messages , formatted_messages = _format_messages_anthropic (
1533+ messages , project = "test-project"
1534+ )
1535+
1536+ # Consecutive system messages should be merged
1537+ assert system_messages == [
1538+ {"type" : "text" , "text" : "Rule 1." },
1539+ {"type" : "text" , "text" : "Rule 2." },
1540+ ]
1541+ assert len (formatted_messages ) == 1
1542+ assert formatted_messages [0 ]["role" ] == "user"
1543+
1544+
1545+ def test_format_messages_anthropic_multiple_non_consecutive_system_raises () -> None :
1546+ """Test that multiple non-consecutive system messages raise an error."""
1547+ messages = [
1548+ SystemMessage (content = "First system." ),
1549+ HumanMessage (content = "Hello" ),
1550+ SystemMessage (content = "Second system." ),
1551+ HumanMessage (content = "World" ),
1552+ ]
1553+ with pytest .raises (ValueError , match = "multiple non-consecutive system messages" ):
1554+ _format_messages_anthropic (messages , project = "test-project" )
0 commit comments