package storeLink import ( "context" "gitlink.org.cn/jcce-pcm/pcm-coordinator/api/internal/svc" "gitlink.org.cn/jcce-pcm/pcm-coordinator/pkg/models" "gitlink.org.cn/jcce-pcm/pcm-coordinator/pkg/utils" "gitlink.org.cn/jcce-pcm/pcm-participant-modelarts/modelarts" "strings" ) type ModelArtsLink struct { ctx context.Context svcCtx *svc.ServiceContext platform string pageIndex int32 pageSize int32 participant *models.StorelinkCenter } //const ( // IMG_NAME_PREFIX = "oct_" // IMG_VERSION_PREFIX = "version_" // TASK_NAME_PREFIX = "trainJob_" // RESOURCE_POOL = "common-pool" //) func NewModelArtsLink(ctx context.Context, svcCtx *svc.ServiceContext, participant *models.StorelinkCenter) *ModelArtsLink { return &ModelArtsLink{ctx: ctx, svcCtx: svcCtx, participant: participant, platform: participant.Name, pageIndex: 1, pageSize: 100} } func (o *ModelArtsLink) UploadImage(path string) (interface{}, error) { //TODO modelArts上传镜像 return nil, nil } func (o *ModelArtsLink) DeleteImage(imageId string) (interface{}, error) { // TODO modelArts删除镜像 return nil, nil } func (o *ModelArtsLink) QueryImageList() (interface{}, error) { // modelArts获取镜像列表 req := &modelarts.ListRepoReq{ Offset: string(o.pageIndex), Limit: string(o.pageSize), } resp, err := o.svcCtx.ModelArtsImgRpc.ListReposDetails(o.ctx, req) if err != nil { return nil, err } //转换成统一返回类型 imgListResp, err := ConvertType[modelarts.ListReposDetailsResp](resp, nil) if err != nil { return nil, err } return imgListResp, nil } func (o *ModelArtsLink) SubmitTask(imageId string, cmd string, params []string, resourceId string) (interface{}, error) { // modelArts提交任务 environments := make(map[string]string) for _, param := range params { s := strings.Split(param, COMMA) environments[s[0]] = s[1] } req := &modelarts.CreateTrainingJobReq{ Kind: "job", Metadata: &modelarts.MetadataS{ Name: TASK_NAME_PREFIX + utils.RandomString(7), WorkspaceId: "0", }, Algorithm: &modelarts.Algorithms{ Engine: &modelarts.EngineCreateTraining{ ImageUrl: imageId, }, Command: cmd, Environments: environments, }, Spec: &modelarts.SpecsC{ Resource: &modelarts.ResourceCreateTraining{ FlavorId: resourceId, NodeCount: 1, }, }, } resp, err := o.svcCtx.ModelArtsRpc.CreateTrainingJob(o.ctx, req) if err != nil { return nil, err } //转换成统一返回类型 submitResp, err := ConvertType[modelarts.CreateTrainingJobResp](resp, nil) if err != nil { return nil, err } return submitResp, nil } func (o *ModelArtsLink) QueryTask(taskId string) (interface{}, error) { // 获取任务 req := &modelarts.DetailTrainingJobsReq{ TrainingJobId: taskId, } resp, err := o.svcCtx.ModelArtsRpc.GetTrainingJobs(o.ctx, req) if err != nil { return nil, err } //转换成统一返回类型 taskResp, err := ConvertType[modelarts.JobResponse](resp, nil) if err != nil { return nil, err } return taskResp, nil } func (o *ModelArtsLink) DeleteTask(taskId string) (interface{}, error) { // 删除任务 req := &modelarts.DeleteTrainingJobReq{ TrainingJobId: taskId, } resp, err := o.svcCtx.ModelArtsRpc.DeleteTrainingJob(o.ctx, req) if err != nil { return nil, err } //转换成统一返回类型 deleteResp, err := ConvertType[modelarts.DeleteTrainingJobResp](resp, nil) if err != nil { return nil, err } return deleteResp, nil } func (o *ModelArtsLink) QuerySpecs() (interface{}, error) { // octopus查询资源规格 req := &modelarts.TrainingJobFlavorsReq{} resp, err := o.svcCtx.ModelArtsRpc.GetTrainingJobFlavors(o.ctx, req) if err != nil { return nil, err } //转换成统一返回类型 specsResp, err := ConvertType[modelarts.TrainingJobFlavorsResp](resp, o.participant) if err != nil { return nil, err } return specsResp, nil }