@@ -9,14 +9,17 @@ import {
99} from "~/services/copilot/create-chat-completions"
1010
1111import {
12- type AnthropicContentBlock ,
12+ type AnthropicAssistantContentBlock ,
13+ type AnthropicAssistantMessage ,
1314 type AnthropicMessage ,
1415 type AnthropicMessagesPayload ,
1516 type AnthropicResponse ,
1617 type AnthropicTextBlock ,
1718 type AnthropicTool ,
1819 type AnthropicToolResultBlock ,
1920 type AnthropicToolUseBlock ,
21+ type AnthropicUserContentBlock ,
22+ type AnthropicUserMessage ,
2023} from "./anthropic-types"
2124import { mapOpenAIStopReasonToAnthropic } from "./utils"
2225
@@ -72,8 +75,9 @@ function handleSystemPrompt(
7275 }
7376}
7477
75- function handleUserMessage ( message : AnthropicMessage ) : Array < Message > {
78+ function handleUserMessage ( message : AnthropicUserMessage ) : Array < Message > {
7679 const newMessages : Array < Message > = [ ]
80+
7781 if ( Array . isArray ( message . content ) ) {
7882 const toolResultBlocks = message . content . filter (
7983 ( block ) : block is AnthropicToolResultBlock =>
@@ -103,22 +107,32 @@ function handleUserMessage(message: AnthropicMessage): Array<Message> {
103107 content : mapContent ( message . content ) ,
104108 } )
105109 }
110+
106111 return newMessages
107112}
108113
109- function handleAssistantMessage ( message : AnthropicMessage ) : Array < Message > {
110- if ( Array . isArray ( message . content ) ) {
111- const toolUseBlocks = message . content . filter (
112- ( block ) : block is AnthropicToolUseBlock =>
113- ( block as { type : string } ) . type === "tool_use" ,
114- )
114+ function handleAssistantMessage (
115+ message : AnthropicAssistantMessage ,
116+ ) : Array < Message > {
117+ if ( ! Array . isArray ( message . content ) ) {
118+ return [
119+ {
120+ role : "assistant" ,
121+ content : mapContent ( message . content ) ,
122+ } ,
123+ ]
124+ }
115125
116- const textBlocks = message . content . filter (
117- ( block ) : block is AnthropicTextBlock => block . type === "text" ,
118- )
126+ const toolUseBlocks = message . content . filter (
127+ ( block ) : block is AnthropicToolUseBlock => block . type === "tool_use" ,
128+ )
129+
130+ const textBlocks = message . content . filter (
131+ ( block ) : block is AnthropicTextBlock => block . type === "text" ,
132+ )
119133
120- if ( toolUseBlocks . length > 0 ) {
121- return [
134+ return toolUseBlocks . length > 0 ?
135+ [
122136 {
123137 role : "assistant" ,
124138 content : textBlocks . map ( ( b ) => b . text ) . join ( "\n\n" ) || null ,
@@ -132,27 +146,18 @@ function handleAssistantMessage(message: AnthropicMessage): Array<Message> {
132146 } ) ) ,
133147 } ,
134148 ]
135- } else {
136- // No tool use, just regular content
137- return [
149+ : [
138150 {
139151 role : "assistant" ,
140152 content : mapContent ( message . content ) ,
141153 } ,
142154 ]
143- }
144- } else {
145- return [
146- {
147- role : "assistant" ,
148- content : mapContent ( message . content ) ,
149- } ,
150- ]
151- }
152155}
153156
154157function mapContent (
155- content : string | Array < AnthropicContentBlock > ,
158+ content :
159+ | string
160+ | Array < AnthropicUserContentBlock | AnthropicAssistantContentBlock > ,
156161) : string | Array < ContentPart > | null {
157162 if ( typeof content === "string" ) {
158163 return content
0 commit comments