fix(agent): preserve inline tags in message history

Stop stripping <attachments>, <reactions>, and <speech> tags from
assistant messages so the LLM retains full context across turns.
This commit is contained in:
Acbox
2026-03-24 19:45:40 +08:00
parent 4ea1422409
commit 5963e787a9
2 changed files with 0 additions and 28 deletions
-4
View File
@@ -242,8 +242,6 @@ func (a *Agent) runStream(ctx context.Context, cfg RunConfig, ch chan<- StreamEv
if readMediaState != nil {
finalMessages = readMediaState.mergeMessages(streamResult.Steps, finalMessages)
}
finalMessages = StripTagsFromMessages(finalMessages)
var totalUsage sdk.Usage
for _, step := range streamResult.Steps {
totalUsage.InputTokens += step.Usage.InputTokens
@@ -350,8 +348,6 @@ func (a *Agent) runGenerate(ctx context.Context, cfg RunConfig) (*GenerateResult
if readMediaState != nil {
finalMessages = readMediaState.mergeMessages(genResult.Steps, finalMessages)
}
finalMessages = StripTagsFromMessages(finalMessages)
return &GenerateResult{
Messages: finalMessages,
Text: cleanedText,
-24
View File
@@ -115,29 +115,5 @@ func mustMarshal(v any) json.RawMessage {
return data
}
// StripTagsFromMessages strips attachment/reaction/speech tags from assistant messages.
func StripTagsFromMessages(msgs []sdk.Message) []sdk.Message {
resolvers := DefaultTagResolvers()
result := make([]sdk.Message, 0, len(msgs))
for _, msg := range msgs {
if msg.Role != sdk.MessageRoleAssistant {
result = append(result, msg)
continue
}
cleaned := make([]sdk.MessagePart, 0, len(msg.Content))
for _, part := range msg.Content {
if tp, ok := part.(sdk.TextPart); ok {
text, _ := ExtractTagsFromText(tp.Text, resolvers)
cleaned = append(cleaned, sdk.TextPart{Text: text})
} else {
cleaned = append(cleaned, part)
}
}
msg.Content = cleaned
result = append(result, msg)
}
return result
}
// TimeNow is a hook for testing. Defaults to time.Now.
var TimeNow = time.Now