Chore: cleaning
This commit is contained in:
28
bot.go
28
bot.go
@@ -169,26 +169,10 @@ func filterMessagesForCharacter(messages []models.RoleMsg, character string) []m
|
|||||||
return filtered
|
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 {
|
func cleanToolCalls(messages []models.RoleMsg) []models.RoleMsg {
|
||||||
// If AutoCleanToolCallsFromCtx is false, keep tool call messages in context
|
// If AutoCleanToolCallsFromCtx is false, keep tool call messages in context
|
||||||
if cfg != nil && !cfg.AutoCleanToolCallsFromCtx {
|
if cfg != nil && !cfg.AutoCleanToolCallsFromCtx {
|
||||||
return consolidateConsecutiveAssistantMessages(messages)
|
return consolidateAssistantMessages(messages)
|
||||||
}
|
}
|
||||||
cleaned := make([]models.RoleMsg, 0, len(messages))
|
cleaned := make([]models.RoleMsg, 0, len(messages))
|
||||||
for i, msg := range messages {
|
for i, msg := range messages {
|
||||||
@@ -198,11 +182,11 @@ func cleanToolCalls(messages []models.RoleMsg) []models.RoleMsg {
|
|||||||
cleaned = append(cleaned, msg)
|
cleaned = append(cleaned, msg)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return consolidateConsecutiveAssistantMessages(cleaned)
|
return consolidateAssistantMessages(cleaned)
|
||||||
}
|
}
|
||||||
|
|
||||||
// consolidateConsecutiveAssistantMessages merges consecutive assistant messages into a single message
|
// consolidateAssistantMessages merges consecutive assistant messages into a single message
|
||||||
func consolidateConsecutiveAssistantMessages(messages []models.RoleMsg) []models.RoleMsg {
|
func consolidateAssistantMessages(messages []models.RoleMsg) []models.RoleMsg {
|
||||||
if len(messages) == 0 {
|
if len(messages) == 0 {
|
||||||
return messages
|
return messages
|
||||||
}
|
}
|
||||||
@@ -211,6 +195,7 @@ func consolidateConsecutiveAssistantMessages(messages []models.RoleMsg) []models
|
|||||||
isBuildingAssistantMsg := false
|
isBuildingAssistantMsg := false
|
||||||
for i := 0; i < len(messages); i++ {
|
for i := 0; i < len(messages); i++ {
|
||||||
msg := messages[i]
|
msg := messages[i]
|
||||||
|
// what about the case with multiplpe assistant roles?
|
||||||
if msg.Role == cfg.AssistantRole || msg.Role == cfg.WriteNextMsgAsCompletionAgent {
|
if msg.Role == cfg.AssistantRole || msg.Role == cfg.WriteNextMsgAsCompletionAgent {
|
||||||
// If this is an assistant message, start or continue building
|
// If this is an assistant message, start or continue building
|
||||||
if !isBuildingAssistantMsg {
|
if !isBuildingAssistantMsg {
|
||||||
@@ -824,7 +809,6 @@ out:
|
|||||||
if findCall(respText.String(), toolResp.String()) {
|
if findCall(respText.String(), toolResp.String()) {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
// TODO: have a config attr
|
|
||||||
// Check if this message was sent privately to specific characters
|
// 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
|
// 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
|
// 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)
|
// Tool request cleaning is now configurable via AutoCleanToolCallsFromCtx (default false)
|
||||||
// /completion msg where part meant for user and other part tool call
|
// /completion msg where part meant for user and other part tool call
|
||||||
chatBody.Messages = cleanToolCalls(chatBody.Messages)
|
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))
|
logger.Debug("cleanChatBody: after cleaning", "original_len", originalLen, "new_len", len(chatBody.Messages))
|
||||||
for i, msg := range 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)
|
logger.Debug("cleanChatBody: after clean", "index", i, "role", msg.Role, "content_len", len(msg.Content), "has_content", msg.HasContent(), "tool_call_id", msg.ToolCallID)
|
||||||
|
|||||||
@@ -117,7 +117,7 @@ func TestConsolidateConsecutiveAssistantMessages(t *testing.T) {
|
|||||||
|
|
||||||
for _, tt := range tests {
|
for _, tt := range tests {
|
||||||
t.Run(tt.name, func(t *testing.T) {
|
t.Run(tt.name, func(t *testing.T) {
|
||||||
result := consolidateConsecutiveAssistantMessages(tt.input)
|
result := consolidateAssistantMessages(tt.input)
|
||||||
|
|
||||||
if len(result) != len(tt.expected) {
|
if len(result) != len(tt.expected) {
|
||||||
t.Errorf("Expected %d messages, got %d", len(tt.expected), len(result))
|
t.Errorf("Expected %d messages, got %d", len(tt.expected), len(result))
|
||||||
|
|||||||
6
llm.go
6
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
|
// Clean null/empty messages to prevent API issues
|
||||||
bodyCopy.Messages = cleanNullMessages(bodyCopy.Messages)
|
bodyCopy.Messages = consolidateAssistantMessages(bodyCopy.Messages)
|
||||||
req := models.OpenAIReq{
|
req := models.OpenAIReq{
|
||||||
ChatBody: bodyCopy,
|
ChatBody: bodyCopy,
|
||||||
Tools: nil,
|
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
|
// Clean null/empty messages to prevent API issues
|
||||||
bodyCopy.Messages = cleanNullMessages(bodyCopy.Messages)
|
bodyCopy.Messages = consolidateAssistantMessages(bodyCopy.Messages)
|
||||||
dsBody := models.NewDSChatReq(*bodyCopy)
|
dsBody := models.NewDSChatReq(*bodyCopy)
|
||||||
data, err := json.Marshal(dsBody)
|
data, err := json.Marshal(dsBody)
|
||||||
if err != nil {
|
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
|
// Clean null/empty messages to prevent API issues
|
||||||
bodyCopy.Messages = cleanNullMessages(bodyCopy.Messages)
|
bodyCopy.Messages = consolidateAssistantMessages(bodyCopy.Messages)
|
||||||
orBody := models.NewOpenRouterChatReq(*bodyCopy, defaultLCPProps)
|
orBody := models.NewOpenRouterChatReq(*bodyCopy, defaultLCPProps)
|
||||||
if cfg.ToolUse && !resume && role != cfg.ToolRole {
|
if cfg.ToolUse && !resume && role != cfg.ToolRole {
|
||||||
orBody.Tools = baseTools // set tools to use
|
orBody.Tools = baseTools // set tools to use
|
||||||
|
|||||||
Reference in New Issue
Block a user