@@ -63,11 +63,40 @@ interface AnthropicTextContentItem {
6363 text : string ;
6464}
6565
66+ interface AnthropicUrlPdfContentItem {
67+ type : string ;
68+ source : {
69+ type : string ;
70+ url : string ;
71+ } ;
72+ }
73+
74+ interface AnthropicBase64PdfContentItem {
75+ type : string ;
76+ source : {
77+ type : string ;
78+ data : string ;
79+ media_type : string ;
80+ } ;
81+ }
82+
83+ interface AnthropicPlainTextContentItem {
84+ type : string ;
85+ source : {
86+ type : string ;
87+ data : string ;
88+ media_type : string ;
89+ } ;
90+ }
91+
6692type AnthropicMessageContentItem =
6793 | AnthropicToolResultContentItem
6894 | AnthropicBase64ImageContentItem
6995 | AnthropicUrlImageContentItem
70- | AnthropicTextContentItem ;
96+ | AnthropicTextContentItem
97+ | AnthropicUrlPdfContentItem
98+ | AnthropicBase64PdfContentItem
99+ | AnthropicPlainTextContentItem ;
71100
72101interface AnthropicMessage extends Message , PromptCache {
73102 content : AnthropicMessageContentItem [ ] ;
@@ -166,6 +195,35 @@ const transformAndAppendImageContentItem = (
166195 }
167196} ;
168197
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+ transformedMessage . content . push ( {
217+ type : 'document' ,
218+ source : {
219+ type : contentType ,
220+ data : item . file . file_data ,
221+ media_type : mimeType ,
222+ } ,
223+ } ) ;
224+ }
225+ } ;
226+
169227export const AnthropicChatCompleteConfig : ProviderConfig = {
170228 model : {
171229 param : 'model' ,
@@ -205,6 +263,8 @@ export const AnthropicChatCompleteConfig: ProviderConfig = {
205263 } ) ;
206264 } else if ( item . type === 'image_url' ) {
207265 transformAndAppendImageContentItem ( item , transformedMessage ) ;
266+ } else if ( item . type === 'file' ) {
267+ transformAndAppendFileContentItem ( item , transformedMessage ) ;
208268 }
209269 } ) ;
210270 messages . push ( transformedMessage as AnthropicMessage ) ;
0 commit comments