package sch import ( "gitlink.org.cn/cloudream/common/pkgs/types" "gitlink.org.cn/cloudream/common/sdks/hpc" schsdk "gitlink.org.cn/cloudream/common/sdks/scheduler" cdssdk "gitlink.org.cn/cloudream/common/sdks/storage" "gitlink.org.cn/cloudream/common/utils/serder" "time" ) type ResourceType string const ( ResourceTypeCPU ResourceType = "CPU" ResourceTypeNPU ResourceType = "NPU" ResourceTypeGPU ResourceType = "GPU" ResourceTypeMLU ResourceType = "MLU" ResourceTypeStorage ResourceType = "STORAGE" ResourceTypeMemory ResourceType = "MEMORY" ResourceTypeDCU ResourceType = "DCU" ResourceTypeGCU ResourceType = "GCU" Split = "/" CODE = "code" DATASET = "dataset" IMAGE = "image" MODEL = "model" RESULT = "result" PackageTypeNormal = "normal" PackageTypeNull = "null" Null = "null" OrderByName = "name" OrderBySize = "size" OrderByTime = "time" StorageTypeURL = "url" StorageTypeJCS = "jcs" RejectedStatus = "rejected" PendingStatus = "pending" ApprovedStatus = "approved" RevokedStatus = "revoked" CancelStatus = "cancel" ExpiredStatus = "expired" ApplyAccess = "apply" PrivateAccess = "private" PublicAccess = "public" PreferencePriority = "preference" SpecifyClusterPriority = "specify" FailedStatus = "failed" SuccessStatus = "success" SucceededStatus = "succeeded" UploadingStatus = "uploading" RunningStatus = "running" Query = "query" Delete = "delete" ChildrenType = "children" ParentType = "parent" PlatformSugon = "sugon" PlatformOpenI = "OpenI" PlatformModelArts = "ModelArts" PlatformAI = "AI" // 智算 PlatformCloud = "CLOUD" // 云算 PlatformCloudInference = "PCM_Inference" PlatformHPC = "HPCSlurm" //超算 PlatformHPCArm = "HPCArm" PlatformHPCX86 = "HPCX86" URL = "url" ID = "id" Startup = "startup" Schedule = "schedule" BlockChainJobCreatePrefix = "job_create_" Complete = "Complete" NodeTypeBinding = "binding" NodeTypeUpload = "upload" NodeTypeDataReturn = "DataReturn" NodeTypeHPCCreate = "hpc_create" NodeTypeInference = "inference" NodeTypeInferenceStop = "inference_stop" NodeTypeAICreate = "ai_job_create" NodeTypeAIJobRun = "ai_job_run" NodeTypeNotify = "notify" ) type TaskID int64 type DataID int64 type ClusterDetail struct { // 集群ID ClusterId schsdk.ClusterID `json:"clusterID"` // 集群功能类型:云算,智算,超算 ClusterType string `json:"clusterType"` // 集群地区:华东地区、华南地区、华北地区、华中地区、西南地区、西北地区、东北地区 Region string `json:"region"` // 资源类型 Resources2 []ResourceData `json:"resources1,omitempty"` //Resources2 []ResourceData `json:"resources"` Resources []ClusterResource `json:"resources"` } type ClusterResource struct { Resource TmpResourceData `json:"resource"` BaseResources []TmpResourceData `json:"baseResources"` } type TmpResourceData struct { Type ResourceType `json:"type"` Name string `json:"name"` Total UnitValue[float64] `json:"total"` Available UnitValue[float64] `json:"available"` } type ResourceData interface { Noop() } var ResourceDataTypeUnion = types.NewTypeUnion[ResourceData]( (*CPUResourceData)(nil), (*NPUResourceData)(nil), (*GPUResourceData)(nil), (*MLUResourceData)(nil), (*DCUResourceData)(nil), (*GCUResourceData)(nil), (*GPGPUResourceData)(nil), (*StorageResourceData)(nil), (*MemoryResourceData)(nil), (*BalanceResourceData)(nil), (*RateResourceData)(nil), ) var _ = serder.UseTypeUnionInternallyTagged(&ResourceDataTypeUnion, "type") type ResourceDataBase struct{} func (d *ResourceDataBase) Noop() {} type UnitValue[T any] struct { Unit string `json:"unit"` Value T `json:"value"` } type CPUResourceData struct { serder.Metadata `union:"CPU"` ResourceDataBase Type string `json:"type"` Name ResourceType `json:"name"` Total UnitValue[int64] `json:"total"` Available UnitValue[int64] `json:"available"` } type NPUResourceData struct { serder.Metadata `union:"NPU"` ResourceDataBase Type string `json:"type"` Name ResourceType `json:"name"` Total UnitValue[int64] `json:"total"` Available UnitValue[int64] `json:"available"` } type GPUResourceData struct { serder.Metadata `union:"GPU"` ResourceDataBase Type string `json:"type"` Name ResourceType `json:"name"` Total UnitValue[int64] `json:"total"` Available UnitValue[int64] `json:"available"` } type MLUResourceData struct { serder.Metadata `union:"MLU"` ResourceDataBase Type string `json:"type"` Name ResourceType `json:"name"` Total UnitValue[int64] `json:"total"` Available UnitValue[int64] `json:"available"` } type DCUResourceData struct { serder.Metadata `union:"DCU"` ResourceDataBase Type string `json:"type"` Name ResourceType `json:"name"` Total UnitValue[int64] `json:"total"` Available UnitValue[int64] `json:"available"` } type GCUResourceData struct { serder.Metadata `union:"GCU"` ResourceDataBase Type string `json:"type"` Name ResourceType `json:"name"` Total UnitValue[int64] `json:"total"` Available UnitValue[int64] `json:"available"` } type GPGPUResourceData struct { serder.Metadata `union:"ILUVATAR-GPGPU"` ResourceDataBase Type string `json:"type"` Name ResourceType `json:"name"` Total UnitValue[int64] `json:"total"` Available UnitValue[int64] `json:"available"` } type StorageResourceData struct { serder.Metadata `union:"STORAGE"` ResourceDataBase Type string `json:"type"` Name ResourceType `json:"name"` Total UnitValue[float64] `json:"total"` Available UnitValue[float64] `json:"available"` } type MemoryResourceData struct { serder.Metadata `union:"MEMORY"` ResourceDataBase Type string `json:"type"` Name ResourceType `json:"name"` Total UnitValue[float64] `json:"total"` Available UnitValue[float64] `json:"available"` } type BalanceResourceData struct { serder.Metadata `union:"BALANCE"` ResourceDataBase Type string `json:"type"` Name ResourceType `json:"name"` Total UnitValue[float64] `json:"total"` Available UnitValue[float64] `json:"available"` } type RateResourceData struct { serder.Metadata `union:"RATE"` ResourceDataBase Type string `json:"type"` Name ResourceType `json:"name"` Total UnitValue[float64] `json:"total"` Available UnitValue[float64] `json:"available"` } type ResourceRange struct { UserID cdssdk.UserID `json:"userID"` Type ResourceType `json:"type"` GPU Range `json:"gpu"` GPUNumber int `json:"gpuNumber"` CPU Range `json:"cpu"` Memory Range `json:"memory"` Storage Range `json:"storage"` Ids []string `json:"ids"` } type JobInfo struct { TaskID string `json:"taskID"` JobSubmitInfo JobSubmitInfo `json:"jobSubmitInfo"` ResultFiles []ResultFile `json:"resultFiles"` } type ResultFile struct { ClusterID schsdk.ClusterID `json:"clusterID"` Objects []cdssdk.Object `json:"objects"` } type JobSubmitInfo interface { Noop() } type JobSubmitInfoBase struct { } var JobSubmitInfoTypeUnion = types.NewTypeUnion[JobSubmitInfo]( (*PCMJobSubmitInfo)(nil), (*HPCJobSubmitInfo)(nil), ) var _ = serder.UseTypeUnionInternallyTagged(&JobSubmitInfoTypeUnion, "type") func (d *JobSubmitInfoBase) Noop() {} type PCMJobSubmitInfo struct { serder.Metadata `union:"pcm"` JobSubmitInfoBase Type string `json:"type"` Info CreateAIJobReq `json:"info"` } type HPCJobSubmitInfo struct { serder.Metadata `union:"hpc"` JobSubmitInfoBase Type string `json:"type"` Info hpc.CreateHPCJobReq `json:"info"` } type Range struct { Min float64 `json:"min"` Max float64 `json:"max"` } type ResourcePriority interface { Noop() } type ResourcePriorityBase struct { } var ResourcePriorityTypeUnion = types.NewTypeUnion[ResourcePriority]( (*RegionPriority)(nil), (*ChipPriority)(nil), (*BiasPriority)(nil), ) var _ = serder.UseTypeUnionInternallyTagged(&ResourcePriorityTypeUnion, "type") func (d *ResourcePriorityBase) Noop() {} type RegionPriority struct { serder.Metadata `union:"region"` ResourcePriorityBase Type string `json:"type"` Options []string `json:"options"` } type ChipPriority struct { serder.Metadata `union:"chip"` ResourcePriorityBase Type string `json:"type"` Options []string `json:"options"` } type BiasPriority struct { serder.Metadata `union:"bias"` ResourcePriorityBase Type string `json:"type"` Options []string `json:"options"` } type TaskMessage struct { Status string `json:"status"` Message string `json:"message"` } type ReportMessage struct { TaskName string `json:"taskName"` TaskID string `json:"taskID"` Status bool `json:"status"` Message string `json:"message"` ClusterID schsdk.ClusterID `json:"clusterID"` Output string `json:"output"` } type UploadParams struct { DataType string `json:"dataType"` UploadInfo UploadInfo `json:"uploadInfo"` } type UploadInfo interface { Noop() } var UploadInfoTypeUnion = types.NewTypeUnion[UploadInfo]( (*LocalUploadInfo)(nil), (*RemoteUploadInfo)(nil), ) var _ = serder.UseTypeUnionInternallyTagged(&UploadInfoTypeUnion, "type") type LocalUploadInfo struct { serder.Metadata `union:"local"` UploadInfoBase Type string `json:"type"` LocalPath string `json:"localPath"` ObjectIDs []cdssdk.ObjectID `json:"objectIDs"` } type RemoteUploadInfo struct { serder.Metadata `union:"url"` UploadInfoBase Type string `json:"type"` Url string `json:"url"` Branch string `json:"branch"` DataName string `json:"dataName"` Cluster schsdk.ClusterID `json:"clusterID"` } type UploadInfoBase struct{} func (d *UploadInfoBase) Noop() {} type UploadPriority interface { Noop() } var UploadPriorityTypeUnion = types.NewTypeUnion[UploadPriority]( (*Preferences)(nil), (*SpecifyCluster)(nil), ) var _ = serder.UseTypeUnionInternallyTagged(&UploadPriorityTypeUnion, "type") type Preferences struct { serder.Metadata `union:"preference"` UploadPriorityBase Type string `json:"type"` ResourcePriorities []ResourcePriority `json:"priorities"` } type SpecifyCluster struct { serder.Metadata `union:"specify"` UploadPriorityBase Type string `json:"type"` Clusters []schsdk.ClusterID `json:"clusters"` } type UploadPriorityBase struct{} func (d *UploadPriorityBase) Noop() {} type QueryData struct { DataType string `json:"dataType" binding:"required"` UserID cdssdk.UserID `json:"userID" binding:"required"` Path string `json:"path"` PackageID cdssdk.PackageID `json:"packageID" binding:"required"` CurrentPage int `json:"currentPage"` PageSize int `json:"pageSize"` OrderBy string `json:"orderBy" binding:"required"` PackageName string `json:"packageName"` } type DataBinding interface { Noop() } var DataBindingTypeUnion = types.NewTypeUnion[DataBinding]( (*DatasetBinding)(nil), (*ModelBinding)(nil), (*CodeBinding)(nil), (*ImageBinding)(nil), ) var _ = serder.UseTypeUnionInternallyTagged(&DataBindingTypeUnion, "type") type DataBindingBase struct { RootPath string `json:"rootPath"` } func (d *DataBindingBase) Noop() {} type DatasetBinding struct { serder.Metadata `union:"dataset"` DataBindingBase Type string `json:"type"` Name string `json:"name"` OperateType string `json:"operateType"` ClusterIDs []schsdk.ClusterID `json:"clusterIDs"` Description string `json:"description"` Category string `json:"category"` PackageID cdssdk.PackageID `json:"packageID"` RepositoryName string `json:"repositoryName"` ConsumptionPoints int64 `json:"points"` } type ModelBinding struct { serder.Metadata `union:"model"` DataBindingBase Type string `json:"type"` Name string `json:"name"` OperateType string `json:"operateType"` ClusterIDs []schsdk.ClusterID `json:"clusterIDs"` Description string `json:"description"` Category string `json:"category"` ModelType string `json:"modelType"` Env string `json:"env"` Version string `json:"version"` PackageID cdssdk.PackageID `json:"packageID"` RepositoryName string `json:"repositoryName"` } type CodeBinding struct { serder.Metadata `union:"code"` DataBindingBase Type string `json:"type"` Name string `json:"name"` OperateType string `json:"operateType"` ClusterID schsdk.ClusterID `json:"clusterID"` Description string `json:"description"` ImageID schsdk.ImageID `json:"imageID"` BootstrapObjectID cdssdk.ObjectID `json:"bootstrapObjectID"` PackageID cdssdk.PackageID `json:"packageID"` Output string `json:"output"` // 当集群为openi的时候,需要传入分支 Branch string `json:"branch"` } //type ImageBinding struct { // serder.Metadata `union:"image"` // DataBindingBase // Type string `json:"type"` // Name string `json:"name"` // ClusterIDs []schsdk.ClusterID `json:"clusterIDs"` // Description string `json:"description"` // Architecture string `json:"architecture"` // ResourceType string `json:"resourceType"` // Tags []string `json:"tags"` // PackageID cdssdk.PackageID `json:"packageID"` //} type ImageBinding struct { serder.Metadata `union:"image"` DataBindingBase Type string `json:"type"` ID int64 `json:"id"` OperateType string `json:"operateType"` Name string `json:"name"` IDType string `json:"idType"` ImageID string `json:"imageID"` ClusterID schsdk.ClusterID `json:"clusterID"` } type Image struct { ImageID schsdk.ImageID `json:"imageID" gorm:"column:ImageID;primaryKey"` Name string `json:"name" gorm:"column:Name"` CreateTime time.Time `json:"createTime" gorm:"column:CreateTime"` ClusterImage []ClusterImage `gorm:"foreignKey:image_id;references:ImageID" json:"clusterImages"` } type ClusterImage struct { ImageID schsdk.ImageID `gorm:"column:image_id" json:"imageID"` ClusterID schsdk.ClusterID `gorm:"column:cluster_id" json:"clusterID"` OriginImageType string `gorm:"column:origin_image_type" json:"originImageType"` OriginImageID string `gorm:"column:origin_image_id" json:"originImageID"` OriginImageName string `gorm:"column:origin_image_name" json:"originImageName"` ClusterImageCard []ClusterImageCard `gorm:"foreignKey:origin_image_id;references:origin_image_id" json:"cards"` } func (ClusterImage) TableName() string { return "cluster_image" } type ClusterImageCard struct { OriginImageID string `gorm:"column:origin_image_id" json:"originImageID"` Card string `gorm:"column:card" json:"card"` } func (ClusterImageCard) TableName() string { return "cluster_image_card" } type QueryBindingFilters struct { Status string `json:"status"` Name string `json:"name"` } type QueryBindingDataParam interface { Noop() } var QueryBindingDataParamTypeUnion = types.NewTypeUnion[QueryBindingDataParam]( (*PrivateLevel)(nil), (*ApplyLevel)(nil), (*PublicLevel)(nil), ) var _ = serder.UseTypeUnionInternallyTagged(&QueryBindingDataParamTypeUnion, "type") type QueryBindingDataParamBase struct{} func (d *QueryBindingDataParamBase) Noop() {} type PrivateLevel struct { serder.Metadata `union:"private"` QueryBindingDataParamBase Type string `json:"type" binding:"required"` UserID cdssdk.UserID `json:"userID" binding:"required"` BindingID int64 `json:"bindingID" binding:"required"` Info DataBinding `json:"info"` // 可选,用于精细筛选,功能暂未实现 } type ApplyLevel struct { serder.Metadata `union:"apply"` QueryBindingDataParamBase Type string `json:"type" binding:"required"` UserID cdssdk.UserID `json:"userID" binding:"required"` Info DataBinding `json:"info"` // 可选,用于精细筛选,功能暂未实现 } type PublicLevel struct { serder.Metadata `union:"public"` QueryBindingDataParamBase UserID cdssdk.UserID `json:"userID" binding:"required"` Type string `json:"type" binding:"required"` Info DataBinding `json:"info"` // 可选,用于精细筛选,功能暂未实现 }