diff --git a/app/models/ml/model_version.rb b/app/models/ml/model_version.rb
index 3450dc64b79f3419d1685fc7d07aea207aea3b8c..934b924e4afe8961dfb8de187db8e50f08fd93f9 100644
--- a/app/models/ml/model_version.rb
+++ b/app/models/ml/model_version.rb
@@ -19,8 +19,8 @@ class ModelVersion < ApplicationRecord
     delegate :name, to: :model
 
     class << self
-      def find_or_create(model, version, package)
-        create_with(package: package).find_or_create_by(project: model.project, model: model, version: version)
+      def find_or_create!(model, version, package)
+        create_with(package: package).find_or_create_by!(project: model.project, model: model, version: version)
       end
     end
 
diff --git a/app/services/ml/find_or_create_model_version_service.rb b/app/services/ml/find_or_create_model_version_service.rb
index 558374ad57bd036c23ff8590de742e193480e153..1316b2546b9d841e7d04b9caad9fca4faeeb3fc5 100644
--- a/app/services/ml/find_or_create_model_version_service.rb
+++ b/app/services/ml/find_or_create_model_version_service.rb
@@ -12,7 +12,7 @@ def initialize(project, params = {})
     def execute
       model = Ml::FindOrCreateModelService.new(project, name).execute
 
-      Ml::ModelVersion.find_or_create(model, version, package)
+      Ml::ModelVersion.find_or_create!(model, version, package)
     end
 
     private
diff --git a/app/services/packages/ml_model/create_package_file_service.rb b/app/services/packages/ml_model/create_package_file_service.rb
index 574f70940fcf3e25b3ef01e226eaa25ea09f6c2d..b1e8e8140159dce890a164d2346af87f8d0de685 100644
--- a/app/services/packages/ml_model/create_package_file_service.rb
+++ b/app/services/packages/ml_model/create_package_file_service.rb
@@ -5,7 +5,10 @@ module MlModel
     class CreatePackageFileService < BaseService
       def execute
         ::Packages::Package.transaction do
-          create_package_file(find_or_create_package)
+          package = find_or_create_package
+          find_or_create_model_version(package)
+
+          create_package_file(package)
         end
       end
 
@@ -30,6 +33,16 @@ def find_or_create_package
         package
       end
 
+      def find_or_create_model_version(package)
+        model_version_params = {
+          model_name: package.name,
+          version: package.version,
+          package: package
+        }
+
+        Ml::FindOrCreateModelVersionService.new(project, model_version_params).execute
+      end
+
       def create_package_file(package)
         file_params = {
           file: params[:file],
diff --git a/spec/models/ml/model_version_spec.rb b/spec/models/ml/model_version_spec.rb
index 9af9a2a56c6c7b19bc3d9b4052e92cfbb5c69cc0..7b8410f99a889644b0b77186f1bd954221ae9d42 100644
--- a/spec/models/ml/model_version_spec.rb
+++ b/spec/models/ml/model_version_spec.rb
@@ -88,13 +88,13 @@
     end
   end
 
-  describe '.find_or_create' do
+  describe '#find_or_create!' do
     let_it_be(:existing_model_version) { create(:ml_model_versions, model: model, version: 'abc') }
 
     let(:version) { existing_model_version.version }
     let(:package) { nil }
 
-    subject(:find_or_create) { described_class.find_or_create(model, version, package) }
+    subject(:find_or_create) { described_class.find_or_create!(model, version, package) }
 
     context 'if model version exists' do
       it 'returns the model version', :aggregate_failures do
diff --git a/spec/services/packages/ml_model/create_package_file_service_spec.rb b/spec/services/packages/ml_model/create_package_file_service_spec.rb
index d749aee227a70dbfb75d5cace597e392a20e93d0..32754279e172411430de13f22789830faebba9f3 100644
--- a/spec/services/packages/ml_model/create_package_file_service_spec.rb
+++ b/spec/services/packages/ml_model/create_package_file_service_spec.rb
@@ -41,19 +41,22 @@
           .to change { project.packages.ml_model.count }.by(1)
           .and change { Packages::PackageFile.count }.by(1)
           .and change { Packages::PackageFileBuildInfo.count }.by(0)
+          .and change { Ml::ModelVersion.count }.by(1)
 
         new_model = project.packages.ml_model.last
         package_file = new_model.package_files.last
+        new_model_version = Ml::ModelVersion.last
 
-        aggregate_failures do
-          expect(new_model.name).to eq('new_model')
-          expect(new_model.version).to eq('1.0.0')
-          expect(new_model.status).to eq('default')
-          expect(package_file.package).to eq(new_model)
-          expect(package_file.file_name).to eq(file_name)
-          expect(package_file.size).to eq(file.size)
-          expect(package_file.file_sha256).to eq(sha256)
-        end
+        expect(new_model.name).to eq('new_model')
+        expect(new_model.version).to eq('1.0.0')
+        expect(new_model.status).to eq('default')
+        expect(package_file.package).to eq(new_model)
+        expect(package_file.file_name).to eq(file_name)
+        expect(package_file.size).to eq(file.size)
+        expect(package_file.file_sha256).to eq(sha256)
+        expect(new_model_version.name).to eq('new_model')
+        expect(new_model_version.version).to eq('1.0.0')
+        expect(new_model_version.package).to eq(new_model)
       end
     end