|
|
|
@@ -14,8 +14,6 @@ from configs import dify_config |
|
|
|
from core.errors.error import LLMBadRequestError, ProviderTokenNotInitError |
|
|
|
from core.model_manager import ModelManager |
|
|
|
from core.model_runtime.entities.model_entities import ModelType |
|
|
|
from core.rag.datasource.keyword.keyword_factory import Keyword |
|
|
|
from core.rag.models.document import Document as RAGDocument |
|
|
|
from core.rag.retrieval.retrieval_methods import RetrievalMethod |
|
|
|
from events.dataset_event import dataset_was_deleted |
|
|
|
from events.document_event import document_was_deleted |
|
|
|
@@ -37,6 +35,7 @@ from models.dataset import ( |
|
|
|
) |
|
|
|
from models.model import UploadFile |
|
|
|
from models.source import DataSourceOauthBinding |
|
|
|
from services.entities.knowledge_entities.knowledge_entities import SegmentUpdateEntity |
|
|
|
from services.errors.account import NoPermissionError |
|
|
|
from services.errors.dataset import DatasetNameDuplicateError |
|
|
|
from services.errors.document import DocumentIndexingError |
|
|
|
@@ -1503,12 +1502,13 @@ class SegmentService: |
|
|
|
|
|
|
|
@classmethod |
|
|
|
def update_segment(cls, args: dict, segment: DocumentSegment, document: Document, dataset: Dataset): |
|
|
|
segment_update_entity = SegmentUpdateEntity(**args) |
|
|
|
indexing_cache_key = "segment_{}_indexing".format(segment.id) |
|
|
|
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_update_entity.enabled is not None: |
|
|
|
action = segment_update_entity.enabled |
|
|
|
if segment.enabled != action: |
|
|
|
if not action: |
|
|
|
segment.enabled = action |
|
|
|
@@ -1521,37 +1521,26 @@ class SegmentService: |
|
|
|
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"]: |
|
|
|
if segment_update_entity.enabled is not None: |
|
|
|
if not segment_update_entity.enabled: |
|
|
|
raise ValueError("Can't update disabled segment") |
|
|
|
else: |
|
|
|
raise ValueError("Can't update disabled segment") |
|
|
|
try: |
|
|
|
content = args["content"] |
|
|
|
content = segment_update_entity.content |
|
|
|
if segment.content == content: |
|
|
|
if document.doc_form == "qa_model": |
|
|
|
segment.answer = args["answer"] |
|
|
|
if args.get("keywords"): |
|
|
|
segment.keywords = args["keywords"] |
|
|
|
segment.answer = segment_update_entity.answer |
|
|
|
if segment_update_entity.keywords: |
|
|
|
segment.keywords = segment_update_entity.keywords |
|
|
|
segment.enabled = True |
|
|
|
segment.disabled_at = None |
|
|
|
segment.disabled_by = None |
|
|
|
db.session.add(segment) |
|
|
|
db.session.commit() |
|
|
|
# update segment index task |
|
|
|
if "keywords" in args: |
|
|
|
keyword = Keyword(dataset) |
|
|
|
keyword.delete_by_ids([segment.index_node_id]) |
|
|
|
document = RAGDocument( |
|
|
|
page_content=segment.content, |
|
|
|
metadata={ |
|
|
|
"doc_id": segment.index_node_id, |
|
|
|
"doc_hash": segment.index_node_hash, |
|
|
|
"document_id": segment.document_id, |
|
|
|
"dataset_id": segment.dataset_id, |
|
|
|
}, |
|
|
|
) |
|
|
|
keyword.add_texts([document], keywords_list=[args["keywords"]]) |
|
|
|
if segment_update_entity.enabled: |
|
|
|
VectorService.create_segments_vector([segment_update_entity.keywords], [segment], dataset) |
|
|
|
else: |
|
|
|
segment_hash = helper.generate_text_hash(content) |
|
|
|
tokens = 0 |
|
|
|
@@ -1579,11 +1568,11 @@ class SegmentService: |
|
|
|
segment.disabled_at = None |
|
|
|
segment.disabled_by = None |
|
|
|
if document.doc_form == "qa_model": |
|
|
|
segment.answer = args["answer"] |
|
|
|
segment.answer = segment_update_entity.answer |
|
|
|
db.session.add(segment) |
|
|
|
db.session.commit() |
|
|
|
# update segment vector index |
|
|
|
VectorService.update_segment_vector(args["keywords"], segment, dataset) |
|
|
|
VectorService.update_segment_vector(segment_update_entity.keywords, segment, dataset) |
|
|
|
|
|
|
|
except Exception as e: |
|
|
|
logging.exception("update segment index failed") |