Files
MonkeyCode/backend/internal/proxy/usecase/proxy.go

69 lines
1.8 KiB
Go
Raw Normal View History

2025-06-25 15:25:18 +08:00
package usecase
import (
"context"
2025-07-24 16:46:19 +08:00
"log/slog"
2025-06-25 15:25:18 +08:00
2025-07-24 16:46:19 +08:00
"github.com/chaitin/MonkeyCode/backend/db"
2025-06-25 15:25:18 +08:00
"github.com/chaitin/MonkeyCode/backend/pkg/cvt"
"github.com/chaitin/MonkeyCode/backend/consts"
"github.com/chaitin/MonkeyCode/backend/domain"
)
type ProxyUsecase struct {
2025-07-13 00:05:39 +08:00
repo domain.ProxyRepo
modelRepo domain.ModelRepo
2025-07-24 16:46:19 +08:00
logger *slog.Logger
2025-06-25 15:25:18 +08:00
}
2025-07-24 16:46:19 +08:00
func NewProxyUsecase(
repo domain.ProxyRepo,
modelRepo domain.ModelRepo,
logger *slog.Logger,
) domain.ProxyUsecase {
return &ProxyUsecase{
repo: repo,
modelRepo: modelRepo,
logger: logger.With("module", "ProxyUsecase"),
}
2025-06-25 15:25:18 +08:00
}
func (p *ProxyUsecase) Record(ctx context.Context, record *domain.RecordParam) error {
2025-06-30 19:04:09 +08:00
return p.repo.Record(ctx, record)
2025-06-25 15:25:18 +08:00
}
// SelectModelWithLoadBalancing implements domain.ProxyUsecase.
func (p *ProxyUsecase) SelectModelWithLoadBalancing(modelName string, modelType consts.ModelType) (*domain.Model, error) {
2025-07-13 00:05:39 +08:00
model, err := p.modelRepo.GetWithCache(context.Background(), modelType)
2025-06-25 15:25:18 +08:00
if err != nil {
return nil, err
}
return cvt.From(model, &domain.Model{}), nil
}
func (p *ProxyUsecase) ValidateApiKey(ctx context.Context, key string) (*domain.ApiKey, error) {
apiKey, err := p.repo.ValidateApiKey(ctx, key)
if err != nil {
return nil, err
}
return cvt.From(apiKey, &domain.ApiKey{}), nil
}
func (p *ProxyUsecase) AcceptCompletion(ctx context.Context, req *domain.AcceptCompletionReq) error {
2025-07-04 17:24:31 +08:00
return p.repo.AcceptCompletion(ctx, req)
2025-06-25 15:25:18 +08:00
}
2025-07-18 17:12:52 +08:00
func (p *ProxyUsecase) Report(ctx context.Context, req *domain.ReportReq) error {
2025-07-24 16:46:19 +08:00
var model *db.Model
var err error
if req.Action == consts.ReportActionNewTask {
model, err = p.modelRepo.GetWithCache(context.Background(), consts.ModelTypeLLM)
if err != nil {
p.logger.With("fn", "Report").With("error", err).ErrorContext(ctx, "failed to get model")
return err
}
}
return p.repo.Report(ctx, model, req)
2025-07-18 17:12:52 +08:00
}