@@ -93,21 +93,48 @@ func copyModelContextEvent(event *ModelContextEvent) *ModelContextEvent {
9393 return nil
9494 }
9595 return & ModelContextEvent {
96- ToolInfos : append ([] * schema. ToolInfo {}, event .ToolInfos ... ),
97- DeferredToolInfos : append ([] * schema. ToolInfo {}, event .DeferredToolInfos ... ),
96+ ToolInfos : cloneToolInfos ( event .ToolInfos ),
97+ DeferredToolInfos : cloneToolInfos ( event .DeferredToolInfos ),
9898 }
9999}
100100
101+ func cloneToolInfos (infos []* schema.ToolInfo ) []* schema.ToolInfo {
102+ if infos == nil {
103+ return nil
104+ }
105+ return append ([]* schema.ToolInfo {}, infos ... )
106+ }
107+
108+ func modelContextEventEqual (a , b * ModelContextEvent ) bool {
109+ if a == nil || b == nil {
110+ return a == b
111+ }
112+ return toolInfosEqual (a .ToolInfos , b .ToolInfos ) &&
113+ toolInfosEqual (a .DeferredToolInfos , b .DeferredToolInfos )
114+ }
115+
116+ func toolInfosEqual (a , b []* schema.ToolInfo ) bool {
117+ if len (a ) != len (b ) {
118+ return false
119+ }
120+ for i := range a {
121+ if ! reflect .DeepEqual (a [i ], b [i ]) {
122+ return false
123+ }
124+ }
125+ return true
126+ }
127+
101128func syncModelContextSessionEvent [M MessageType ](ctx context.Context , state * TypedChatModelAgentState [M ]) {
102129 execCtx := getTypedChatModelAgentExecCtx [M ](ctx )
103130 if execCtx == nil || ! execCtx .sessionEvents || state == nil {
104131 return
105132 }
106133 current := & ModelContextEvent {
107- ToolInfos : append ([] * schema. ToolInfo {}, state .ToolInfos ... ),
108- DeferredToolInfos : append ([] * schema. ToolInfo {}, state .DeferredToolInfos ... ),
134+ ToolInfos : cloneToolInfos ( state .ToolInfos ),
135+ DeferredToolInfos : cloneToolInfos ( state .DeferredToolInfos ),
109136 }
110- changed := ! execCtx .sawModelContext || ! reflect . DeepEqual (execCtx .lastModelContext , current )
137+ changed := ! execCtx .sawModelContext || ! modelContextEventEqual (execCtx .lastModelContext , current )
111138 if changed {
112139 execCtx .send (ctx , & TypedAgentEvent [M ]{
113140 SessionEventVariant : & SessionEventVariant [M ]{
0 commit comments