@@ -174,6 +174,115 @@ describe('convertToOpenAIResponsesMessages', () => {
174
174
} ,
175
175
] ) ;
176
176
} ) ;
177
+
178
+ it ( 'should convert messages with PDF file parts' , async ( ) => {
179
+ const base64Data = 'AQIDBAU=' ; // Base64 encoding of pdfData
180
+
181
+ const result = convertToOpenAIResponsesMessages ( {
182
+ prompt : [
183
+ {
184
+ role : 'user' ,
185
+ content : [
186
+ {
187
+ type : 'file' ,
188
+ mimeType : 'application/pdf' ,
189
+ data : base64Data ,
190
+ filename : 'document.pdf' ,
191
+ } ,
192
+ ] ,
193
+ } ,
194
+ ] ,
195
+ systemMessageMode : 'system' ,
196
+ } ) ;
197
+
198
+ expect ( result . messages ) . toEqual ( [
199
+ {
200
+ role : 'user' ,
201
+ content : [
202
+ {
203
+ type : 'input_file' ,
204
+ filename : 'document.pdf' ,
205
+ file_data : 'data:application/pdf;base64,AQIDBAU=' ,
206
+ } ,
207
+ ] ,
208
+ } ,
209
+ ] ) ;
210
+ } ) ;
211
+
212
+ it ( 'should use default filename for PDF file parts when not provided' , async ( ) => {
213
+ const base64Data = 'AQIDBAU=' ;
214
+
215
+ const result = convertToOpenAIResponsesMessages ( {
216
+ prompt : [
217
+ {
218
+ role : 'user' ,
219
+ content : [
220
+ {
221
+ type : 'file' ,
222
+ mimeType : 'application/pdf' ,
223
+ data : base64Data ,
224
+ } ,
225
+ ] ,
226
+ } ,
227
+ ] ,
228
+ systemMessageMode : 'system' ,
229
+ } ) ;
230
+
231
+ expect ( result . messages ) . toEqual ( [
232
+ {
233
+ role : 'user' ,
234
+ content : [
235
+ {
236
+ type : 'input_file' ,
237
+ filename : 'part-0.pdf' ,
238
+ file_data : 'data:application/pdf;base64,AQIDBAU=' ,
239
+ } ,
240
+ ] ,
241
+ } ,
242
+ ] ) ;
243
+ } ) ;
244
+
245
+ it ( 'should throw error for unsupported file types' , async ( ) => {
246
+ const base64Data = 'AQIDBAU=' ;
247
+
248
+ expect ( ( ) => {
249
+ convertToOpenAIResponsesMessages ( {
250
+ prompt : [
251
+ {
252
+ role : 'user' ,
253
+ content : [
254
+ {
255
+ type : 'file' ,
256
+ mimeType : 'text/plain' ,
257
+ data : base64Data ,
258
+ } ,
259
+ ] ,
260
+ } ,
261
+ ] ,
262
+ systemMessageMode : 'system' ,
263
+ } ) ;
264
+ } ) . toThrow ( 'Only PDF files are supported in user messages' ) ;
265
+ } ) ;
266
+
267
+ it ( 'should throw error for file URLs' , async ( ) => {
268
+ expect ( ( ) => {
269
+ convertToOpenAIResponsesMessages ( {
270
+ prompt : [
271
+ {
272
+ role : 'user' ,
273
+ content : [
274
+ {
275
+ type : 'file' ,
276
+ mimeType : 'application/pdf' ,
277
+ data : new URL ( 'https://example.com/document.pdf' ) ,
278
+ } ,
279
+ ] ,
280
+ } ,
281
+ ] ,
282
+ systemMessageMode : 'system' ,
283
+ } ) ;
284
+ } ) . toThrow ( 'File URLs in user messages' ) ;
285
+ } ) ;
177
286
} ) ;
178
287
179
288
describe ( 'assistant messages' , ( ) => {
0 commit comments