feat: add option to strip thinking from output (#100)
Signed-off-by: mudler <mudler@localai.io>
This commit is contained in:
committed by
GitHub
parent
bd1b06f326
commit
1109b0a533
@@ -5,6 +5,8 @@ import (
|
|||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"os"
|
"os"
|
||||||
|
"regexp"
|
||||||
|
"strings"
|
||||||
"sync"
|
"sync"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
@@ -788,6 +790,24 @@ func (a *Agent) consumeJob(job *types.Job, role string) {
|
|||||||
a.reply(job, role, conv, actionParams, chosenAction, reasoning)
|
a.reply(job, role, conv, actionParams, chosenAction, reasoning)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func stripThinkingTags(content string) string {
|
||||||
|
// Remove content between <thinking> and </thinking>
|
||||||
|
content = regexp.MustCompile(`<thinking>.*?</thinking>`).ReplaceAllString(content, "")
|
||||||
|
// Remove content between <think> and </think>
|
||||||
|
content = regexp.MustCompile(`<think>.*?</think>`).ReplaceAllString(content, "")
|
||||||
|
// Clean up any extra whitespace
|
||||||
|
content = strings.TrimSpace(content)
|
||||||
|
return content
|
||||||
|
}
|
||||||
|
|
||||||
|
func (a *Agent) processPrompt(content string) string {
|
||||||
|
if a.options.stripThinkingTags {
|
||||||
|
content = stripThinkingTags(content)
|
||||||
|
}
|
||||||
|
// Future post-processing options can be added here
|
||||||
|
return content
|
||||||
|
}
|
||||||
|
|
||||||
func (a *Agent) reply(job *types.Job, role string, conv Messages, actionParams types.ActionParams, chosenAction types.Action, reasoning string) {
|
func (a *Agent) reply(job *types.Job, role string, conv Messages, actionParams types.ActionParams, chosenAction types.Action, reasoning string) {
|
||||||
job.Result.Conversation = conv
|
job.Result.Conversation = conv
|
||||||
|
|
||||||
@@ -854,7 +874,7 @@ func (a *Agent) reply(job *types.Job, role string, conv Messages, actionParams t
|
|||||||
|
|
||||||
msg := openai.ChatCompletionMessage{
|
msg := openai.ChatCompletionMessage{
|
||||||
Role: "assistant",
|
Role: "assistant",
|
||||||
Content: replyResponse.Message,
|
Content: a.processPrompt(replyResponse.Message),
|
||||||
}
|
}
|
||||||
|
|
||||||
conv = append(conv, msg)
|
conv = append(conv, msg)
|
||||||
@@ -883,8 +903,10 @@ func (a *Agent) reply(job *types.Job, role string, conv Messages, actionParams t
|
|||||||
|
|
||||||
msg = openai.ChatCompletionMessage{
|
msg = openai.ChatCompletionMessage{
|
||||||
Role: "assistant",
|
Role: "assistant",
|
||||||
Content: replyResponse.Message,
|
Content: a.processPrompt(replyResponse.Message),
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
msg.Content = a.processPrompt(msg.Content)
|
||||||
}
|
}
|
||||||
|
|
||||||
conv = append(conv, msg)
|
conv = append(conv, msg)
|
||||||
|
|||||||
@@ -25,6 +25,7 @@ type options struct {
|
|||||||
randomIdentity bool
|
randomIdentity bool
|
||||||
userActions types.Actions
|
userActions types.Actions
|
||||||
enableHUD, standaloneJob, showCharacter, enableKB, enableSummaryMemory, enableLongTermMemory bool
|
enableHUD, standaloneJob, showCharacter, enableKB, enableSummaryMemory, enableLongTermMemory bool
|
||||||
|
stripThinkingTags bool
|
||||||
|
|
||||||
canStopItself bool
|
canStopItself bool
|
||||||
initiateConversations bool
|
initiateConversations bool
|
||||||
@@ -377,3 +378,8 @@ func WithObserver(observer Observer) Option {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var EnableStripThinkingTags = func(o *options) error {
|
||||||
|
o.stripThinkingTags = true
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|||||||
@@ -67,6 +67,7 @@ type AgentConfig struct {
|
|||||||
LongTermMemory bool `json:"long_term_memory" form:"long_term_memory"`
|
LongTermMemory bool `json:"long_term_memory" form:"long_term_memory"`
|
||||||
SummaryLongTermMemory bool `json:"summary_long_term_memory" form:"summary_long_term_memory"`
|
SummaryLongTermMemory bool `json:"summary_long_term_memory" form:"summary_long_term_memory"`
|
||||||
ParallelJobs int `json:"parallel_jobs" form:"parallel_jobs"`
|
ParallelJobs int `json:"parallel_jobs" form:"parallel_jobs"`
|
||||||
|
StripThinkingTags bool `json:"strip_thinking_tags" form:"strip_thinking_tags"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type AgentConfigMeta struct {
|
type AgentConfigMeta struct {
|
||||||
@@ -292,6 +293,14 @@ func NewAgentConfigMeta(
|
|||||||
HelpText: "Script to prepare the MCP box",
|
HelpText: "Script to prepare the MCP box",
|
||||||
Tags: config.Tags{Section: "AdvancedSettings"},
|
Tags: config.Tags{Section: "AdvancedSettings"},
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
Name: "strip_thinking_tags",
|
||||||
|
Label: "Strip Thinking Tags",
|
||||||
|
Type: "checkbox",
|
||||||
|
DefaultValue: false,
|
||||||
|
HelpText: "Remove content between <thinking></thinking> and <think></think> tags from agent responses",
|
||||||
|
Tags: config.Tags{Section: "ModelSettings"},
|
||||||
|
},
|
||||||
},
|
},
|
||||||
MCPServers: []config.Field{
|
MCPServers: []config.Field{
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -526,6 +526,10 @@ func (a *AgentPool) startAgentWithConfig(name string, config *AgentConfig, obs O
|
|||||||
opts = append(opts, EnableForceReasoning)
|
opts = append(opts, EnableForceReasoning)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if config.StripThinkingTags {
|
||||||
|
opts = append(opts, EnableStripThinkingTags)
|
||||||
|
}
|
||||||
|
|
||||||
if config.KnowledgeBaseResults > 0 {
|
if config.KnowledgeBaseResults > 0 {
|
||||||
opts = append(opts, EnableKnowledgeBaseWithResults(config.KnowledgeBaseResults))
|
opts = append(opts, EnableKnowledgeBaseWithResults(config.KnowledgeBaseResults))
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user