Spaces:
Running
Running
File size: 1,589 Bytes
a9561a2 9f54862 ee30fd7 9f54862 a9561a2 9f54862 a9561a2 9f54862 a9561a2 9f54862 a9561a2 9f54862 a9561a2 9f54862 a9561a2 9f54862 a9561a2 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 | from multi_agent_sdlc.agents.planner.model import planner_llm
from multi_agent_sdlc.agents.planner.prompt import PLANNER_SYSTEM_RULES
from multi_agent_sdlc.agents.planner.exporter import export_plan_to_pdf
from multi_agent_sdlc.agents.planner.formatter import format_plan
from multi_agent_sdlc.state import DevState
from multi_agent_sdlc.config import SANDBOX_ROOT
from re import fullmatch
from langchain_core.messages import HumanMessage, SystemMessage
from pathlib import Path
def create_project_directory(project_id: str) -> Path:
"Create project folder inside 'sandbox', e.g: terminal-calculator"
if not fullmatch(r"[a-z0-9]+(?:-[a-z0-9]+)*", project_id):
raise ValueError("project_id must use lowercase kebab-case.")
project_directory = Path(SANDBOX_ROOT) / project_id
project_directory.mkdir(parents=True, exist_ok=True)
return project_directory
def planner_node(state: DevState) -> DevState:
"""Define the planner node, which is responsible for planning the application requested by the user."""
user_request = state["request"]
messages = [
SystemMessage(content=PLANNER_SYSTEM_RULES),
HumanMessage(content=user_request),
]
plan = planner_llm.invoke(messages)
project_directory = create_project_directory(plan.project_id)
plan_text = format_plan(plan)
export_plan_to_pdf(
text=plan_text,
output_path=project_directory / "development-plan.pdf",
)
return {
"request": user_request,
"plan": plan,
"project_directory": str(project_directory),
}
|