diff --git a/docs/docs/usage-guide/additional_configurations.md b/docs/docs/usage-guide/additional_configurations.md index 7caab481a..5eda3919e 100644 --- a/docs/docs/usage-guide/additional_configurations.md +++ b/docs/docs/usage-guide/additional_configurations.md @@ -1,3 +1,25 @@ +## Show possible configurations +The possible configurations of pr-agent are stored in [here](https://github.com/Codium-ai/pr-agent/blob/main/pr_agent/settings/configuration.toml). +In the [tools](https://pr-agent-docs.codium.ai/tools/) page you can find explanations on how to use these configurations for each tool. + +To print all the available configurations as a comment on your PR, you can use the following command: +``` +/config +``` + +![possible_config1](https://codium.ai/images/pr_agent/possible_config1.png){width=512} + + +To view the **actual** configurations used for a specific tool, after all the user settings are applied, you can add for each tool a `--config.output_relevant_configurations=true` suffix. +For example: +``` +/improve --config.output_relevant_configurations=true +``` +Will output an additional field showing the actual configurations used for the `improve` tool. + +![possible_config2](https://codium.ai/images/pr_agent/possible_config2.png){width=512} + + ## Ignoring files from analysis In some cases, you may want to exclude specific files or directories from the analysis performed by CodiumAI PR-Agent. This can be useful, for example, when you have files that are generated automatically or files that shouldn't be reviewed, like vendored code. diff --git a/pr_agent/algo/utils.py b/pr_agent/algo/utils.py index c72a4108f..9dcf6f47d 100644 --- a/pr_agent/algo/utils.py +++ b/pr_agent/algo/utils.py @@ -905,21 +905,24 @@ def github_action_output(output_data: dict, key_name: str): def show_relevant_configurations(relevant_section: str) -> str: - forbidden_keys = ['ai_disclaimer', 'ai_disclaimer_title', 'ANALYTICS_FOLDER', 'secret_provider', + skip_keys = ['ai_disclaimer', 'ai_disclaimer_title', 'ANALYTICS_FOLDER', 'secret_provider', "skip_keys", 'trial_prefix_message', 'no_eligible_message', 'identity_provider', 'ALLOWED_REPOS','APP_NAME'] + extra_skip_keys = get_settings().config.get('config.skip_keys', []) + if extra_skip_keys: + skip_keys.extend(extra_skip_keys) 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: + if key in skip_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: + if key in skip_keys: continue markdown_text += f"{key}: {value}\n" markdown_text += "\n```" diff --git a/pr_agent/settings/configuration.toml b/pr_agent/settings/configuration.toml index cddc79aba..18c35d070 100644 --- a/pr_agent/settings/configuration.toml +++ b/pr_agent/settings/configuration.toml @@ -14,6 +14,7 @@ use_wiki_settings_file=true use_repo_settings_file=true use_global_settings_file=true ai_timeout=120 # 2minutes +skip_keys = [] # token limits max_description_tokens = 500 max_commits_tokens = 500 diff --git a/pr_agent/tools/pr_config.py b/pr_agent/tools/pr_config.py index 1d18f9d04..05750f2d1 100644 --- a/pr_agent/tools/pr_config.py +++ b/pr_agent/tools/pr_config.py @@ -1,3 +1,5 @@ +from dynaconf import Dynaconf + from pr_agent.config_loader import get_settings from pr_agent.git_providers import get_git_provider from pr_agent.log import get_logger @@ -28,20 +30,33 @@ async def run(self): return "" def _prepare_pr_configs(self) -> str: - import tomli - with open(get_settings().find_file("configuration.toml"), "rb") as conf_file: - configuration_headers = [header.lower() for header in tomli.load(conf_file).keys()] + conf_file = get_settings().find_file("configuration.toml") + conf_settings = Dynaconf(settings_files=[conf_file]) + configuration_headers = [header.lower() for header in conf_settings.keys()] relevant_configs = { header: configs for header, configs in get_settings().to_dict().items() - if header.lower().startswith("pr_") and header.lower() in configuration_headers + if (header.lower().startswith("pr_") or header.lower().startswith("config")) and header.lower() in configuration_headers } - comment_str = "Possible Configurations:" + + skip_keys = ['ai_disclaimer', 'ai_disclaimer_title', 'ANALYTICS_FOLDER', 'secret_provider', "skip_keys", + 'trial_prefix_message', 'no_eligible_message', 'identity_provider', 'ALLOWED_REPOS', + 'APP_NAME'] + extra_skip_keys = get_settings().config.get('config.skip_keys', []) + if extra_skip_keys: + skip_keys.extend(extra_skip_keys) + + markdown_text = "
🛠️ PR-Agent Configurations: \n\n" + markdown_text += f"\n\n```yaml\n\n" for header, configs in relevant_configs.items(): if configs: - comment_str += "\n" + markdown_text += "\n\n" + markdown_text += f"==================== {header} ====================" for key, value in configs.items(): - comment_str += f"\n{header.lower()}.{key.lower()} = {repr(value) if isinstance(value, str) else value}" - comment_str += " " - if get_settings().config.verbosity_level >= 2: - get_logger().info(f"comment_str:\n{comment_str}") - return comment_str + if key in skip_keys: + continue + markdown_text += f"\n{header.lower()}.{key.lower()} = {repr(value) if isinstance(value, str) else value}" + markdown_text += " " + markdown_text += "\n```" + markdown_text += "\n
\n" + get_logger().info(f"Possible Configurations outputted to PR comment", artifact=markdown_text) + return markdown_text