Skip to content

Commit ea74296

Browse files
author
Your Name
committed
#462: Remove vestiges of old context preservation system, preserve partial file messages when switching between models and modes
1 parent 660d2c0 commit ea74296

8 files changed

Lines changed: 34 additions & 76 deletions

File tree

cecli/coders/architect_coder.py

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import asyncio
22

33
from ..commands import SwitchCoderSignal
4-
from ..helpers.conversation import ConversationManager, MessageTag
4+
from ..helpers.conversation import ConversationManager
55
from .ask_coder import AskCoder
66
from .base_coder import Coder
77

@@ -61,9 +61,7 @@ async def reply_completed(self):
6161
editor_coder = await Coder.create(**new_kwargs)
6262

6363
# Re-initialize ConversationManager with editor coder
64-
ConversationManager.initialize(
65-
editor_coder, reset=True, reformat=True, preserve_tags=[MessageTag.DONE, MessageTag.CUR]
66-
)
64+
ConversationManager.initialize(editor_coder, reset=True, reformat=True, preserve_tags=True)
6765

6866
if self.verbose:
6967
editor_coder.show_announcements()
@@ -84,7 +82,7 @@ async def reply_completed(self):
8482
original_coder or self,
8583
reset=True,
8684
reformat=True,
87-
preserve_tags=[MessageTag.DONE, MessageTag.CUR],
85+
preserve_tags=True,
8886
)
8987

9088
self.total_cost = editor_coder.total_cost
@@ -96,7 +94,7 @@ async def reply_completed(self):
9694
original_coder or self,
9795
reset=True,
9896
reformat=True,
99-
preserve_tags=[MessageTag.DONE, MessageTag.CUR],
97+
preserve_tags=True,
10098
)
10199

102100
raise SwitchCoderSignal(main_model=self.main_model, edit_format="architect")

cecli/coders/base_coder.py

Lines changed: 2 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -211,34 +211,14 @@ async def create(
211211

212212
use_kwargs = dict(from_coder.original_kwargs) # copy orig kwargs
213213

214-
# If the edit format changes, we can't leave old ASSISTANT
215-
# messages in the chat history. The old edit format will
216-
# confused the new LLM. It may try and imitate it, disobeying
217-
# the system prompt.
218-
# Get DONE messages from ConversationManager
219-
done_messages = ConversationManager.get_messages_dict(MessageTag.DONE)
220-
if edit_format != from_coder.edit_format and done_messages and summarize_from_coder:
221-
try:
222-
io.tool_warning("Summarizing messages, please wait...")
223-
done_messages = await from_coder.summarizer.summarize_all(done_messages)
224-
except (KeyboardInterrupt, ValueError):
225-
# If summarization fails, keep the original messages and warn the user
226-
io.tool_warning(
227-
"Chat history summarization failed, continuing with full history"
228-
)
229-
230-
# Bring along context from the old Coder
231-
# Get CUR messages from ConversationManager
232-
cur_messages = ConversationManager.get_messages_dict(MessageTag.CUR)
233-
234214
update = dict(
235215
fnames=list(from_coder.abs_fnames),
236216
read_only_fnames=list(from_coder.abs_read_only_fnames), # Copy read-only files
237217
read_only_stubs_fnames=list(
238218
from_coder.abs_read_only_stubs_fnames
239219
), # Copy read-only stubs
240-
done_messages=done_messages,
241-
cur_messages=cur_messages,
220+
done_messages=[],
221+
cur_messages=[],
242222
coder_commit_hashes=from_coder.coder_commit_hashes,
243223
commands=from_coder.commands.clone(),
244224
total_cost=from_coder.total_cost,
@@ -415,22 +395,6 @@ def __init__(
415395
self.add_gitignore_files = add_gitignore_files
416396
self.abs_read_only_stubs_fnames = set()
417397

418-
# Always use ConversationManager as the source of truth
419-
# Add any provided messages to ConversationManager
420-
if done_messages:
421-
for msg in done_messages:
422-
ConversationManager.add_message(
423-
message_dict=msg,
424-
tag=MessageTag.DONE,
425-
)
426-
427-
if cur_messages:
428-
for msg in cur_messages:
429-
ConversationManager.add_message(
430-
message_dict=msg,
431-
tag=MessageTag.CUR,
432-
)
433-
434398
self.io = io
435399
self.io.coder = weakref.ref(self)
436400

cecli/commands/agent_model.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
import cecli.models as models
44
from cecli.commands.utils.base_command import BaseCommand
55
from cecli.commands.utils.helpers import format_command_result
6-
from cecli.helpers.conversation import ConversationManager, MessageTag
6+
from cecli.helpers.conversation import ConversationManager
77

88

99
class AgentModelCommand(BaseCommand):
@@ -69,7 +69,7 @@ async def execute(cls, io, coder, args, **kwargs):
6969
temp_coder,
7070
reset=True,
7171
reformat=True,
72-
preserve_tags=[MessageTag.DONE, MessageTag.CUR],
72+
preserve_tags=True,
7373
)
7474

7575
verbose = kwargs.get("verbose", False)
@@ -86,7 +86,7 @@ async def execute(cls, io, coder, args, **kwargs):
8686
original_coder,
8787
reset=True,
8888
reformat=True,
89-
preserve_tags=[MessageTag.DONE, MessageTag.CUR],
89+
preserve_tags=True,
9090
)
9191

9292
# Restore the original model configuration

cecli/commands/editor_model.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
import cecli.models as models
44
from cecli.commands.utils.base_command import BaseCommand
55
from cecli.commands.utils.helpers import format_command_result
6-
from cecli.helpers.conversation import ConversationManager, MessageTag
6+
from cecli.helpers.conversation import ConversationManager
77

88

99
class EditorModelCommand(BaseCommand):
@@ -69,7 +69,7 @@ async def execute(cls, io, coder, args, **kwargs):
6969
temp_coder,
7070
reset=True,
7171
reformat=True,
72-
preserve_tags=[MessageTag.DONE, MessageTag.CUR],
72+
preserve_tags=True,
7373
)
7474

7575
verbose = kwargs.get("verbose", False)
@@ -86,7 +86,7 @@ async def execute(cls, io, coder, args, **kwargs):
8686
original_coder,
8787
reset=True,
8888
reformat=True,
89-
preserve_tags=[MessageTag.DONE, MessageTag.CUR],
89+
preserve_tags=True,
9090
)
9191

9292
# Restore the original model configuration

cecli/commands/model.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
import cecli.models as models
44
from cecli.commands.utils.base_command import BaseCommand
55
from cecli.commands.utils.helpers import format_command_result
6-
from cecli.helpers.conversation import ConversationManager, MessageTag
6+
from cecli.helpers.conversation import ConversationManager
77

88

99
class ModelCommand(BaseCommand):
@@ -73,7 +73,7 @@ async def execute(cls, io, coder, args, **kwargs):
7373
temp_coder,
7474
reset=True,
7575
reformat=True,
76-
preserve_tags=[MessageTag.DONE, MessageTag.CUR],
76+
preserve_tags=True,
7777
)
7878

7979
verbose = kwargs.get("verbose", False)
@@ -90,7 +90,7 @@ async def execute(cls, io, coder, args, **kwargs):
9090
original_coder,
9191
reset=True,
9292
reformat=True,
93-
preserve_tags=[MessageTag.DONE, MessageTag.CUR],
93+
preserve_tags=True,
9494
)
9595

9696
# Restore the original model configuration

cecli/commands/utils/base_command.py

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
from abc import ABC, ABCMeta, abstractmethod
22
from typing import List
33

4-
from cecli.helpers.conversation import ConversationManager, MessageTag
4+
from cecli.helpers.conversation import ConversationManager
55

66

77
class CommandMeta(ABCMeta):
@@ -152,9 +152,7 @@ async def _generic_chat_command(cls, io, coder, args, edit_format, placeholder=N
152152
new_coder = await Coder.create(**kwargs)
153153

154154
# Re-initialize ConversationManager with new coder
155-
ConversationManager.initialize(
156-
new_coder, reset=True, reformat=True, preserve_tags=[MessageTag.DONE, MessageTag.CUR]
157-
)
155+
ConversationManager.initialize(new_coder, reset=True, reformat=True, preserve_tags=True)
158156

159157
await new_coder.generate(user_message=user_msg, preproc=False)
160158
coder.coder_commit_hashes = new_coder.coder_commit_hashes
@@ -164,7 +162,7 @@ async def _generic_chat_command(cls, io, coder, args, edit_format, placeholder=N
164162
original_coder,
165163
reset=True,
166164
reformat=True,
167-
preserve_tags=[MessageTag.DONE, MessageTag.CUR],
165+
preserve_tags=True,
168166
)
169167

170168
from cecli.commands import SwitchCoderSignal

cecli/commands/weak_model.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
import cecli.models as models
44
from cecli.commands.utils.base_command import BaseCommand
55
from cecli.commands.utils.helpers import format_command_result
6-
from cecli.helpers.conversation import ConversationManager, MessageTag
6+
from cecli.helpers.conversation import ConversationManager
77

88

99
class WeakModelCommand(BaseCommand):
@@ -68,7 +68,7 @@ async def execute(cls, io, coder, args, **kwargs):
6868
temp_coder,
6969
reset=True,
7070
reformat=True,
71-
preserve_tags=[MessageTag.DONE, MessageTag.CUR],
71+
preserve_tags=True,
7272
)
7373

7474
verbose = kwargs.get("verbose", False)
@@ -85,7 +85,7 @@ async def execute(cls, io, coder, args, **kwargs):
8585
original_coder,
8686
reset=True,
8787
reformat=True,
88-
preserve_tags=[MessageTag.DONE, MessageTag.CUR],
88+
preserve_tags=True,
8989
)
9090

9191
# Restore the original model configuration

cecli/helpers/conversation/manager.py

Lines changed: 13 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
import json
33
import time
44
import weakref
5-
from typing import Any, Dict, List, Optional, Tuple
5+
from typing import Any, Dict, List, Optional, Tuple, Union
66

77
from cecli.helpers import nested
88

@@ -38,7 +38,7 @@ def initialize(
3838
coder,
3939
reset: bool = False,
4040
reformat: bool = False,
41-
preserve_tags: Optional[List[str]] = None,
41+
preserve_tags: Optional[Union[List[str], bool]] = None,
4242
) -> None:
4343
"""
4444
Set up singleton with weak reference to coder.
@@ -56,6 +56,14 @@ def initialize(
5656
cls._initialized = True
5757

5858
preserved_messages = []
59+
if preserve_tags is True:
60+
preserve_tags = [
61+
MessageTag.DONE,
62+
MessageTag.CUR,
63+
MessageTag.DIFFS,
64+
MessageTag.FILE_CONTEXTS,
65+
]
66+
5967
if reset and preserve_tags:
6068
# New approach: loop over every single tag type and only clear tags NOT in preserve_tags
6169
# Get all MessageTag values
@@ -78,20 +86,10 @@ def initialize(
7886

7987
# If preserve_tags is truthy, re-add preserved messages with updated timestamps after reformat block
8088
if preserve_tags and preserved_messages:
81-
for tag_type in preserve_tags:
82-
cls.clear_tag(tag_type)
83-
89+
offset = 0
8490
for msg in preserved_messages:
85-
cls.add_message(
86-
message_dict=msg.message_dict,
87-
tag=MessageTag(msg.tag),
88-
priority=msg.priority,
89-
timestamp=time.monotonic_ns(), # Updated timestamp
90-
mark_for_delete=msg.mark_for_delete,
91-
force=True,
92-
update_timestamp=True,
93-
message_id=msg.message_id,
94-
)
91+
offset += 1
92+
msg.timestamp = time.monotonic_ns() + offset
9593

9694
# Enable debug mode if coder has verbose attribute and it's True
9795
if hasattr(coder, "verbose") and coder.verbose:

0 commit comments

Comments
 (0)