mirror of
https://github.com/infiniflow/ragflow.git
synced 2026-07-28 03:38:11 +08:00
Feat: Add knowledge compilation workflows (#16515)
## Summary - Add knowledge compilation template APIs, services, and builtin template seed data - Add advanced knowledge compile structure/artifact/RAPTOR workflow support - Update parsing, dataset/document APIs, and supporting services for compilation workflows
This commit is contained in:
@@ -0,0 +1,79 @@
|
||||
#
|
||||
# Copyright 2026 The InfiniFlow Authors. All Rights Reserved.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
#
|
||||
|
||||
|
||||
def validate_template_payload(req: dict, require_all: bool = True) -> str:
|
||||
"""Validate a single template payload (kind + config + name)."""
|
||||
required = ["name", "kind", "config"] if require_all else []
|
||||
for key in required:
|
||||
if key not in req:
|
||||
return f"Missing required field: {key}."
|
||||
|
||||
name = req.get("name")
|
||||
if name is not None and (not isinstance(name, str) or not name.strip() or len(name.encode("utf-8")) > 128):
|
||||
return "Invalid template name."
|
||||
|
||||
description = req.get("description")
|
||||
if description is not None and (not isinstance(description, str) or len(description) > 1024):
|
||||
return "Invalid template description."
|
||||
|
||||
kind = req.get("kind")
|
||||
if kind is not None and (not isinstance(kind, str) or not kind):
|
||||
return "Invalid template kind."
|
||||
|
||||
config = req.get("config")
|
||||
if config is not None and not isinstance(config, dict):
|
||||
return "Invalid template config."
|
||||
if isinstance(config, dict):
|
||||
if len(str(config.get("global_rules") or "")) > 4096:
|
||||
return "Global compilation rules is too long."
|
||||
for section in ["entity", "relation"]:
|
||||
fields = (config.get(section) or {}).get("fields") or []
|
||||
seen_types = set()
|
||||
for field in fields:
|
||||
field_type = str((field or {}).get("type") or "").strip()
|
||||
if not field_type:
|
||||
return f"{section.capitalize()} type is required."
|
||||
if field_type in seen_types:
|
||||
return f"{section.capitalize()} type can not be duplicated."
|
||||
seen_types.add(field_type)
|
||||
if not str((field or {}).get("description") or "").strip():
|
||||
return f"{section.capitalize()} field description is required."
|
||||
if len(str((field or {}).get("description") or "")) > 1024:
|
||||
return f"{section.capitalize()} field description is too long."
|
||||
if len(str((field or {}).get("rule") or "")) > 1024:
|
||||
return f"{section.capitalize()} field rule is too long."
|
||||
if config.get("kind") == "artifacts" or req.get("kind") == "artifacts":
|
||||
for field in (config.get("claim") or {}).get("fields") or []:
|
||||
if not str((field or {}).get("statement") or "").strip():
|
||||
return "Claim statement is required."
|
||||
if not str((field or {}).get("subject") or "").strip():
|
||||
return "Claim subject is required."
|
||||
if len(str((field or {}).get("statement") or "")) > 1024:
|
||||
return "Claim statement is too long."
|
||||
if len(str((field or {}).get("subject") or "")) > 1024:
|
||||
return "Claim subject is too long."
|
||||
for field in (config.get("concept") or {}).get("fields") or []:
|
||||
if not str((field or {}).get("term") or "").strip():
|
||||
return "Concept term is required."
|
||||
if not str((field or {}).get("definition_excerpt") or "").strip():
|
||||
return "Concept definition excerpt is required."
|
||||
if len(str((field or {}).get("term") or "")) > 1024:
|
||||
return "Concept term is too long."
|
||||
if len(str((field or {}).get("definition_excerpt") or "")) > 1024:
|
||||
return "Concept definition excerpt is too long."
|
||||
|
||||
return ""
|
||||
Reference in New Issue
Block a user