mirror of
https://github.com/Aider-AI/aider.git
synced 2025-06-03 11:14:59 +00:00
more refactor
This commit is contained in:
parent
5a01ba70a6
commit
15a50a6afc
1 changed files with 2 additions and 363 deletions
365
aider/main.py
365
aider/main.py
|
@ -1,14 +1,13 @@
|
|||
import argparse
|
||||
import configparser
|
||||
import os
|
||||
import sys
|
||||
from pathlib import Path
|
||||
|
||||
import configargparse
|
||||
import git
|
||||
import litellm
|
||||
|
||||
from aider import __version__, models
|
||||
from aider import models
|
||||
from aider.args import get_parser
|
||||
from aider.coders import Coder
|
||||
from aider.io import InputOutput
|
||||
from aider.repo import GitRepo
|
||||
|
@ -122,366 +121,6 @@ def check_gitignore(git_root, io, ask=True):
|
|||
io.tool_output(f"Added {pat} to .gitignore")
|
||||
|
||||
|
||||
def get_parser(default_config_files, git_root):
|
||||
parser = configargparse.ArgumentParser(
|
||||
description="aider is GPT powered coding in your terminal",
|
||||
add_config_file_help=True,
|
||||
default_config_files=default_config_files,
|
||||
config_file_parser_class=configargparse.YAMLConfigFileParser,
|
||||
auto_env_var_prefix="AIDER_",
|
||||
)
|
||||
|
||||
##########
|
||||
core_group = parser.add_argument_group("Main")
|
||||
core_group.add_argument(
|
||||
"files",
|
||||
metavar="FILE",
|
||||
nargs="*",
|
||||
help="the directory of a git repo, or a list of files to edit with GPT (optional)",
|
||||
)
|
||||
core_group.add_argument(
|
||||
"--openai-api-key",
|
||||
metavar="OPENAI_API_KEY",
|
||||
env_var="OPENAI_API_KEY",
|
||||
help="Specify the OpenAI API key",
|
||||
)
|
||||
core_group.add_argument(
|
||||
"--anthropic-api-key",
|
||||
metavar="ANTHROPIC_API_KEY",
|
||||
env_var="ANTHROPIC_API_KEY",
|
||||
help="Specify the OpenAI API key",
|
||||
)
|
||||
default_model = models.DEFAULT_MODEL_NAME
|
||||
core_group.add_argument(
|
||||
"--model",
|
||||
metavar="MODEL",
|
||||
default=default_model,
|
||||
help=f"Specify the model to use for the main chat (default: {default_model})",
|
||||
)
|
||||
core_group.add_argument(
|
||||
"--models",
|
||||
metavar="MODEL",
|
||||
help="List known models which match the (partial) MODEL name",
|
||||
)
|
||||
opus_model = "claude-3-opus-20240229"
|
||||
core_group.add_argument(
|
||||
"--opus",
|
||||
action="store_const",
|
||||
dest="model",
|
||||
const=opus_model,
|
||||
help=f"Use {opus_model} model for the main chat",
|
||||
)
|
||||
sonnet_model = "claude-3-sonnet-20240229"
|
||||
core_group.add_argument(
|
||||
"--sonnet",
|
||||
action="store_const",
|
||||
dest="model",
|
||||
const=sonnet_model,
|
||||
help=f"Use {sonnet_model} model for the main chat",
|
||||
)
|
||||
gpt_4_model = "gpt-4-0613"
|
||||
core_group.add_argument(
|
||||
"--4",
|
||||
"-4",
|
||||
action="store_const",
|
||||
dest="model",
|
||||
const=gpt_4_model,
|
||||
help=f"Use {gpt_4_model} model for the main chat",
|
||||
)
|
||||
gpt_4_turbo_model = "gpt-4-turbo"
|
||||
core_group.add_argument(
|
||||
"--4-turbo-vision",
|
||||
action="store_const",
|
||||
dest="model",
|
||||
const=gpt_4_turbo_model,
|
||||
help=f"Use {gpt_4_turbo_model} model for the main chat",
|
||||
)
|
||||
gpt_3_model_name = "gpt-3.5-turbo"
|
||||
core_group.add_argument(
|
||||
"--35turbo",
|
||||
"--35-turbo",
|
||||
"--3",
|
||||
"-3",
|
||||
action="store_const",
|
||||
dest="model",
|
||||
const=gpt_3_model_name,
|
||||
help=f"Use {gpt_3_model_name} model for the main chat",
|
||||
)
|
||||
core_group.add_argument(
|
||||
"--voice-language",
|
||||
metavar="VOICE_LANGUAGE",
|
||||
default="en",
|
||||
help="Specify the language for voice using ISO 639-1 code (default: auto)",
|
||||
)
|
||||
|
||||
##########
|
||||
model_group = parser.add_argument_group("Advanced Model Settings")
|
||||
model_group.add_argument(
|
||||
"--openai-api-base",
|
||||
metavar="OPENAI_API_BASE",
|
||||
env_var="OPENAI_API_BASE",
|
||||
help="Specify the api base url",
|
||||
)
|
||||
model_group.add_argument(
|
||||
"--openai-api-type",
|
||||
metavar="OPENAI_API_TYPE",
|
||||
env_var="OPENAI_API_TYPE",
|
||||
help="Specify the api_type",
|
||||
)
|
||||
model_group.add_argument(
|
||||
"--openai-api-version",
|
||||
metavar="OPENAI_API_VERSION",
|
||||
env_var="OPENAI_API_VERSION",
|
||||
help="Specify the api_version",
|
||||
)
|
||||
model_group.add_argument(
|
||||
"--openai-api-deployment-id",
|
||||
metavar="OPENAI_API_DEPLOYMENT_ID",
|
||||
env_var="OPENAI_API_DEPLOYMENT_ID",
|
||||
help="Specify the deployment_id",
|
||||
)
|
||||
model_group.add_argument(
|
||||
"--openai-organization-id",
|
||||
metavar="OPENAI_ORGANIZATION_ID",
|
||||
env_var="OPENAI_ORGANIZATION_ID",
|
||||
help="Specify the OpenAI organization ID",
|
||||
)
|
||||
model_group.add_argument(
|
||||
"--edit-format",
|
||||
metavar="EDIT_FORMAT",
|
||||
default=None,
|
||||
help="Specify what edit format GPT should use (default depends on model)",
|
||||
)
|
||||
core_group.add_argument(
|
||||
"--weak-model",
|
||||
metavar="WEAK_MODEL",
|
||||
default=None,
|
||||
help=(
|
||||
"Specify the model to use for commit messages and chat history summarization (default"
|
||||
" depends on --model)"
|
||||
),
|
||||
)
|
||||
model_group.add_argument(
|
||||
"--show-model-warnings",
|
||||
action=argparse.BooleanOptionalAction,
|
||||
default=True,
|
||||
help="Only work with models that have meta-data available (default: True)",
|
||||
)
|
||||
model_group.add_argument(
|
||||
"--map-tokens",
|
||||
type=int,
|
||||
default=1024,
|
||||
help="Max number of tokens to use for repo map, use 0 to disable (default: 1024)",
|
||||
)
|
||||
|
||||
##########
|
||||
history_group = parser.add_argument_group("History Files")
|
||||
default_input_history_file = (
|
||||
os.path.join(git_root, ".aider.input.history") if git_root else ".aider.input.history"
|
||||
)
|
||||
default_chat_history_file = (
|
||||
os.path.join(git_root, ".aider.chat.history.md") if git_root else ".aider.chat.history.md"
|
||||
)
|
||||
history_group.add_argument(
|
||||
"--input-history-file",
|
||||
metavar="INPUT_HISTORY_FILE",
|
||||
default=default_input_history_file,
|
||||
help=f"Specify the chat input history file (default: {default_input_history_file})",
|
||||
)
|
||||
history_group.add_argument(
|
||||
"--chat-history-file",
|
||||
metavar="CHAT_HISTORY_FILE",
|
||||
default=default_chat_history_file,
|
||||
help=f"Specify the chat history file (default: {default_chat_history_file})",
|
||||
)
|
||||
|
||||
##########
|
||||
output_group = parser.add_argument_group("Output Settings")
|
||||
output_group.add_argument(
|
||||
"--dark-mode",
|
||||
action="store_true",
|
||||
help="Use colors suitable for a dark terminal background (default: False)",
|
||||
default=False,
|
||||
)
|
||||
output_group.add_argument(
|
||||
"--light-mode",
|
||||
action="store_true",
|
||||
help="Use colors suitable for a light terminal background (default: False)",
|
||||
default=False,
|
||||
)
|
||||
output_group.add_argument(
|
||||
"--pretty",
|
||||
action=argparse.BooleanOptionalAction,
|
||||
default=True,
|
||||
help="Enable/disable pretty, colorized output (default: True)",
|
||||
)
|
||||
output_group.add_argument(
|
||||
"--stream",
|
||||
action=argparse.BooleanOptionalAction,
|
||||
default=True,
|
||||
help="Enable/disable streaming responses (default: True)",
|
||||
)
|
||||
output_group.add_argument(
|
||||
"--user-input-color",
|
||||
default="#00cc00",
|
||||
help="Set the color for user input (default: #00cc00)",
|
||||
)
|
||||
output_group.add_argument(
|
||||
"--tool-output-color",
|
||||
default=None,
|
||||
help="Set the color for tool output (default: None)",
|
||||
)
|
||||
output_group.add_argument(
|
||||
"--tool-error-color",
|
||||
default="#FF2222",
|
||||
help="Set the color for tool error messages (default: red)",
|
||||
)
|
||||
output_group.add_argument(
|
||||
"--assistant-output-color",
|
||||
default="#0088ff",
|
||||
help="Set the color for assistant output (default: #0088ff)",
|
||||
)
|
||||
output_group.add_argument(
|
||||
"--code-theme",
|
||||
default="default",
|
||||
help=(
|
||||
"Set the markdown code theme (default: default, other options include monokai,"
|
||||
" solarized-dark, solarized-light)"
|
||||
),
|
||||
)
|
||||
output_group.add_argument(
|
||||
"--show-diffs",
|
||||
action="store_true",
|
||||
help="Show diffs when committing changes (default: False)",
|
||||
default=False,
|
||||
)
|
||||
|
||||
##########
|
||||
git_group = parser.add_argument_group("Git Settings")
|
||||
git_group.add_argument(
|
||||
"--git",
|
||||
action=argparse.BooleanOptionalAction,
|
||||
default=True,
|
||||
help="Enable/disable looking for a git repo (default: True)",
|
||||
)
|
||||
git_group.add_argument(
|
||||
"--gitignore",
|
||||
action=argparse.BooleanOptionalAction,
|
||||
default=True,
|
||||
help="Enable/disable adding .aider* to .gitignore (default: True)",
|
||||
)
|
||||
default_aiderignore_file = (
|
||||
os.path.join(git_root, ".aiderignore") if git_root else ".aiderignore"
|
||||
)
|
||||
git_group.add_argument(
|
||||
"--aiderignore",
|
||||
metavar="AIDERIGNORE",
|
||||
default=default_aiderignore_file,
|
||||
help="Specify the aider ignore file (default: .aiderignore in git root)",
|
||||
)
|
||||
git_group.add_argument(
|
||||
"--auto-commits",
|
||||
action=argparse.BooleanOptionalAction,
|
||||
default=True,
|
||||
help="Enable/disable auto commit of GPT changes (default: True)",
|
||||
)
|
||||
git_group.add_argument(
|
||||
"--dirty-commits",
|
||||
action=argparse.BooleanOptionalAction,
|
||||
default=True,
|
||||
help="Enable/disable commits when repo is found dirty (default: True)",
|
||||
)
|
||||
git_group.add_argument(
|
||||
"--dry-run",
|
||||
action=argparse.BooleanOptionalAction,
|
||||
default=False,
|
||||
help="Perform a dry run without modifying files (default: False)",
|
||||
)
|
||||
git_group.add_argument(
|
||||
"--commit",
|
||||
action="store_true",
|
||||
help="Commit all pending changes with a suitable commit message, then exit",
|
||||
default=False,
|
||||
)
|
||||
|
||||
##########
|
||||
other_group = parser.add_argument_group("Other Settings")
|
||||
other_group.add_argument(
|
||||
"--version",
|
||||
action="version",
|
||||
version=f"%(prog)s {__version__}",
|
||||
help="Show the version number and exit",
|
||||
)
|
||||
other_group.add_argument(
|
||||
"--check-update",
|
||||
action="store_true",
|
||||
help="Check for updates and return status in the exit code",
|
||||
default=False,
|
||||
)
|
||||
other_group.add_argument(
|
||||
"--skip-check-update",
|
||||
action="store_true",
|
||||
help="Skips checking for the update when the program runs",
|
||||
)
|
||||
other_group.add_argument(
|
||||
"--apply",
|
||||
metavar="FILE",
|
||||
help="Apply the changes from the given file instead of running the chat (debug)",
|
||||
)
|
||||
other_group.add_argument(
|
||||
"--yes",
|
||||
action="store_true",
|
||||
help="Always say yes to every confirmation",
|
||||
default=None,
|
||||
)
|
||||
other_group.add_argument(
|
||||
"-v",
|
||||
"--verbose",
|
||||
action="store_true",
|
||||
help="Enable verbose output",
|
||||
default=False,
|
||||
)
|
||||
other_group.add_argument(
|
||||
"--show-repo-map",
|
||||
action="store_true",
|
||||
help="Print the repo map and exit (debug)",
|
||||
default=False,
|
||||
)
|
||||
other_group.add_argument(
|
||||
"--message",
|
||||
"--msg",
|
||||
"-m",
|
||||
metavar="COMMAND",
|
||||
help="Specify a single message to send GPT, process reply then exit (disables chat mode)",
|
||||
)
|
||||
other_group.add_argument(
|
||||
"--message-file",
|
||||
"-f",
|
||||
metavar="MESSAGE_FILE",
|
||||
help=(
|
||||
"Specify a file containing the message to send GPT, process reply, then exit (disables"
|
||||
" chat mode)"
|
||||
),
|
||||
)
|
||||
other_group.add_argument(
|
||||
"--encoding",
|
||||
default="utf-8",
|
||||
help="Specify the encoding for input and output (default: utf-8)",
|
||||
)
|
||||
other_group.add_argument(
|
||||
"-c",
|
||||
"--config",
|
||||
is_config_file=True,
|
||||
metavar="CONFIG_FILE",
|
||||
help=(
|
||||
"Specify the config file (default: search for .aider.conf.yml in git root, cwd"
|
||||
" or home directory)"
|
||||
),
|
||||
)
|
||||
|
||||
return parser
|
||||
|
||||
|
||||
def format_settings(parser, args):
|
||||
show = scrub_sensitive_info(args, parser.format_values())
|
||||
show += "\n"
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue