|
9 | 9 | from pr_agent.algo.token_handler import TokenHandler
|
10 | 10 | from pr_agent.algo.utils import ModelType
|
11 | 11 | from pr_agent.config_loader import get_settings
|
12 |
| -from pr_agent.git_providers import get_git_provider |
| 12 | +from pr_agent.git_providers import get_git_provider, GitLabProvider |
13 | 13 | from pr_agent.git_providers.git_provider import get_main_pr_language
|
14 | 14 | from pr_agent.log import get_logger
|
15 | 15 | from pr_agent.servers.help import HelpMessage
|
@@ -116,10 +116,22 @@ async def _get_prediction(self, model: str):
|
116 | 116 | model=model, temperature=get_settings().config.temperature, system=system_prompt, user=user_prompt)
|
117 | 117 | return response
|
118 | 118 |
|
| 119 | + def gitlab_protections(self, model_answer: str) -> str: |
| 120 | + github_quick_actions_MR = ["/approve", "/close", "/merge", "/reopen", "/unapprove", "/title", "/assign", |
| 121 | + "/copy_metadata", "/target_branch"] |
| 122 | + if any(action in model_answer for action in github_quick_actions_MR): |
| 123 | + str_err = "Model answer contains GitHub quick actions, which are not supported in GitLab" |
| 124 | + get_logger().error(str_err) |
| 125 | + return str_err |
| 126 | + return model_answer |
| 127 | + |
119 | 128 | def _prepare_pr_answer(self) -> str:
|
120 | 129 | model_answer = self.prediction.strip()
|
121 | 130 | # sanitize the answer so that no line will start with "/"
|
122 | 131 | model_answer_sanitized = model_answer.replace("\n/", "\n /")
|
| 132 | + model_answer_sanitized = model_answer_sanitized.replace("\r/", "\r /") |
| 133 | + if isinstance(self.git_provider, GitLabProvider): |
| 134 | + model_answer_sanitized = self.gitlab_protections(model_answer_sanitized) |
123 | 135 | if model_answer_sanitized.startswith("/"):
|
124 | 136 | model_answer_sanitized = " " + model_answer_sanitized
|
125 | 137 | if model_answer_sanitized != model_answer:
|
|
0 commit comments