mirror of
https://github.com/Aider-AI/aider.git
synced 2025-05-24 22:34:59 +00:00
move cloning into Coder.create, summarize chat history if edit format changes
This commit is contained in:
parent
665b9044c8
commit
256a9a454c
3 changed files with 55 additions and 38 deletions
|
@ -66,6 +66,7 @@ class Coder:
|
||||||
main_model=None,
|
main_model=None,
|
||||||
edit_format=None,
|
edit_format=None,
|
||||||
io=None,
|
io=None,
|
||||||
|
from_coder=None,
|
||||||
**kwargs,
|
**kwargs,
|
||||||
):
|
):
|
||||||
from . import EditBlockCoder, UnifiedDiffCoder, WholeFileCoder
|
from . import EditBlockCoder, UnifiedDiffCoder, WholeFileCoder
|
||||||
|
@ -76,15 +77,42 @@ class Coder:
|
||||||
if edit_format is None:
|
if edit_format is None:
|
||||||
edit_format = main_model.edit_format
|
edit_format = main_model.edit_format
|
||||||
|
|
||||||
|
if from_coder:
|
||||||
|
use_kwargs = dict(from_coder.original_kwargs) # copy orig kwargs
|
||||||
|
|
||||||
|
# If the edit format changes, we can't leave old ASSISTANT
|
||||||
|
# messages in the chat history. The old edit format will
|
||||||
|
# confused the new LLM. It may try and imitate it, disobeying
|
||||||
|
# the system prompt.
|
||||||
|
done_messages = from_coder.done_messages
|
||||||
|
if edit_format != from_coder.edit_format and done_messages:
|
||||||
|
done_messages = from_coder.summarizer.summarize_all(done_messages)
|
||||||
|
|
||||||
|
# Bring along context from the old Coder
|
||||||
|
update = dict(
|
||||||
|
fnames=from_coder.get_inchat_relative_files(),
|
||||||
|
done_messages=done_messages,
|
||||||
|
cur_messages=from_coder.cur_messages,
|
||||||
|
)
|
||||||
|
|
||||||
|
use_kwargs.update(update) # override to complete the switch
|
||||||
|
use_kwargs.update(kwargs) # override passed kwargs
|
||||||
|
|
||||||
|
kwargs = use_kwargs
|
||||||
|
|
||||||
if edit_format == "diff":
|
if edit_format == "diff":
|
||||||
return EditBlockCoder(main_model, io, **kwargs)
|
res = EditBlockCoder(main_model, io, **kwargs)
|
||||||
elif edit_format == "whole":
|
elif edit_format == "whole":
|
||||||
return WholeFileCoder(main_model, io, **kwargs)
|
res = WholeFileCoder(main_model, io, **kwargs)
|
||||||
elif edit_format == "udiff":
|
elif edit_format == "udiff":
|
||||||
return UnifiedDiffCoder(main_model, io, **kwargs)
|
res = UnifiedDiffCoder(main_model, io, **kwargs)
|
||||||
else:
|
else:
|
||||||
raise ValueError(f"Unknown edit format {edit_format}")
|
raise ValueError(f"Unknown edit format {edit_format}")
|
||||||
|
|
||||||
|
res.original_kwargs = dict(kwargs)
|
||||||
|
|
||||||
|
return res
|
||||||
|
|
||||||
def get_announcements(self):
|
def get_announcements(self):
|
||||||
lines = []
|
lines = []
|
||||||
lines.append(f"Aider v{__version__}")
|
lines.append(f"Aider v{__version__}")
|
||||||
|
|
|
@ -18,14 +18,14 @@ Once you understand the request you MUST:
|
||||||
You MUST use this *file listing* format:
|
You MUST use this *file listing* format:
|
||||||
|
|
||||||
path/to/filename.js
|
path/to/filename.js
|
||||||
{fence[0]}javascript
|
{fence[0]}
|
||||||
// entire file content ...
|
// entire file content ...
|
||||||
// ... goes in between
|
// ... goes in between
|
||||||
{fence[1]}
|
{fence[1]}
|
||||||
|
|
||||||
Every *file listing* MUST use this format:
|
Every *file listing* MUST use this format:
|
||||||
- First line: the filename with any originally provided path
|
- First line: the filename with any originally provided path
|
||||||
- Second line: opening {fence[0]} including the code language
|
- Second line: opening {fence[0]}
|
||||||
- ... entire content of the file ...
|
- ... entire content of the file ...
|
||||||
- Final line: closing {fence[1]}
|
- Final line: closing {fence[1]}
|
||||||
|
|
||||||
|
|
|
@ -306,30 +306,28 @@ def main(argv=None, input=None, output=None, force_git_root=None, return_coder=F
|
||||||
if args.show_model_warnings:
|
if args.show_model_warnings:
|
||||||
models.sanity_check_models(io, main_model)
|
models.sanity_check_models(io, main_model)
|
||||||
|
|
||||||
coder_kwargs = dict(
|
|
||||||
main_model=main_model,
|
|
||||||
edit_format=args.edit_format,
|
|
||||||
io=io,
|
|
||||||
##
|
|
||||||
fnames=fnames,
|
|
||||||
git_dname=git_dname,
|
|
||||||
pretty=args.pretty,
|
|
||||||
show_diffs=args.show_diffs,
|
|
||||||
auto_commits=args.auto_commits,
|
|
||||||
dirty_commits=args.dirty_commits,
|
|
||||||
dry_run=args.dry_run,
|
|
||||||
map_tokens=args.map_tokens,
|
|
||||||
verbose=args.verbose,
|
|
||||||
assistant_output_color=args.assistant_output_color,
|
|
||||||
code_theme=args.code_theme,
|
|
||||||
stream=args.stream,
|
|
||||||
use_git=args.git,
|
|
||||||
voice_language=args.voice_language,
|
|
||||||
aider_ignore_file=args.aiderignore,
|
|
||||||
)
|
|
||||||
|
|
||||||
try:
|
try:
|
||||||
coder = Coder.create(**coder_kwargs)
|
coder = Coder.create(
|
||||||
|
main_model=main_model,
|
||||||
|
edit_format=args.edit_format,
|
||||||
|
io=io,
|
||||||
|
##
|
||||||
|
fnames=fnames,
|
||||||
|
git_dname=git_dname,
|
||||||
|
pretty=args.pretty,
|
||||||
|
show_diffs=args.show_diffs,
|
||||||
|
auto_commits=args.auto_commits,
|
||||||
|
dirty_commits=args.dirty_commits,
|
||||||
|
dry_run=args.dry_run,
|
||||||
|
map_tokens=args.map_tokens,
|
||||||
|
verbose=args.verbose,
|
||||||
|
assistant_output_color=args.assistant_output_color,
|
||||||
|
code_theme=args.code_theme,
|
||||||
|
stream=args.stream,
|
||||||
|
use_git=args.git,
|
||||||
|
voice_language=args.voice_language,
|
||||||
|
aider_ignore_file=args.aiderignore,
|
||||||
|
)
|
||||||
|
|
||||||
except ValueError as err:
|
except ValueError as err:
|
||||||
io.tool_error(str(err))
|
io.tool_error(str(err))
|
||||||
|
@ -397,16 +395,7 @@ def main(argv=None, input=None, output=None, force_git_root=None, return_coder=F
|
||||||
coder.run()
|
coder.run()
|
||||||
return
|
return
|
||||||
except SwitchModel as switch:
|
except SwitchModel as switch:
|
||||||
kwargs = dict(
|
coder = Coder.create(main_model=switch.model, io=io, from_coder=coder)
|
||||||
main_model=switch.model,
|
|
||||||
edit_format=None,
|
|
||||||
fnames=coder.get_inchat_relative_files(),
|
|
||||||
done_messages=coder.done_messages,
|
|
||||||
cur_messages=coder.cur_messages,
|
|
||||||
)
|
|
||||||
coder_kwargs.update(kwargs)
|
|
||||||
|
|
||||||
coder = Coder.create(**coder_kwargs)
|
|
||||||
coder.show_announcements()
|
coder.show_announcements()
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue