diff --git a/src/codegen/extensions/langchain/tools.py b/src/codegen/extensions/langchain/tools.py index 0749384a4..3ccd59072 100644 --- a/src/codegen/extensions/langchain/tools.py +++ b/src/codegen/extensions/langchain/tools.py @@ -518,20 +518,27 @@ class GithubSearchIssuesInput(BaseModel): """Input for searching GitHub issues.""" query: str = Field(..., description="Search query string to find issues") + assignee_id: str | None = Field(default=None, description="Optional GitHub username or ID to filter issues by assignee") class GithubSearchIssuesTool(BaseTool): """Tool for searching GitHub issues.""" name: ClassVar[str] = "search_issues" - description: ClassVar[str] = "Search for GitHub issues/PRs using a query string from pygithub, e.g. 'is:pr is:open test_query'" + description: ClassVar[str] = "Search for GitHub issues/PRs using a query string from pygithub, e.g. 'is:pr is:open test_query'. You can also filter by assignee using the assignee_id parameter." args_schema: ClassVar[type[BaseModel]] = GithubSearchIssuesInput codebase: Codebase = Field(exclude=True) def __init__(self, codebase: Codebase) -> None: super().__init__(codebase=codebase) - def _run(self, query: str) -> str: + def _run(self, query: str, assignee_id: str | None = None) -> str: + # If assignee_id is provided, add it to the query + if assignee_id: + # Check if the query already contains an assignee filter + if "assignee:" not in query: + query = f"{query} assignee:{assignee_id}" + result = search(self.codebase, query) return result.render() diff --git a/src/codegen/extensions/tools/github/search.py b/src/codegen/extensions/tools/github/search.py index b83504937..dcf13a54f 100644 --- a/src/codegen/extensions/tools/github/search.py +++ b/src/codegen/extensions/tools/github/search.py @@ -37,10 +37,12 @@ def search( To search for issues specifically, include 'is:issue' in your query. If neither is specified, both issues and PRs will be included in results. + To filter by assignee, include 'assignee:USERNAME' in your query or use the assignee_id parameter + in the search_issues tool. + Args: codebase: The codebase to operate on - query: Search query string (e.g. "is:pr label:bug", "is:issue is:open") - state: Filter by state ("open", "closed", or "all") + query: Search query string (e.g. "is:pr label:bug", "is:issue is:open", "assignee:username") max_results: Maximum number of results to return """ try: