mirror of
https://github.com/Aider-AI/aider.git
synced 2025-05-24 22:34:59 +00:00
announcements
This commit is contained in:
parent
0925c4b8b3
commit
d21de778ff
3 changed files with 85 additions and 160 deletions
|
@ -16,7 +16,7 @@ from jsonschema import Draft7Validator
|
|||
from rich.console import Console, Text
|
||||
from rich.markdown import Markdown
|
||||
|
||||
from aider import models, prompts, utils
|
||||
from aider import __version__, models, prompts, utils
|
||||
from aider.commands import Commands
|
||||
from aider.history import ChatSummary
|
||||
from aider.io import InputOutput
|
||||
|
@ -80,6 +80,54 @@ class Coder:
|
|||
else:
|
||||
raise ValueError(f"Unknown edit format {edit_format}")
|
||||
|
||||
def get_announcements(self):
|
||||
lines = []
|
||||
lines.append(f"Aider v{__version__}")
|
||||
|
||||
# Model
|
||||
main_model = self.main_model
|
||||
weak_model = main_model.weak_model
|
||||
prefix = "Model:"
|
||||
output = f" {main_model.name} with {self.edit_format} edit format"
|
||||
if weak_model is not main_model:
|
||||
prefix = "Models:"
|
||||
output += f", weak model {weak_model.name}"
|
||||
lines.append(prefix + output)
|
||||
|
||||
# Repo
|
||||
if self.repo:
|
||||
rel_repo_dir = self.repo.get_rel_repo_dir()
|
||||
num_files = len(self.repo.get_tracked_files())
|
||||
lines.append(f"Git repo: {rel_repo_dir} with {num_files:,} files")
|
||||
if num_files > 1000:
|
||||
lines.append(
|
||||
"Warning: For large repos, consider using an .aiderignore file to ignore"
|
||||
" irrelevant files/dirs."
|
||||
)
|
||||
else:
|
||||
lines.append("Git repo: none")
|
||||
|
||||
# Repo-map
|
||||
map_tokens = self.repo_map.max_map_tokens if self.repo_map else 0
|
||||
if map_tokens > 0 and self.repo_map:
|
||||
lines.append(f"Repo-map: using {map_tokens} tokens")
|
||||
max_map_tokens = 2048
|
||||
if map_tokens > max_map_tokens:
|
||||
lines.append(
|
||||
f"Warning: map-tokens > {max_map_tokens} is not recommended as too much"
|
||||
" irrelevant code can confuse GPT."
|
||||
)
|
||||
elif not map_tokens:
|
||||
lines.append("Repo-map: disabled because map_tokens == 0")
|
||||
else:
|
||||
lines.append("Repo-map: disabled")
|
||||
|
||||
# Files
|
||||
for fname in self.get_inchat_relative_files():
|
||||
lines.append(f"Added {fname} to the chat.")
|
||||
|
||||
return lines
|
||||
|
||||
def __init__(
|
||||
self,
|
||||
main_model,
|
||||
|
@ -136,15 +184,6 @@ class Coder:
|
|||
|
||||
self.main_model = main_model
|
||||
|
||||
weak_model = main_model.weak_model
|
||||
prefix = "Model:"
|
||||
output = f" {main_model.name} with {self.edit_format} edit format"
|
||||
if weak_model is not main_model:
|
||||
prefix = "Models:"
|
||||
output += f", weak model {weak_model.name}"
|
||||
|
||||
self.io.tool_output(prefix + output)
|
||||
|
||||
self.show_diffs = show_diffs
|
||||
|
||||
self.commands = Commands(self.io, self, voice_language)
|
||||
|
@ -181,17 +220,7 @@ class Coder:
|
|||
self.abs_fnames.add(fname)
|
||||
self.check_added_files()
|
||||
|
||||
if self.repo:
|
||||
rel_repo_dir = self.repo.get_rel_repo_dir()
|
||||
num_files = len(self.repo.get_tracked_files())
|
||||
self.io.tool_output(f"Git repo: {rel_repo_dir} with {num_files:,} files")
|
||||
if num_files > 1000:
|
||||
self.io.tool_error(
|
||||
"Warning: For large repos, consider using an .aiderignore file to ignore"
|
||||
" irrelevant files/dirs."
|
||||
)
|
||||
else:
|
||||
self.io.tool_output("Git repo: none")
|
||||
if not self.repo:
|
||||
self.find_common_root()
|
||||
|
||||
if main_model.use_repo_map and self.repo and self.gpt_prompts.repo_content_prefix:
|
||||
|
@ -204,22 +233,6 @@ class Coder:
|
|||
self.verbose,
|
||||
)
|
||||
|
||||
if map_tokens > 0 and self.repo_map:
|
||||
self.io.tool_output(f"Repo-map: using {map_tokens} tokens")
|
||||
max_map_tokens = 2048
|
||||
if map_tokens > max_map_tokens:
|
||||
self.io.tool_error(
|
||||
f"Warning: map-tokens > {max_map_tokens} is not recommended as too much"
|
||||
" irrelevant code can confuse GPT."
|
||||
)
|
||||
elif not map_tokens:
|
||||
self.io.tool_output("Repo-map: disabled because map_tokens == 0")
|
||||
else:
|
||||
self.io.tool_output("Repo-map: disabled")
|
||||
|
||||
for fname in self.get_inchat_relative_files():
|
||||
self.io.tool_output(f"Added {fname} to the chat.")
|
||||
|
||||
self.summarizer = ChatSummary(
|
||||
self.main_model.weak_model,
|
||||
self.main_model.max_chat_history_tokens,
|
||||
|
@ -237,6 +250,9 @@ class Coder:
|
|||
self.io.tool_output("JSON Schema:")
|
||||
self.io.tool_output(json.dumps(self.functions, indent=4))
|
||||
|
||||
for line in self.get_announcements():
|
||||
self.io.tool_output(line)
|
||||
|
||||
def find_common_root(self):
|
||||
if len(self.abs_fnames) == 1:
|
||||
self.root = os.path.dirname(list(self.abs_fnames)[0])
|
||||
|
|
127
aider/gui.py
127
aider/gui.py
|
@ -8,7 +8,7 @@ import streamlit as st
|
|||
|
||||
from aider.coders import Coder
|
||||
from aider.dump import dump # noqa: F401
|
||||
from aider.models import Model
|
||||
from aider.main import main
|
||||
|
||||
if "recent_msgs_num" not in st.session_state:
|
||||
st.session_state.recent_msgs_num = 0
|
||||
|
@ -100,122 +100,25 @@ def search(text=None):
|
|||
# selected_value = st_searchbox(search)
|
||||
|
||||
|
||||
model = Model("claude-3-haiku-20240307")
|
||||
fnames = ["greeting.py"]
|
||||
coder = Coder.create(main_model=model, fnames=fnames, use_git=False, pretty=False)
|
||||
|
||||
lorem_words = [
|
||||
"lorem",
|
||||
"ipsum",
|
||||
"dolor",
|
||||
"sit",
|
||||
"amet",
|
||||
"consectetur",
|
||||
"adipiscing",
|
||||
"elit",
|
||||
"sed",
|
||||
"do",
|
||||
"eiusmod",
|
||||
"tempor",
|
||||
"incididunt",
|
||||
"ut",
|
||||
"labore",
|
||||
"et",
|
||||
"dolore",
|
||||
"magna",
|
||||
"aliqua",
|
||||
"enim",
|
||||
"ad",
|
||||
"minim",
|
||||
"veniam",
|
||||
"quis",
|
||||
"nostrudlorem",
|
||||
"ipsum",
|
||||
"dolor",
|
||||
"sit",
|
||||
"amet",
|
||||
"consectetur",
|
||||
"adipiscing",
|
||||
"elit",
|
||||
"sed",
|
||||
"do",
|
||||
"eiusmod",
|
||||
"tempor",
|
||||
"incididunt",
|
||||
"ut",
|
||||
"labore",
|
||||
"et",
|
||||
"dolore",
|
||||
"magna",
|
||||
"aliqua",
|
||||
"enim",
|
||||
"ad",
|
||||
"minim",
|
||||
"veniam",
|
||||
"quis",
|
||||
"nostrudlorem",
|
||||
"ipsum",
|
||||
"dolor",
|
||||
"sit",
|
||||
"amet",
|
||||
"consectetur",
|
||||
"adipiscing",
|
||||
"elit",
|
||||
"sed",
|
||||
"do",
|
||||
"eiusmod",
|
||||
"tempor",
|
||||
"incididunt",
|
||||
"ut",
|
||||
"labore",
|
||||
"et",
|
||||
"dolore",
|
||||
"magna",
|
||||
"aliqua",
|
||||
"enim",
|
||||
"ad",
|
||||
"minim",
|
||||
"veniam",
|
||||
"quis",
|
||||
"nostrudlorem",
|
||||
"ipsum",
|
||||
"dolor",
|
||||
"sit",
|
||||
"amet",
|
||||
"consectetur",
|
||||
"adipiscing",
|
||||
"elit",
|
||||
"sed",
|
||||
"do",
|
||||
"eiusmod",
|
||||
"tempor",
|
||||
"incididunt",
|
||||
"ut",
|
||||
"labore",
|
||||
"et",
|
||||
"dolore",
|
||||
"magna",
|
||||
"aliqua",
|
||||
"enim",
|
||||
"ad",
|
||||
"minim",
|
||||
"veniam",
|
||||
"quis",
|
||||
"nostrud\n\n",
|
||||
"\n\n",
|
||||
"\n\n",
|
||||
]
|
||||
@st.cache_resource
|
||||
def get_coder():
|
||||
coder = main(return_coder=True)
|
||||
if isinstance(coder, Coder):
|
||||
return coder
|
||||
raise ValueError()
|
||||
|
||||
|
||||
def generate_lorem_text(min_words=10, max_words=50):
|
||||
num_words = random.randint(min_words, max_words)
|
||||
words = random.sample(lorem_words, num_words)
|
||||
return " ".join(words)
|
||||
coder = get_coder()
|
||||
|
||||
|
||||
def announce(coder):
|
||||
lines = coder.get_announcements()
|
||||
lines = " \n".join(lines)
|
||||
st.info(lines)
|
||||
|
||||
|
||||
with st.sidebar:
|
||||
st.title("Aider")
|
||||
|
||||
cmds_tab, settings_tab = st.tabs(["Commands", "Settings"])
|
||||
|
||||
with cmds_tab:
|
||||
|
@ -303,6 +206,8 @@ messages = st.container()
|
|||
# stuff a bunch of vertical whitespace at the top
|
||||
# to get all the chat text to the bottom
|
||||
messages.container(height=1200, border=False)
|
||||
with messages:
|
||||
announce(coder)
|
||||
|
||||
with recent_msgs_empty:
|
||||
old_prompt = recent_msgs()
|
||||
|
|
|
@ -122,7 +122,7 @@ def check_gitignore(git_root, io, ask=True):
|
|||
io.tool_output(f"Added {pat} to .gitignore")
|
||||
|
||||
|
||||
def main(argv=None, input=None, output=None, force_git_root=None):
|
||||
def main(argv=None, input=None, output=None, force_git_root=None, return_coder=False):
|
||||
if argv is None:
|
||||
argv = sys.argv[1:]
|
||||
|
||||
|
@ -554,20 +554,14 @@ def main(argv=None, input=None, output=None, force_git_root=None):
|
|||
if args.git and not force_git_root:
|
||||
right_repo_root = guessed_wrong_repo(io, git_root, fnames, git_dname)
|
||||
if right_repo_root:
|
||||
return main(argv, input, output, right_repo_root)
|
||||
|
||||
io.tool_output(f"Aider v{__version__}")
|
||||
return main(argv, input, output, right_repo_root, return_coder=return_coder)
|
||||
|
||||
if not args.skip_check_update:
|
||||
check_version(io.tool_error)
|
||||
|
||||
if args.check_update:
|
||||
update_available = check_version(lambda msg: None)
|
||||
sys.exit(0 if not update_available else 1)
|
||||
|
||||
if "VSCODE_GIT_IPC_HANDLE" in os.environ:
|
||||
args.pretty = False
|
||||
io.tool_output("VSCode terminal detected, pretty output has been disabled.")
|
||||
return 0 if not update_available else 1
|
||||
|
||||
if args.models:
|
||||
matches = models.fuzzy_match_models(args.models)
|
||||
|
@ -652,6 +646,9 @@ def main(argv=None, input=None, output=None, force_git_root=None):
|
|||
io.tool_error(str(err))
|
||||
return 1
|
||||
|
||||
if return_coder:
|
||||
return coder
|
||||
|
||||
if args.commit:
|
||||
coder.commands.cmd_commit("")
|
||||
return
|
||||
|
@ -670,6 +667,10 @@ def main(argv=None, input=None, output=None, force_git_root=None):
|
|||
coder.apply_updates()
|
||||
return
|
||||
|
||||
if "VSCODE_GIT_IPC_HANDLE" in os.environ:
|
||||
args.pretty = False
|
||||
io.tool_output("VSCode terminal detected, pretty output has been disabled.")
|
||||
|
||||
io.tool_output("Use /help to see in-chat commands, run with --help to see cmd line args")
|
||||
|
||||
if git_root and Path.cwd().resolve() != Path(git_root).resolve():
|
||||
|
@ -685,7 +686,9 @@ def main(argv=None, input=None, output=None, force_git_root=None):
|
|||
io.add_to_input_history(args.message)
|
||||
io.tool_output()
|
||||
coder.run(with_message=args.message)
|
||||
elif args.message_file:
|
||||
return
|
||||
|
||||
if args.message_file:
|
||||
try:
|
||||
message_from_file = io.read_text(args.message_file)
|
||||
io.tool_output()
|
||||
|
@ -696,8 +699,9 @@ def main(argv=None, input=None, output=None, force_git_root=None):
|
|||
except IOError as e:
|
||||
io.tool_error(f"Error reading message file: {e}")
|
||||
return 1
|
||||
else:
|
||||
coder.run()
|
||||
return
|
||||
|
||||
coder.run()
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue