Pedro commited on
Commit
3a4ffac
·
1 Parent(s): 79f3c92

add coder node structure and update graph

Browse files
src/multi_agent_sdlc/graph.py CHANGED
@@ -1,17 +1,20 @@
1
  from langgraph.graph import END, START, StateGraph
2
  from .config import create_llm
3
- from .nodes import create_planner_node
4
  from .state import DevState
5
 
6
 
7
  def build_graph():
8
  llm = create_llm()
9
  planner_node = create_planner_node(llm)
 
10
 
11
  builder = StateGraph(DevState)
12
  builder.add_node("plan", planner_node)
 
13
 
14
  builder.add_edge(START, "plan")
15
- builder.add_edge("plan", END)
 
16
 
17
  return builder.compile()
 
1
  from langgraph.graph import END, START, StateGraph
2
  from .config import create_llm
3
+ from .nodes import create_planner_node, create_coder_node
4
  from .state import DevState
5
 
6
 
7
  def build_graph():
8
  llm = create_llm()
9
  planner_node = create_planner_node(llm)
10
+ coder_node = create_coder_node(llm)
11
 
12
  builder = StateGraph(DevState)
13
  builder.add_node("plan", planner_node)
14
+ builder.add_node("code", coder_node)
15
 
16
  builder.add_edge(START, "plan")
17
+ builder.add_edge("plan", "code")
18
+ builder.add_edge("code", END)
19
 
20
  return builder.compile()
src/multi_agent_sdlc/main.py CHANGED
@@ -8,6 +8,7 @@ def run() -> None:
8
  initial_state: DevState = {
9
  "request": "Build a calculator app, all end user interactions happens via the terminal.",
10
  "plan": None,
 
11
  }
12
 
13
  result = graph.invoke(initial_state)
 
8
  initial_state: DevState = {
9
  "request": "Build a calculator app, all end user interactions happens via the terminal.",
10
  "plan": None,
11
+ "project_directory": "",
12
  }
13
 
14
  result = graph.invoke(initial_state)
src/multi_agent_sdlc/models.py CHANGED
@@ -33,9 +33,6 @@ class Task(BaseModel):
33
 
34
 
35
  class DevelopmentPlan(BaseModel):
36
- title: str = Field(
37
- description="Short title of the project, only three words at most"
38
- )
39
  project_id: str = Field(
40
  description=(
41
  "Unique lowercase kebab-case identifier used as the project "
 
33
 
34
 
35
  class DevelopmentPlan(BaseModel):
 
 
 
36
  project_id: str = Field(
37
  description=(
38
  "Unique lowercase kebab-case identifier used as the project "
src/multi_agent_sdlc/nodes.py CHANGED
@@ -49,6 +49,20 @@ def create_planner_node(llm: BaseChatModel):
49
  return {
50
  "request": user_request,
51
  "plan": plan,
 
52
  }
53
 
54
  return planner_node
 
 
 
 
 
 
 
 
 
 
 
 
 
 
49
  return {
50
  "request": user_request,
51
  "plan": plan,
52
+ "project_directory": str(project_directory),
53
  }
54
 
55
  return planner_node
56
+
57
+
58
+ def create_coder_node(llm: BaseChatModel):
59
+ structured_llm = llm.with_structured_output(DevelopmentPlan).with_retry(
60
+ retry_if_exception_type=(Exception,),
61
+ stop_after_attempt=3,
62
+ )
63
+
64
+ def coder_node(state: DevState) -> DevState:
65
+ user_request = state["request"]
66
+ return {}
67
+
68
+ return coder_node
src/multi_agent_sdlc/state.py CHANGED
@@ -1,7 +1,9 @@
 
1
  from typing import Optional, TypedDict
2
  from .models import DevelopmentPlan
3
 
4
 
5
  class DevState(TypedDict):
6
- request: str # original user request
7
  plan: Optional[DevelopmentPlan]
 
 
1
+ from typing import NotRequired
2
  from typing import Optional, TypedDict
3
  from .models import DevelopmentPlan
4
 
5
 
6
  class DevState(TypedDict):
7
+ request: str
8
  plan: Optional[DevelopmentPlan]
9
+ project_directory: NotRequired[str]