60 lines
1.6 KiB
Go
60 lines
1.6 KiB
Go
|
|
package compose
|
|||
|
|
|
|||
|
|
import (
|
|||
|
|
"context"
|
|||
|
|
"strings"
|
|||
|
|
|
|||
|
|
"apps/backend/internal/middleware"
|
|||
|
|
"apps/backend/internal/response"
|
|||
|
|
"apps/backend/internal/svc"
|
|||
|
|
"apps/backend/internal/types"
|
|||
|
|
|
|||
|
|
"github.com/zeromicro/go-zero/core/logx"
|
|||
|
|
)
|
|||
|
|
|
|||
|
|
type ComposeMimicLogic struct {
|
|||
|
|
logx.Logger
|
|||
|
|
ctx context.Context
|
|||
|
|
svcCtx *svc.ServiceContext
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
func NewComposeMimicLogic(ctx context.Context, svcCtx *svc.ServiceContext) *ComposeMimicLogic {
|
|||
|
|
return &ComposeMimicLogic{Logger: logx.WithContext(ctx), ctx: ctx, svcCtx: svcCtx}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
func (l *ComposeMimicLogic) ComposeMimic(req *types.ComposeMimicReq) (*types.ComposeMimicData, error) {
|
|||
|
|
uid, ok := middleware.UIDFrom(l.ctx)
|
|||
|
|
if !ok {
|
|||
|
|
return nil, response.Biz(401, 401001, "missing authorization")
|
|||
|
|
}
|
|||
|
|
src := strings.TrimSpace(req.SourceText)
|
|||
|
|
if src == "" {
|
|||
|
|
return nil, response.Biz(400, 400001, "source_text is required")
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 優先背景 Job(避免 HTTP 120s 逾時)
|
|||
|
|
if l.svcCtx.Jobs != nil {
|
|||
|
|
lang := "zh-TW"
|
|||
|
|
if v := l.ctx.Value("lang"); v != nil {
|
|||
|
|
if s, ok := v.(string); ok && s != "" {
|
|||
|
|
lang = s
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
j, err := l.svcCtx.Jobs.ScheduleComposeMimic(l.ctx, uid, src, req.PersonaId, req.StructureNotes, lang)
|
|||
|
|
if err != nil {
|
|||
|
|
return nil, err
|
|||
|
|
}
|
|||
|
|
return &types.ComposeMimicData{JobId: j.ID, Async: true}, nil
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 無 Jobs(測試/降級):同步執行
|
|||
|
|
if l.svcCtx.Studio == nil {
|
|||
|
|
return nil, response.Biz(503, 503001, "studio not configured")
|
|||
|
|
}
|
|||
|
|
text, err := l.svcCtx.Studio.Mimic(l.ctx, uid, src, req.PersonaId, req.StructureNotes)
|
|||
|
|
if err != nil {
|
|||
|
|
return nil, err
|
|||
|
|
}
|
|||
|
|
return &types.ComposeMimicData{Text: text, Async: false}, nil
|
|||
|
|
}
|