2424
2525import org .springframework .ai .chat .messages .AbstractMessage ;
2626import org .springframework .ai .chat .messages .AssistantMessage ;
27+ import org .springframework .ai .chat .messages .Message ;
2728import org .springframework .ai .chat .messages .MessageType ;
2829import org .springframework .ai .chat .messages .SystemMessage ;
2930import org .springframework .ai .chat .messages .ToolResponseMessage ;
@@ -124,51 +125,59 @@ void whenToolRuntimeOptionsThenMergeWithDefaults() {
124125 }
125126
126127 @ Test
127- void createMessagesWithUserMessage () {
128+ void createChatCompletionMessagesWithUserMessage () {
128129 var userMessage = new UserMessage (TEXT_CONTENT );
129130 userMessage .getMedia ().add (IMAGE_MEDIA );
130- var chatCompletionMessages = this .chatModel .createMessages (userMessage ).toList ();
131- verifyUserChatCompletionMessages (chatCompletionMessages );
131+ var prompt = createPrompt (userMessage );
132+ var chatCompletionRequest = this .chatModel .createRequest (prompt , false );
133+ verifyUserChatCompletionMessages (chatCompletionRequest .messages ());
132134 }
133135
134136 @ Test
135- void createMessagesWithAnotherUserMessage () {
137+ void createChatCompletionMessagesWithAnotherUserMessage () {
136138 var anotherUserMessage = new AnotherUserMessage (TEXT_CONTENT , List .of (IMAGE_MEDIA ));
137- var chatCompletionMessages = this .chatModel .createMessages (anotherUserMessage ).toList ();
138- verifyUserChatCompletionMessages (chatCompletionMessages );
139+ var prompt = createPrompt (anotherUserMessage );
140+ var chatCompletionRequest = this .chatModel .createRequest (prompt , false );
141+ verifyUserChatCompletionMessages (chatCompletionRequest .messages ());
139142 }
140143
141144 @ Test
142- void createMessagesWithSimpleUserMessage () {
145+ void createChatCompletionMessagesWithSimpleUserMessage () {
143146 var simpleUserMessage = new SimpleMessage (MessageType .USER , TEXT_CONTENT );
144- var chatCompletionMessages = this .chatModel .createMessages (simpleUserMessage ).toList ();
147+ var prompt = createPrompt (simpleUserMessage );
148+ var chatCompletionRequest = this .chatModel .createRequest (prompt , false );
149+ var chatCompletionMessages = chatCompletionRequest .messages ();
145150 assertThat (chatCompletionMessages ).hasSize (1 );
146151 var chatCompletionMessage = chatCompletionMessages .get (0 );
147152 assertThat (chatCompletionMessage .role ()).isEqualTo (ChatCompletionMessage .Role .USER );
148153 assertThat (chatCompletionMessage .content ()).isEqualTo (TEXT_CONTENT );
149154 }
150155
151156 @ Test
152- void createMessagesWithSystemMessage () {
157+ void createChatCompletionMessagesWithSystemMessage () {
153158 var systemMessage = new SystemMessage (TEXT_CONTENT );
154- var chatCompletionMessages = this .chatModel .createMessages (systemMessage ).toList ();
155- verifySystemChatCompletionMessages (chatCompletionMessages );
159+ var prompt = createPrompt (systemMessage );
160+ var chatCompletionRequest = this .chatModel .createRequest (prompt , false );
161+ verifySystemChatCompletionMessages (chatCompletionRequest .messages ());
156162 }
157163
158164 @ Test
159- void createMessagesWithSimpleSystemMessage () {
165+ void createChatCompletionMessagesWithSimpleSystemMessage () {
160166 var simpleSystemMessage = new SimpleMessage (MessageType .SYSTEM , TEXT_CONTENT );
161- var chatCompletionMessages = this .chatModel .createMessages (simpleSystemMessage ).toList ();
162- verifySystemChatCompletionMessages (chatCompletionMessages );
167+ var prompt = createPrompt (simpleSystemMessage );
168+ var chatCompletionRequest = this .chatModel .createRequest (prompt , false );
169+ verifySystemChatCompletionMessages (chatCompletionRequest .messages ());
163170 }
164171
165172 @ Test
166- void createMessagesWithAssistantMessage () {
173+ void createChatCompletionMessagesWithAssistantMessage () {
167174 var toolCall1 = createToolCall (1 );
168175 var toolCall2 = createToolCall (2 );
169176 var toolCall3 = createToolCall (3 );
170177 var assistantMessage = new AssistantMessage (TEXT_CONTENT , Map .of (), List .of (toolCall1 , toolCall2 , toolCall3 ));
171- var chatCompletionMessages = this .chatModel .createMessages (assistantMessage ).toList ();
178+ var prompt = createPrompt (assistantMessage );
179+ var chatCompletionRequest = this .chatModel .createRequest (prompt , false );
180+ var chatCompletionMessages = chatCompletionRequest .messages ();
172181 assertThat (chatCompletionMessages ).hasSize (1 );
173182 var chatCompletionMessage = chatCompletionMessages .get (0 );
174183 assertThat (chatCompletionMessage .role ()).isEqualTo (ChatCompletionMessage .Role .ASSISTANT );
@@ -181,41 +190,55 @@ void createMessagesWithAssistantMessage() {
181190 }
182191
183192 @ Test
184- void createMessagesWithSimpleAssistantMessage () {
193+ void createChatCompletionMessagesWithSimpleAssistantMessage () {
185194 var simpleAssistantMessage = new SimpleMessage (MessageType .ASSISTANT , TEXT_CONTENT );
186- assertThatThrownBy (() -> this .chatModel .createMessages (simpleAssistantMessage ))
195+ var prompt = createPrompt (simpleAssistantMessage );
196+ assertThatThrownBy (() -> this .chatModel .createRequest (prompt , false ))
187197 .isInstanceOf (IllegalArgumentException .class )
188- .hasMessage ("Unexpected assistant message class: " + SimpleMessage .class .getName ());
198+ .hasMessage ("Unsupported assistant message class: " + SimpleMessage .class .getName ());
189199 }
190200
191201 @ Test
192- void createMessagesWithToolResponseMessage () {
202+ void createChatCompletionMessagesWithToolResponseMessage () {
193203 var toolResponse1 = createToolResponse (1 );
194204 var toolResponse2 = createToolResponse (2 );
195205 var toolResponse3 = createToolResponse (3 );
196206 var toolResponseMessage = new ToolResponseMessage (List .of (toolResponse1 , toolResponse2 , toolResponse3 ));
197- var chatCompletionMessages = this .chatModel .createMessages (toolResponseMessage ).toList ();
207+ var prompt = createPrompt (toolResponseMessage );
208+ var chatCompletionRequest = this .chatModel .createRequest (prompt , false );
209+ var chatCompletionMessages = chatCompletionRequest .messages ();
198210 assertThat (chatCompletionMessages ).hasSize (3 );
199211 verifyToolChatCompletionMessage (chatCompletionMessages .get (0 ), toolResponse1 );
200212 verifyToolChatCompletionMessage (chatCompletionMessages .get (1 ), toolResponse2 );
201213 verifyToolChatCompletionMessage (chatCompletionMessages .get (2 ), toolResponse3 );
202214 }
203215
204216 @ Test
205- void createMessagesWithInvalidToolResponseMessage () {
217+ void createChatCompletionMessagesWithInvalidToolResponseMessage () {
206218 var toolResponse = new ToolResponseMessage .ToolResponse (null , null , null );
207219 var toolResponseMessage = new ToolResponseMessage (List .of (toolResponse ));
208- assertThatThrownBy (() -> this .chatModel .createMessages (toolResponseMessage ))
220+ var prompt = createPrompt (toolResponseMessage );
221+ assertThatThrownBy (() -> this .chatModel .createRequest (prompt , false ))
209222 .isInstanceOf (IllegalArgumentException .class )
210- .hasMessage ("ToolResponseMessage must have an id" );
223+ .hasMessage ("ToolResponseMessage.ToolResponse must have an id. " );
211224 }
212225
213226 @ Test
214- void createMessagesWithSimpleToolMessage () {
227+ void createChatCompletionMessagesWithSimpleToolMessage () {
215228 var simpleToolMessage = new SimpleMessage (MessageType .TOOL , TEXT_CONTENT );
216- assertThatThrownBy (() -> this .chatModel .createMessages (simpleToolMessage ))
229+ var prompt = createPrompt (simpleToolMessage );
230+ assertThatThrownBy (() -> this .chatModel .createRequest (prompt , false ))
217231 .isInstanceOf (IllegalArgumentException .class )
218- .hasMessage ("Unexpected tool message class: " + SimpleMessage .class .getName ());
232+ .hasMessage ("Unsupported tool message class: " + SimpleMessage .class .getName ());
233+ }
234+
235+ private Prompt createPrompt (Message message ) {
236+ var chatOptions = MistralAiChatOptions .builder ()
237+ .temperature (0.7d )
238+ .build ();
239+ var prompt = new Prompt (message , chatOptions );
240+
241+ return this .chatModel .buildRequestPrompt (prompt );
219242 }
220243
221244 private static void verifyToolChatCompletionMessage (ChatCompletionMessage chatCompletionMessage ,
@@ -236,6 +259,7 @@ private static void verifyToolCall(ChatCompletionMessage.ToolCall mistralToolCal
236259 assertThat (mistralToolCall .id ()).isEqualTo (toolCall .id ());
237260 assertThat (mistralToolCall .type ()).isEqualTo (toolCall .type ());
238261 var function = mistralToolCall .function ();
262+ assertThat (function ).isNotNull ();
239263 assertThat (function .name ()).isEqualTo (toolCall .name ());
240264 assertThat (function .arguments ()).isEqualTo (toolCall .arguments ());
241265 }
@@ -257,21 +281,16 @@ private static void verifyUserChatCompletionMessages(List<ChatCompletionMessage>
257281 assertThat (chatCompletionMessage .role ()).isEqualTo (ChatCompletionMessage .Role .USER );
258282 var rawContent = chatCompletionMessage .rawContent ();
259283 assertThat (rawContent ).isNotNull ();
260- var mediaContents = (List <ChatCompletionMessage .MediaContent >) rawContent ;
261- assertThat (mediaContents ).hasSize (2 );
262- var textMediaContent = mediaContents .get (0 );
263- assertThat (textMediaContent ).isNotNull ();
264- assertThat (textMediaContent .type ()).isEqualTo ("text" );
265- assertThat (textMediaContent .text ()).isEqualTo (TEXT_CONTENT );
266- assertThat (textMediaContent .imageUrl ()).isNull ();
267- var imageUrlMediaContent = mediaContents .get (1 );
268- assertThat (imageUrlMediaContent ).isNotNull ();
269- assertThat (imageUrlMediaContent .type ()).isEqualTo ("image_url" );
270- assertThat (imageUrlMediaContent .text ()).isNull ();
271- var imageUrl = imageUrlMediaContent .imageUrl ();
272- assertThat (imageUrl ).isNotNull ();
273- assertThat (imageUrl .url ()).isEqualTo (IMAGE_URL );
274- assertThat (imageUrl .detail ()).isNull ();
284+ var maps = (List <Map <String , Object >>) rawContent ;
285+ assertThat (maps ).hasSize (2 );
286+ var textMap = maps .get (0 );
287+ assertThat (textMap ).hasSize (2 )
288+ .containsEntry ("type" , "text" )
289+ .containsEntry ("text" , TEXT_CONTENT );
290+ var imageUrlMap = maps .get (1 );
291+ assertThat (imageUrlMap ).hasSize (2 )
292+ .containsEntry ("type" , "image_url" )
293+ .containsEntry ("image_url" , Map .of ("url" , IMAGE_URL ));
275294 }
276295
277296 static class SimpleMessage extends AbstractMessage {
0 commit comments