summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGrail Finder <wohilas@gmail.com>2026-02-01 11:38:51 +0300
committerGrail Finder <wohilas@gmail.com>2026-02-01 11:38:51 +0300
commit6f6a35459ef4de340c0c6825da20828e7f579207 (patch)
tree0f5a5d9b2aab6dd1887d188edb582e9976ca2350
parent3a11210f52a850f84771e1642cafcc3027b85075 (diff)
Chore: cleaning
-rw-r--r--bot.go28
-rw-r--r--bot_test.go2
-rw-r--r--llm.go6
3 files changed, 10 insertions, 26 deletions
diff --git a/bot.go b/bot.go
index 6e7d094..f55fc6d 100644
--- a/bot.go
+++ b/bot.go
@@ -169,26 +169,10 @@ func filterMessagesForCharacter(messages []models.RoleMsg, character string) []m
return filtered
}
-// cleanNullMessages removes messages with null or empty content to prevent API issues
-func cleanNullMessages(messages []models.RoleMsg) []models.RoleMsg {
- // // deletes tool calls which we don't want for now
- // cleaned := make([]models.RoleMsg, 0, len(messages))
- // for _, msg := range messages {
- // // is there a sense for this check at all?
- // if msg.HasContent() || msg.ToolCallID != "" || msg.Role == cfg.AssistantRole || msg.Role == cfg.WriteNextMsgAsCompletionAgent {
- // cleaned = append(cleaned, msg)
- // } else {
- // // Log filtered messages for debugging
- // logger.Warn("filtering out message during cleaning", "role", msg.Role, "content", msg.Content, "tool_call_id", msg.ToolCallID, "has_content", msg.HasContent())
- // }
- // }
- return consolidateConsecutiveAssistantMessages(messages)
-}
-
func cleanToolCalls(messages []models.RoleMsg) []models.RoleMsg {
// If AutoCleanToolCallsFromCtx is false, keep tool call messages in context
if cfg != nil && !cfg.AutoCleanToolCallsFromCtx {
- return consolidateConsecutiveAssistantMessages(messages)
+ return consolidateAssistantMessages(messages)
}
cleaned := make([]models.RoleMsg, 0, len(messages))
for i, msg := range messages {
@@ -198,11 +182,11 @@ func cleanToolCalls(messages []models.RoleMsg) []models.RoleMsg {
cleaned = append(cleaned, msg)
}
}
- return consolidateConsecutiveAssistantMessages(cleaned)
+ return consolidateAssistantMessages(cleaned)
}
-// consolidateConsecutiveAssistantMessages merges consecutive assistant messages into a single message
-func consolidateConsecutiveAssistantMessages(messages []models.RoleMsg) []models.RoleMsg {
+// consolidateAssistantMessages merges consecutive assistant messages into a single message
+func consolidateAssistantMessages(messages []models.RoleMsg) []models.RoleMsg {
if len(messages) == 0 {
return messages
}
@@ -211,6 +195,7 @@ func consolidateConsecutiveAssistantMessages(messages []models.RoleMsg) []models
isBuildingAssistantMsg := false
for i := 0; i < len(messages); i++ {
msg := messages[i]
+ // what about the case with multiplpe assistant roles?
if msg.Role == cfg.AssistantRole || msg.Role == cfg.WriteNextMsgAsCompletionAgent {
// If this is an assistant message, start or continue building
if !isBuildingAssistantMsg {
@@ -824,7 +809,6 @@ out:
if findCall(respText.String(), toolResp.String()) {
return nil
}
- // TODO: have a config attr
// Check if this message was sent privately to specific characters
// If so, trigger those characters to respond if that char is not controlled by user
// perhaps we should have narrator role to determine which char is next to act
@@ -850,7 +834,7 @@ func cleanChatBody() {
// Tool request cleaning is now configurable via AutoCleanToolCallsFromCtx (default false)
// /completion msg where part meant for user and other part tool call
chatBody.Messages = cleanToolCalls(chatBody.Messages)
- chatBody.Messages = cleanNullMessages(chatBody.Messages)
+ chatBody.Messages = consolidateAssistantMessages(chatBody.Messages)
logger.Debug("cleanChatBody: after cleaning", "original_len", originalLen, "new_len", len(chatBody.Messages))
for i, msg := range chatBody.Messages {
logger.Debug("cleanChatBody: after clean", "index", i, "role", msg.Role, "content_len", len(msg.Content), "has_content", msg.HasContent(), "tool_call_id", msg.ToolCallID)
diff --git a/bot_test.go b/bot_test.go
index 3dabc15..4cbe953 100644
--- a/bot_test.go
+++ b/bot_test.go
@@ -117,7 +117,7 @@ func TestConsolidateConsecutiveAssistantMessages(t *testing.T) {
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
- result := consolidateConsecutiveAssistantMessages(tt.input)
+ result := consolidateAssistantMessages(tt.input)
if len(result) != len(tt.expected) {
t.Errorf("Expected %d messages, got %d", len(tt.expected), len(result))
diff --git a/llm.go b/llm.go
index 5bd7554..7651a19 100644
--- a/llm.go
+++ b/llm.go
@@ -322,7 +322,7 @@ func (op LCPChat) FormMsg(msg, role string, resume bool) (io.Reader, error) {
}
}
// Clean null/empty messages to prevent API issues
- bodyCopy.Messages = cleanNullMessages(bodyCopy.Messages)
+ bodyCopy.Messages = consolidateAssistantMessages(bodyCopy.Messages)
req := models.OpenAIReq{
ChatBody: bodyCopy,
Tools: nil,
@@ -488,7 +488,7 @@ func (ds DeepSeekerChat) FormMsg(msg, role string, resume bool) (io.Reader, erro
}
}
// Clean null/empty messages to prevent API issues
- bodyCopy.Messages = cleanNullMessages(bodyCopy.Messages)
+ bodyCopy.Messages = consolidateAssistantMessages(bodyCopy.Messages)
dsBody := models.NewDSChatReq(*bodyCopy)
data, err := json.Marshal(dsBody)
if err != nil {
@@ -676,7 +676,7 @@ func (or OpenRouterChat) FormMsg(msg, role string, resume bool) (io.Reader, erro
}
}
// Clean null/empty messages to prevent API issues
- bodyCopy.Messages = cleanNullMessages(bodyCopy.Messages)
+ bodyCopy.Messages = consolidateAssistantMessages(bodyCopy.Messages)
orBody := models.NewOpenRouterChatReq(*bodyCopy, defaultLCPProps)
if cfg.ToolUse && !resume && role != cfg.ToolRole {
orBody.Tools = baseTools // set tools to use