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.

datasource_content_preview.py 2.0KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. from flask_restx import ( # type: ignore
  2. Resource, # type: ignore
  3. reqparse,
  4. )
  5. from werkzeug.exceptions import Forbidden
  6. from controllers.console import console_ns
  7. from controllers.console.datasets.wraps import get_rag_pipeline
  8. from controllers.console.wraps import account_initialization_required, setup_required
  9. from libs.login import current_user, login_required
  10. from models import Account
  11. from models.dataset import Pipeline
  12. from services.rag_pipeline.rag_pipeline import RagPipelineService
  13. @console_ns.route("/rag/pipelines/<uuid:pipeline_id>/workflows/published/datasource/nodes/<string:node_id>/preview")
  14. class DataSourceContentPreviewApi(Resource):
  15. @setup_required
  16. @login_required
  17. @account_initialization_required
  18. @get_rag_pipeline
  19. def post(self, pipeline: Pipeline, node_id: str):
  20. """
  21. Run datasource content preview
  22. """
  23. if not isinstance(current_user, Account):
  24. raise Forbidden()
  25. parser = reqparse.RequestParser()
  26. parser.add_argument("inputs", type=dict, required=True, nullable=False, location="json")
  27. parser.add_argument("datasource_type", type=str, required=True, location="json")
  28. parser.add_argument("credential_id", type=str, required=False, location="json")
  29. args = parser.parse_args()
  30. inputs = args.get("inputs")
  31. if inputs is None:
  32. raise ValueError("missing inputs")
  33. datasource_type = args.get("datasource_type")
  34. if datasource_type is None:
  35. raise ValueError("missing datasource_type")
  36. rag_pipeline_service = RagPipelineService()
  37. preview_content = rag_pipeline_service.run_datasource_node_preview(
  38. pipeline=pipeline,
  39. node_id=node_id,
  40. user_inputs=inputs,
  41. account=current_user,
  42. datasource_type=datasource_type,
  43. is_published=True,
  44. credential_id=args.get("credential_id"),
  45. )
  46. return preview_content, 200