Files
observer/server/biz/service/model_version.go
T
2026-08-27 11:04:56 +08:00

54 lines
1.6 KiB
Go

package service
import (
"context"
"encoding/json"
"observer-server/biz/dao"
"observer-server/biz/model/dto"
)
// modelVersionService 模型版本业务:管理端无模型管理界面(2026-08-26 决策),
// 版本记录仅支撑客户端模型目录(App 多模型下载热更新)。文件布局见 common/workspace.go。
type modelVersionService struct{}
var ModelVersion = &modelVersionService{}
// ClientCatalog 客户端模型目录:全部数据集当前生效模型(App 多模型下载热更新)。
// downloadUrl 复用 /download 静态托管(/download/trainings/<数据集名>.tflite)。
func (s *modelVersionService) ClientCatalog(ctx context.Context) (*dto.ModelCatalogRes, error) {
list, err := dao.ModelVersion.ListAllLatest(ctx)
if err != nil {
return nil, err
}
names := Training.datasetNameMap(ctx)
items := make([]*dto.ModelCatalogItem, 0, len(list))
for _, v := range list {
datasetName := names[v.DatasetId]
if datasetName == "" {
continue
}
items = append(items, &dto.ModelCatalogItem{
DatasetId: v.DatasetId,
DatasetName: datasetName,
Version: v.Version,
Labels: parseLabels(v.Labels),
SizeBytes: v.SizeBytes,
Sha256: v.Sha256,
Notes: v.Notes,
PublishedAt: v.CreatedAt,
DownloadUrl: "/download/trainings/" + datasetName + ".tflite",
})
}
return &dto.ModelCatalogRes{List: items}, nil
}
// parseLabels 解析类别名 JSON 数组
func parseLabels(s string) []string {
var out []string
if err := json.Unmarshal([]byte(s), &out); err != nil || len(out) == 0 {
return []string{"class0", "class1"}
}
return out
}