deepdata: core product code (backend, frontend, runtime, deepflow module)
This commit is contained in:
@@ -0,0 +1,89 @@
|
||||
"""
|
||||
任务命令服务 - 负责任务的创建操作
|
||||
"""
|
||||
import uuid
|
||||
from typing import List
|
||||
|
||||
from sqlalchemy import select
|
||||
from sqlalchemy.ext.asyncio import AsyncSession
|
||||
|
||||
from app.core.exception import transaction
|
||||
from app.db.models.data_synthesis import (
|
||||
DataSynthInstance,
|
||||
DataSynthesisFileInstance,
|
||||
save_synthesis_task,
|
||||
)
|
||||
from app.db.models.dataset_management import DatasetFiles
|
||||
from app.module.generation.schema.generation import CreateSynthesisTaskRequest
|
||||
|
||||
|
||||
class TaskCreateService:
|
||||
"""任务创建服务 - 负责任务的创建操作"""
|
||||
|
||||
def __init__(self, db: AsyncSession):
|
||||
self.db = db
|
||||
|
||||
async def create(self, request: CreateSynthesisTaskRequest) -> DataSynthInstance:
|
||||
"""
|
||||
创建数据合成任务
|
||||
|
||||
Args:
|
||||
request: 创建任务请求
|
||||
|
||||
Returns:
|
||||
创建的任务实例
|
||||
"""
|
||||
dataset_files = await self._query_source_files(request.source_file_id)
|
||||
request.source_file_id = [str(f.id) for f in dataset_files]
|
||||
|
||||
async with transaction(self.db):
|
||||
task = await save_synthesis_task(self.db, request)
|
||||
await self._create_file_instances(task.id, dataset_files)
|
||||
|
||||
return task
|
||||
|
||||
async def _query_source_files(self, file_ids: List[str]) -> List[DatasetFiles]:
|
||||
"""
|
||||
查询源文件列表
|
||||
|
||||
Args:
|
||||
file_ids: 文件 ID 列表
|
||||
|
||||
Returns:
|
||||
源文件列表
|
||||
"""
|
||||
if not file_ids:
|
||||
return []
|
||||
result = await self.db.execute(
|
||||
select(DatasetFiles).where(DatasetFiles.id.in_(file_ids))
|
||||
)
|
||||
return list(result.scalars().all())
|
||||
|
||||
async def _create_file_instances(
|
||||
self, task_id: str, dataset_files: List[DatasetFiles]
|
||||
) -> None:
|
||||
"""
|
||||
创建文件任务实例
|
||||
|
||||
Args:
|
||||
task_id: 任务 ID
|
||||
dataset_files: 源文件列表
|
||||
"""
|
||||
if not dataset_files:
|
||||
return
|
||||
|
||||
file_instances = [
|
||||
DataSynthesisFileInstance(
|
||||
id=str(uuid.uuid4()),
|
||||
synthesis_instance_id=task_id,
|
||||
file_name=f.file_name,
|
||||
source_file_id=str(f.id),
|
||||
status="pending",
|
||||
total_chunks=0,
|
||||
processed_chunks=0,
|
||||
created_by="system",
|
||||
updated_by="system",
|
||||
)
|
||||
for f in dataset_files
|
||||
]
|
||||
self.db.add_all(file_instances)
|
||||
Reference in New Issue
Block a user