1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
|
# frozen_string_literal: true
module API
module Ml
module Mlflow
class ModelVersions < ::API::Base
feature_category :mlops
before do
check_api_read!
check_api_model_registry_read!
check_api_write! if route.settings.dig(:api, :write)
check_api_model_registry_write! if route.settings.dig(:model_registry, :write)
end
resource 'model-versions' do
desc 'Creates a Model Version.' do
success Entities::Ml::Mlflow::ModelVersion
detail 'MLFlow Model Versions map to GitLab Model Versions. https://mlflow.org/docs/2.6.0/rest-api.html#create-modelversion'
end
route_setting :api, write: true
route_setting :model_registry, write: true
params do
# The name param is actually required, however it is listed as optional here
# we can send a custom error response required by MLFlow
optional :name, type: String,
desc: 'Register model under this name This field is required.'
optional :description, type: String,
desc: 'Optional description for model version.'
end
post 'create', urgency: :low do
present ::Ml::CreateModelVersionService.new(
model,
{
model_name: params[:name],
description: params[:description]
}
).execute,
with: Entities::Ml::Mlflow::ModelVersion,
root: :model_version
end
desc 'Fetch model version by name and version' do
success Entities::Ml::Mlflow::ModelVersion
detail 'https://mlflow.org/docs/2.6.0/rest-api.html#get-modelversion'
end
params do
requires :name, type: String, desc: 'Model version name'
requires :version, type: String, desc: 'Model version number'
end
get 'get', urgency: :low do
present find_model_version(user_project, params[:name], params[:version]),
with: Entities::Ml::Mlflow::ModelVersion, root: :model_version
end
desc 'Updates a Model Version.' do
success Entities::Ml::Mlflow::ModelVersion
detail 'https://mlflow.org/docs/2.6.0/rest-api.html#update-modelversion'
end
route_setting :api, write: true
route_setting :model_registry, write: true
params do
# These params are actually required, however it is listed as optional here
# we can send a custom error response required by MLFlow
optional :name, type: String, desc: 'Model version name'
optional :version, type: String, desc: 'Model version number'
optional :description, type: String, desc: 'Model version description'
end
patch 'update', urgency: :low do
invalid_parameter! unless params[:name] && params[:version] && params[:description]
result = ::Ml::ModelVersions::UpdateModelVersionService.new(
user_project, params[:name], params[:version], params[:description]
).execute
update_failed! unless result.success?
present result.payload, with: Entities::Ml::Mlflow::ModelVersion, root: :model_version
end
end
end
end
end
end
|