Skip to content

Commit

Permalink
Add github issues and PR tool
Browse files Browse the repository at this point in the history
  • Loading branch information
dhirenmathur committed Feb 12, 2025
1 parent fa48009 commit d6b7680
Show file tree
Hide file tree
Showing 9 changed files with 247 additions and 16 deletions.
18 changes: 14 additions & 4 deletions app/modules/intelligence/agents/agents/blast_radius_agent.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,12 +16,17 @@
from app.modules.intelligence.tools.kg_based_tools.ask_knowledge_graph_queries_tool import (
get_ask_knowledge_graph_queries_tool,
)
from app.modules.intelligence.tools.kg_based_tools.get_code_from_multiple_node_ids_tool import (
GetCodeFromMultipleNodeIdsTool,
get_code_from_multiple_node_ids_tool,
)
from app.modules.intelligence.tools.kg_based_tools.get_nodes_from_tags_tool import (
get_nodes_from_tags_tool,
)
from app.modules.intelligence.tools.web_tools.webpage_extractor_tool import (
webpage_extractor_tool
)
from app.modules.intelligence.tools.web_tools.github_tool import github_tool

class BlastRadiusAgent:
def __init__(self, sql_db, user_id, llm):
Expand All @@ -33,19 +38,24 @@ def __init__(self, sql_db, user_id, llm):
self.ask_knowledge_graph_queries = get_ask_knowledge_graph_queries_tool(
sql_db, user_id
)
self.get_code_from_multiple_node_ids = get_code_from_multiple_node_ids_tool(sql_db, user_id)
if os.getenv("FIRECRAWL_API_KEY"):
self.webpage_extractor_tool = webpage_extractor_tool(sql_db, user_id)
if os.getenv("GITHUB_APP_ID"):
self.github_tool = github_tool(sql_db, user_id)

async def create_agents(self):
blast_radius_agent = Agent(
role="Blast Radius Agent",
goal="Explain the blast radius of the changes made in the code.",
backstory="You are an expert in understanding the impact of code changes on the codebase.",
role="Blast Radius Analyzer",
goal="Analyze the impact of code changes",
backstory="You are an AI expert in analyzing how code changes affect the rest of the codebase.",
tools=[
self.get_code_from_multiple_node_ids,
get_change_detection_tool(self.user_id),
self.get_nodes_from_tags,
self.ask_knowledge_graph_queries,
]+ ([self.webpage_extractor_tool] if os.getenv("FIRECRAWL_API_KEY") else []),
] + ([self.webpage_extractor_tool] if hasattr(self, 'webpage_extractor_tool') else [])
+ ([self.github_tool] if hasattr(self, 'github_tool') else []),
allow_delegation=False,
verbose=True,
llm=self.llm,
Expand Down
7 changes: 5 additions & 2 deletions app/modules/intelligence/agents/agents/code_gen_agent.py
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@
from app.modules.intelligence.tools.web_tools.webpage_extractor_tool import (
webpage_extractor_tool
)
from app.modules.intelligence.tools.web_tools.github_tool import github_tool


class CodeGenerationAgent:
Expand All @@ -54,12 +55,13 @@ def __init__(self, sql_db, llm, mini_llm, user_id):
self.get_file_structure = get_code_file_structure_tool(sql_db)
if os.getenv("FIRECRAWL_API_KEY"):
self.webpage_extractor_tool = webpage_extractor_tool(sql_db, user_id)
if os.getenv("GITHUB_APP_ID"):
self.github_tool = github_tool(sql_db, user_id)
self.llm = llm
self.mini_llm = mini_llm
self.user_id = user_id

async def create_agents(self):
# [Previous create_agents code remains the same until the task description]
code_generator = Agent(
role="Code Generation Agent",
goal="Generate precise, copy-paste ready code modifications that maintain project consistency and handle all dependencies",
Expand All @@ -85,7 +87,8 @@ async def create_agents(self):
self.query_knowledge_graph,
self.get_nodes_from_tags,
self.get_file_structure,
]+ ([self.webpage_extractor_tool] if os.getenv("FIRECRAWL_API_KEY") else []),
] + ([self.webpage_extractor_tool] if hasattr(self, 'webpage_extractor_tool') else [])
+ ([self.github_tool] if hasattr(self, 'github_tool') else []),
allow_delegation=False,
verbose=True,
llm=self.llm,
Expand Down
6 changes: 5 additions & 1 deletion app/modules/intelligence/agents/agents/debug_rag_agent.py
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@
from app.modules.intelligence.tools.web_tools.webpage_extractor_tool import (
webpage_extractor_tool
)
from app.modules.intelligence.tools.web_tools.github_tool import github_tool


class NodeResponse(BaseModel):
Expand Down Expand Up @@ -75,6 +76,8 @@ def __init__(self, sql_db, llm, mini_llm, user_id):
)
if os.getenv("FIRECRAWL_API_KEY"):
self.webpage_extractor_tool = webpage_extractor_tool(sql_db, user_id)
if os.getenv("GITHUB_APP_ID"):
self.github_tool = github_tool(sql_db, user_id)
self.get_code_file_structure = get_code_file_structure_tool(sql_db)
self.llm = llm
self.mini_llm = mini_llm
Expand Down Expand Up @@ -104,7 +107,8 @@ async def create_agents(self):
self.get_code_from_probable_node_name,
self.get_node_neighbours_from_node_id,
self.get_code_file_structure,
]+ ([self.webpage_extractor_tool] if os.getenv("FIRECRAWL_API_KEY") else []),
] + ([self.webpage_extractor_tool] if hasattr(self, 'webpage_extractor_tool') else [])
+ ([self.github_tool] if hasattr(self, 'github_tool') else []),
allow_delegation=False,
verbose=True,
llm=self.llm,
Expand Down
14 changes: 10 additions & 4 deletions app/modules/intelligence/agents/agents/integration_test_agent.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
from app.modules.intelligence.tools.web_tools.webpage_extractor_tool import (
webpage_extractor_tool
)
from app.modules.intelligence.tools.web_tools.github_tool import github_tool


class IntegrationTestAgent:
Expand All @@ -37,17 +38,26 @@ def __init__(self, sql_db, llm, user_id):
)
if os.getenv("FIRECRAWL_API_KEY"):
self.webpage_extractor_tool = webpage_extractor_tool(sql_db, user_id)
if os.getenv("GITHUB_APP_ID"):
self.github_tool = github_tool(sql_db, user_id)
self.llm = llm
self.max_iterations = os.getenv("MAX_ITER", 15)

async def create_agents(self):
tools = [
self.get_code_from_probable_node_name,
self.get_code_from_multiple_node_ids,
] + ([self.webpage_extractor_tool] if hasattr(self, 'webpage_extractor_tool') else []) \
+ ([self.github_tool] if hasattr(self, 'github_tool') else [])

integration_test_agent = Agent(
role="Integration Test Writer",
goal="Create a comprehensive integration test suite for the provided codebase. Analyze the code, determine the appropriate testing language and framework, and write tests that cover all major integration points.",
backstory="You are an expert in writing unit tests for code using latest features of the popular testing libraries for the given programming language.",
allow_delegation=False,
verbose=True,
llm=self.llm,
tools=tools,
)

return integration_test_agent
Expand Down Expand Up @@ -151,10 +161,6 @@ async def create_tasks(
expected_output=f"Write COMPLETE CODE for integration tests for each node based on the test plan. Ensure that your output ALWAYS follows the structure outlined in the following pydantic model:\n{self.TestAgentResponse.model_json_schema()}",
agent=integration_test_agent,
output_pydantic=self.TestAgentResponse,
tools=[
self.get_code_from_probable_node_name,
self.get_code_from_multiple_node_ids,
]+ ([self.webpage_extractor_tool] if os.getenv("FIRECRAWL_API_KEY") else []),
async_execution=True,
)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@
from app.modules.intelligence.tools.web_tools.webpage_extractor_tool import (
webpage_extractor_tool
)
from app.modules.intelligence.tools.web_tools.github_tool import github_tool


class DesignStep(BaseModel):
Expand Down Expand Up @@ -82,6 +83,8 @@ def __init__(self, sql_db, llm, user_id):
)
if os.getenv("FIRECRAWL_API_KEY"):
self.webpage_extractor_tool = webpage_extractor_tool(sql_db, user_id)
if os.getenv("GITHUB_APP_ID"):
self.github_tool = github_tool(sql_db, user_id)

async def create_agents(self):
codebase_analyst = Agent(
Expand All @@ -96,10 +99,12 @@ async def create_agents(self):
self.get_code_from_node_id,
self.get_code_from_probable_node_name,
self.get_code_file_structure,
]+ ([self.webpage_extractor_tool] if os.getenv("FIRECRAWL_API_KEY") else []),
] + ([self.webpage_extractor_tool] if hasattr(self, 'webpage_extractor_tool') else [])
+ ([self.github_tool] if hasattr(self, 'github_tool') else []),
allow_delegation=False,
verbose=True,
llm=self.llm,
max_iter=self.max_iter,
)

design_planner = Agent(
Expand Down
6 changes: 5 additions & 1 deletion app/modules/intelligence/agents/agents/rag_agent.py
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@
from app.modules.intelligence.tools.web_tools.webpage_extractor_tool import (
webpage_extractor_tool
)
from app.modules.intelligence.tools.web_tools.github_tool import github_tool


class NodeResponse(BaseModel):
Expand Down Expand Up @@ -76,6 +77,8 @@ def __init__(self, sql_db, llm, mini_llm, user_id):
self.get_code_file_structure = get_code_file_structure_tool(sql_db)
if os.getenv("FIRECRAWL_API_KEY"):
self.webpage_extractor_tool = webpage_extractor_tool(sql_db, user_id)
if os.getenv("GITHUB_APP_ID"):
self.github_tool = github_tool(sql_db, user_id)
self.llm = llm
self.mini_llm = mini_llm
self.user_id = user_id
Expand Down Expand Up @@ -104,7 +107,8 @@ async def create_agents(self):
self.get_code_from_probable_node_name,
self.get_node_neighbours_from_node_id,
self.get_code_file_structure,
]+ ([self.webpage_extractor_tool] if os.getenv("FIRECRAWL_API_KEY") else []),
] + ([self.webpage_extractor_tool] if hasattr(self, 'webpage_extractor_tool') else [])
+ ([self.github_tool] if hasattr(self, 'github_tool') else []),
allow_delegation=False,
verbose=True,
llm=self.llm,
Expand Down
10 changes: 7 additions & 3 deletions app/modules/intelligence/agents/agents/unit_test_agent.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
from app.modules.intelligence.tools.web_tools.webpage_extractor_tool import (
webpage_extractor_tool
)
from app.modules.intelligence.tools.web_tools.github_tool import github_tool


class UnitTestAgent:
Expand All @@ -34,20 +35,23 @@ def __init__(self, sql_db, llm, user_id):
)
if os.getenv("FIRECRAWL_API_KEY"):
self.webpage_extractor_tool = webpage_extractor_tool(sql_db, user_id)
if os.getenv("GITHUB_APP_ID"):
self.github_tool = github_tool(sql_db, user_id)

async def create_agents(self):
unit_test_agent = Agent(
role="Test Plan and Unit Test Expert",
goal="Create test plans and write unit tests based on user requirements",
backstory="You are a seasoned AI test engineer specializing in creating robust test plans and unit tests. You aim to assist users effectively in generating and refining test plans and unit tests, ensuring they are comprehensive and tailored to the user's project requirements.",
tools=[
self.get_code_from_probable_node_name,
self.get_code_from_node_id,
]+ ([self.webpage_extractor_tool] if os.getenv("FIRECRAWL_API_KEY") else []),
self.get_code_from_probable_node_name,
] + ([self.webpage_extractor_tool] if hasattr(self, 'webpage_extractor_tool') else [])
+ ([self.github_tool] if hasattr(self, 'github_tool') else []),
allow_delegation=False,
verbose=True,
llm=self.llm,
max_iter=self.max_iterations,
max_iterations=self.max_iterations,
)

return unit_test_agent
Expand Down
5 changes: 5 additions & 0 deletions app/modules/intelligence/tools/tool_service.py
Original file line number Diff line number Diff line change
Expand Up @@ -37,13 +37,15 @@
)
from app.modules.intelligence.tools.tool_schema import ToolInfo
from app.modules.intelligence.tools.web_tools.webpage_extractor_tool import webpage_extractor_tool
from app.modules.intelligence.tools.web_tools.github_tool import github_tool


class ToolService:
def __init__(self, db: Session, user_id: str):
self.db = db
self.user_id = user_id
self.webpage_extractor_tool = webpage_extractor_tool(db, user_id)
self.github_tool = github_tool(db, user_id)
self.tools = self._initialize_tools()

def _initialize_tools(self) -> Dict[str, Any]:
Expand Down Expand Up @@ -71,6 +73,9 @@ def _initialize_tools(self) -> Dict[str, Any]:

if self.webpage_extractor_tool:
tools["webpage_extractor"] = self.webpage_extractor_tool

if self.github_tool:
tools["github_tool"] = self.github_tool

return tools

Expand Down
Loading

0 comments on commit d6b7680

Please sign in to comment.