announcements

This commit is contained in:
Paul Gauthier 2024-04-26 11:24:42 -07:00
parent 0925c4b8b3
commit d21de778ff
3 changed files with 85 additions and 160 deletions

View file

@ -16,7 +16,7 @@ from jsonschema import Draft7Validator
from rich.console import Console, Text from rich.console import Console, Text
from rich.markdown import Markdown 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.commands import Commands
from aider.history import ChatSummary from aider.history import ChatSummary
from aider.io import InputOutput from aider.io import InputOutput
@ -80,6 +80,54 @@ class Coder:
else: else:
raise ValueError(f"Unknown edit format {edit_format}") 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__( def __init__(
self, self,
main_model, main_model,
@ -136,15 +184,6 @@ class Coder:
self.main_model = main_model 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.show_diffs = show_diffs
self.commands = Commands(self.io, self, voice_language) self.commands = Commands(self.io, self, voice_language)
@ -181,17 +220,7 @@ class Coder:
self.abs_fnames.add(fname) self.abs_fnames.add(fname)
self.check_added_files() self.check_added_files()
if self.repo: if not 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")
self.find_common_root() self.find_common_root()
if main_model.use_repo_map and self.repo and self.gpt_prompts.repo_content_prefix: if main_model.use_repo_map and self.repo and self.gpt_prompts.repo_content_prefix:
@ -204,22 +233,6 @@ class Coder:
self.verbose, 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.summarizer = ChatSummary(
self.main_model.weak_model, self.main_model.weak_model,
self.main_model.max_chat_history_tokens, self.main_model.max_chat_history_tokens,
@ -237,6 +250,9 @@ class Coder:
self.io.tool_output("JSON Schema:") self.io.tool_output("JSON Schema:")
self.io.tool_output(json.dumps(self.functions, indent=4)) 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): def find_common_root(self):
if len(self.abs_fnames) == 1: if len(self.abs_fnames) == 1:
self.root = os.path.dirname(list(self.abs_fnames)[0]) self.root = os.path.dirname(list(self.abs_fnames)[0])

View file

@ -8,7 +8,7 @@ import streamlit as st
from aider.coders import Coder from aider.coders import Coder
from aider.dump import dump # noqa: F401 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: if "recent_msgs_num" not in st.session_state:
st.session_state.recent_msgs_num = 0 st.session_state.recent_msgs_num = 0
@ -100,122 +100,25 @@ def search(text=None):
# selected_value = st_searchbox(search) # selected_value = st_searchbox(search)
model = Model("claude-3-haiku-20240307") @st.cache_resource
fnames = ["greeting.py"] def get_coder():
coder = Coder.create(main_model=model, fnames=fnames, use_git=False, pretty=False) coder = main(return_coder=True)
if isinstance(coder, Coder):
lorem_words = [ return coder
"lorem", raise ValueError()
"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",
]
def generate_lorem_text(min_words=10, max_words=50): coder = get_coder()
num_words = random.randint(min_words, max_words)
words = random.sample(lorem_words, num_words)
return " ".join(words) def announce(coder):
lines = coder.get_announcements()
lines = " \n".join(lines)
st.info(lines)
with st.sidebar: with st.sidebar:
st.title("Aider") st.title("Aider")
cmds_tab, settings_tab = st.tabs(["Commands", "Settings"]) cmds_tab, settings_tab = st.tabs(["Commands", "Settings"])
with cmds_tab: with cmds_tab:
@ -303,6 +206,8 @@ messages = st.container()
# stuff a bunch of vertical whitespace at the top # stuff a bunch of vertical whitespace at the top
# to get all the chat text to the bottom # to get all the chat text to the bottom
messages.container(height=1200, border=False) messages.container(height=1200, border=False)
with messages:
announce(coder)
with recent_msgs_empty: with recent_msgs_empty:
old_prompt = recent_msgs() old_prompt = recent_msgs()

View file

@ -122,7 +122,7 @@ def check_gitignore(git_root, io, ask=True):
io.tool_output(f"Added {pat} to .gitignore") 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: if argv is None:
argv = sys.argv[1:] 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: if args.git and not force_git_root:
right_repo_root = guessed_wrong_repo(io, git_root, fnames, git_dname) right_repo_root = guessed_wrong_repo(io, git_root, fnames, git_dname)
if right_repo_root: if right_repo_root:
return main(argv, input, output, right_repo_root) return main(argv, input, output, right_repo_root, return_coder=return_coder)
io.tool_output(f"Aider v{__version__}")
if not args.skip_check_update: if not args.skip_check_update:
check_version(io.tool_error) check_version(io.tool_error)
if args.check_update: if args.check_update:
update_available = check_version(lambda msg: None) update_available = check_version(lambda msg: None)
sys.exit(0 if not update_available else 1) return 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.")
if args.models: if args.models:
matches = models.fuzzy_match_models(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)) io.tool_error(str(err))
return 1 return 1
if return_coder:
return coder
if args.commit: if args.commit:
coder.commands.cmd_commit("") coder.commands.cmd_commit("")
return return
@ -670,6 +667,10 @@ def main(argv=None, input=None, output=None, force_git_root=None):
coder.apply_updates() coder.apply_updates()
return 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") 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(): 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.add_to_input_history(args.message)
io.tool_output() io.tool_output()
coder.run(with_message=args.message) coder.run(with_message=args.message)
elif args.message_file: return
if args.message_file:
try: try:
message_from_file = io.read_text(args.message_file) message_from_file = io.read_text(args.message_file)
io.tool_output() io.tool_output()
@ -696,8 +699,9 @@ def main(argv=None, input=None, output=None, force_git_root=None):
except IOError as e: except IOError as e:
io.tool_error(f"Error reading message file: {e}") io.tool_error(f"Error reading message file: {e}")
return 1 return 1
else: return
coder.run()
coder.run()
if __name__ == "__main__": if __name__ == "__main__":