@@ -63,11 +63,40 @@ interface AnthropicTextContentItem {
63
63
text : string ;
64
64
}
65
65
66
+ interface AnthropicUrlPdfContentItem {
67
+ type : 'document' ;
68
+ source : {
69
+ type : 'url' ;
70
+ url : string ;
71
+ } ;
72
+ }
73
+
74
+ interface AnthropicBase64PdfContentItem {
75
+ type : 'document' ;
76
+ source : {
77
+ type : 'base64' ;
78
+ data : string ;
79
+ media_type : string ;
80
+ } ;
81
+ }
82
+
83
+ interface AnthropicPlainTextContentItem {
84
+ type : 'document' ;
85
+ source : {
86
+ type : 'text' ;
87
+ data : string ;
88
+ media_type : string ;
89
+ } ;
90
+ }
91
+
66
92
type AnthropicMessageContentItem =
67
93
| AnthropicToolResultContentItem
68
94
| AnthropicBase64ImageContentItem
69
95
| AnthropicUrlImageContentItem
70
- | AnthropicTextContentItem ;
96
+ | AnthropicTextContentItem
97
+ | AnthropicUrlPdfContentItem
98
+ | AnthropicBase64PdfContentItem
99
+ | AnthropicPlainTextContentItem ;
71
100
72
101
interface AnthropicMessage extends Message , PromptCache {
73
102
content : AnthropicMessageContentItem [ ] ;
@@ -166,6 +195,46 @@ const transformAndAppendImageContentItem = (
166
195
}
167
196
} ;
168
197
198
+ const transformAndAppendFileContentItem = (
199
+ item : ContentType ,
200
+ transformedMessage : AnthropicMessage
201
+ ) => {
202
+ const mimeType =
203
+ ( item . file ?. mime_type as keyof typeof fileExtensionMimeTypeMap ) ||
204
+ fileExtensionMimeTypeMap . pdf ;
205
+ if ( item . file ?. file_url ) {
206
+ transformedMessage . content . push ( {
207
+ type : 'document' ,
208
+ source : {
209
+ type : 'url' ,
210
+ url : item . file . file_url ,
211
+ } ,
212
+ } ) ;
213
+ } else if ( item . file ?. file_data ) {
214
+ const contentType =
215
+ mimeType === fileExtensionMimeTypeMap . txt ? 'text' : 'base64' ;
216
+ if ( contentType === 'text' ) {
217
+ transformedMessage . content . push ( {
218
+ type : 'document' ,
219
+ source : {
220
+ type : contentType ,
221
+ data : item . file . file_data ,
222
+ media_type : mimeType ,
223
+ } ,
224
+ } ) ;
225
+ } else {
226
+ transformedMessage . content . push ( {
227
+ type : 'document' ,
228
+ source : {
229
+ type : contentType ,
230
+ data : item . file . file_data ,
231
+ media_type : mimeType ,
232
+ } ,
233
+ } ) ;
234
+ }
235
+ }
236
+ } ;
237
+
169
238
export const AnthropicChatCompleteConfig : ProviderConfig = {
170
239
model : {
171
240
param : 'model' ,
@@ -205,6 +274,8 @@ export const AnthropicChatCompleteConfig: ProviderConfig = {
205
274
} ) ;
206
275
} else if ( item . type === 'image_url' ) {
207
276
transformAndAppendImageContentItem ( item , transformedMessage ) ;
277
+ } else if ( item . type === 'file' ) {
278
+ transformAndAppendFileContentItem ( item , transformedMessage ) ;
208
279
}
209
280
} ) ;
210
281
messages . push ( transformedMessage as AnthropicMessage ) ;
0 commit comments