You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

delete_segment_from_index_task.py 2.0KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. import logging
  2. import time
  3. import click
  4. from celery import shared_task
  5. from core.rag.index_processor.index_processor_factory import IndexProcessorFactory
  6. from extensions.ext_database import db
  7. from models.dataset import Dataset, Document
  8. logger = logging.getLogger(__name__)
  9. @shared_task(queue="dataset")
  10. def delete_segment_from_index_task(
  11. index_node_ids: list, dataset_id: str, document_id: str, child_node_ids: list | None = None
  12. ):
  13. """
  14. Async Remove segment from index
  15. :param index_node_ids:
  16. :param dataset_id:
  17. :param document_id:
  18. Usage: delete_segment_from_index_task.delay(index_node_ids, dataset_id, document_id)
  19. """
  20. logger.info(click.style("Start delete segment from index", fg="green"))
  21. start_at = time.perf_counter()
  22. try:
  23. dataset = db.session.query(Dataset).where(Dataset.id == dataset_id).first()
  24. if not dataset:
  25. logging.warning("Dataset %s not found, skipping index cleanup", dataset_id)
  26. return
  27. dataset_document = db.session.query(Document).where(Document.id == document_id).first()
  28. if not dataset_document:
  29. return
  30. if not dataset_document.enabled or dataset_document.archived or dataset_document.indexing_status != "completed":
  31. logging.info("Document not in valid state for index operations, skipping")
  32. return
  33. doc_form = dataset_document.doc_form
  34. # Proceed with index cleanup using the index_node_ids directly
  35. index_processor = IndexProcessorFactory(doc_form).init_index_processor()
  36. index_processor.clean(
  37. dataset,
  38. index_node_ids,
  39. with_keywords=True,
  40. delete_child_chunks=True,
  41. precomputed_child_node_ids=child_node_ids,
  42. )
  43. end_at = time.perf_counter()
  44. logger.info(click.style(f"Segment deleted from index latency: {end_at - start_at}", fg="green"))
  45. except Exception:
  46. logger.exception("delete segment from index failed")
  47. finally:
  48. db.session.close()