prompt and token adjustments when no files in chat with repo

This commit is contained in:
Paul Gauthier 2024-05-13 12:30:42 -07:00
parent edc70bdf84
commit 292250db4f
3 changed files with 18 additions and 3 deletions

View file

@ -446,6 +446,9 @@ class Coder:
files_content = self.gpt_prompts.files_content_prefix files_content = self.gpt_prompts.files_content_prefix
files_content += self.get_files_content() files_content += self.get_files_content()
files_reply = "Ok, any changes I propose will be to those files." files_reply = "Ok, any changes I propose will be to those files."
elif repo_content:
files_content = self.gpt_prompts.files_no_full_files_with_repo_map
files_reply = "Ok, based on your requests I will suggest which files need to be edited."
else: else:
files_content = self.gpt_prompts.files_no_full_files files_content = self.gpt_prompts.files_no_full_files
files_reply = "Ok." files_reply = "Ok."

View file

@ -20,6 +20,11 @@ You always COMPLETELY IMPLEMENT the needed code!
files_no_full_files = "I am not sharing any files that you can edit yet." files_no_full_files = "I am not sharing any files that you can edit yet."
files_no_full_files_with_repo_map = """Tell me which files in my repo are the most likely to **need changes** to solve the requests I make.
Only include the 1-2 files that are most likely to actually need to be edited.
Don't include files that might contain relevant context, just files that will need to be changed.
""" # noqa: E501
repo_content_prefix = """Here are summaries of some files present in my git repository. repo_content_prefix = """Here are summaries of some files present in my git repository.
Do not propose changes to these files, treat them as *read-only*. Do not propose changes to these files, treat them as *read-only*.
If you need to edit any of these files, ask me to *add them to the chat* first. If you need to edit any of these files, ask me to *add them to the chat* first.

View file

@ -61,8 +61,13 @@ class RepoMap:
if not other_files: if not other_files:
return return
max_map_tokens = self.max_map_tokens
if not chat_files:
# with no code in the chat, give a bigger view of the entire repo
max_map_tokens *= 4
try: try:
files_listing = self.get_ranked_tags_map(chat_files, other_files) files_listing = self.get_ranked_tags_map(chat_files, other_files, max_map_tokens)
except RecursionError: except RecursionError:
self.io.tool_error("Disabling repo map, git repo too large?") self.io.tool_error("Disabling repo map, git repo too large?")
self.max_map_tokens = 0 self.max_map_tokens = 0
@ -327,9 +332,11 @@ class RepoMap:
return ranked_tags return ranked_tags
def get_ranked_tags_map(self, chat_fnames, other_fnames=None): def get_ranked_tags_map(self, chat_fnames, other_fnames=None, max_map_tokens=None):
if not other_fnames: if not other_fnames:
other_fnames = list() other_fnames = list()
if not max_map_tokens:
max_map_tokens = self.max_map_tokens
ranked_tags = self.get_ranked_tags(chat_fnames, other_fnames) ranked_tags = self.get_ranked_tags(chat_fnames, other_fnames)
num_tags = len(ranked_tags) num_tags = len(ranked_tags)
@ -345,7 +352,7 @@ class RepoMap:
tree = self.to_tree(ranked_tags[:middle], chat_rel_fnames) tree = self.to_tree(ranked_tags[:middle], chat_rel_fnames)
num_tokens = self.token_count(tree) num_tokens = self.token_count(tree)
if num_tokens < self.max_map_tokens: if num_tokens < max_map_tokens:
best_tree = tree best_tree = tree
lower_bound = middle + 1 lower_bound = middle + 1
else: else: