From 5e02b36f5c6c9588ac1cefac5d8bbb9a3b2a3d69 Mon Sep 17 00:00:00 2001 From: yingying Date: Fri, 20 Dec 2024 16:50:43 +0800 Subject: [PATCH] feat: add skip key words for the issue handler --- server/event_handler/discussion.py | 8 +++++++- server/event_handler/issue.py | 7 ++++++- server/utils/fuzzy_match.py | 15 +++++++++++++++ 3 files changed, 28 insertions(+), 2 deletions(-) create mode 100644 server/utils/fuzzy_match.py diff --git a/server/event_handler/discussion.py b/server/event_handler/discussion.py index 037c9e9c..caa65fa8 100644 --- a/server/event_handler/discussion.py +++ b/server/event_handler/discussion.py @@ -12,8 +12,10 @@ from agent.qa_chat import agent_chat +from utils.fuzzy_match import contains_keyword_fuzzy BOT_NAME = "petercat-assistant" +SKIP_KEYWORDS = ["RFC", "skip"] class DiscussionEventHandler: @@ -91,7 +93,11 @@ async def handle_discussion_event(self, action: str): owner = self.event["organization"]["login"] repo_name = self.event["repository"]["full_name"] discussion = self.event["discussion"] - discussion_content = f"{discussion['title']}: {discussion['body']}" + title = discussion["title"] + is_skip = contains_keyword_fuzzy(title, SKIP_KEYWORDS) + if is_skip: + return {"success": True} + discussion_content = f"{title}: {discussion['body']}" text_block = TextContentBlock(type="text", text=discussion_content) discussion_number = discussion["number"] message = Message(role="user", content=[text_block]) diff --git a/server/event_handler/issue.py b/server/event_handler/issue.py index be1734f1..e03f3627 100644 --- a/server/event_handler/issue.py +++ b/server/event_handler/issue.py @@ -8,11 +8,13 @@ generate_issue_comment_prompt, generate_issue_prompt, ) - from core.dao.repositoryConfigDAO import RepositoryConfigDAO from petercat_utils.data_class import ChatData, Message, TextContentBlock from agent.qa_chat import agent_chat +from utils.fuzzy_match import contains_keyword_fuzzy + +SKIP_KEYWORDS = ["RFC", "skip"] class IssueEventHandler: @@ -40,6 +42,9 @@ async def execute(self): return {"success": True} if action in ["opened", "reopened"]: issue, repo = self.get_issue() + is_skip = contains_keyword_fuzzy(issue.title, SKIP_KEYWORDS) + if is_skip: + return {"success": True} prompt = generate_issue_prompt( repo_name=repo.full_name, diff --git a/server/utils/fuzzy_match.py b/server/utils/fuzzy_match.py new file mode 100644 index 00000000..ab3ea285 --- /dev/null +++ b/server/utils/fuzzy_match.py @@ -0,0 +1,15 @@ +import difflib + + +def contains_keyword_fuzzy(text, keywords, cutoff=0.8): + text_lower = text.lower() + for keyword in keywords: + keyword_lower = keyword.lower() + len_keyword = len(keyword_lower) + + for i in range(len(text_lower) - len_keyword + 1): + substring = text_lower[i : i + len_keyword] + matcher = difflib.SequenceMatcher(None, keyword_lower, substring) + if matcher.ratio() >= cutoff: + return True + return False