mirror of
https://github.com/HKUDS/nanobot.git
synced 2026-08-07 09:58:34 +00:00
fix(session): require user anchor for delivery retention
This commit is contained in:
parent
60282d1588
commit
8dfce4c162
@ -352,12 +352,14 @@ class Session:
|
|||||||
|
|
||||||
start_idx = max(0, len(self.messages) - max_messages)
|
start_idx = max(0, len(self.messages) - max_messages)
|
||||||
if extend_to_user:
|
if extend_to_user:
|
||||||
start_idx = next(
|
recovered_user = next(
|
||||||
(i for i in range(start_idx, -1, -1) if self.messages[i].get("role") == "user"),
|
(i for i in range(start_idx, -1, -1) if self.messages[i].get("role") == "user"),
|
||||||
start_idx,
|
None,
|
||||||
)
|
)
|
||||||
if start_idx > 0 and self.messages[start_idx - 1].get("_channel_delivery"):
|
if recovered_user is not None:
|
||||||
start_idx -= 1
|
start_idx = recovered_user
|
||||||
|
if start_idx > 0 and self.messages[start_idx - 1].get("_channel_delivery"):
|
||||||
|
start_idx -= 1
|
||||||
|
|
||||||
retained = self.messages[start_idx:]
|
retained = self.messages[start_idx:]
|
||||||
|
|
||||||
|
|||||||
@ -120,6 +120,20 @@ def test_retain_extend_to_user_matches_get_history_boundary():
|
|||||||
assert _contents(session.messages) == _contents(expected)
|
assert _contents(session.messages) == _contents(expected)
|
||||||
|
|
||||||
|
|
||||||
|
def test_retain_extend_to_user_does_not_extend_delivery_only_tail():
|
||||||
|
session = Session(key="test:extend-no-user")
|
||||||
|
for i in range(4):
|
||||||
|
session.messages.append(_delivery(f"notification {i}"))
|
||||||
|
|
||||||
|
session.retain_recent_legal_suffix(3, extend_to_user=True)
|
||||||
|
|
||||||
|
assert _contents(session.messages) == [
|
||||||
|
"notification 1",
|
||||||
|
"notification 2",
|
||||||
|
"notification 3",
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
# --- Only the immediately-preceding delivery is part of the anchor ---
|
# --- Only the immediately-preceding delivery is part of the anchor ---
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user