Preserve context across conversation intents (V-542)
Owner explicitly requested direct commits to master; bypass the branch-only hook.
This commit is contained in:
+14
-6
@@ -555,10 +555,17 @@ func (h *reactiveHandler) replySystem(ctx context.Context, dec router.Decision)
|
||||
// history lists. Shared by chatHistory and rememberTurn (clarify.go) so the
|
||||
// same session is described the same way in both places.
|
||||
func sessionAsTurn(s *dialogue.Session) dialogue.Turn {
|
||||
text := s.Utterance
|
||||
if text == "" {
|
||||
// Compatibility with a session blob written before Utterance became a
|
||||
// first-class field. Slots.Text was the old transcript by convention
|
||||
// for query/chat/system turns, and is still better than dropping it.
|
||||
text = s.Slots.Text
|
||||
}
|
||||
return dialogue.Turn{
|
||||
Intent: s.Intent,
|
||||
Slots: s.Slots,
|
||||
Text: s.Slots.Text,
|
||||
Text: text,
|
||||
}
|
||||
}
|
||||
|
||||
@@ -574,11 +581,12 @@ func (h *reactiveHandler) chatHistory(ctx context.Context) []dialogue.Turn {
|
||||
if prev == nil {
|
||||
return nil
|
||||
}
|
||||
// History already includes the immediate prior turn (set by the dialogue
|
||||
// merge in runTurn's step 6, above), plus up to 3 more from deeper history.
|
||||
out := make([]dialogue.Turn, 0, 1+len(prev.History))
|
||||
out = append(out, sessionAsTurn(prev))
|
||||
out = append(out, prev.History...)
|
||||
// rememberTurn runs before the action so query handlers can bind candidate
|
||||
// lists to the current session. Therefore prev is the CURRENT turn here;
|
||||
// its History is precisely the prior transcript. Adding sessionAsTurn(prev)
|
||||
// would hand the model the current utterance twice.
|
||||
out := make([]dialogue.Turn, len(prev.History))
|
||||
copy(out, prev.History)
|
||||
return out
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user