Você não pode selecionar mais de 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.

delete_segment_from_index_task.py 1.6KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  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(index_node_ids: list, dataset_id: str, document_id: str):
  11. """
  12. Async Remove segment from index
  13. :param index_node_ids:
  14. :param dataset_id:
  15. :param document_id:
  16. Usage: delete_segment_from_index_task.delay(index_node_ids, dataset_id, document_id)
  17. """
  18. logger.info(click.style("Start delete segment from index", fg="green"))
  19. start_at = time.perf_counter()
  20. try:
  21. dataset = db.session.query(Dataset).where(Dataset.id == dataset_id).first()
  22. if not dataset:
  23. return
  24. dataset_document = db.session.query(Document).where(Document.id == document_id).first()
  25. if not dataset_document:
  26. return
  27. if not dataset_document.enabled or dataset_document.archived or dataset_document.indexing_status != "completed":
  28. return
  29. index_type = dataset_document.doc_form
  30. index_processor = IndexProcessorFactory(index_type).init_index_processor()
  31. index_processor.clean(dataset, index_node_ids, with_keywords=True, delete_child_chunks=True)
  32. end_at = time.perf_counter()
  33. logger.info(click.style(f"Segment deleted from index latency: {end_at - start_at}", fg="green"))
  34. except Exception:
  35. logger.exception("delete segment from index failed")
  36. finally:
  37. db.session.close()