Spaces:
Build error
Build error
kamaleswar Mohanta commited on
Commit ·
6151dbe
1
Parent(s): bef665b
Refactor feedback processing and state management in SdlcNode class
Browse files- src/langgraphagenticai/nodes/__pycache__/sdlc_node.cpython-312.pyc +0 -0
- src/langgraphagenticai/nodes/sdlc_node.py +25 -54
- src/langgraphagenticai/state/__pycache__/state.cpython-312.pyc +0 -0
- src/langgraphagenticai/state/state.py +3 -0
- src/langgraphagenticai/ui/streamlitui/__pycache__/display_result_sdlc.cpython-312.pyc +0 -0
src/langgraphagenticai/nodes/__pycache__/sdlc_node.cpython-312.pyc
CHANGED
|
Binary files a/src/langgraphagenticai/nodes/__pycache__/sdlc_node.cpython-312.pyc and b/src/langgraphagenticai/nodes/__pycache__/sdlc_node.cpython-312.pyc differ
|
|
|
src/langgraphagenticai/nodes/sdlc_node.py
CHANGED
|
@@ -189,51 +189,30 @@ class SdlcNode:
|
|
| 189 |
@log_entry_exit
|
| 190 |
def process_feedback(self, state: State) -> dict:
|
| 191 |
"""
|
| 192 |
-
Process user feedback
|
| 193 |
Only { "current_stage": ["accept"] } ends the process.
|
| 194 |
"""
|
| 195 |
logger.info(f"--- Entering process_feedback ---")
|
| 196 |
-
logger.info(f"Input state: {state.to_dict()
|
| 197 |
-
logger.info(f"State type: {type(state)}")
|
| 198 |
-
|
| 199 |
|
| 200 |
-
|
| 201 |
-
|
| 202 |
-
current_stage = state.get("current_stage") if isinstance(state, dict) else state.current_stage
|
| 203 |
-
raw_feedback = state.get("feedback", {}) if isinstance(state, dict) else getattr(state, "feedback", {})
|
| 204 |
|
| 205 |
-
|
| 206 |
-
current_stage_value = current_stage
|
| 207 |
-
else:
|
| 208 |
-
current_stage_value = current_stage.value if hasattr(current_stage, "value") else str(current_stage)
|
| 209 |
|
| 210 |
-
logger.info(f"Processing feedback for stage: {
|
| 211 |
-
logger.info(f"
|
| 212 |
|
| 213 |
-
|
| 214 |
-
|
| 215 |
-
|
| 216 |
-
isinstance(raw_feedback, dict)
|
| 217 |
-
and current_stage_value in raw_feedback
|
| 218 |
-
and isinstance(raw_feedback[current_stage_value], list)
|
| 219 |
-
and raw_feedback[current_stage_value]
|
| 220 |
-
and raw_feedback[current_stage_value][-1].strip().lower() == "accept"
|
| 221 |
-
):
|
| 222 |
-
logger.info(f"Feedback for stage '{current_stage_value}' is ACCEPT. Ending flow.")
|
| 223 |
-
if isinstance(state, dict):
|
| 224 |
-
state["feedback_decision"] = "accept"
|
| 225 |
-
else:
|
| 226 |
-
state.feedback_decision = "accept"
|
| 227 |
else:
|
| 228 |
-
logger.info(f"Feedback for stage '{
|
| 229 |
-
|
| 230 |
-
state["feedback_decision"] = "reject"
|
| 231 |
-
else:
|
| 232 |
-
state.feedback_decision = "reject"
|
| 233 |
|
| 234 |
return_value = {
|
| 235 |
-
"feedback_decision": state
|
| 236 |
-
"feedback":
|
| 237 |
}
|
| 238 |
logger.info(f"Returning from process_feedback: {return_value}")
|
| 239 |
logger.info(f"--- Exiting process_feedback ---")
|
|
@@ -242,34 +221,26 @@ class SdlcNode:
|
|
| 242 |
@log_entry_exit
|
| 243 |
def feedback_route(self, state: State) -> str:
|
| 244 |
"""Routes based on the feedback decision stored in the state."""
|
| 245 |
-
logger.info(f"
|
| 246 |
-
logger.info(f"Routing feedback. Current state includes feedback_decision: {hasattr(state, 'feedback_decision')}")
|
| 247 |
-
|
| 248 |
-
logger.info(f"Full state content received by feedback_route: {state.to_dict() if isinstance(state, State) else state}")
|
| 249 |
|
| 250 |
if not isinstance(state, State):
|
| 251 |
-
logger.error(f"
|
| 252 |
-
logger.info(f"--- Exiting feedback_route (routing: reject due to type error) ---")
|
| 253 |
-
|
| 254 |
return "reject"
|
| 255 |
|
| 256 |
-
|
| 257 |
-
feedback_decision = state.feedback_decision
|
| 258 |
-
logger.info(f"Feedback decision read from state object: {feedback_decision}")
|
| 259 |
-
|
| 260 |
-
if feedback_decision == "accept":
|
| 261 |
logger.info("Feedback accepted. Routing to next stage.")
|
| 262 |
-
logger.info(f"--- Exiting feedback_route (routing: accept) ---")
|
| 263 |
-
state.feedback_decision = None # Reset feedback decision after routing
|
| 264 |
next_stage = state.get_next_stage()
|
| 265 |
-
if next_stage
|
| 266 |
state.update_stage(next_stage)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 267 |
return "accept"
|
| 268 |
else:
|
| 269 |
-
|
| 270 |
-
|
| 271 |
-
logger.info(f"--- Exiting feedback_route (routing: reject) ---")
|
| 272 |
-
state.feedback_decision = None # Reset feedback decision after routing
|
| 273 |
return "reject"
|
| 274 |
|
| 275 |
|
|
|
|
| 189 |
@log_entry_exit
|
| 190 |
def process_feedback(self, state: State) -> dict:
|
| 191 |
"""
|
| 192 |
+
Process user feedback and update state with decision.
|
| 193 |
Only { "current_stage": ["accept"] } ends the process.
|
| 194 |
"""
|
| 195 |
logger.info(f"--- Entering process_feedback ---")
|
| 196 |
+
logger.info(f"Input state: {state.to_dict()}")
|
|
|
|
|
|
|
| 197 |
|
| 198 |
+
current_stage = state.current_stage
|
| 199 |
+
feedback = state.get_last_feedback_for_stage(current_stage)
|
|
|
|
|
|
|
| 200 |
|
| 201 |
+
state.add_feedback(current_stage, str(feedback))
|
|
|
|
|
|
|
|
|
|
| 202 |
|
| 203 |
+
logger.info(f"Processing feedback for stage: {current_stage}")
|
| 204 |
+
logger.info(f"Feedback received: {feedback}")
|
| 205 |
|
| 206 |
+
if feedback and feedback.strip().lower() == "accept":
|
| 207 |
+
logger.info(f"Feedback for stage '{current_stage}' is ACCEPT. Ending flow.")
|
| 208 |
+
state.feedback_decision = "accept"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 209 |
else:
|
| 210 |
+
logger.info(f"Feedback for stage '{current_stage}' is not accept. Looping back. Feedback is: {feedback}")
|
| 211 |
+
state.feedback_decision = "reject"
|
|
|
|
|
|
|
|
|
|
| 212 |
|
| 213 |
return_value = {
|
| 214 |
+
"feedback_decision": state.feedback_decision,
|
| 215 |
+
"feedback": feedback
|
| 216 |
}
|
| 217 |
logger.info(f"Returning from process_feedback: {return_value}")
|
| 218 |
logger.info(f"--- Exiting process_feedback ---")
|
|
|
|
| 221 |
@log_entry_exit
|
| 222 |
def feedback_route(self, state: State) -> str:
|
| 223 |
"""Routes based on the feedback decision stored in the state."""
|
| 224 |
+
logger.info(f"Entering feedback_route with decision: {state.feedback_decision}")
|
|
|
|
|
|
|
|
|
|
| 225 |
|
| 226 |
if not isinstance(state, State):
|
| 227 |
+
logger.error(f"Invalid state type: {type(state)}. Routing to reject.")
|
|
|
|
|
|
|
| 228 |
return "reject"
|
| 229 |
|
| 230 |
+
if state.feedback_decision == "accept":
|
|
|
|
|
|
|
|
|
|
|
|
|
| 231 |
logger.info("Feedback accepted. Routing to next stage.")
|
|
|
|
|
|
|
| 232 |
next_stage = state.get_next_stage()
|
| 233 |
+
if next_stage:
|
| 234 |
state.update_stage(next_stage)
|
| 235 |
+
logger.info(f"Updated state to next stage: {next_stage}")
|
| 236 |
+
else:
|
| 237 |
+
logger.info("No next stage available. Ending process.")
|
| 238 |
+
|
| 239 |
+
state.clear_feedback_decision()
|
| 240 |
return "accept"
|
| 241 |
else:
|
| 242 |
+
logger.info("Feedback rejected. Routing back for revision.")
|
| 243 |
+
state.clear_feedback_decision()
|
|
|
|
|
|
|
| 244 |
return "reject"
|
| 245 |
|
| 246 |
|
src/langgraphagenticai/state/__pycache__/state.cpython-312.pyc
CHANGED
|
Binary files a/src/langgraphagenticai/state/__pycache__/state.cpython-312.pyc and b/src/langgraphagenticai/state/__pycache__/state.cpython-312.pyc differ
|
|
|
src/langgraphagenticai/state/state.py
CHANGED
|
@@ -119,6 +119,9 @@ class SDLCState(BaseModel):
|
|
| 119 |
"""Convert state to dictionary."""
|
| 120 |
return self.model_dump()
|
| 121 |
|
|
|
|
|
|
|
|
|
|
| 122 |
|
| 123 |
def update_stage(self, new_stage: SDLCStages):
|
| 124 |
"""
|
|
|
|
| 119 |
"""Convert state to dictionary."""
|
| 120 |
return self.model_dump()
|
| 121 |
|
| 122 |
+
def clear_feedback_decision(self):
|
| 123 |
+
"""Clear the feedback decision."""
|
| 124 |
+
self.feedback_decision = None
|
| 125 |
|
| 126 |
def update_stage(self, new_stage: SDLCStages):
|
| 127 |
"""
|
src/langgraphagenticai/ui/streamlitui/__pycache__/display_result_sdlc.cpython-312.pyc
CHANGED
|
Binary files a/src/langgraphagenticai/ui/streamlitui/__pycache__/display_result_sdlc.cpython-312.pyc and b/src/langgraphagenticai/ui/streamlitui/__pycache__/display_result_sdlc.cpython-312.pyc differ
|
|
|