feat: 管线四阶段进度上报 + 图片预览 + Vite 代理
后端: - pipeline.go: ProgressReporter 回调类型 + WithProgressReporter 注入 context - nodes.go: 各节点 pre/post handler 调用 reportProgress() 上报阶段进度 - generate.go: TaskResponse 新增 stage 字段,runPipelineBg 注入进度回调 前端: - vite.config.ts: 添加 /generation 代理到后端静态文件服务 - generation.ts: 轮询读取 stage 字段,暴露 stage/retryCount/rejectReason - GeneratePage.tsx: ProgressBar 接收真实管线阶段数据
This commit is contained in:
@@ -49,6 +49,7 @@ type TaskResponse struct {
|
||||
Prompt string `json:"prompt"`
|
||||
AssetType string `json:"assetType"`
|
||||
Status string `json:"status"`
|
||||
Stage string `json:"stage,omitempty"`
|
||||
Progress int `json:"progress"`
|
||||
RetryCount int `json:"retryCount"`
|
||||
Error string `json:"error,omitempty"`
|
||||
@@ -110,7 +111,12 @@ func Generate(c *gin.Context) {
|
||||
|
||||
// runPipelineBg 后台执行生成管线,更新任务状态。
|
||||
func runPipelineBg(projectID, taskID string, req GenerateRequest) {
|
||||
updateStatus(taskID, "running", 10)
|
||||
// 注入进度上报回调
|
||||
ctx := service.WithProgressReporter(context.Background(), func(stage string, progress int) {
|
||||
updateTaskProgress(taskID, "running", stage, progress)
|
||||
})
|
||||
|
||||
updateTaskProgress(taskID, "running", "prompt_builder", 5)
|
||||
|
||||
in := service.PipelineInput{
|
||||
ProjectID: projectID,
|
||||
@@ -131,7 +137,6 @@ func runPipelineBg(projectID, taskID string, req GenerateRequest) {
|
||||
},
|
||||
}
|
||||
|
||||
ctx := context.Background()
|
||||
output, err := service.RunPipeline(ctx, in)
|
||||
if err != nil {
|
||||
log.Printf("[generate] task %s failed: %v", taskID, err)
|
||||
@@ -139,7 +144,7 @@ func runPipelineBg(projectID, taskID string, req GenerateRequest) {
|
||||
return
|
||||
}
|
||||
|
||||
updateStatus(taskID, "saving", 80)
|
||||
updateTaskProgress(taskID, "saving", "format_adapter", 90)
|
||||
|
||||
// 保存图片到 ../generation/{projectId}/{taskId}/
|
||||
genDir := filepath.Join("..", "generation", projectID, taskID)
|
||||
@@ -180,13 +185,14 @@ func runPipelineBg(projectID, taskID string, req GenerateRequest) {
|
||||
log.Printf("[generate] task %s completed, %d assets", taskID, len(assets))
|
||||
}
|
||||
|
||||
func updateStatus(taskID, status string, progress int) {
|
||||
func updateTaskProgress(taskID, status, stage string, progress int) {
|
||||
rec, ok := taskStore.Load(taskID)
|
||||
if !ok {
|
||||
return
|
||||
}
|
||||
r := rec.(*taskRecord)
|
||||
r.task.Status = status
|
||||
r.task.Stage = stage
|
||||
r.task.Progress = progress
|
||||
taskStore.Store(taskID, r)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user