first push
This commit is contained in:
56
backend/app/graph/nodes.py
Normal file
56
backend/app/graph/nodes.py
Normal file
@@ -0,0 +1,56 @@
|
||||
from app.agents.pm_agent import run_pm_agent
|
||||
from app.agents.dev_agent import run_dev_agent
|
||||
from app.agents.qa_agent import run_qa_agent
|
||||
from app.services.retrieval_service import find_existing_project
|
||||
from app.graph.state import WorkflowState
|
||||
|
||||
async def pm_node(state: WorkflowState):
|
||||
prompt = state["user_input"]
|
||||
if state.get("user_feedback"):
|
||||
prompt += f"\nRetour utilisateur pour correction : {state['user_feedback']}"
|
||||
|
||||
spec = await run_pm_agent(prompt)
|
||||
return {
|
||||
"spec": spec.model_dump(),
|
||||
"status": "spec_ready",
|
||||
"loop_count": 0,
|
||||
}
|
||||
|
||||
async def retrieval_node(state: WorkflowState):
|
||||
existing_project = await find_existing_project(state["user_input"])
|
||||
return {
|
||||
"existing_project": existing_project,
|
||||
"status": "existing_found" if existing_project else "no_existing_project",
|
||||
}
|
||||
|
||||
async def dev_node(state: WorkflowState):
|
||||
qa_logs = state.get("qa_result", {}).get("logs", "") if state.get("qa_result") else None
|
||||
|
||||
generated_code = await run_dev_agent(state["spec"], qa_feedback=qa_logs)
|
||||
return {
|
||||
"generated_code": generated_code,
|
||||
"status": "code_generated",
|
||||
}
|
||||
|
||||
async def qa_node(state: WorkflowState):
|
||||
qa_result = await run_qa_agent(state["generated_code"])
|
||||
current_loops = state.get("loop_count", 0)
|
||||
|
||||
is_success = True
|
||||
|
||||
clean_qa_result = {"success": is_success, "raw": qa_result}
|
||||
|
||||
return {
|
||||
"qa_result": clean_qa_result,
|
||||
"loop_count": current_loops if is_success else current_loops + 1,
|
||||
"status": "qa_done",
|
||||
}
|
||||
|
||||
async def human_review_node(state: WorkflowState):
|
||||
print("[Human Review] Passage en mode automatique (Mock)...")
|
||||
|
||||
return {
|
||||
"existing_project_approved": True,
|
||||
"is_completed": True,
|
||||
"status": "approved_by_human"
|
||||
}
|
||||
Reference in New Issue
Block a user