diff --git a/api/core/rag/retrieval/dataset_retrieval.py b/api/core/rag/retrieval/dataset_retrieval.py index 1a443614ca..980b97fa15 100644 --- a/api/core/rag/retrieval/dataset_retrieval.py +++ b/api/core/rag/retrieval/dataset_retrieval.py @@ -770,9 +770,9 @@ class DatasetRetrieval: user_id: str, metadata_filtering_mode: str, metadata_model_config: ModelConfig, - metadata_filtering_conditions: MetadataFilteringCondition, + metadata_filtering_conditions: Optional[MetadataFilteringCondition], inputs: dict, - ) -> dict[str, list[str]]: + ) -> Optional[dict[str, list[str]]]: document_query = db.session.query(Document).filter( Document.dataset_id.in_(dataset_ids), Document.indexing_status == "completed", @@ -899,7 +899,7 @@ class DatasetRetrieval: case "≥", ">=": query = query.filter(Document.doc_metadata[metadata_name] >= value) case _: - pass + pass def _fetch_model_config( self, tenant_id: str, model: ModelConfig diff --git a/api/core/workflow/nodes/knowledge_retrieval/knowledge_retrieval_node.py b/api/core/workflow/nodes/knowledge_retrieval/knowledge_retrieval_node.py index 56dc4bc665..a841a7849d 100644 --- a/api/core/workflow/nodes/knowledge_retrieval/knowledge_retrieval_node.py +++ b/api/core/workflow/nodes/knowledge_retrieval/knowledge_retrieval_node.py @@ -30,7 +30,6 @@ from core.workflow.nodes.knowledge_retrieval.template_prompts import ( METADATA_FILTER_USER_PROMPT_1, METADATA_FILTER_USER_PROMPT_3, ) -from core.workflow.nodes.list_operator.exc import InvalidConditionError from core.workflow.nodes.llm.entities import LLMNodeChatModelMessage, LLMNodeCompletionModelPromptTemplate from core.workflow.nodes.llm.node import LLMNode from core.workflow.nodes.question_classifier.template_prompts import QUESTION_CLASSIFIER_USER_PROMPT_2 diff --git a/api/models/dataset.py b/api/models/dataset.py index b19ec05414..7fa08ee94d 100644 --- a/api/models/dataset.py +++ b/api/models/dataset.py @@ -203,7 +203,7 @@ class Dataset(db.Model): # type: ignore[name-defined] def doc_metadata(self): dataset_metadatas = db.session.query(DatasetMetadata).filter(DatasetMetadata.dataset_id == self.id).all() - return [ + doc_metadata = [ { "id": dataset_metadata.id, "name": dataset_metadata.name, @@ -211,6 +211,43 @@ class Dataset(db.Model): # type: ignore[name-defined] } for dataset_metadata in dataset_metadatas ] + if self.built_in_field_enabled: + doc_metadata.append( + { + "id": "built-in", + "name": BuiltInField.document_name, + "type": "string", + } + ) + doc_metadata.append( + { + "id": "built-in", + "name": BuiltInField.uploader, + "type": "string", + } + ) + doc_metadata.append( + { + "id": "built-in", + "name": BuiltInField.upload_date, + "type": "date", + } + ) + doc_metadata.append( + { + "id": "built-in", + "name": BuiltInField.last_update_date, + "type": "date", + } + ) + doc_metadata.append( + { + "id": "built-in", + "name": BuiltInField.source, + "type": "string", + } + ) + return doc_metadata @staticmethod def gen_collection_name_by_id(dataset_id: str) -> str: diff --git a/api/services/metadata_service.py b/api/services/metadata_service.py index b1fc59efde..58d6e74eb6 100644 --- a/api/services/metadata_service.py +++ b/api/services/metadata_service.py @@ -31,8 +31,7 @@ class MetadataService: return metadata @staticmethod - def \ - update_metadata_name(dataset_id: str, metadata_id: str, name: str) -> DatasetMetadata: + def update_metadata_name(dataset_id: str, metadata_id: str, name: str) -> DatasetMetadata: lock_key = f"dataset_metadata_lock_{dataset_id}" try: MetadataService.knowledge_base_metadata_lock_check(dataset_id, None) @@ -61,7 +60,7 @@ class MetadataService: logging.exception("Update metadata name failed") finally: redis_client.delete(lock_key) - + @staticmethod def delete_metadata(dataset_id: str, metadata_id: str): lock_key = f"dataset_metadata_lock_{dataset_id}" @@ -215,7 +214,9 @@ class MetadataService: "id": item.get("id"), "name": item.get("name"), "type": item.get("type"), - "count": DatasetMetadataBinding.query.filter_by(metadata_id=item.get("id"), dataset_id=dataset.id).count(), + "count": DatasetMetadataBinding.query.filter_by( + metadata_id=item.get("id"), dataset_id=dataset.id + ).count(), } for item in dataset.doc_metadata or [] ],