diff --git a/core/chatter.go b/core/chatter.go index 4fab37a06..a8f30bbfe 100644 --- a/core/chatter.go +++ b/core/chatter.go @@ -10,6 +10,7 @@ import ( "github.com/danielmiessler/fabric/common" "github.com/danielmiessler/fabric/plugins/ai" "github.com/danielmiessler/fabric/plugins/db/fsdb" + "github.com/danielmiessler/fabric/plugins/template" ) const NoSessionPatternUserMessages = "no session, pattern or user messages provided" @@ -74,6 +75,7 @@ func (o *Chatter) Send(request *common.ChatRequest, opts *common.ChatOptions) (s func (o *Chatter) BuildSession(request *common.ChatRequest, raw bool) (session *fsdb.Session, err error) { + // If a session name is provided, retrieve it from the database if request.SessionName != "" { var sess *fsdb.Session if sess, err = o.db.Sessions.Get(request.SessionName); err != nil { @@ -89,6 +91,7 @@ func (o *Chatter) BuildSession(request *common.ChatRequest, raw bool) (session * session.Append(&goopenai.ChatCompletionMessage{Role: common.ChatMessageRoleMeta, Content: request.Meta}) } + // if a context name is provided, retrieve it from the database var contextContent string if request.ContextName != "" { var ctx *fsdb.Context @@ -100,15 +103,20 @@ func (o *Chatter) BuildSession(request *common.ChatRequest, raw bool) (session * } - //if there is no input from stdin - var messageContent string + // Process any template variables in the message content (user input) + // Double curly braces {{variable}} indicate template substitution + // should occur, whether in patterns or direct input if request.Message != nil { - messageContent = request.Message.Content + request.Message.Content, err = template.ApplyTemplate(request.Message.Content, request.PatternVariables, "") + if err != nil { + return nil, err + } } var patternContent string if request.PatternName != "" { - pattern, err := o.db.Patterns.GetApplyVariables(request.PatternName, request.PatternVariables, messageContent) + pattern, err := o.db.Patterns.GetApplyVariables(request.PatternName, request.PatternVariables, request.Message.Content) + // pattrn will now contain user input, and all variables will be resolved, or errored if err != nil { return nil, fmt.Errorf("could not get pattern %s: %v", request.PatternName, err) @@ -125,7 +133,8 @@ func (o *Chatter) BuildSession(request *common.ChatRequest, raw bool) (session * if raw { if request.Message != nil { if systemMessage != "" { - request.Message.Content = systemMessage + request.Message.Content + request.Message.Content = systemMessage + // system contains pattern which contains user input } } else { if systemMessage != "" { diff --git a/plugins/template/fabric b/plugins/template/fabric deleted file mode 100644 index 0bea184da..000000000 Binary files a/plugins/template/fabric and /dev/null differ