Merge pull request #92 from bucolucas/cleanup-github-tool

Refactor github_tool.py to use consistent JSON definitions
This commit is contained in:
2024-08-19 16:02:14 -05:00
committed by GitHub
+23 -63
View File
@@ -1,23 +1,5 @@
from .github_tool_functions.read_file import ReadFile, read_file_definition
from .github_tool_functions.create_branch import CreateBranch, create_branch_definition
from .github_tool_functions.commit_file import CommitFile, commit_file_definition
from .github_tool_functions.create_pull_request import CreatePullRequest, create_pull_request_definition
from .github_tool_functions.list_files import ListFiles, list_files_definition
from .github_tool_functions.search_code import SearchCode, search_code_definition
from .github_tool_functions.get_commit_history import GetCommitHistory, get_commit_history_definition
from .github_tool_functions.get_current_branch import GetCurrentBranch, get_current_branch_definition
from .github_tool_functions.set_current_branch import SetCurrentBranch, set_current_branch_definition
from .github_tool_functions.get_file_at_commit import GetFileAtCommit, get_file_at_commit_definition
from .github_tool_functions.list_branches import ListBranches, list_branches_definition
from .github_tool_functions.get_branch_sha import GetBranchSHA, get_branch_sha_definition
from .github_tool_functions.approve_pull_request import ApprovePullRequest, approve_pull_request_definition
from .github_tool_functions.close_pull_request import ClosePullRequest, close_pull_request_definition
from .github_tool_functions.merge_pull_request import MergePullRequest, merge_pull_request_definition
from .github_tool_functions.delete_branch import DeleteBranch, delete_branch_definition
from .github_tool_functions.get_issue_details import GetIssueDetails, get_issue_details_definition
from .github_tool_functions.create_issue import CreateIssue, create_issue_definition
from .github_tool_functions.list_issues import ListIssues, list_issues_definition
import os
import json
class GitHubTool:
def __init__(self):
@@ -26,27 +8,26 @@ class GitHubTool:
self.repo = os.environ.get("GITHUB_REPOSITORY")
self.current_branch = "main" # Default to main branch
self.instances = {
"read_file": ReadFile(self.base_url, self.token, self.repo, self.current_branch),
"create_branch": CreateBranch(self.base_url, self.token, self.repo, self.current_branch),
"commit_file": CommitFile(self.base_url, self.token, self.repo, self.current_branch),
"create_pull_request": CreatePullRequest(self.base_url, self.token, self.repo, self.current_branch),
"list_files": ListFiles(self.base_url, self.token, self.repo, self.current_branch),
"search_code": SearchCode(self.base_url, self.token, self.repo),
"get_commit_history": GetCommitHistory(self.base_url, self.token, self.repo),
"get_current_branch": GetCurrentBranch(self.current_branch),
"set_current_branch": SetCurrentBranch(self.current_branch),
"get_file_at_commit": GetFileAtCommit(self.base_url, self.token, self.repo),
"list_branches": ListBranches(self.base_url, self.token, self.repo),
"get_branch_sha": GetBranchSHA(self.base_url, self.token, self.repo),
"approve_pull_request": ApprovePullRequest(self.base_url, self.token, self.repo),
"close_pull_request": ClosePullRequest(self.base_url, self.token, self.repo),
"merge_pull_request": MergePullRequest(self.base_url, self.token, self.repo),
"delete_branch": DeleteBranch(self.base_url, self.token, self.repo),
"get_issue_details": GetIssueDetails(self.base_url, self.token, self.repo),
"create_issue": CreateIssue(self.base_url, self.token, self.repo),
"list_issues": ListIssues(self.base_url, self.token, self.repo)
}
self.instances = {}
self.functions = []
self._load_functions()
def _load_functions(self):
function_dir = os.path.join(os.path.dirname(__file__), "github_tool_functions")
for filename in os.listdir(function_dir):
if filename.endswith(".py") and filename != "__init__.py":
function_name = filename[:-3]
module = __import__(f"tools.github_tool_functions.{function_name}", fromlist=[function_name.capitalize()])
class_name = getattr(module, function_name.capitalize())
self.instances[function_name] = class_name(self.base_url, self.token, self.repo, self.current_branch)
with open(os.path.join(function_dir, filename), 'r') as f:
content = f.read()
json_start = content.find('{')
json_end = content.rfind('}') + 1
if json_start != -1 and json_end != -1:
json_def = json.loads(content[json_start:json_end])
self.functions.append(json_def)
def execute(self, function_name, **kwargs):
if function_name in self.instances:
@@ -55,26 +36,5 @@ class GitHubTool:
error_message = f"Unknown function: {function_name}"
return {"error": error_message}
def get_functions(self):
return [
read_file_definition,
create_branch_definition,
commit_file_definition,
create_pull_request_definition,
list_files_definition,
search_code_definition,
get_commit_history_definition,
get_current_branch_definition,
set_current_branch_definition,
get_file_at_commit_definition,
list_branches_definition,
get_branch_sha_definition,
approve_pull_request_definition,
close_pull_request_definition,
merge_pull_request_definition,
delete_branch_definition,
get_issue_details_definition,
create_issue_definition,
list_issues_definition
]
return self.functions