feat(admin): 渠道列表/详情展示最差模型,暴露被均值摊薄的单模型故障
渠道健康分是各模型 succ_ewma 的均值,单个模型全挂会被其余健康模型摊薄——10 个 健康模型 + 1 个挂掉仍能算出 90 分绿灯,而这恰是模型级熔断要隔离的典型场景。 补一个最差项:ChannelRuntimeStates 遍历目录快照时顺带取每个渠道 succ_ewma 最小的 模型,按 succ^α×100 折算为与渠道分同口径的健康分。 不落库、不加列:catalog 内存快照已逐 (渠道,模型) 持有 SuccEwma,遍历它即可,零额外 I/O;数据是调度器同源的 5 秒刷新值,比 5 分钟落盘快照更新鲜。取最小值也天然免疫冷 模型问题——无上报的模型读作满分 1.0,永远不会被选为最差项。 byModel 是 map,遍历顺序随机,同分时按模型名取小者打破平局,否则全部模型满分时 每次请求返回的模型名都会跳变。 前端:列表页健康度列在最差项低于 80(健康档)时补一行「⚠ 模型名 分数」,详情页 健康度字段同理;disabled / testing 渠道不在目录快照,不展示。
This commit is contained in:
1 parent
faddc45978
commit
dd02bf4ac3
6 files changed
+127
-8
No files matched your search
@@ -47,6 +47,8 @@ type ChannelItem struct {
|
||||
HealthScore *float64 `json:"health_score"`
|
||||
BreakerState int `json:"breaker_state"` // 调度熔断状态:0=正常 1=熔断中 2=半开探活
|
||||
BreakerModels int `json:"breaker_models"` // 处于熔断/半开的模型数量(渠道×模型级汇总)
|
||||
WorstModel string `json:"worst_model"` // 健康度最低的模型名(空=渠道不在调度目录)
|
||||
WorstModelScore float64 `json:"worst_model_score"`
|
||||
}
|
||||
|
||||
// ChannelCreateReq 创建渠道请求
|
||||
@@ -143,6 +145,8 @@ type ChannelDetailRes struct {
|
||||
HealthScore *float64 `json:"health_score"`
|
||||
BreakerState int `json:"breaker_state"` // 调度熔断状态:0=正常 1=熔断中 2=半开探活
|
||||
BreakerModels int `json:"breaker_models"` // 处于熔断/半开的模型数量(渠道×模型级汇总)
|
||||
WorstModel string `json:"worst_model"` // 健康度最低的模型名(空=渠道不在调度目录)
|
||||
WorstModelScore float64 `json:"worst_model_score"`
|
||||
KeyType string `json:"key_type"`
|
||||
KeyStatus string `json:"key_status"`
|
||||
KeyName string `json:"key_name"`
|
||||
|
||||
Reference in new issue
Block a user