@@ -23,10 +23,12 @@ type ToolCallContext = BasePluginContext & {
2323function fillMissingToolMessages ( {
2424 messages,
2525 cancelledContent,
26+ createMessage,
2627 mutate,
2728} : {
2829 messages : ChatMessage [ ]
2930 cancelledContent : string
31+ createMessage : BasePluginContext [ 'createMessage' ]
3032 mutate : MutateMessageStateFn
3133} ) : void {
3234 // 第一阶段:从首位开始遍历,收集需要插入的信息
@@ -80,11 +82,13 @@ function fillMissingToolMessages({
8082 mutate ( 'messages' , ( draft ) => {
8183 for ( let i = insertInfos . length - 1 ; i >= 0 ; i -- ) {
8284 const { insertAfterIndex, missingToolCallIds } = insertInfos [ i ]
83- const cancelledMessages : ChatMessage [ ] = missingToolCallIds . map ( ( toolCallId ) => ( {
84- role : 'tool' ,
85- tool_call_id : toolCallId ,
86- content : cancelledContent ,
87- } ) )
85+ const cancelledMessages : ChatMessage [ ] = missingToolCallIds . map ( ( toolCallId ) =>
86+ createMessage ( {
87+ role : 'tool' ,
88+ tool_call_id : toolCallId ,
89+ content : cancelledContent ,
90+ } ) ,
91+ )
8892
8993 // 在 assistant 消息之后插入所有取消消息
9094 draft . messages . splice ( insertAfterIndex + 1 , 0 , ...cancelledMessages )
@@ -197,11 +201,11 @@ export const toolPlugin = (
197201 name : 'tool' ,
198202 ...restOptions ,
199203 onTurnStart : ( context ) => {
200- const { getState, mutate } = context
204+ const { getState, createMessage , mutate } = context
201205 const messages = getState ( ) . messages
202206
203207 if ( autoFillMissingToolMessages ) {
204- fillMissingToolMessages ( { messages, cancelledContent : toolCallCancelledContent , mutate } )
208+ fillMissingToolMessages ( { messages, cancelledContent : toolCallCancelledContent , createMessage , mutate } )
205209 }
206210
207211 return restOptions . onTurnStart ?.( context )
@@ -217,7 +221,16 @@ export const toolPlugin = (
217221 return restOptions . onBeforeRequest ?.( context )
218222 } ,
219223 onAfterRequest : async ( context ) => {
220- const { currentMessage, lastChoice, appendMessage, abortSignal, setRequestState, requestNext, mutate } = context
224+ const {
225+ currentMessage,
226+ lastChoice,
227+ appendMessage,
228+ abortSignal,
229+ setRequestState,
230+ requestNext,
231+ mutate,
232+ createMessage,
233+ } = context
221234
222235 if ( lastChoice ?. finish_reason !== 'tool_calls' || ! currentMessage . tool_calls ?. length ) {
223236 return
@@ -231,15 +244,15 @@ export const toolPlugin = (
231244
232245 const toolCallPromises = currentMessage . tool_calls . map ( async ( toolCall ) => {
233246 const now = Math . floor ( Date . now ( ) / 1000 )
234- const toolMessage : ChatMessage = {
247+ const toolMessage : ChatMessage = createMessage ( {
235248 role : 'tool' ,
236249 tool_call_id : toolCall . id ,
237250 content : '' ,
238251 metadata : {
239252 createdAt : now ,
240253 updatedAt : now ,
241254 } ,
242- }
255+ } )
243256
244257 appendMessage ( toolMessage )
245258
0 commit comments