diff options
Diffstat (limited to 'lib/api/ml_model_packages.rb')
-rw-r--r-- | lib/api/ml_model_packages.rb | 37 |
1 files changed, 31 insertions, 6 deletions
diff --git a/lib/api/ml_model_packages.rb b/lib/api/ml_model_packages.rb index fec72b03ffd..35d231d9fe1 100644 --- a/lib/api/ml_model_packages.rb +++ b/lib/api/ml_model_packages.rb @@ -6,7 +6,7 @@ module API include ::API::Helpers::Authentication ML_MODEL_PACKAGES_REQUIREMENTS = { - package_name: API::NO_SLASH_URL_PART_REGEX, + model_name: API::NO_SLASH_URL_PART_REGEX, file_name: API::NO_SLASH_URL_PART_REGEX }.freeze @@ -47,15 +47,15 @@ module API resource :projects, requirements: API::NAMESPACE_OR_PROJECT_REQUIREMENTS do namespace ':id/packages/ml_models' do params do - requires :package_name, type: String, desc: 'Package name', regexp: Gitlab::Regex.ml_model_name_regex, + requires :model_name, type: String, desc: 'Model name', regexp: Gitlab::Regex.ml_model_name_regex, file_path: true - requires :package_version, type: String, desc: 'Package version', + requires :model_version, type: String, desc: 'Model version', regexp: Gitlab::Regex.ml_model_version_regex requires :file_name, type: String, desc: 'Package file name', regexp: Gitlab::Regex.ml_model_file_name_regex, file_path: true optional :status, type: String, values: ALLOWED_STATUSES, desc: 'Package status' end - namespace ':package_name/*package_version/:file_name', requirements: ML_MODEL_PACKAGES_REQUIREMENTS do + namespace ':model_name/*model_version/:file_name', requirements: ML_MODEL_PACKAGES_REQUIREMENTS do desc 'Workhorse authorize model package file' do detail 'Introduced in GitLab 16.1' success code: 200 @@ -71,7 +71,7 @@ module API end desc 'Workhorse upload model package file' do - detail 'Introduced in GitLab 16.1' + detail 'Introduced in GitLab 16.2' success code: 201 failure [ { code: 401, message: 'Unauthorized' }, @@ -91,7 +91,12 @@ module API bad_request!('File is too large') if max_file_size_exceeded? - create_package_file_params = declared(params).merge(build: current_authenticated_job) + create_package_file_params = declared(params).merge( + build: current_authenticated_job, + package_name: params[:model_name], + package_version: params[:model_version] + ) + package_file = ::Packages::MlModel::CreatePackageFileService .new(project, current_user, create_package_file_params) .execute @@ -104,6 +109,26 @@ module API forbidden! end + + desc 'Download an ml_model package file' do + detail 'This feature was introduced in GitLab 16.2' + success code: 200 + failure [ + { code: 401, message: 'Unauthorized' }, + { code: 403, message: 'Forbidden' }, + { code: 404, message: 'Not Found' } + ] + tags %w[ml_model_registry] + end + get do + authorize_read_package!(project) + + package = ::Packages::MlModel::PackageFinder.new(project) + .execute!(params[:model_name], params[:model_version]) + package_file = ::Packages::PackageFileFinder.new(package, params[:file_name]).execute! + + present_package_file!(package_file) + end end end end |