fix: checkpoint

This commit is contained in:
leookun
2026-08-07 02:19:29 +08:00
parent 225de8bb85
commit a7f9494828
6 changed files with 196 additions and 22 deletions
+24 -3
View File
@@ -621,10 +621,22 @@ func projectCheckpointTurnBlobs(conversation *ConversationFile, blobs *checkpoin
}
grouped[entry.TurnSeq] = append(grouped[entry.TurnSeq], entry)
}
turnIDs := make([][]byte, 0, len(order))
logicalTurns := make([][]HistoryEntry, 0, len(order))
for _, turnSeq := range order {
entries := grouped[turnSeq]
if checkpointTurnHasUserMessage(entries) {
logicalTurns = append(logicalTurns, append([]HistoryEntry(nil), entries...))
continue
}
if len(logicalTurns) == 0 {
continue
}
last := len(logicalTurns) - 1
logicalTurns[last] = append(logicalTurns[last], entries...)
}
turnIDs := make([][]byte, 0, len(logicalTurns))
for _, entries := range logicalTurns {
completedToolCalls, err := collectCheckpointCompletedToolCalls(entries)
if err != nil {
return nil, err
@@ -734,7 +746,7 @@ func projectCheckpointTurnBlobs(conversation *ConversationFile, blobs *checkpoin
})
}
}
if len(userMessageID) == 0 && len(steps) == 0 {
if len(userMessageID) == 0 {
continue
}
stepIDs := make([][]byte, 0, len(steps))
@@ -765,6 +777,15 @@ func projectCheckpointTurnBlobs(conversation *ConversationFile, blobs *checkpoin
return turnIDs, nil
}
func checkpointTurnHasUserMessage(entries []HistoryEntry) bool {
for _, entry := range entries {
if strings.TrimSpace(entry.Kind) == "user_message" {
return true
}
}
return false
}
func collectCheckpointCompletedToolCalls(entries []HistoryEntry) (map[string]json.RawMessage, error) {
completed := make(map[string]json.RawMessage)
for _, entry := range entries {