mirror of
https://github.com/chaitin/MonkeyCode.git
synced 2026-02-03 23:33:37 +08:00
134 lines
3.3 KiB
Go
134 lines
3.3 KiB
Go
package usecase
|
|
|
|
import (
|
|
"context"
|
|
|
|
"github.com/google/uuid"
|
|
|
|
"github.com/chaitin/MonkeyCode/backend/pkg/cvt"
|
|
|
|
"github.com/chaitin/MonkeyCode/backend/consts"
|
|
"github.com/chaitin/MonkeyCode/backend/db"
|
|
"github.com/chaitin/MonkeyCode/backend/domain"
|
|
)
|
|
|
|
type ModelUsecase struct {
|
|
repo domain.ModelRepo
|
|
}
|
|
|
|
func NewModelUsecase(repo domain.ModelRepo) domain.ModelUsecase {
|
|
return &ModelUsecase{repo: repo}
|
|
}
|
|
|
|
func (m *ModelUsecase) Check(ctx context.Context, req *domain.CheckModelReq) (*domain.Model, error) {
|
|
return nil, nil
|
|
}
|
|
|
|
func (m *ModelUsecase) MyModelList(ctx context.Context, req *domain.MyModelListReq) ([]*domain.Model, error) {
|
|
models, err := m.repo.MyModelList(ctx, req)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
ids := cvt.Iter(models, func(_ int, e *db.Model) uuid.UUID {
|
|
return e.ID
|
|
})
|
|
usages, err := m.repo.ModelUsage(ctx, ids)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return cvt.Iter(models, func(_ int, e *db.Model) *domain.Model {
|
|
tmp := cvt.From(e, &domain.Model{}).From(e)
|
|
if usage, ok := usages[e.ID]; ok {
|
|
tmp.Input = usage.Input
|
|
tmp.Output = usage.Output
|
|
}
|
|
return tmp
|
|
}), nil
|
|
}
|
|
|
|
func (m *ModelUsecase) List(ctx context.Context) (*domain.AllModelResp, error) {
|
|
return &domain.AllModelResp{
|
|
Providers: []domain.ProviderModel{
|
|
{
|
|
Provider: "百智云",
|
|
Models: []domain.ModelBasic{
|
|
{
|
|
Provider: "百智云",
|
|
Name: "deepseek-v3",
|
|
APIBase: "https://model-square.app.baizhi.cloud/v1",
|
|
},
|
|
{
|
|
Provider: "百智云",
|
|
Name: "deepseek-r1",
|
|
APIBase: "https://model-square.app.baizhi.cloud/v1",
|
|
},
|
|
{
|
|
Provider: "百智云",
|
|
Name: "qwen2.5-coder-1.5b-instruct",
|
|
APIBase: "https://model-square.app.baizhi.cloud/v1",
|
|
},
|
|
{
|
|
Provider: "百智云",
|
|
Name: "qwen2.5-coder-7b-instruct",
|
|
APIBase: "https://model-square.app.baizhi.cloud/v1",
|
|
},
|
|
},
|
|
},
|
|
{
|
|
Provider: "DeepSeek",
|
|
Models: []domain.ModelBasic{
|
|
{
|
|
Provider: "DeepSeek",
|
|
Name: "deepseek-chat",
|
|
APIBase: "https://api.deepseek.com",
|
|
},
|
|
{
|
|
Provider: "DeepSeek",
|
|
Name: "deepseek-reasoner",
|
|
APIBase: "https://api.deepseek.com",
|
|
},
|
|
},
|
|
},
|
|
},
|
|
}, nil
|
|
}
|
|
|
|
// Create implements domain.ModelUsecase.
|
|
func (m *ModelUsecase) Create(ctx context.Context, req *domain.CreateModelReq) (*domain.Model, error) {
|
|
model, err := m.repo.Create(ctx, req)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return cvt.From(model, &domain.Model{}), nil
|
|
}
|
|
|
|
// GetTokenUsage implements domain.ModelUsecase.
|
|
func (m *ModelUsecase) GetTokenUsage(ctx context.Context, modelType consts.ModelType) (*domain.ModelTokenUsageResp, error) {
|
|
return m.repo.GetTokenUsage(ctx, modelType)
|
|
}
|
|
|
|
// Update implements domain.ModelUsecase.
|
|
func (m *ModelUsecase) Update(ctx context.Context, req *domain.UpdateModelReq) (*domain.Model, error) {
|
|
model, err := m.repo.Update(ctx, req.ID, func(up *db.ModelUpdateOne) {
|
|
if req.ModelName != nil {
|
|
up.SetModelName(*req.ModelName)
|
|
}
|
|
if req.Provider != nil {
|
|
up.SetProvider(*req.Provider)
|
|
}
|
|
if req.APIBase != nil {
|
|
up.SetAPIBase(*req.APIBase)
|
|
}
|
|
if req.APIKey != nil {
|
|
up.SetAPIKey(*req.APIKey)
|
|
}
|
|
if req.Status != nil {
|
|
up.SetStatus(*req.Status)
|
|
}
|
|
})
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return cvt.From(model, &domain.Model{}), nil
|
|
}
|