Spaces:
Build error
Build error
Icamtu commited on
Commit ·
4fc4e2e
1
Parent(s): f91405c
working on _resume_sdlc_graph
Browse files- src/langgraphagenticai/nodes/__pycache__/sdlc_node.cpython-312.pyc +0 -0
- src/langgraphagenticai/nodes/sdlc_node.py +53 -58
- src/langgraphagenticai/notebook/__pycache__/sdlc.cpython-312.pyc +0 -0
- src/langgraphagenticai/ui/streamlitui/__pycache__/display_result_sdlc.cpython-312.pyc +0 -0
- src/langgraphagenticai/ui/streamlitui/display_result_sdlc.py +8 -8
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
|
@@ -138,69 +138,64 @@ class SdlcNode:
|
|
| 138 |
@log_entry_exit
|
| 139 |
def process_feedback(self, state: State) -> dict:
|
| 140 |
"""Process user feedback by adding it to the state."""
|
| 141 |
-
current_stage_value =
|
| 142 |
-
|
| 143 |
-
|
| 144 |
-
|
| 145 |
-
|
| 146 |
-
|
| 147 |
-
|
| 148 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 149 |
else:
|
| 150 |
-
|
| 151 |
-
|
| 152 |
-
|
| 153 |
-
|
| 154 |
-
|
| 155 |
-
feedback_data = state.get("feedback") # Changed "feedback_input" to "feedback"
|
| 156 |
-
logger.info(f"Feedback data received in process_feedback: {feedback_data}")
|
| 157 |
-
|
| 158 |
-
# Process the feedback - store it in the state, associated with the current stage
|
| 159 |
-
if feedback_data is not None:
|
| 160 |
-
decision = feedback_data.get("approved")
|
| 161 |
-
feedback_text = feedback_data.get("comments")
|
| 162 |
-
|
| 163 |
-
if decision is False and feedback_text:
|
| 164 |
-
# Use the actual current stage for feedback
|
| 165 |
-
stage_for_feedback_value = current_stage_value
|
| 166 |
-
|
| 167 |
-
if isinstance(state, State) and hasattr(state, 'add_feedback'):
|
| 168 |
-
state.add_feedback(SDLCStages(stage_for_feedback_value), feedback_text) # Convert back to enum
|
| 169 |
-
elif isinstance(state, dict):
|
| 170 |
-
if 'feedback' not in state:
|
| 171 |
-
state['feedback'] = {}
|
| 172 |
-
if stage_for_feedback_value not in state['feedback']:
|
| 173 |
-
state['feedback'][stage_for_feedback_value] = []
|
| 174 |
-
state['feedback'][stage_for_feedback_value].append(feedback_text)
|
| 175 |
-
else:
|
| 176 |
-
logger.error("State object does not have 'add_feedback' method and is not a dict.")
|
| 177 |
-
|
| 178 |
-
logger.info(f"Feedback added to graph state for stage: {stage_for_feedback_value} - Rejected.")
|
| 179 |
-
|
| 180 |
-
return state
|
| 181 |
|
| 182 |
@log_entry_exit
|
| 183 |
def feedbackRoute(self, state: State) -> str:
|
| 184 |
"""Route feedback based on SDLCState feedback format (Dict[str, List[str]]).
|
| 185 |
Accept if feedback for current stage is empty or not present, reject if there are comments.
|
| 186 |
"""
|
| 187 |
-
|
| 188 |
-
|
| 189 |
-
|
| 190 |
-
|
| 191 |
-
|
| 192 |
-
|
| 193 |
-
|
| 194 |
-
|
| 195 |
-
|
| 196 |
-
|
| 197 |
-
|
| 198 |
-
|
| 199 |
-
|
| 200 |
-
|
| 201 |
-
|
| 202 |
-
|
| 203 |
-
return "accept"
|
| 204 |
else:
|
| 205 |
-
logger.
|
| 206 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 138 |
@log_entry_exit
|
| 139 |
def process_feedback(self, state: State) -> dict:
|
| 140 |
"""Process user feedback by adding it to the state."""
|
| 141 |
+
current_stage_value = state.current_stage.value if isinstance(state.current_stage, SDLCStages) else state.current_stage
|
| 142 |
+
logger.debug(f"Processing feedback for stage: {current_stage_value}")
|
| 143 |
+
|
| 144 |
+
raw_feedback = state.feedback
|
| 145 |
+
logger.debug(f"Raw feedback data: {raw_feedback}")
|
| 146 |
+
|
| 147 |
+
# Only accept if feedback is {current_stage: ["accept"]}
|
| 148 |
+
if (
|
| 149 |
+
isinstance(raw_feedback, dict)
|
| 150 |
+
and current_stage_value in raw_feedback
|
| 151 |
+
and isinstance(raw_feedback[current_stage_value], list)
|
| 152 |
+
and raw_feedback[current_stage_value]
|
| 153 |
+
and raw_feedback[current_stage_value][-1].strip().lower() == "accept"
|
| 154 |
+
):
|
| 155 |
+
state.feedback_decision = "accept"
|
| 156 |
+
return {
|
| 157 |
+
"feedback_decision": "accept",
|
| 158 |
+
"feedback": state.feedback
|
| 159 |
+
}
|
| 160 |
else:
|
| 161 |
+
state.feedback_decision = "reject"
|
| 162 |
+
return {
|
| 163 |
+
"feedback_decision": "reject",
|
| 164 |
+
"feedback": state.feedback
|
| 165 |
+
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 166 |
|
| 167 |
@log_entry_exit
|
| 168 |
def feedbackRoute(self, state: State) -> str:
|
| 169 |
"""Route feedback based on SDLCState feedback format (Dict[str, List[str]]).
|
| 170 |
Accept if feedback for current stage is empty or not present, reject if there are comments.
|
| 171 |
"""
|
| 172 |
+
logger.debug(f"Routing feedback with state type: {type(state)}")
|
| 173 |
+
logger.debug(f"State content: {state}")
|
| 174 |
+
|
| 175 |
+
feedback_decision = None
|
| 176 |
+
|
| 177 |
+
# If state is a dict with feedback_decision
|
| 178 |
+
if isinstance(state, dict) and "feedback_decision" in state:
|
| 179 |
+
feedback_decision = state["feedback_decision"]
|
| 180 |
+
logger.debug(f"Found feedback_decision in state dict: {feedback_decision}")
|
| 181 |
+
# If state is a SDLCState object
|
| 182 |
+
elif isinstance(state, state.SDLCState):
|
| 183 |
+
logger.debug(f"State is SDLCState object")
|
| 184 |
+
if hasattr(state, "feedback_decision"):
|
| 185 |
+
feedback_decision = state.feedback_decision
|
| 186 |
+
logger.debug(f"Found feedback_decision as attribute: {feedback_decision}")
|
| 187 |
+
# Try to get from node output
|
|
|
|
| 188 |
else:
|
| 189 |
+
logger.debug(f"State is neither dict nor SDLCState, trying alternative methods")
|
| 190 |
+
try:
|
| 191 |
+
if hasattr(state, "get"):
|
| 192 |
+
node_output = state.get("ProcessFeedback", {})
|
| 193 |
+
logger.debug(f"ProcessFeedback node output: {node_output}")
|
| 194 |
+
feedback_decision = node_output.get("feedback_decision")
|
| 195 |
+
logger.debug(f"Found feedback_decision in node output: {feedback_decision}")
|
| 196 |
+
except Exception as e:
|
| 197 |
+
logger.error(f"Error extracting feedback_decision: {e}")
|
| 198 |
+
|
| 199 |
+
route = "accept" if feedback_decision == "accept" else "reject"
|
| 200 |
+
logger.debug(f"Final routing decision: {route}")
|
| 201 |
+
return route
|
src/langgraphagenticai/notebook/__pycache__/sdlc.cpython-312.pyc
CHANGED
|
Binary files a/src/langgraphagenticai/notebook/__pycache__/sdlc.cpython-312.pyc and b/src/langgraphagenticai/notebook/__pycache__/sdlc.cpython-312.pyc differ
|
|
|
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
|
|
|
src/langgraphagenticai/ui/streamlitui/display_result_sdlc.py
CHANGED
|
@@ -172,7 +172,7 @@ class DisplaySdlcResult:
|
|
| 172 |
|
| 173 |
# Update session state with the new feedback structure
|
| 174 |
if current_stage not in st.session_state["feedback"]:
|
| 175 |
-
st.session_state["feedback"][current_stage] = []
|
| 176 |
|
| 177 |
if not is_approved:
|
| 178 |
st.session_state["feedback"][current_stage].append(comments)
|
|
@@ -350,13 +350,13 @@ class DisplaySdlcResult:
|
|
| 350 |
feedback_data = st.session_state.get("feedback")
|
| 351 |
logger.info(f"Feedback data read from session state: {feedback_data}")
|
| 352 |
|
| 353 |
-
# Clear feedback from session state BEFORE calling stream
|
| 354 |
-
if "feedback" in st.session_state:
|
| 355 |
-
|
| 356 |
-
|
| 357 |
-
|
| 358 |
-
|
| 359 |
-
|
| 360 |
|
| 361 |
# Prepare input data for the resume call
|
| 362 |
resume_input_data = {}
|
|
|
|
| 172 |
|
| 173 |
# Update session state with the new feedback structure
|
| 174 |
if current_stage not in st.session_state["feedback"]:
|
| 175 |
+
st.session_state["feedback"][current_stage] = ["accept"]
|
| 176 |
|
| 177 |
if not is_approved:
|
| 178 |
st.session_state["feedback"][current_stage].append(comments)
|
|
|
|
| 350 |
feedback_data = st.session_state.get("feedback")
|
| 351 |
logger.info(f"Feedback data read from session state: {feedback_data}")
|
| 352 |
|
| 353 |
+
# # Clear feedback from session state BEFORE calling stream
|
| 354 |
+
# if "feedback" in st.session_state:
|
| 355 |
+
# try:
|
| 356 |
+
# del st.session_state["feedback"]
|
| 357 |
+
# logger.info("Feedback cleared from session state before resuming graph.")
|
| 358 |
+
# except KeyError:
|
| 359 |
+
# logger.warning("Attempted to delete 'feedback' from session state, but it was already gone.")
|
| 360 |
|
| 361 |
# Prepare input data for the resume call
|
| 362 |
resume_input_data = {}
|