package engine // norm_empty_message.go -- 移除内容为空的消息. // // 来源:早期方案第 2 步(removeEmptyMessages). // 场景:thinking 剥离后 assistant 消息可能变空; // 压缩后可能产出无内容的消息. // 跨场景通用:任何消息处理管道都需要过滤空消息. import ( "git.flytoex.net/yuanwei/flyto-agent/pkg/query" ) // EmptyMessageFilter 移除没有实质内容的消息. // 只包含空文本块的消息也被视为空消息. type EmptyMessageFilter struct{} func (f *EmptyMessageFilter) Name() string { return "empty_message" } func (f *EmptyMessageFilter) Priority() int { return 20 } func (f *EmptyMessageFilter) Normalize(messages []query.Message) []query.Message { if len(messages) == 0 { return messages } result := make([]query.Message, 0, len(messages)) for _, msg := range messages { if len(msg.Content) == 0 { continue } hasContent := false for _, c := range msg.Content { switch c.Type { case query.ContentText: if c.Text != "" { hasContent = true } default: // tool_use, tool_result, thinking, image, document 等非文本块都算有内容 hasContent = true } if hasContent { break } } if hasContent { result = append(result, msg) } } return result }