diff --git a/api/core/app/apps/advanced_chat/generate_task_pipeline.py b/api/core/app/apps/advanced_chat/generate_task_pipeline.py index 042bc5c8f1..2875c86329 100644 --- a/api/core/app/apps/advanced_chat/generate_task_pipeline.py +++ b/api/core/app/apps/advanced_chat/generate_task_pipeline.py @@ -453,6 +453,10 @@ class AdvancedChatAppGenerateTaskPipeline(BasedGenerateTaskPipeline, WorkflowCyc else: route_chunk = cast(VarGenerateRouteChunk, route_chunk) value_selector = route_chunk.value_selector + if not value_selector: + self._task_state.current_stream_generate_state.current_route_position += 1 + continue + route_chunk_node_id = value_selector[0] if route_chunk_node_id == 'sys': diff --git a/api/core/app/task_pipeline/workflow_cycle_manage.py b/api/core/app/task_pipeline/workflow_cycle_manage.py index 7600a57854..7077bab2fb 100644 --- a/api/core/app/task_pipeline/workflow_cycle_manage.py +++ b/api/core/app/task_pipeline/workflow_cycle_manage.py @@ -458,7 +458,21 @@ class WorkflowCycleManage: def _handle_workflow_finished(self, event: QueueStopEvent | QueueWorkflowSucceededEvent | QueueWorkflowFailedEvent) \ -> Optional[WorkflowRun]: + workflow_run = db.session.query(WorkflowRun).filter( + WorkflowRun.id == self._task_state.workflow_run_id).first() + if not workflow_run: + return None + if isinstance(event, QueueStopEvent): + workflow_run = self._workflow_run_failed( + workflow_run=workflow_run, + start_at=self._task_state.start_at, + total_tokens=self._task_state.total_tokens, + total_steps=self._task_state.total_steps, + status=WorkflowRunStatus.STOPPED, + error='Workflow stopped.' + ) + latest_node_execution_info = self._task_state.latest_node_execution_info if latest_node_execution_info: workflow_node_execution = db.session.query(WorkflowNodeExecution).filter( @@ -470,20 +484,6 @@ class WorkflowCycleManage: start_at=latest_node_execution_info.start_at, error='Workflow stopped.' ) - - workflow_run = db.session.query(WorkflowRun).filter( - WorkflowRun.id == self._task_state.workflow_run_id).first() - if not workflow_run: - return None - - workflow_run = self._workflow_run_failed( - workflow_run=workflow_run, - start_at=self._task_state.start_at, - total_tokens=self._task_state.total_tokens, - total_steps=self._task_state.total_steps, - status=WorkflowRunStatus.STOPPED, - error='Workflow stopped.' - ) elif isinstance(event, QueueWorkflowFailedEvent): workflow_run = self._workflow_run_failed( workflow_run=workflow_run,