@@ -58,7 +58,7 @@ func (c *Conversation) validateAndFillInterBlockGaps(ctx context.Context, thisSt
58
58
startSeq = thisStartSeq + 1
59
59
endSeq = lastEndSeq - 1
60
60
}
61
- if isLostSeq {
61
+ if isLostSeq && lastEndSeq != 0 {
62
62
log .ZDebug (ctx , "get lost LastMinSeq is :" , "lastEndSeq" , lastEndSeq , "thisStartSeq" , thisStartSeq , "startSeq" , startSeq , "endSeq" , endSeq )
63
63
lostSeqList := getLostSeqListWithLimitLength (startSeq , endSeq , []int64 {})
64
64
log .ZDebug (ctx , "get lost lostSeqList is :" , "lostSeqList" , lostSeqList , "length:" , len (lostSeqList ))
@@ -74,6 +74,15 @@ func (c *Conversation) validateAndFillInterBlockGaps(ctx context.Context, thisSt
74
74
// of the message history has been reached. If not, it attempts to retrieve any missing messages to ensure continuity.
75
75
func (c * Conversation ) validateAndFillEndBlockContinuity (ctx context.Context , conversationID string ,
76
76
isReverse bool , count int , startTime int64 , list * []* model_struct.LocalChatLog , messageListCallback * sdk.GetAdvancedHistoryMessageListCallback ) {
77
+ isShouldFetchMessage , lostSeqList := c .checkEndBlock (ctx , conversationID , isReverse , count , list , messageListCallback )
78
+ if isShouldFetchMessage {
79
+ c .fetchAndMergeMissingMessages (ctx , conversationID , lostSeqList , isReverse , count , startTime , list , messageListCallback )
80
+ _ , _ = c .checkEndBlock (ctx , conversationID , isReverse , count , list , messageListCallback )
81
+ }
82
+
83
+ }
84
+ func (c * Conversation ) checkEndBlock (ctx context.Context , conversationID string , isReverse bool , count int ,
85
+ list * []* model_struct.LocalChatLog , messageListCallback * sdk.GetAdvancedHistoryMessageListCallback ) (isShouldFetchMessage bool , seqList []int64 ) {
77
86
// Perform an end-of-block check if the retrieved message count is less than requested
78
87
if len (* list ) < count {
79
88
if isReverse {
@@ -94,12 +103,14 @@ func (c *Conversation) validateAndFillEndBlockContinuity(ctx context.Context, co
94
103
// since `lastEndSeq < maxSeqRecorderMaxSeq` is handled in inter-block continuity.
95
104
lostSeqList := getLostSeqListWithLimitLength (maxSeq + 1 , c .maxSeqRecorder .Get (conversationID ), []int64 {})
96
105
if len (lostSeqList ) > 0 {
106
+ isShouldFetchMessage = true
107
+ seqList = lostSeqList
97
108
log .ZDebug (ctx , "validateAndFillEndBlockContinuity" , "lostSeqList" , lostSeqList )
98
- c .fetchAndMergeMissingMessages (ctx , conversationID , lostSeqList , isReverse , count , startTime , list , messageListCallback )
99
109
}
100
110
101
111
}
102
112
}
113
+ return isShouldFetchMessage , seqList
103
114
} else {
104
115
_ , minSeq , _ := c .getMaxAndMinHaveSeqList (* list )
105
116
log .ZDebug (ctx , "validateAndFillEndBlockContinuity" , "minSeq" , minSeq , "conversationID" , conversationID )
@@ -118,17 +129,21 @@ func (c *Conversation) validateAndFillEndBlockContinuity(ctx context.Context, co
118
129
// since `lastMinSeq > 1` is handled in inter-block continuity.
119
130
lostSeqList := getLostSeqListWithLimitLength (1 , minSeq - 1 , []int64 {})
120
131
if len (lostSeqList ) > 0 {
132
+ isShouldFetchMessage = true
133
+ seqList = lostSeqList
121
134
log .ZDebug (ctx , "validateAndFillEndBlockContinuity" , "lostSeqList" , lostSeqList )
122
- c .fetchAndMergeMissingMessages (ctx , conversationID , lostSeqList , isReverse , count , startTime , list , messageListCallback )
123
135
}
124
136
125
137
}
126
138
}
139
+ return isShouldFetchMessage , seqList
127
140
}
141
+ return isShouldFetchMessage , seqList
142
+
128
143
} else {
129
144
messageListCallback .IsEnd = false
145
+ return isShouldFetchMessage , seqList
130
146
}
131
-
132
147
}
133
148
func (c * Conversation ) getMaxAndMinHaveSeqList (messages []* model_struct.LocalChatLog ) (max , min int64 , seqList []int64 ) {
134
149
for i := 0 ; i < len (messages ); i ++ {
0 commit comments