summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGrail Finder <wohilas@gmail.com>2025-11-22 21:12:42 +0300
committerGrail Finder <wohilas@gmail.com>2025-11-22 21:12:42 +0300
commit9abe74a4b4a1dec7c463bc9c2ec561e489ac7d52 (patch)
treeea39d084642fd4d97eec88f7b10d452e45ccd321
parent4eb3d609a1df4b94021eca6572c69ae76d318a85 (diff)
Enha: system rag
-rw-r--r--llm.go41
1 files changed, 27 insertions, 14 deletions
diff --git a/llm.go b/llm.go
index 90e63de..4655656 100644
--- a/llm.go
+++ b/llm.go
@@ -84,14 +84,15 @@ func (lcp LlamaCPPeer) FormMsg(msg, role string, resume bool) (io.Reader, error)
if msg != "" { // otherwise let the bot to continue
newMsg := models.RoleMsg{Role: role, Content: msg}
chatBody.Messages = append(chatBody.Messages, newMsg)
- // if rag
+ // if rag - add as system message to avoid conflicts with tool usage
if cfg.RAGEnabled {
ragResp, err := chatRagUse(newMsg.Content)
if err != nil {
logger.Error("failed to form a rag msg", "error", err)
return nil, err
}
- ragMsg := models.RoleMsg{Role: cfg.ToolRole, Content: ragResp}
+ // Use system role for RAG context to avoid conflicts with tool usage
+ ragMsg := models.RoleMsg{Role: "system", Content: "RAG context: " + ragResp}
chatBody.Messages = append(chatBody.Messages, ragMsg)
}
}
@@ -181,15 +182,12 @@ func (op OpenAIer) FormMsg(msg, role string, resume bool) (io.Reader, error) {
if msg != "" { // otherwise let the bot continue
// Create the message with support for multimodal content
var newMsg models.RoleMsg
-
// Check if we have an image to add to this message
if imageAttachmentPath != "" {
// Create a multimodal message with both text and image
newMsg = models.NewMultimodalMsg(role, []interface{}{})
-
// Add the text content
newMsg.AddTextPart(msg)
-
// Add the image content
imageURL, err := models.CreateImageURLFromPath(imageAttachmentPath)
if err != nil {
@@ -205,8 +203,19 @@ func (op OpenAIer) FormMsg(msg, role string, resume bool) (io.Reader, error) {
// Create a simple text message
newMsg = models.NewRoleMsg(role, msg)
}
-
chatBody.Messages = append(chatBody.Messages, newMsg)
+
+ // if rag - add as system message to avoid conflicts with tool usage
+ if cfg.RAGEnabled {
+ ragResp, err := chatRagUse(newMsg.Content)
+ if err != nil {
+ logger.Error("failed to form a rag msg", "error", err)
+ return nil, err
+ }
+ // Use system role for RAG context to avoid conflicts with tool usage
+ ragMsg := models.RoleMsg{Role: "system", Content: "RAG context: " + ragResp}
+ chatBody.Messages = append(chatBody.Messages, ragMsg)
+ }
}
req := models.OpenAIReq{
ChatBody: chatBody,
@@ -251,14 +260,15 @@ func (ds DeepSeekerCompletion) FormMsg(msg, role string, resume bool) (io.Reader
if msg != "" { // otherwise let the bot to continue
newMsg := models.RoleMsg{Role: role, Content: msg}
chatBody.Messages = append(chatBody.Messages, newMsg)
- // if rag
+ // if rag - add as system message to avoid conflicts with tool usage
if cfg.RAGEnabled {
ragResp, err := chatRagUse(newMsg.Content)
if err != nil {
logger.Error("failed to form a rag msg", "error", err)
return nil, err
}
- ragMsg := models.RoleMsg{Role: cfg.ToolRole, Content: ragResp}
+ // Use system role for RAG context to avoid conflicts with tool usage
+ ragMsg := models.RoleMsg{Role: "system", Content: "RAG context: " + ragResp}
chatBody.Messages = append(chatBody.Messages, ragMsg)
}
}
@@ -332,14 +342,15 @@ func (ds DeepSeekerChat) FormMsg(msg, role string, resume bool) (io.Reader, erro
if msg != "" { // otherwise let the bot continue
newMsg := models.RoleMsg{Role: role, Content: msg}
chatBody.Messages = append(chatBody.Messages, newMsg)
- // if rag
+ // if rag - add as system message to avoid conflicts with tool usage
if cfg.RAGEnabled {
ragResp, err := chatRagUse(newMsg.Content)
if err != nil {
logger.Error("failed to form a rag msg", "error", err)
return nil, err
}
- ragMsg := models.RoleMsg{Role: cfg.ToolRole, Content: ragResp}
+ // Use system role for RAG context to avoid conflicts with tool usage
+ ragMsg := models.RoleMsg{Role: "system", Content: "RAG context: " + ragResp}
chatBody.Messages = append(chatBody.Messages, ragMsg)
}
}
@@ -397,14 +408,15 @@ func (or OpenRouterCompletion) FormMsg(msg, role string, resume bool) (io.Reader
if msg != "" { // otherwise let the bot to continue
newMsg := models.RoleMsg{Role: role, Content: msg}
chatBody.Messages = append(chatBody.Messages, newMsg)
- // if rag
+ // if rag - add as system message to avoid conflicts with tool usage
if cfg.RAGEnabled {
ragResp, err := chatRagUse(newMsg.Content)
if err != nil {
logger.Error("failed to form a rag msg", "error", err)
return nil, err
}
- ragMsg := models.RoleMsg{Role: cfg.ToolRole, Content: ragResp}
+ // Use system role for RAG context to avoid conflicts with tool usage
+ ragMsg := models.RoleMsg{Role: "system", Content: "RAG context: " + ragResp}
chatBody.Messages = append(chatBody.Messages, ragMsg)
}
}
@@ -474,14 +486,15 @@ func (or OpenRouterChat) FormMsg(msg, role string, resume bool) (io.Reader, erro
if msg != "" { // otherwise let the bot continue
newMsg := models.RoleMsg{Role: role, Content: msg}
chatBody.Messages = append(chatBody.Messages, newMsg)
- // if rag
+ // if rag - add as system message to avoid conflicts with tool usage
if cfg.RAGEnabled {
ragResp, err := chatRagUse(newMsg.Content)
if err != nil {
logger.Error("failed to form a rag msg", "error", err)
return nil, err
}
- ragMsg := models.RoleMsg{Role: cfg.ToolRole, Content: ragResp}
+ // Use system role for RAG context to avoid conflicts with tool usage
+ ragMsg := models.RoleMsg{Role: "system", Content: "RAG context: " + ragResp}
chatBody.Messages = append(chatBody.Messages, ragMsg)
}
}