| @@ -43,6 +43,7 @@ from services.vector_service import VectorService | |||
| 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.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_update_task import document_indexing_update_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) | |||
| if cache_result is not None: | |||
| 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: | |||
| content = args['content'] | |||
| if segment.content == content: | |||
| @@ -1248,8 +1268,9 @@ class SegmentService: | |||
| segment.answer = args['answer'] | |||
| if 'keywords' in args and 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.commit() | |||
| # update segment index task | |||
| @@ -1294,12 +1315,16 @@ class SegmentService: | |||
| segment.completed_at = datetime.datetime.now(datetime.timezone.utc).replace(tzinfo=None) | |||
| segment.updated_by = current_user.id | |||
| 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': | |||
| segment.answer = args['answer'] | |||
| db.session.add(segment) | |||
| db.session.commit() | |||
| # update segment vector index | |||
| VectorService.update_segment_vector(args['keywords'], segment, dataset) | |||
| except Exception as e: | |||
| logging.exception("update segment index failed") | |||
| segment.enabled = False | |||