🚀 feat: expose “Enabled Groups” for models with real-time refresh

Backend
• model/model_meta.go
  – Added `EnableGroups []string` to Model struct
  – fillModelExtra now populates EnableGroups

• model/model_groups.go
  – New helper `GetModelEnableGroups` (reuses Pricing cache)

• model/pricing_refresh.go
  – Added `RefreshPricing()` to force immediate cache rebuild

• controller/model_meta.go
  – `GetAllModelsMeta` & `SearchModelsMeta` call `model.RefreshPricing()` before querying, ensuring groups / endpoints are up-to-date

Frontend
• ModelsColumnDefs.js
  – Added `renderGroups` util and “可用分组” table column displaying color-coded tags

Result
Admins can now see which user groups can access each model, and any ability/group changes are reflected instantly without the previous 1-minute delay.
This commit is contained in:
t0ng7u
2025-08-04 00:00:51 +08:00
parent e74d3f4a8f
commit b64c8ea56b
5 changed files with 54 additions and 1 deletions

12
model/model_groups.go Normal file
View File

@@ -0,0 +1,12 @@
package model
// GetModelEnableGroups 返回指定模型名称可用的用户分组列表。
// 复用缓存的定价映射,避免额外的数据库查询。
func GetModelEnableGroups(modelName string) []string {
for _, p := range GetPricing() {
if p.ModelName == modelName {
return p.EnableGroup
}
}
return make([]string, 0)
}

View File

@@ -38,6 +38,7 @@ type Model struct {
DeletedAt gorm.DeletedAt `json:"-" gorm:"index"`
BoundChannels []BoundChannel `json:"bound_channels,omitempty" gorm:"-"`
EnableGroups []string `json:"enable_groups,omitempty" gorm:"-"`
}
// Insert 创建新的模型元数据记录

14
model/pricing_refresh.go Normal file
View File

@@ -0,0 +1,14 @@
package model
// RefreshPricing 强制立即重新计算与定价相关的缓存。
// 该方法用于需要最新数据的内部管理 API
// 因此会绕过默认的 1 分钟延迟刷新。
func RefreshPricing() {
updatePricingLock.Lock()
defer updatePricingLock.Unlock()
modelSupportEndpointsLock.Lock()
defer modelSupportEndpointsLock.Unlock()
updatePricing()
}