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 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 = "N/A"
142
- current_stage_obj = state.get('current_stage')
143
-
144
- # Determine the current stage
145
- if isinstance(current_stage_obj, SDLCStages):
146
- current_stage_value = current_stage_obj.value
147
- elif isinstance(current_stage_obj, str):
148
- current_stage_value = current_stage_obj
 
 
 
 
 
 
 
 
 
 
 
149
  else:
150
- logger.warning("Current stage is not an SDLCStages enum or a string. Using 'N/A'.")
151
-
152
- logger.info(f"Processing feedback for stage: {current_stage_value}")
153
-
154
- # Read feedback from the graph state
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
- # Get current stage as string
188
- current_stage = state.get('current_stage')
189
- if hasattr(current_stage, 'value'):
190
- current_stage = current_stage.value
191
- elif isinstance(current_stage, str):
192
- pass
193
- else:
194
- current_stage = str(current_stage)
195
-
196
- feedback_dict = state.get('feedback', {})
197
- feedback_list = feedback_dict.get(current_stage, [])
198
-
199
- logger.info(f"feedbackRoute: current_stage={current_stage}, feedback_dict={feedback_dict}")
200
-
201
- if not feedback_list:
202
- logger.info(f"Feedback for stage '{current_stage}' is empty or not present. Accepting.")
203
- return "accept"
204
  else:
205
- logger.info(f"Feedback for stage '{current_stage}' present: {feedback_list}. Rejecting.")
206
- return "reject"
 
 
 
 
 
 
 
 
 
 
 
 
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
- 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 = {}
 
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 = {}