|  | @@ -43,6 +43,7 @@ from services.vector_service import VectorService
 | 
											
												
													
														|  |  from tasks.clean_notion_document_task import clean_notion_document_task
 |  |  from tasks.clean_notion_document_task import clean_notion_document_task
 | 
											
												
													
														|  |  from tasks.deal_dataset_vector_index_task import deal_dataset_vector_index_task
 |  |  from tasks.deal_dataset_vector_index_task import deal_dataset_vector_index_task
 | 
											
												
													
														|  |  from tasks.delete_segment_from_index_task import delete_segment_from_index_task
 |  |  from tasks.delete_segment_from_index_task import delete_segment_from_index_task
 | 
											
												
													
														|  | 
 |  | +from tasks.disable_segment_from_index_task import disable_segment_from_index_task
 | 
											
												
													
														|  |  from tasks.document_indexing_task import document_indexing_task
 |  |  from tasks.document_indexing_task import document_indexing_task
 | 
											
												
													
														|  |  from tasks.document_indexing_update_task import document_indexing_update_task
 |  |  from tasks.document_indexing_update_task import document_indexing_update_task
 | 
											
												
													
														|  |  from tasks.duplicate_document_indexing_task import duplicate_document_indexing_task
 |  |  from tasks.duplicate_document_indexing_task import duplicate_document_indexing_task
 | 
											
										
											
												
													
														|  | @@ -1241,6 +1242,25 @@ class SegmentService:
 | 
											
												
													
														|  |          cache_result = redis_client.get(indexing_cache_key)
 |  |          cache_result = redis_client.get(indexing_cache_key)
 | 
											
												
													
														|  |          if cache_result is not None:
 |  |          if cache_result is not None:
 | 
											
												
													
														|  |              raise ValueError("Segment is indexing, please try again later")
 |  |              raise ValueError("Segment is indexing, please try again later")
 | 
											
												
													
														|  | 
 |  | +        if 'enabled' in args and args['enabled'] is not None:
 | 
											
												
													
														|  | 
 |  | +            action = args['enabled']
 | 
											
												
													
														|  | 
 |  | +            if segment.enabled != action:
 | 
											
												
													
														|  | 
 |  | +                if not action:
 | 
											
												
													
														|  | 
 |  | +                    segment.enabled = action
 | 
											
												
													
														|  | 
 |  | +                    segment.disabled_at = datetime.datetime.now(datetime.timezone.utc).replace(tzinfo=None)
 | 
											
												
													
														|  | 
 |  | +                    segment.disabled_by = current_user.id
 | 
											
												
													
														|  | 
 |  | +                    db.session.add(segment)
 | 
											
												
													
														|  | 
 |  | +                    db.session.commit()
 | 
											
												
													
														|  | 
 |  | +                    # Set cache to prevent indexing the same segment multiple times
 | 
											
												
													
														|  | 
 |  | +                    redis_client.setex(indexing_cache_key, 600, 1)
 | 
											
												
													
														|  | 
 |  | +                    disable_segment_from_index_task.delay(segment.id)
 | 
											
												
													
														|  | 
 |  | +                    return segment
 | 
											
												
													
														|  | 
 |  | +        if not segment.enabled:
 | 
											
												
													
														|  | 
 |  | +            if 'enabled' in args and args['enabled'] is not None:
 | 
											
												
													
														|  | 
 |  | +                if not args['enabled']:
 | 
											
												
													
														|  | 
 |  | +                    raise ValueError("Can't update disabled segment")
 | 
											
												
													
														|  | 
 |  | +            else:
 | 
											
												
													
														|  | 
 |  | +                raise ValueError("Can't update disabled segment")
 | 
											
												
													
														|  |          try:
 |  |          try:
 | 
											
												
													
														|  |              content = args['content']
 |  |              content = args['content']
 | 
											
												
													
														|  |              if segment.content == content:
 |  |              if segment.content == content:
 | 
											
										
											
												
													
														|  | @@ -1248,8 +1268,9 @@ class SegmentService:
 | 
											
												
													
														|  |                      segment.answer = args['answer']
 |  |                      segment.answer = args['answer']
 | 
											
												
													
														|  |                  if 'keywords' in args and args['keywords']:
 |  |                  if 'keywords' in args and args['keywords']:
 | 
											
												
													
														|  |                      segment.keywords = args['keywords']
 |  |                      segment.keywords = args['keywords']
 | 
											
												
													
														|  | -                if 'enabled' in args and args['enabled'] is not None:
 |  | 
 | 
											
												
													
														|  | -                    segment.enabled = args['enabled']
 |  | 
 | 
											
												
													
														|  | 
 |  | +                segment.enabled = True
 | 
											
												
													
														|  | 
 |  | +                segment.disabled_at = None
 | 
											
												
													
														|  | 
 |  | +                segment.disabled_by = None
 | 
											
												
													
														|  |                  db.session.add(segment)
 |  |                  db.session.add(segment)
 | 
											
												
													
														|  |                  db.session.commit()
 |  |                  db.session.commit()
 | 
											
												
													
														|  |                  # update segment index task
 |  |                  # update segment index task
 | 
											
										
											
												
													
														|  | @@ -1294,12 +1315,16 @@ class SegmentService:
 | 
											
												
													
														|  |                  segment.completed_at = datetime.datetime.now(datetime.timezone.utc).replace(tzinfo=None)
 |  |                  segment.completed_at = datetime.datetime.now(datetime.timezone.utc).replace(tzinfo=None)
 | 
											
												
													
														|  |                  segment.updated_by = current_user.id
 |  |                  segment.updated_by = current_user.id
 | 
											
												
													
														|  |                  segment.updated_at = datetime.datetime.now(datetime.timezone.utc).replace(tzinfo=None)
 |  |                  segment.updated_at = datetime.datetime.now(datetime.timezone.utc).replace(tzinfo=None)
 | 
											
												
													
														|  | 
 |  | +                segment.enabled = True
 | 
											
												
													
														|  | 
 |  | +                segment.disabled_at = None
 | 
											
												
													
														|  | 
 |  | +                segment.disabled_by = None
 | 
											
												
													
														|  |                  if document.doc_form == 'qa_model':
 |  |                  if document.doc_form == 'qa_model':
 | 
											
												
													
														|  |                      segment.answer = args['answer']
 |  |                      segment.answer = args['answer']
 | 
											
												
													
														|  |                  db.session.add(segment)
 |  |                  db.session.add(segment)
 | 
											
												
													
														|  |                  db.session.commit()
 |  |                  db.session.commit()
 | 
											
												
													
														|  |                  # update segment vector index
 |  |                  # update segment vector index
 | 
											
												
													
														|  |                  VectorService.update_segment_vector(args['keywords'], segment, dataset)
 |  |                  VectorService.update_segment_vector(args['keywords'], segment, dataset)
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  |          except Exception as e:
 |  |          except Exception as e:
 | 
											
												
													
														|  |              logging.exception("update segment index failed")
 |  |              logging.exception("update segment index failed")
 | 
											
												
													
														|  |              segment.enabled = False
 |  |              segment.enabled = False
 |