76 lines
1.8 KiB
Go
76 lines
1.8 KiB
Go
|
|
package settings
|
||
|
|
|
||
|
|
import (
|
||
|
|
"context"
|
||
|
|
|
||
|
|
"apps/backend/internal/middleware"
|
||
|
|
"apps/backend/internal/module/member/domain"
|
||
|
|
"apps/backend/internal/svc"
|
||
|
|
"apps/backend/internal/types"
|
||
|
|
|
||
|
|
"github.com/zeromicro/go-zero/core/logx"
|
||
|
|
)
|
||
|
|
|
||
|
|
var modelsByProvider = map[string][]string{
|
||
|
|
"xai": {"grok-3", "grok-3-mini", "grok-2"},
|
||
|
|
"opencode-go": {"default", "fast"},
|
||
|
|
}
|
||
|
|
|
||
|
|
type SaveAiLogic struct {
|
||
|
|
logx.Logger
|
||
|
|
ctx context.Context
|
||
|
|
svcCtx *svc.ServiceContext
|
||
|
|
}
|
||
|
|
|
||
|
|
func NewSaveAiLogic(ctx context.Context, svcCtx *svc.ServiceContext) *SaveAiLogic {
|
||
|
|
return &SaveAiLogic{Logger: logx.WithContext(ctx), ctx: ctx, svcCtx: svcCtx}
|
||
|
|
}
|
||
|
|
|
||
|
|
func (l *SaveAiLogic) SaveAi(req *types.SaveAiReq) (resp *types.AiSettingsData, err error) {
|
||
|
|
uid, _ := middleware.UIDFrom(l.ctx)
|
||
|
|
st, _ := l.svcCtx.Members.GetSettings(l.ctx, uid)
|
||
|
|
if st == nil {
|
||
|
|
st = domain.DefaultSettings(uid)
|
||
|
|
}
|
||
|
|
if req.Provider != "" {
|
||
|
|
st.Provider = req.Provider
|
||
|
|
} else if req.ResearchProvider != "" {
|
||
|
|
st.Provider = req.ResearchProvider
|
||
|
|
}
|
||
|
|
if req.Model != "" {
|
||
|
|
st.Model = req.Model
|
||
|
|
} else if req.ResearchModel != "" {
|
||
|
|
st.Model = req.ResearchModel
|
||
|
|
}
|
||
|
|
if list, ok := modelsByProvider[st.Provider]; ok {
|
||
|
|
found := false
|
||
|
|
for _, m := range list {
|
||
|
|
if m == st.Model {
|
||
|
|
found = true
|
||
|
|
break
|
||
|
|
}
|
||
|
|
}
|
||
|
|
if !found && len(list) > 0 {
|
||
|
|
st.Model = list[0]
|
||
|
|
}
|
||
|
|
}
|
||
|
|
if req.ApiKey != "" {
|
||
|
|
st.APIKey = req.ApiKey
|
||
|
|
st.APIKeyConfigured = true
|
||
|
|
st.ResearchAPIKeyConfigured = true
|
||
|
|
}
|
||
|
|
if req.ResearchApiKey != "" {
|
||
|
|
st.APIKey = req.ResearchApiKey
|
||
|
|
st.APIKeyConfigured = true
|
||
|
|
st.ResearchAPIKeyConfigured = true
|
||
|
|
}
|
||
|
|
if req.ApiKeyConfigured != nil {
|
||
|
|
st.APIKeyConfigured = *req.ApiKeyConfigured
|
||
|
|
if !*req.ApiKeyConfigured {
|
||
|
|
st.APIKey = ""
|
||
|
|
}
|
||
|
|
}
|
||
|
|
_ = l.svcCtx.Members.SaveSettings(l.ctx, uid, st)
|
||
|
|
return NewGetAiLogic(l.ctx, l.svcCtx).GetAi()
|
||
|
|
}
|