package service import ( "context" "sync" "time" "github.com/QuantumNous/new-api/model" ) var groupModelCostSnapshot struct { sync.Mutex updated time.Time values map[string]map[string]model.GroupModelCost } // Immutable snapshots are shared by status display and automatic routing. func GroupModelCosts(ctx context.Context) (map[string]map[string]model.GroupModelCost, error) { groupModelCostSnapshot.Lock() defer groupModelCostSnapshot.Unlock() now := time.Now() if groupModelCostSnapshot.values != nil && now.Sub(groupModelCostSnapshot.updated) < time.Minute { return groupModelCostSnapshot.values, nil } queryCtx, cancel := context.WithTimeout(ctx, 3*time.Second) defer cancel() values, err := model.GetGroupModelCosts(queryCtx, now.Add(-24*time.Hour), now) if err != nil { return nil, err } groupModelCostSnapshot.values, groupModelCostSnapshot.updated = values, now return values, nil }