@@ -42,26 +42,38 @@ export function translateToOpenAI(
4242 }
4343}
4444
45+ function translateAnthropicMessagesToOpenAI (
46+ anthropicMessages : Array < AnthropicMessage > ,
47+ system : string | Array < AnthropicTextBlock > | undefined ,
48+ ) : Array < Message > {
49+ const systemMessages = handleSystemPrompt ( system )
50+
51+ const otherMessages = anthropicMessages . flatMap ( ( message ) =>
52+ message . role === "user" ?
53+ handleUserMessage ( message )
54+ : handleAssistantMessage ( message ) ,
55+ )
56+
57+ return [ ...systemMessages , ...otherMessages ]
58+ }
59+
4560function handleSystemPrompt (
4661 system : string | Array < AnthropicTextBlock > | undefined ,
47- messages : Array < Message > ,
48- ) {
62+ ) : Array < Message > {
4963 if ( ! system ) {
50- return
64+ return [ ]
5165 }
5266
5367 if ( typeof system === "string" ) {
54- messages . push ( { role : "system" , content : system } )
68+ return [ { role : "system" , content : system } ]
5569 } else {
5670 const systemText = system . map ( ( block ) => block . text ) . join ( "\n\n" )
57- messages . push ( { role : "system" , content : systemText } )
71+ return [ { role : "system" , content : systemText } ]
5872 }
5973}
6074
61- function handleUserMessage (
62- message : AnthropicMessage ,
63- messages : Array < Message > ,
64- ) {
75+ function handleUserMessage ( message : AnthropicMessage ) : Array < Message > {
76+ const newMessages : Array < Message > = [ ]
6577 if ( Array . isArray ( message . content ) ) {
6678 const toolResultBlocks = message . content . filter (
6779 ( block ) : block is AnthropicToolResultBlock =>
@@ -72,31 +84,29 @@ function handleUserMessage(
7284 )
7385
7486 if ( otherBlocks . length > 0 ) {
75- messages . push ( {
87+ newMessages . push ( {
7688 role : "user" ,
7789 content : mapContent ( otherBlocks ) ,
7890 } )
7991 }
8092
8193 for ( const block of toolResultBlocks ) {
82- messages . push ( {
94+ newMessages . push ( {
8395 role : "tool" ,
8496 tool_call_id : block . tool_use_id ,
8597 content : block . content ,
8698 } )
8799 }
88100 } else {
89- messages . push ( {
101+ newMessages . push ( {
90102 role : "user" ,
91103 content : mapContent ( message . content ) ,
92104 } )
93105 }
106+ return newMessages
94107}
95108
96- function handleAssistantMessage (
97- message : AnthropicMessage ,
98- messages : Array < Message > ,
99- ) {
109+ function handleAssistantMessage ( message : AnthropicMessage ) : Array < Message > {
100110 if ( Array . isArray ( message . content ) ) {
101111 const toolUseBlocks = message . content . filter (
102112 ( block ) : block is AnthropicToolUseBlock =>
@@ -108,48 +118,37 @@ function handleAssistantMessage(
108118 )
109119
110120 if ( toolUseBlocks . length > 0 ) {
111- messages . push ( {
112- role : "assistant" ,
113- content : textBlocks . map ( ( b ) => b . text ) . join ( "\n\n" ) || null ,
114- tool_calls : toolUseBlocks . map ( ( toolUse ) => ( {
115- id : toolUse . id ,
116- type : "function" ,
117- function : {
118- name : toolUse . name ,
119- arguments : JSON . stringify ( toolUse . input ) ,
120- } ,
121- } ) ) ,
122- } )
121+ return [
122+ {
123+ role : "assistant" ,
124+ content : textBlocks . map ( ( b ) => b . text ) . join ( "\n\n" ) || null ,
125+ tool_calls : toolUseBlocks . map ( ( toolUse ) => ( {
126+ id : toolUse . id ,
127+ type : "function" ,
128+ function : {
129+ name : toolUse . name ,
130+ arguments : JSON . stringify ( toolUse . input ) ,
131+ } ,
132+ } ) ) ,
133+ } ,
134+ ]
123135 } else {
124136 // No tool use, just regular content
125- messages . push ( {
126- role : "assistant" ,
127- content : mapContent ( message . content ) ,
128- } )
137+ return [
138+ {
139+ role : "assistant" ,
140+ content : mapContent ( message . content ) ,
141+ } ,
142+ ]
129143 }
130144 } else {
131- messages . push ( {
132- role : "assistant" ,
133- content : mapContent ( message . content ) ,
134- } )
135- }
136- }
137-
138- function translateAnthropicMessagesToOpenAI (
139- anthropicMessages : Array < AnthropicMessage > ,
140- system : string | Array < AnthropicTextBlock > | undefined ,
141- ) : Array < Message > {
142- const messages : Array < Message > = [ ]
143- handleSystemPrompt ( system , messages )
144-
145- for ( const message of anthropicMessages ) {
146- if ( message . role === "user" ) {
147- handleUserMessage ( message , messages )
148- } else {
149- handleAssistantMessage ( message , messages )
150- }
145+ return [
146+ {
147+ role : "assistant" ,
148+ content : mapContent ( message . content ) ,
149+ } ,
150+ ]
151151 }
152- return messages
153152}
154153
155154function mapContent (
0 commit comments