mirror of
https://github.com/memohai/Memoh.git
synced 2026-04-25 07:00:48 +09:00
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:
@@ -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,
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user