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

51 lines
1.4 KiB
Go
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package settings
import (
"context"
"apps/backend/internal/middleware"
"apps/backend/internal/module/ai"
"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}
}
// GetAi — 一次回傳:已存設定(含 selected model+ 指定 provider 的模型清單5 分鐘快取)
func (l *GetAiLogic) GetAi(req *types.GetAiReq) (*types.AiSettingsData, error) {
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)
}
// 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
}