feat(*): 生图与视频工作台 - 新增独立生成流程并整合平台配置

This commit is contained in:
ddcat666 committed 2026-10-13 09:04:34 +08:00
1 parent 4c1d2b4012
commit 1f3f2c6020
69 files changed
+7108 -87

No files matched your search

+27 -1
View File
@@ -129,7 +129,11 @@ func (s *Service) CreateTask(userID string, req CreateTaskRequest) (*model.Task,
if capacityErr != nil {
return nil, capacityErr
}
task := model.Task{ID: newID(), UserID: userID, TraceID: req.TraceID, RequestID: req.RequestID, ProjectID: req.ProjectID, Type: taskType, Status: model.TaskStatusQueued, Stage: "等待队列调度", Progress: 5, Prompt: prompt, Operation: req.Operation, Provider: req.Provider, Model: req.Model}
workbenchKind := req.workbenchKind
if workbenchKind == "" {
workbenchKind = workbenchKindFromTaskInput(normalizedInput, taskType)
}
task := model.Task{ID: newID(), UserID: userID, TraceID: req.TraceID, RequestID: req.RequestID, ProjectID: req.ProjectID, Type: taskType, WorkbenchKind: workbenchKind, Status: model.TaskStatusQueued, Stage: "等待队列调度", Progress: 5, Prompt: prompt, Operation: req.Operation, Provider: req.Provider, Model: req.Model}
if req.admission != nil {
task.ID = req.admission.ID
task.AgentRunID = req.admission.AgentRunID
@@ -328,6 +332,28 @@ func normalizeTaskInput(input map[string]any) (map[string]any, error) {
return normalized, nil
}
func workbenchKindFromTaskInput(input map[string]any, taskType string) string {
metadata, ok := input["metadata"].(map[string]any)
if !ok || metadata["source"] != "workbench" {
return ""
}
kind := stringValue(metadata["workbenchKind"])
if stringValue(input["mode"]) != kind {
return ""
}
switch kind {
case model.WorkbenchKindImage:
if taskType == "canvas_image" {
return kind
}
case model.WorkbenchKindVideo:
if taskType == "canvas_video" || strings.HasPrefix(taskType, "video_") {
return kind
}
}
return ""
}
// createTextReplayTask 创建前端自管的文本持久化任务:状态为 text_replay,
// 不排队执行、不计 active 队列、不产生计费,仅作为正文增量(text-deltas)的存储容器。
func (s *Service) createTextReplayTask(userID string, req CreateTaskRequest, normalizedInput map[string]any) (*model.Task, error) {