diff --git a/pr_agent/algo/utils.py b/pr_agent/algo/utils.py index 6c90731f..513f3853 100644 --- a/pr_agent/algo/utils.py +++ b/pr_agent/algo/utils.py @@ -561,8 +561,13 @@ def load_yaml(response_text: str, keys_fix_yaml: List[str] = [], first_key="", l try: data = yaml.safe_load(response_text) except Exception as e: - get_logger().error(f"Failed to parse AI prediction: {e}") + get_logger().warning(f"Initial failure to parse AI prediction: {e}") data = try_fix_yaml(response_text, keys_fix_yaml=keys_fix_yaml, first_key=first_key, last_key=last_key) + if not data: + get_logger().error(f"Failed to parse AI prediction after fallbacks", artifact={'response_text': response_text}) + else: + get_logger().info(f"Successfully parsed AI prediction after fallbacks", + artifact={'response_text': response_text}) return data diff --git a/pr_agent/git_providers/azuredevops_provider.py b/pr_agent/git_providers/azuredevops_provider.py index 4709c05a..cf488cbe 100644 --- a/pr_agent/git_providers/azuredevops_provider.py +++ b/pr_agent/git_providers/azuredevops_provider.py @@ -177,7 +177,7 @@ class AzureDevopsProvider(GitProvider): pull_request_id=self.pr_num, ) except Exception as e: - get_logger().exception(f"Failed to publish labels, error: {e}") + get_logger().warning(f"Failed to publish labels, error: {e}") def get_pr_labels(self, update=False): try: diff --git a/pr_agent/git_providers/bitbucket_provider.py b/pr_agent/git_providers/bitbucket_provider.py index 530cd670..1c990dba 100644 --- a/pr_agent/git_providers/bitbucket_provider.py +++ b/pr_agent/git_providers/bitbucket_provider.py @@ -192,9 +192,12 @@ class BitbucketProvider(GitProvider): else: if diffs[i].data.get('lines_added', 0) == 0 and diffs[i].data.get('lines_removed', 0) == 0: diff_split[i] = "" + elif len(diff_split_lines) <= 3: + diff_split[i] = "" + get_logger().info(f"Disregarding empty diff for file {_gef_filename(diffs[i])}") else: - get_logger().error(f"Error - failed to remove the bitbucket header from diff {i}") - break + get_logger().error(f"Error - failed to get diff for file {_gef_filename(diffs[i])}") + diff_split[i] = "" invalid_files_names = [] diff_files = [] diff --git a/pr_agent/git_providers/github_provider.py b/pr_agent/git_providers/github_provider.py index 9640f87f..3a5b48e8 100644 --- a/pr_agent/git_providers/github_provider.py +++ b/pr_agent/git_providers/github_provider.py @@ -736,7 +736,7 @@ class GithubProvider(GitProvider): "PUT", f"{self.pr.issue_url}/labels", input=post_parameters ) except Exception as e: - get_logger().exception(f"Failed to publish labels, error: {e}") + get_logger().warning(f"Failed to publish labels, error: {e}") def get_pr_labels(self, update=False): try: diff --git a/pr_agent/git_providers/gitlab_provider.py b/pr_agent/git_providers/gitlab_provider.py index f749e466..b76528b5 100644 --- a/pr_agent/git_providers/gitlab_provider.py +++ b/pr_agent/git_providers/gitlab_provider.py @@ -508,7 +508,7 @@ class GitLabProvider(GitProvider): self.mr.labels = list(set(pr_types)) self.mr.save() except Exception as e: - get_logger().exception(f"Failed to publish labels, error: {e}") + get_logger().warning(f"Failed to publish labels, error: {e}") def publish_inline_comments(self, comments: list[dict]): pass diff --git a/pr_agent/tools/pr_code_suggestions.py b/pr_agent/tools/pr_code_suggestions.py index c0f3c0bf..23a7cdf7 100644 --- a/pr_agent/tools/pr_code_suggestions.py +++ b/pr_agent/tools/pr_code_suggestions.py @@ -292,7 +292,7 @@ class PRCodeSuggestions: get_logger().debug(f"PR diff", artifact=self.patches_diff) self.prediction = await self._get_prediction(model, self.patches_diff) else: - get_logger().error(f"Error getting PR diff") + get_logger().warning(f"Empty PR diff") self.prediction = None data = self.prediction diff --git a/pr_agent/tools/pr_description.py b/pr_agent/tools/pr_description.py index 2214085a..28ff6abc 100644 --- a/pr_agent/tools/pr_description.py +++ b/pr_agent/tools/pr_description.py @@ -92,7 +92,7 @@ class PRDescription: if self.prediction: self._prepare_data() else: - get_logger().error(f"Error getting AI prediction {self.pr_id}") + get_logger().warning(f"Empty prediction, PR: {self.pr_id}") self.git_provider.remove_initial_comment() return None @@ -508,6 +508,8 @@ extra_file_yaml = def _prepare_file_labels(self): file_label_dict = {} + if not self.data or 'pr_files' not in self.data: + return file_label_dict for file in self.data['pr_files']: try: required_fields = ['changes_summary', 'changes_title', 'filename', 'label']