From ea4ee1adbc53f593488160142fa30dff8d976dd2 Mon Sep 17 00:00:00 2001 From: mrT23 Date: Sat, 18 May 2024 13:09:50 +0300 Subject: [PATCH] Add show_relevant_configurations function and integrate it across tools to output relevant configurations if enabled --- pr_agent/algo/utils.py | 24 +++++++++++++++++++++++- pr_agent/settings/configuration.toml | 1 + pr_agent/tools/pr_code_suggestions.py | 6 +++++- pr_agent/tools/pr_description.py | 6 +++++- pr_agent/tools/pr_reviewer.py | 7 ++++++- pr_agent/tools/pr_update_changelog.py | 7 ++++++- 6 files changed, 46 insertions(+), 5 deletions(-) diff --git a/pr_agent/algo/utils.py b/pr_agent/algo/utils.py index e2f7f8ba..61510b8d 100644 --- a/pr_agent/algo/utils.py +++ b/pr_agent/algo/utils.py @@ -673,4 +673,26 @@ def github_action_output(output_data: dict, key_name: str): print(f"{key_name}={json.dumps(key_data, indent=None, ensure_ascii=False)}", file=fh) except Exception as e: get_logger().error(f"Failed to write to GitHub Action output: {e}") - return \ No newline at end of file + return + + +def show_relevant_configurations(relevant_section: str) -> str: + forbidden_keys = ['ai_disclaimer', 'ai_disclaimer_title', 'ANALYTICS_FOLDER', 'secret_provider'] + + markdown_text = "" + markdown_text += "\n
\n
🛠️ Relevant configurations: \n\n" + markdown_text +="
These are the relevant [configurations](https://github.com/Codium-ai/pr-agent/blob/main/pr_agent/settings/configuration.toml) for this tool:\n\n" + markdown_text += f"**[config**]\n```yaml\n\n" + for key, value in get_settings().config.items(): + if key in forbidden_keys: + continue + markdown_text += f"{key}: {value}\n" + markdown_text += "\n```\n" + markdown_text += f"\n**[{relevant_section}]**\n```yaml\n\n" + for key, value in get_settings().get(relevant_section, {}).items(): + if key in forbidden_keys: + continue + markdown_text += f"{key}: {value}\n" + markdown_text += "\n```" + markdown_text += "\n
\n" + return markdown_text diff --git a/pr_agent/settings/configuration.toml b/pr_agent/settings/configuration.toml index b84bce61..fa9b1afd 100644 --- a/pr_agent/settings/configuration.toml +++ b/pr_agent/settings/configuration.toml @@ -19,6 +19,7 @@ secret_provider="google_cloud_storage" cli_mode=false ai_disclaimer_title="" # Pro feature, title for a collapsible disclaimer to AI outputs ai_disclaimer="" # Pro feature, full text for the AI disclaimer +output_relevant_configurations=false [pr_reviewer] # /review # # enable/disable features diff --git a/pr_agent/tools/pr_code_suggestions.py b/pr_agent/tools/pr_code_suggestions.py index a3f0abd1..6dead2be 100644 --- a/pr_agent/tools/pr_code_suggestions.py +++ b/pr_agent/tools/pr_code_suggestions.py @@ -9,7 +9,7 @@ from pr_agent.algo.ai_handlers.base_ai_handler import BaseAiHandler from pr_agent.algo.ai_handlers.litellm_ai_handler import LiteLLMAIHandler from pr_agent.algo.pr_processing import get_pr_diff, get_pr_multi_diffs, retry_with_fallback_models from pr_agent.algo.token_handler import TokenHandler -from pr_agent.algo.utils import load_yaml, replace_code_tags, ModelType +from pr_agent.algo.utils import load_yaml, replace_code_tags, ModelType, show_relevant_configurations from pr_agent.config_loader import get_settings from pr_agent.git_providers import get_git_provider from pr_agent.git_providers.git_provider import get_main_pr_language @@ -118,6 +118,10 @@ class PRCodeSuggestions: pr_body += HelpMessage.get_improve_usage_guide() pr_body += "\n\n" + # Output the relevant configurations if enabled + if get_settings().get('config', {}).get('output_relevant_configurations', False): + pr_body += show_relevant_configurations(relevant_section='pr_code_suggestions') + if get_settings().pr_code_suggestions.persistent_comment: final_update_message = False self.git_provider.publish_persistent_comment(pr_body, diff --git a/pr_agent/tools/pr_description.py b/pr_agent/tools/pr_description.py index 661d9dd8..0de93c9c 100644 --- a/pr_agent/tools/pr_description.py +++ b/pr_agent/tools/pr_description.py @@ -9,7 +9,7 @@ from pr_agent.algo.ai_handlers.base_ai_handler import BaseAiHandler from pr_agent.algo.ai_handlers.litellm_ai_handler import LiteLLMAIHandler from pr_agent.algo.pr_processing import get_pr_diff, retry_with_fallback_models from pr_agent.algo.token_handler import TokenHandler -from pr_agent.algo.utils import load_yaml, set_custom_labels, get_user_labels, ModelType +from pr_agent.algo.utils import load_yaml, set_custom_labels, get_user_labels, ModelType, show_relevant_configurations from pr_agent.config_loader import get_settings from pr_agent.git_providers import get_git_provider from pr_agent.git_providers.git_provider import get_main_pr_language @@ -116,6 +116,10 @@ class PRDescription: pr_body += "\n\n___\n\n> 💡 **PR-Agent usage**:" pr_body += "\n>Comment `/help` on the PR to get a list of all available PR-Agent tools and their descriptions\n\n" + # Output the relevant configurations if enabled + if get_settings().get('config', {}).get('output_relevant_configurations', False): + pr_body += show_relevant_configurations(relevant_section='pr_description') + if get_settings().config.publish_output: # publish labels if get_settings().pr_description.publish_labels and self.git_provider.is_supported("get_labels"): diff --git a/pr_agent/tools/pr_reviewer.py b/pr_agent/tools/pr_reviewer.py index 46036816..33adab39 100644 --- a/pr_agent/tools/pr_reviewer.py +++ b/pr_agent/tools/pr_reviewer.py @@ -8,7 +8,8 @@ from pr_agent.algo.ai_handlers.base_ai_handler import BaseAiHandler from pr_agent.algo.ai_handlers.litellm_ai_handler import LiteLLMAIHandler from pr_agent.algo.pr_processing import get_pr_diff, retry_with_fallback_models from pr_agent.algo.token_handler import TokenHandler -from pr_agent.algo.utils import convert_to_markdown, github_action_output, load_yaml, ModelType +from pr_agent.algo.utils import convert_to_markdown, github_action_output, load_yaml, ModelType, \ + show_relevant_configurations from pr_agent.config_loader import get_settings from pr_agent.git_providers import get_git_provider from pr_agent.git_providers.git_provider import IncrementalPR, get_main_pr_language @@ -238,6 +239,10 @@ class PRReviewer: markdown_text += HelpMessage.get_review_usage_guide() markdown_text += "\n\n" + # Output the relevant configurations if enabled + if get_settings().get('config', {}).get('output_relevant_configurations', False): + markdown_text += show_relevant_configurations(relevant_section='pr_reviewer') + # Add custom labels from the review prediction (effort, security) self.set_review_labels(data) diff --git a/pr_agent/tools/pr_update_changelog.py b/pr_agent/tools/pr_update_changelog.py index 1475d9f2..404b886c 100644 --- a/pr_agent/tools/pr_update_changelog.py +++ b/pr_agent/tools/pr_update_changelog.py @@ -8,7 +8,7 @@ from pr_agent.algo.ai_handlers.base_ai_handler import BaseAiHandler from pr_agent.algo.ai_handlers.litellm_ai_handler import LiteLLMAIHandler from pr_agent.algo.pr_processing import get_pr_diff, retry_with_fallback_models from pr_agent.algo.token_handler import TokenHandler -from pr_agent.algo.utils import ModelType +from pr_agent.algo.utils import ModelType, show_relevant_configurations from pr_agent.config_loader import get_settings from pr_agent.git_providers import get_git_provider, GithubProvider from pr_agent.git_providers.git_provider import get_main_pr_language @@ -74,6 +74,11 @@ class PRUpdateChangelog: await retry_with_fallback_models(self._prepare_prediction, model_type=ModelType.TURBO) new_file_content, answer = self._prepare_changelog_update() + + # Output the relevant configurations if enabled + if get_settings().get('config', {}).get('output_relevant_configurations', False): + answer += show_relevant_configurations(relevant_section='pr_update_changelog') + get_logger().debug(f"PR output", artifact=answer) if get_settings().config.publish_output: