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.

rag_pipeline_datasets.py 4.2KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. from flask_login import current_user # type: ignore # type: ignore
  2. from flask_restx import Resource, marshal, reqparse # type: ignore
  3. from sqlalchemy.orm import Session
  4. from werkzeug.exceptions import Forbidden
  5. import services
  6. from controllers.console import console_ns
  7. from controllers.console.datasets.error import DatasetNameDuplicateError
  8. from controllers.console.wraps import (
  9. account_initialization_required,
  10. cloud_edition_billing_rate_limit_check,
  11. setup_required,
  12. )
  13. from extensions.ext_database import db
  14. from fields.dataset_fields import dataset_detail_fields
  15. from libs.login import login_required
  16. from models.dataset import DatasetPermissionEnum
  17. from services.dataset_service import DatasetPermissionService, DatasetService
  18. from services.entities.knowledge_entities.rag_pipeline_entities import IconInfo, RagPipelineDatasetCreateEntity
  19. from services.rag_pipeline.rag_pipeline_dsl_service import RagPipelineDslService
  20. def _validate_name(name):
  21. if not name or len(name) < 1 or len(name) > 40:
  22. raise ValueError("Name must be between 1 to 40 characters.")
  23. return name
  24. def _validate_description_length(description):
  25. if len(description) > 400:
  26. raise ValueError("Description cannot exceed 400 characters.")
  27. return description
  28. @console_ns.route("/rag/pipeline/dataset")
  29. class CreateRagPipelineDatasetApi(Resource):
  30. @setup_required
  31. @login_required
  32. @account_initialization_required
  33. @cloud_edition_billing_rate_limit_check("knowledge")
  34. def post(self):
  35. parser = reqparse.RequestParser()
  36. parser.add_argument(
  37. "yaml_content",
  38. type=str,
  39. nullable=False,
  40. required=True,
  41. help="yaml_content is required.",
  42. )
  43. args = parser.parse_args()
  44. # The role of the current user in the ta table must be admin, owner, or editor, or dataset_operator
  45. if not current_user.is_dataset_editor:
  46. raise Forbidden()
  47. rag_pipeline_dataset_create_entity = RagPipelineDatasetCreateEntity(
  48. name="",
  49. description="",
  50. icon_info=IconInfo(
  51. icon="📙",
  52. icon_background="#FFF4ED",
  53. icon_type="emoji",
  54. ),
  55. permission=DatasetPermissionEnum.ONLY_ME,
  56. partial_member_list=None,
  57. yaml_content=args["yaml_content"],
  58. )
  59. try:
  60. with Session(db.engine) as session:
  61. rag_pipeline_dsl_service = RagPipelineDslService(session)
  62. import_info = rag_pipeline_dsl_service.create_rag_pipeline_dataset(
  63. tenant_id=current_user.current_tenant_id,
  64. rag_pipeline_dataset_create_entity=rag_pipeline_dataset_create_entity,
  65. )
  66. if rag_pipeline_dataset_create_entity.permission == "partial_members":
  67. DatasetPermissionService.update_partial_member_list(
  68. current_user.current_tenant_id,
  69. import_info["dataset_id"],
  70. rag_pipeline_dataset_create_entity.partial_member_list,
  71. )
  72. except services.errors.dataset.DatasetNameDuplicateError:
  73. raise DatasetNameDuplicateError()
  74. return import_info, 201
  75. @console_ns.route("/rag/pipeline/empty-dataset")
  76. class CreateEmptyRagPipelineDatasetApi(Resource):
  77. @setup_required
  78. @login_required
  79. @account_initialization_required
  80. @cloud_edition_billing_rate_limit_check("knowledge")
  81. def post(self):
  82. # The role of the current user in the ta table must be admin, owner, or editor, or dataset_operator
  83. if not current_user.is_dataset_editor:
  84. raise Forbidden()
  85. dataset = DatasetService.create_empty_rag_pipeline_dataset(
  86. tenant_id=current_user.current_tenant_id,
  87. rag_pipeline_dataset_create_entity=RagPipelineDatasetCreateEntity(
  88. name="",
  89. description="",
  90. icon_info=IconInfo(
  91. icon="📙",
  92. icon_background="#FFF4ED",
  93. icon_type="emoji",
  94. ),
  95. permission=DatasetPermissionEnum.ONLY_ME,
  96. partial_member_list=None,
  97. ),
  98. )
  99. return marshal(dataset, dataset_detail_fields), 201