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.1KB

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