thread-master/apps/backend/internal/logic/settings/get_ai_logic.go

51 lines
1.4 KiB
Go
Raw Normal View History

2026-07-10 12:54:45 +00:00
package settings
import (
"context"
"apps/backend/internal/middleware"
2026-07-13 01:15:30 +00:00
"apps/backend/internal/module/ai"
2026-07-10 12:54:45 +00:00
"apps/backend/internal/module/member/domain"
"apps/backend/internal/svc"
"apps/backend/internal/types"
"github.com/zeromicro/go-zero/core/logx"
)
type GetAiLogic struct {
logx.Logger
ctx context.Context
svcCtx *svc.ServiceContext
}
func NewGetAiLogic(ctx context.Context, svcCtx *svc.ServiceContext) *GetAiLogic {
return &GetAiLogic{Logger: logx.WithContext(ctx), ctx: ctx, svcCtx: svcCtx}
}
2026-07-13 01:15:30 +00:00
// GetAi — 一次回傳:已存設定(含 selected model+ 指定 provider 的模型清單5 分鐘快取)
func (l *GetAiLogic) GetAi(req *types.GetAiReq) (*types.AiSettingsData, error) {
2026-07-10 12:54:45 +00:00
uid, _ := middleware.UIDFrom(l.ctx)
st, err := l.svcCtx.Members.GetSettings(l.ctx, uid)
if err != nil {
return nil, err
}
if st == nil {
st = domain.DefaultSettings(uid)
}
2026-07-13 01:15:30 +00:00
// normalize stored provider
st.Provider = ai.NormalizeProvider(st.Provider)
modelsProvider := st.Provider
if req != nil && req.Provider != "" {
modelsProvider = ai.NormalizeProvider(req.Provider)
}
out := buildAiSettingsData(l.ctx, l.svcCtx, st, modelsProvider)
// when models_provider == saved provider, keep Model in sync with SelectedModel
if out.ModelsProvider == out.Provider {
out.Model = out.SelectedModel
out.ResearchModel = out.SelectedModel
}
return out, nil
2026-07-10 12:54:45 +00:00
}