Files

67 lines
2.2 KiB
Python

from typing import Any
from flask_restx import ( # type: ignore
Resource, # type: ignore
)
from pydantic import BaseModel
from sqlalchemy.orm import Session
from controllers.common.schema import register_schema_models
from controllers.common.session import with_session
from controllers.console import console_ns
from controllers.console.datasets.wraps import get_rag_pipeline
from controllers.console.wraps import account_initialization_required, model_validate, setup_required, with_current_user
from extensions.ext_application_services import application_services
from libs.login import login_required
from models import Account
from models.dataset import Pipeline
from services.rag_pipeline.rag_pipeline import RagPipelineService
class DatasourceContentPreviewPayload(BaseModel):
inputs: dict[str, Any]
datasource_type: str
credential_id: str | None = None
register_schema_models(console_ns, DatasourceContentPreviewPayload)
@console_ns.route("/rag/pipelines/<uuid:pipeline_id>/workflows/published/datasource/nodes/<string:node_id>/preview")
class DataSourceContentPreviewApi(Resource):
@console_ns.expect(console_ns.models[DatasourceContentPreviewPayload.__name__])
@console_ns.response(200, "Success")
@setup_required
@login_required
@account_initialization_required
@get_rag_pipeline
@with_current_user
@with_session
@model_validate(DatasourceContentPreviewPayload)
def post(
self,
req_data: DatasourceContentPreviewPayload,
session: Session,
current_user: Account,
pipeline: Pipeline,
node_id: str,
):
"""
Run datasource content preview
"""
inputs = req_data.inputs
datasource_type = req_data.datasource_type
rag_pipeline_service = RagPipelineService(session)
preview_content = rag_pipeline_service.run_datasource_node_preview(
pipeline=pipeline,
node_id=node_id,
user_inputs=inputs,
account=current_user,
datasource_type=datasource_type,
is_published=True,
credential_id=req_data.credential_id,
datasource_providers=application_services().data_sources.providers,
)
return preview_content, 200