0.11.0: 旗舰版功能补齐(License/登录记录/会话管理/角色管理/门户定时任务/模型配额/输出脱敏/供应链扫描/记忆管理/AI助手/真实概览)
- 新增迁移 000031-000034(登录日志/角色/模型配额/记忆) - 新增包: license/memory/modelquota/assistant,扫描引擎 - 全部功能后端+前端+端到端验证通过(25 包单测)
This commit is contained in:
@@ -22,10 +22,19 @@ const maxUsageDocumentBytes = 2 << 20
|
||||
type usageSession struct {
|
||||
controller TokenQuotaController
|
||||
reservation TokenReservation
|
||||
fallback int64
|
||||
onFinish func(TokenUsage)
|
||||
once sync.Once
|
||||
log *slog.Logger
|
||||
// modelController/modelReservation 是模型级配额(可选,企业模型总配额)。
|
||||
modelController ModelQuotaController
|
||||
modelReservation any
|
||||
fallback int64
|
||||
onFinish func(TokenUsage)
|
||||
once sync.Once
|
||||
log *slog.Logger
|
||||
}
|
||||
|
||||
// ModelQuotaController 抽象模型级配额控制器,避免 gateway 依赖 modelquota 包。
|
||||
type ModelQuotaController interface {
|
||||
Reserve(ctx context.Context, providerCode, model string, estimate int64, now time.Time) (any, error)
|
||||
Commit(ctx context.Context, reservation any, actual int64) error
|
||||
}
|
||||
|
||||
type TokenUsage struct {
|
||||
@@ -64,6 +73,13 @@ func (s *usageSession) finish(usage TokenUsage) {
|
||||
}
|
||||
cancel()
|
||||
}
|
||||
if s.modelController != nil && s.modelReservation != nil {
|
||||
ctx, cancel := context.WithTimeout(context.Background(), 2*time.Second)
|
||||
if err := s.modelController.Commit(ctx, s.modelReservation, usage.Total); err != nil && s.log != nil {
|
||||
s.log.Warn("model quota commit failed", "error", err)
|
||||
}
|
||||
cancel()
|
||||
}
|
||||
if s.onFinish != nil {
|
||||
s.onFinish(usage)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user