Skip to content

Commit f053b38

Browse files
authored
fix(go): fixed system/messages/user order in prompts (#3812)
1 parent c983e37 commit f053b38

File tree

2 files changed

+22
-6
lines changed

2 files changed

+22
-6
lines changed

go/ai/prompt.go

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -182,10 +182,26 @@ func (p *prompt) Execute(ctx context.Context, opts ...PromptExecuteOption) (*Mod
182182
},
183183
}
184184

185-
actionOpts.Messages, err = renderMessages(ctx, tempOpts, actionOpts.Messages, m, execOpts.Input, p.registry.Dotprompt())
185+
execMsgs, err := renderMessages(ctx, tempOpts, []*Message{}, m, execOpts.Input, p.registry.Dotprompt())
186186
if err != nil {
187187
return nil, err
188188
}
189+
190+
var systemMsgs []*Message
191+
var msgs []*Message
192+
foundNonSystem := false
193+
194+
for _, msg := range actionOpts.Messages {
195+
if msg.Role == RoleSystem && !foundNonSystem {
196+
systemMsgs = append(systemMsgs, msg)
197+
} else {
198+
foundNonSystem = true
199+
msgs = append(msgs, msg)
200+
}
201+
}
202+
203+
actionOpts.Messages = append(systemMsgs, execMsgs...)
204+
actionOpts.Messages = append(actionOpts.Messages, msgs...)
189205
}
190206

191207
toolRefs := execOpts.Tools

go/ai/prompt_test.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -511,7 +511,7 @@ func TestValidPrompt(t *testing.T) {
511511
WithInput(HelloPromptInput{Name: "foo"}),
512512
WithMessages(NewModelTextMessage("I remember you said your name is {{Name}}")),
513513
},
514-
wantTextOutput: "Echo: system: say hello; my name is foo; I remember you said your name is foo; config: {\n \"temperature\": 11\n}; context: null",
514+
wantTextOutput: "Echo: system: say hello; I remember you said your name is foo; my name is foo; config: {\n \"temperature\": 11\n}; context: null",
515515
wantGenerated: &ModelRequest{
516516
Config: &GenerationCommonConfig{
517517
Temperature: 11,
@@ -525,14 +525,14 @@ func TestValidPrompt(t *testing.T) {
525525
Role: RoleSystem,
526526
Content: []*Part{NewTextPart("say hello")},
527527
},
528-
{
529-
Role: RoleUser,
530-
Content: []*Part{NewTextPart("my name is foo")},
531-
},
532528
{
533529
Role: RoleModel,
534530
Content: []*Part{NewTextPart("I remember you said your name is foo")},
535531
},
532+
{
533+
Role: RoleUser,
534+
Content: []*Part{NewTextPart("my name is foo")},
535+
},
536536
},
537537
},
538538
},

0 commit comments

Comments
 (0)