77 lines
2.8 KiB
Python
Raw Normal View History

2025-04-14 11:10:44 +08:00
from typing import Optional
2025-05-29 23:04:04 +08:00
import yaml
2025-04-14 11:10:44 +08:00
from extensions.ext_database import db
2025-05-29 23:04:04 +08:00
from models.dataset import PipelineBuiltInTemplate
2025-05-15 17:19:14 +08:00
from services.rag_pipeline.pipeline_template.pipeline_template_base import PipelineTemplateRetrievalBase
from services.rag_pipeline.pipeline_template.pipeline_template_type import PipelineTemplateType
2025-04-14 11:10:44 +08:00
2025-05-15 17:19:14 +08:00
class DatabasePipelineTemplateRetrieval(PipelineTemplateRetrievalBase):
2025-04-14 11:10:44 +08:00
"""
2025-04-14 18:17:17 +08:00
Retrieval pipeline template from database
2025-04-14 11:10:44 +08:00
"""
2025-04-14 18:17:17 +08:00
def get_pipeline_templates(self, language: str) -> dict:
result = self.fetch_pipeline_templates_from_db(language)
2025-04-14 11:10:44 +08:00
return result
2025-04-14 18:17:17 +08:00
def get_pipeline_template_detail(self, pipeline_id: str):
result = self.fetch_pipeline_template_detail_from_db(pipeline_id)
2025-04-14 11:10:44 +08:00
return result
def get_type(self) -> str:
2025-05-15 17:19:14 +08:00
return PipelineTemplateType.DATABASE
2025-04-14 11:10:44 +08:00
@classmethod
2025-04-14 18:17:17 +08:00
def fetch_pipeline_templates_from_db(cls, language: str) -> dict:
2025-04-14 11:10:44 +08:00
"""
2025-04-14 18:17:17 +08:00
Fetch pipeline templates from db.
2025-04-14 11:10:44 +08:00
:param language: language
:return:
"""
2025-05-23 00:05:57 +08:00
pipeline_built_in_templates: list[PipelineBuiltInTemplate] = (
db.session.query(PipelineBuiltInTemplate).filter(PipelineBuiltInTemplate.language == language).all()
)
2025-05-16 17:22:17 +08:00
recommended_pipelines_results = []
for pipeline_built_in_template in pipeline_built_in_templates:
recommended_pipeline_result = {
2025-05-23 00:05:57 +08:00
"id": pipeline_built_in_template.id,
"name": pipeline_built_in_template.name,
"description": pipeline_built_in_template.description,
"icon": pipeline_built_in_template.icon,
"copyright": pipeline_built_in_template.copyright,
"privacy_policy": pipeline_built_in_template.privacy_policy,
"position": pipeline_built_in_template.position,
2025-05-29 23:04:04 +08:00
"chunk_structure": pipeline_built_in_template.chunk_structure,
2025-05-16 17:22:17 +08:00
}
2025-05-29 23:04:04 +08:00
recommended_pipelines_results.append(recommended_pipeline_result)
2025-05-16 17:22:17 +08:00
2025-05-23 00:05:57 +08:00
return {"pipeline_templates": recommended_pipelines_results}
2025-04-14 11:10:44 +08:00
@classmethod
2025-04-14 18:17:17 +08:00
def fetch_pipeline_template_detail_from_db(cls, pipeline_id: str) -> Optional[dict]:
2025-04-14 11:10:44 +08:00
"""
2025-04-14 18:17:17 +08:00
Fetch pipeline template detail from db.
:param pipeline_id: Pipeline ID
2025-04-14 11:10:44 +08:00
:return:
"""
# is in public recommended list
2025-04-14 18:17:17 +08:00
pipeline_template = (
db.session.query(PipelineBuiltInTemplate).filter(PipelineBuiltInTemplate.id == pipeline_id).first()
2025-04-14 11:10:44 +08:00
)
2025-04-14 18:17:17 +08:00
if not pipeline_template:
2025-04-14 11:10:44 +08:00
return None
return {
2025-05-29 23:04:04 +08:00
"id": pipeline_template.id,
"name": pipeline_template.name,
2025-05-28 17:56:04 +08:00
"icon": pipeline_template.icon,
2025-05-29 23:04:04 +08:00
"chunk_structure": pipeline_template.chunk_structure,
"export_data": yaml.safe_load(pipeline_template.yaml_content),
2025-04-14 11:10:44 +08:00
}