mirror of
https://github.com/Aider-AI/aider.git
synced 2025-05-29 16:54:59 +00:00
auto select edit mode
This commit is contained in:
parent
5e63ce3352
commit
c379cf3286
2 changed files with 31 additions and 34 deletions
|
@ -33,25 +33,32 @@ class Coder:
|
||||||
repo_map = None
|
repo_map = None
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def create(self, edit_format, *args, **kwargs):
|
def create(self, main_model, io, openai_api_key, openai_api_base, **kwargs):
|
||||||
from . import EditBlockCoder, WholeFileCoder
|
from . import EditBlockCoder, WholeFileCoder
|
||||||
|
|
||||||
if edit_format == "diff":
|
openai.api_key = openai_api_key
|
||||||
return EditBlockCoder(*args, **kwargs)
|
openai.api_base = openai_api_base
|
||||||
elif edit_format == "whole":
|
|
||||||
return WholeFileCoder(*args, **kwargs)
|
|
||||||
else:
|
|
||||||
raise ValueError(f"Unknown edit format {edit_format}")
|
|
||||||
|
|
||||||
def check_model_availability(self, main_model):
|
if not main_model.always_available:
|
||||||
available_models = openai.Model.list()
|
if not check_model_availability(main_model):
|
||||||
model_ids = [model.id for model in available_models["data"]]
|
if main_model != models.GPT4:
|
||||||
return main_model.name in model_ids
|
io.tool_error(
|
||||||
|
f"API key does not support {main_model.name}, falling back to"
|
||||||
|
f" {models.GPT35_16k.name}"
|
||||||
|
)
|
||||||
|
main_model = models.GPT35_16k
|
||||||
|
|
||||||
|
if main_model.edit_format == "diff":
|
||||||
|
return EditBlockCoder(main_model, io, **kwargs)
|
||||||
|
elif main_model.edit_format == "whole":
|
||||||
|
return WholeFileCoder(main_model, io, **kwargs)
|
||||||
|
else:
|
||||||
|
raise ValueError(f"{main_model} has unknown edit format {main_model.edit_format}")
|
||||||
|
|
||||||
def __init__(
|
def __init__(
|
||||||
self,
|
self,
|
||||||
|
main_model,
|
||||||
io,
|
io,
|
||||||
main_model=models.GPT4.name,
|
|
||||||
fnames=None,
|
fnames=None,
|
||||||
pretty=True,
|
pretty=True,
|
||||||
show_diffs=False,
|
show_diffs=False,
|
||||||
|
@ -60,15 +67,8 @@ class Coder:
|
||||||
dry_run=False,
|
dry_run=False,
|
||||||
map_tokens=1024,
|
map_tokens=1024,
|
||||||
verbose=False,
|
verbose=False,
|
||||||
openai_api_key=None,
|
|
||||||
openai_api_base=None,
|
|
||||||
assistant_output_color="blue",
|
assistant_output_color="blue",
|
||||||
):
|
):
|
||||||
if not openai_api_key:
|
|
||||||
raise MissingAPIKeyError("No OpenAI API key provided.")
|
|
||||||
openai.api_key = openai_api_key
|
|
||||||
openai.api_base = openai_api_base
|
|
||||||
|
|
||||||
self.verbose = verbose
|
self.verbose = verbose
|
||||||
self.abs_fnames = set()
|
self.abs_fnames = set()
|
||||||
self.cur_messages = []
|
self.cur_messages = []
|
||||||
|
@ -91,18 +91,7 @@ class Coder:
|
||||||
else:
|
else:
|
||||||
self.console = Console(force_terminal=True, no_color=True)
|
self.console = Console(force_terminal=True, no_color=True)
|
||||||
|
|
||||||
main_model = models.Model(main_model)
|
|
||||||
if not main_model.always_available:
|
|
||||||
if not self.check_model_availability(main_model):
|
|
||||||
if main_model != models.GPT4:
|
|
||||||
self.io.tool_error(
|
|
||||||
f"API key does not support {main_model.name}, falling back to"
|
|
||||||
f" {models.GPT35_16k.name}"
|
|
||||||
)
|
|
||||||
main_model = models.GPT35_16k
|
|
||||||
|
|
||||||
self.main_model = main_model
|
self.main_model = main_model
|
||||||
self.edit_format = self.main_model.edit_format
|
|
||||||
|
|
||||||
self.io.tool_output(f"Model: {main_model.name}")
|
self.io.tool_output(f"Model: {main_model.name}")
|
||||||
|
|
||||||
|
@ -687,3 +676,9 @@ class Coder:
|
||||||
print()
|
print()
|
||||||
traceback.print_exc()
|
traceback.print_exc()
|
||||||
return None, err
|
return None, err
|
||||||
|
|
||||||
|
|
||||||
|
def check_model_availability(main_model):
|
||||||
|
available_models = openai.Model.list()
|
||||||
|
model_ids = [model.id for model in available_models["data"]]
|
||||||
|
return main_model.name in model_ids
|
||||||
|
|
|
@ -227,10 +227,14 @@ def main(args=None, input=None, output=None):
|
||||||
io.tool_error("No OpenAI API key provided. Use --openai-api-key or env OPENAI_API_KEY.")
|
io.tool_error("No OpenAI API key provided. Use --openai-api-key or env OPENAI_API_KEY.")
|
||||||
return 1
|
return 1
|
||||||
|
|
||||||
|
main_model = models.Model(args.model)
|
||||||
|
|
||||||
coder = Coder.create(
|
coder = Coder.create(
|
||||||
"diff",
|
main_model,
|
||||||
io,
|
io,
|
||||||
main_model=args.model,
|
args.openai_api_key,
|
||||||
|
args.openai_api_base,
|
||||||
|
##
|
||||||
fnames=args.files,
|
fnames=args.files,
|
||||||
pretty=args.pretty,
|
pretty=args.pretty,
|
||||||
show_diffs=args.show_diffs,
|
show_diffs=args.show_diffs,
|
||||||
|
@ -239,8 +243,6 @@ def main(args=None, input=None, output=None):
|
||||||
dry_run=args.dry_run,
|
dry_run=args.dry_run,
|
||||||
map_tokens=args.map_tokens,
|
map_tokens=args.map_tokens,
|
||||||
verbose=args.verbose,
|
verbose=args.verbose,
|
||||||
openai_api_key=args.openai_api_key,
|
|
||||||
openai_api_base=args.openai_api_base,
|
|
||||||
assistant_output_color=args.assistant_output_color,
|
assistant_output_color=args.assistant_output_color,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue