create model deploy as inference/serverless
(ctx context.Context, deployReq types.DeployActReq, req types.ModelRunReq)
| 638 | |
| 639 | // create model deploy as inference/serverless |
| 640 | func (c *ModelComponent) Deploy(ctx context.Context, deployReq types.DeployActReq, req types.ModelRunReq) (int64, error) { |
| 641 | m, err := c.ms.FindByPath(ctx, deployReq.Namespace, deployReq.Name) |
| 642 | if err != nil { |
| 643 | return -1, fmt.Errorf("cannot find model, %w", err) |
| 644 | } |
| 645 | if deployReq.DeployType == types.ServerlessType { |
| 646 | // only one service deploy was allowed |
| 647 | d, err := c.deploy.GetServerlessDeployByRepID(ctx, m.Repository.ID) |
| 648 | if err != nil { |
| 649 | return -1, fmt.Errorf("fail to get deploy, %w", err) |
| 650 | } |
| 651 | if d != nil { |
| 652 | return d.ID, nil |
| 653 | } |
| 654 | } |
| 655 | // found user id |
| 656 | user, err := c.us.FindByUsername(ctx, deployReq.CurrentUser) |
| 657 | if err != nil { |
| 658 | return -1, fmt.Errorf("cannot find user for deploy model, %w", err) |
| 659 | } |
| 660 | |
| 661 | if deployReq.DeployType == types.ServerlessType { |
| 662 | // Check if the user is an admin |
| 663 | isAdmin := c.isAdminRole(user) |
| 664 | if !isAdmin { |
| 665 | return -1, fmt.Errorf("need admin permission for Serverless deploy") |
| 666 | } |
| 667 | } |
| 668 | |
| 669 | frame, err := c.rtfm.FindEnabledByID(ctx, req.RuntimeFrameworkID) |
| 670 | if err != nil { |
| 671 | return -1, fmt.Errorf("cannot find available runtime framework, %w", err) |
| 672 | } |
| 673 | |
| 674 | // put repo-type and namespace/name in annotation |
| 675 | annotations := make(map[string]string) |
| 676 | annotations[types.ResTypeKey] = string(types.ModelRepo) |
| 677 | annotations[types.ResNameKey] = fmt.Sprintf("%s/%s", deployReq.Namespace, deployReq.Name) |
| 678 | annoStr, err := json.Marshal(annotations) |
| 679 | if err != nil { |
| 680 | return -1, fmt.Errorf("fail to create annotations for deploy model, %w", err) |
| 681 | } |
| 682 | |
| 683 | resource, err := c.SS.FindByID(ctx, req.ResourceID) |
| 684 | if err != nil { |
| 685 | return -1, fmt.Errorf("cannot find resource, %w", err) |
| 686 | } |
| 687 | |
| 688 | var hardware types.HardWare |
| 689 | err = json.Unmarshal([]byte(resource.Resources), &hardware) |
| 690 | if err != nil { |
| 691 | return -1, fmt.Errorf("invalid hardware setting, %w", err) |
| 692 | } |
| 693 | |
| 694 | _, err = c.deployer.CheckResourceAvailable(ctx, req.ClusterID, &hardware) |
| 695 | if err != nil { |
| 696 | return -1, fmt.Errorf("fail to check resource, %w", err) |
| 697 | } |
nothing calls this directly
no test coverage detected