77 "github.com/stretchr/testify/require"
88
99 "github.com/docker/docker-agent/pkg/chat"
10+ "github.com/docker/docker-agent/pkg/config/latest"
1011 "github.com/docker/docker-agent/pkg/tools"
1112)
1213
@@ -47,7 +48,7 @@ func TestConvertMessagesToResponseInput_OrphanedFunctionCall(t *testing.T) {
4748}
4849
4950func TestConvertMessagesToResponseInput_NoOrphans (t * testing.T ) {
50- // All tool calls have matching results — no placeholder needed.
51+ // All tool calls have matching results - no placeholder needed.
5152 messages := []chat.Message {
5253 {Role : chat .MessageRoleUser , Content : "hello" },
5354 {
@@ -69,3 +70,37 @@ func TestConvertMessagesToResponseInput_NoOrphans(t *testing.T) {
6970 }
7071 assert .Equal (t , 1 , outputCount , "should not inject extra outputs when all calls have results" )
7172}
73+
74+ func TestConvertMessages_MergesConsecutiveSystemMessagesForCustomProviders (t * testing.T ) {
75+ cfg := & latest.ModelConfig {
76+ ProviderOpts : map [string ]any {"api_type" : "openai_chatcompletions" },
77+ }
78+ messages := []chat.Message {
79+ {Role : chat .MessageRoleSystem , Content : "You are Bob, a coding expert" },
80+ {Role : chat .MessageRoleSystem , Content : "## Custom Shell Tools\n \n ### execute_command" },
81+ {Role : chat .MessageRoleSystem , Content : "<available_skills>\n <skill>what-time-is-it</skill>\n </available_skills>" },
82+ {Role : chat .MessageRoleUser , Content : "what is your favourite colour?" },
83+ }
84+
85+ result := convertMessages (cfg , messages )
86+ require .Len (t , result , 2 )
87+ require .NotNil (t , result [0 ].OfSystem )
88+ assert .Contains (t , result [0 ].OfSystem .Content .OfString .Value , "You are Bob, a coding expert" )
89+ assert .Contains (t , result [0 ].OfSystem .Content .OfString .Value , "Custom Shell Tools" )
90+ assert .Contains (t , result [0 ].OfSystem .Content .OfString .Value , "available_skills" )
91+ assert .NotNil (t , result [1 ].OfUser )
92+ }
93+
94+ func TestConvertMessages_PreservesConsecutiveSystemMessagesForOpenAIProvider (t * testing.T ) {
95+ messages := []chat.Message {
96+ {Role : chat .MessageRoleSystem , Content : "System 1" },
97+ {Role : chat .MessageRoleSystem , Content : "System 2" },
98+ {Role : chat .MessageRoleUser , Content : "hello" },
99+ }
100+
101+ result := convertMessages (& latest.ModelConfig {}, messages )
102+ require .Len (t , result , 3 )
103+ assert .NotNil (t , result [0 ].OfSystem )
104+ assert .NotNil (t , result [1 ].OfSystem )
105+ assert .NotNil (t , result [2 ].OfUser )
106+ }
0 commit comments