Add MLFlow Rest API with 3 endpoints
- What does this MR do and why?
- How to set up and validate locally
- DB Migration
- DB Queries
- Difference between APIs
- MR acceptance checklist
What does this MR do and why?
We are incubating ML Experiment Tracking as a GitLab feature, and to ease in users we aim to provide API parity to MLFlow API (#370478 (closed)). This MR adds the first three endpoints
How to set up and validate locally
-
Create a Project and an personal access token:
export PROJECT_ID=<Your Project Id> export GITLAB_PAT=<your api token>
-
Create an Experiment:
curl -X POST -H "Authorization: Bearer $GITLAB_PAT" -d name=my_cool_experiment http://gdk.test:3000/api/v4/projects/$PROJECT_ID/ml/mflow/api/2.0/mlflow/experiments/create
-
This should 404 as the FF is off
-
Enable the Feature flag
rails console echo "Feature.enable(:ml_experiment_tracking)" | bundle exec rails c
-
Create Again, now it should output
{"experiment_id"="1"}
curl -X POST -H "Authorization: Bearer $GITLAB_PAT" -d name=my_cool_experiment http://gdk.test:3000/api/v4/projects/$PROJECT_ID/ml/mflow/api/2.0/mlflow/experiments/create
{"experiment_id":"1"}
-
You should be able to see an experiment created
echo "::Ml::Experiment.all" | bundle exec rails c
-
Query by name
curl -X GET -H "Authorization: Bearer $GITLAB_PAT" http://gdk.test:3000/api/v4/projects/$PROJECT_ID/ml/mflow/api/2.0/mlflow/experiments/get-by-name?experiment_name=my_cool_experiment
{"experiment":{"experiment_id":"1","name":"my_cool_experiment","lifecycle_stage":"active","artifact_location":"not_implemented"}}
-
Query by experiment_id
curl -X GET -H "Authorization: Bearer $GITLAB_PAT" http://gdk.test:3000/api/v4/projects/$PROJECT_ID/ml/mflow/api/2.0/mlflow/experiments/get?experiment_id=1
{"experiment":{"experiment_id":"1","name":"my_cool_experiment","lifecycle_stage":"active","artifact_location":"not_implemented"}}
DB Migration
Up
rails db:migrate:down:main VERSION=20220818132108
main: == 20220818132108 AddDeletedOnToMlExperiments: migrating ======================
main: -- add_column(:ml_experiments, :deleted_on, :datetime_with_timezone, {:index=>true})
main: -> 0.0073s
main: == 20220818132108 AddDeletedOnToMlExperiments: migrated (0.0087s) =============
Down
rails db:migrate:down:main VERSION=20220818132108
main: == 20220818132108 AddDeletedOnToMlExperiments: reverting ======================
main: -- remove_column(:ml_experiments, :deleted_on, :datetime_with_timezone, {:index=>true})
main: -> 0.0061s
main: == 20220818132108 AddDeletedOnToMlExperiments: reverted (0.0138s) =============
DB Queries
ML::Experiment.find_by_project_id_and_iid
Ml::Experiment.by_project_id_and_iid(1, 1)
Ml::Experiment Load (12.8ms) SELECT "ml_experiments".* FROM "ml_experiments" WHERE "ml_experiments"."project_id" = 1 AND "ml_experiments"."iid" = 1 LIMIT 1 /*application:console,db_config_name:main,line:/app/models/ml/experiment.rb:21:in `by_project_id_and_iid'*
Plan: https://console.postgres.ai/gitlab/gitlab-production-tunnel-pg12/sessions/11796/commands/41821
ML::Experiment.find_by_project_and_name
Ml::Experiment.by_project_id_and_name(1, "abc")
Ml::Experiment Load (6.0ms) SELECT "ml_experiments".* FROM "ml_experiments" WHERE "ml_experiments"."project_id" = 1 AND "ml_experiments"."name" = 'abc' LIMIT 1
Plan: https://console.postgres.ai/gitlab/gitlab-production-tunnel-pg12/sessions/11796/commands/41819
ML::Experiment.has_record?
::Ml::Experiment.has_record?(29, 'my_cool_experiment')
Ml::Experiment Exists? (1.5ms) SELECT 1 AS one FROM "ml_experiments" WHERE "ml_experiments"."project_id" = 29 AND "ml_experiments"."name" = 'my_cool_experiment' LIMIT 1 /*application:console,db_config_name:main,line:/app/models/ml/experiment.rb:29:in `has_record?'*/
=> true
Plan: https://console.postgres.ai/gitlab/gitlab-production-tunnel-pg12/sessions/11796/commands/41820
Difference between APIs
The response below were generated with the script found in https://gitlab.com/gitlab-org/incubation-engineering/mlops/mlflow_experiment/-/blob/main/api_parity.py
Create Experiment
When name does not yet exist
GITLAB
POST -- http://gdk.test:3000/api/v4/projects/29/ml/mflow/api/2.0/mlflow/experiments/create
Params: {}
Body: {'name': 'aa2da357-282b-4a81-a39e-322f0eb70af9'}
Status Code: 201
Response Body: {'experiment_id': '12'}
MLFLOW
POST -- http://127.0.0.1:5000/api/2.0/mlflow/experiments/create
Params: {}
Body: {'name': 'aa2da357-282b-4a81-a39e-322f0eb70af9'}
Status Code: 200
Response Body: {'experiment_id': '21'}
When name already exists
GITLAB
POST -- http://gdk.test:3000/api/v4/projects/29/ml/mflow/api/2.0/mlflow/experiments/create
Params: {}
Body: {'name': 'aa2da357-282b-4a81-a39e-322f0eb70af9'}
Status Code: 400
Response Body: {'error_code': 'RESOURCE_ALREADY_EXISTS'}
MLFLOW
POST -- http://127.0.0.1:5000/api/2.0/mlflow/experiments/create
Params: {}
Body: {'name': 'aa2da357-282b-4a81-a39e-322f0eb70af9'}
Status Code: 400
Response Body: {'error_code': 'RESOURCE_ALREADY_EXISTS', 'message': "Experiment(name=aa2da357-282b-4a81-a39e-322f0eb70af9) already exists. Error: (raised as a result of Query-invoked autoflush; consider using a session.no_autoflush block if this flush is occurring prematurely)\n(sqlite3.IntegrityError) UNIQUE constraint failed: experiments.name\n[SQL: INSERT INTO experiments (name, artifact_location, lifecycle_stage) VALUES (?, ?, ?)]\n[parameters: ('aa2da357-282b-4a81-a39e-322f0eb70af9', '', 'active')]\n(Background on this error at: https://sqlalche.me/e/14/gkpj)"}
When name is missing
GITLAB
POST -- http://gdk.test:3000/api/v4/projects/29/ml/mflow/api/2.0/mlflow/experiments/create
Params: {}
Body: {'other_key': 'aa2da357-282b-4a81-a39e-322f0eb70af9'}
Status Code: 400
Response Body: {'error': 'name is missing'}
MLFLOW
POST -- http://127.0.0.1:5000/api/2.0/mlflow/experiments/create
Params: {}
Body: {'other_key': 'aa2da357-282b-4a81-a39e-322f0eb70af9'}
Status Code: 400
Response Body: {'error_code': 'INVALID_PARAMETER_VALUE', 'message': "Missing value for required parameter 'name'. See the API docs for more information about request parameters."}
Get By Id
When id exists
GITLAB
GET -- http://gdk.test:3000/api/v4/projects/29/ml/mflow/api/2.0/mlflow/experiments/get
Params: {'experiment_id': '12'}
Body: {}
Status Code: 200
Response Body: {'experiment': {'experiment_id': '12', 'name': 'aa2da357-282b-4a81-a39e-322f0eb70af9', 'lifecycle_stage': 'active', 'artifact_location': 'not_implemented'}}
MLFLOW
GET -- http://127.0.0.1:5000/api/2.0/mlflow/experiments/get
Params: {'experiment_id': '21'}
Body: {}
Status Code: 200
Response Body: {'experiment': {'experiment_id': '21', 'name': 'aa2da357-282b-4a81-a39e-322f0eb70af9', 'artifact_location': './mlruns2/21', 'lifecycle_stage': 'active'}}
When id does not exist
GITLAB
GET -- http://gdk.test:3000/api/v4/projects/29/ml/mflow/api/2.0/mlflow/experiments/get
Params: {'experiment_id': 'asasdfsadf'}
Body: {}
Status Code: 404
Response Body: {'error_code': 'RESOURCE_DOES_NOT_EXIST'}
MLFLOW
GET -- http://127.0.0.1:5000/api/2.0/mlflow/experiments/get
Params: {'experiment_id': 'asasdfsadf'}
Body: {}
Status Code: 404
Response Body: {'error_code': 'RESOURCE_DOES_NOT_EXIST', 'message': 'No Experiment with id=asasdfsadf exists'}
When id is missing
GITLAB
GET -- http://gdk.test:3000/api/v4/projects/29/ml/mflow/api/2.0/mlflow/experiments/get
Params: {'yolo': '12'}
Body: {}
Status Code: 404
Response Body: {'error_code': 'RESOURCE_DOES_NOT_EXIST'}
MLFLOW
GET -- http://127.0.0.1:5000/api/2.0/mlflow/experiments/get
Params: {'yolo': '12'}
Body: {}
Status Code: 200
Response Body: {'experiment': {'experiment_id': '0', 'name': 'Default', 'artifact_location': './mlruns2/0', 'lifecycle_stage': 'active'}}
Get By Name
When name exists
GITLAB
GET -- http://gdk.test:3000/api/v4/projects/29/ml/mflow/api/2.0/mlflow/experiments/get-by-name
Params: {'experiment_name': 'aa2da357-282b-4a81-a39e-322f0eb70af9'}
Body: {}
Status Code: 200
Response Body: {'experiment': {'experiment_id': '12', 'name': 'aa2da357-282b-4a81-a39e-322f0eb70af9', 'lifecycle_stage': 'active', 'artifact_location': 'not_implemented'}}
MLFLOW
GET -- http://127.0.0.1:5000/api/2.0/mlflow/experiments/get-by-name
Params: {'experiment_name': 'aa2da357-282b-4a81-a39e-322f0eb70af9'}
Body: {}
Status Code: 200
Response Body: {'experiment': {'experiment_id': '21', 'name': 'aa2da357-282b-4a81-a39e-322f0eb70af9', 'artifact_location': './mlruns2/21', 'lifecycle_stage': 'active'}}
When name does not exist
GITLAB
GET -- http://gdk.test:3000/api/v4/projects/29/ml/mflow/api/2.0/mlflow/experiments/get-by-name
Params: {'experiment_name': 'abcde'}
Body: {}
Status Code: 404
Response Body: {'error_code': 'RESOURCE_DOES_NOT_EXIST'}
MLFLOW
GET -- http://127.0.0.1:5000/api/2.0/mlflow/experiments/get-by-name
Params: {'experiment_name': 'abcde'}
Body: {}
Status Code: 404
Response Body: {'error_code': 'RESOURCE_DOES_NOT_EXIST', 'message': "Could not find experiment with name 'abcde'"}
When name is missing
GITLAB
GET -- http://gdk.test:3000/api/v4/projects/29/ml/mflow/api/2.0/mlflow/experiments/get-by-name
Params: {'yolo': 'aa2da357-282b-4a81-a39e-322f0eb70af9'}
Body: {}
Status Code: 404
Response Body: {'error_code': 'RESOURCE_DOES_NOT_EXIST'}
MLFLOW
GET -- http://127.0.0.1:5000/api/2.0/mlflow/experiments/get-by-name
Params: {'yolo': 'aa2da357-282b-4a81-a39e-322f0eb70af9'}
Body: {}
Status Code: 404
Response Body: {'error_code': 'RESOURCE_DOES_NOT_EXIST', 'message': "Could not find experiment with name ''"}
MR acceptance checklist
This checklist encourages us to confirm any changes have been analyzed to reduce risks in quality, performance, reliability, security, and maintainability.
-
I have evaluated the MR acceptance checklist for this MR.
Related to #370478 (closed)
Merge request reports
Activity
changed milestone to %15.4
assigned to @eduardobonet
added SingleEngineerGroup label
added 629 commits
-
d4926ed3...b26b4cae - 628 commits from branch
master
- d2b26c37 - Adds endpoint to MLFlow api
-
d4926ed3...b26b4cae - 628 commits from branch
Suggested Reviewers (beta)
The individuals below may be good candidates to participate in the review based on various factors.
You can use slash commands in comments to quickly assign
/assign_reviewer @user1
.Suggested Reviewers @rspeicher
,@mayra-cabrera
,@psimyn
,@rymai
,@marin
If you do not believe these suggestions are useful, please apply the label Bad Suggested Reviewer. You can also provide feedback for this feature on this issue:
https://gitlab.com/gitlab-org/gitlab/-/issues/357923
.Automatically generated by Suggested Reviewers Bot - an experimental ML-based recommendation engine created by ~"group::applied ml".
- A deleted user
added database databasereview pending feature flag labels
2 Warnings 2d88c363: Commits that change 30 or more lines across at least 3 files should describe these changes in the commit body. For more information, take a look at our Commit message guidelines. featureaddition and featureenhancement merge requests normally have a documentation change. Consider adding a documentation update or confirming the documentation plan with the Technical Writer counterpart.
For more information, see:
- The Handbook page on merge request types.
- The definition of done documentation.
Reviewer roulette
Changes that require review have been detected!
Please refer to the table below for assigning reviewers and maintainers suggested by Danger in the specified category:
Category Reviewer Maintainer backend Erick Bajao ( @iamricecake
) (UTC+8, 6 hours ahead of@eduardobonet
)Marius Bobin ( @mbobin
) (UTC+3, 1 hour ahead of@eduardobonet
)database Nikola Milojevic ( @nmilojevic1
) (UTC+2, same timezone as@eduardobonet
)Alex Ives ( @alexives
) (UTC-5, 7 hours behind@eduardobonet
)~"migration" No reviewer available No maintainer available ~"codeowners" Reviewer review is optional for ~"codeowners" Savas Vedova ( @svedova
) (UTC+3, 1 hour ahead of@eduardobonet
)To spread load more evenly across eligible reviewers, Danger has picked a candidate for each review slot, based on their timezone. Feel free to override these selections if you think someone else would be better-suited or use the GitLab Review Workload Dashboard to find other available reviewers.
To read more on how to use the reviewer roulette, please take a look at the Engineering workflow and code review guidelines. Please consider assigning a reviewer or maintainer who is a domain expert in the area of the merge request.
Once you've decided who will review this merge request, assign them as a reviewer! Danger does not automatically notify them for you.
If needed, you can retry the
danger-review
job that generated this comment.Generated by
DangerAllure report
allure-report-publisher
generated test report!review-qa-blocking:
test report for f90f3d74expand test summary
+-----------------------------------------------------------------------------------------+ | suites summary | +------------------------------------+--------+--------+---------+-------+-------+--------+ | | passed | failed | skipped | flaky | total | result | +------------------------------------+--------+--------+---------+-------+-------+--------+ | Create | 28 | 0 | 1 | 7 | 29 | ❗ | | Verify | 12 | 0 | 1 | 6 | 13 | ❗ | | Version sanity check | 0 | 0 | 1 | 0 | 1 | ➖ | | Manage | 46 | 0 | 3 | 15 | 49 | ❗ | | Plan | 47 | 0 | 1 | 9 | 48 | ❗ | | Feature flag handler sanity checks | 9 | 0 | 0 | 0 | 9 | ✅ | | Protect | 2 | 0 | 0 | 1 | 2 | ❗ | | Secure | 2 | 0 | 0 | 2 | 2 | ❗ | | Configure | 0 | 0 | 1 | 0 | 1 | ➖ | | Package | 0 | 0 | 1 | 0 | 1 | ➖ | +------------------------------------+--------+--------+---------+-------+-------+--------+ | Total | 146 | 0 | 9 | 40 | 155 | ❗ | +------------------------------------+--------+--------+---------+-------+-------+--------+
package-and-qa-ff-enabled:
test report for f90f3d74expand test summary
+---------------------------------------------------------------------------+ | suites summary | +----------------------+--------+--------+---------+-------+-------+--------+ | | passed | failed | skipped | flaky | total | result | +----------------------+--------+--------+---------+-------+-------+--------+ | Manage | 300 | 0 | 9 | 24 | 309 | ❗ | | Create | 477 | 3 | 15 | 7 | 495 | ❌ | | Verify | 141 | 0 | 12 | 1 | 153 | ❗ | | Plan | 171 | 0 | 0 | 0 | 171 | ✅ | | Fulfillment | 6 | 0 | 33 | 0 | 39 | ✅ | | Secure | 63 | 0 | 6 | 4 | 69 | ❗ | | Release | 12 | 0 | 0 | 0 | 12 | ✅ | | Configure | 0 | 0 | 9 | 0 | 9 | ➖ | | Version sanity check | 0 | 0 | 3 | 0 | 3 | ➖ | | Package | 0 | 0 | 9 | 0 | 9 | ➖ | | Analytics | 6 | 0 | 0 | 0 | 6 | ✅ | | Protect | 6 | 0 | 0 | 0 | 6 | ✅ | +----------------------+--------+--------+---------+-------+-------+--------+ | Total | 1182 | 3 | 96 | 36 | 1281 | ❌ | +----------------------+--------+--------+---------+-------+-------+--------+
package-and-qa-ff-disabled:
test report for f90f3d74expand test summary
+---------------------------------------------------------------------------+ | suites summary | +----------------------+--------+--------+---------+-------+-------+--------+ | | passed | failed | skipped | flaky | total | result | +----------------------+--------+--------+---------+-------+-------+--------+ | Create | 477 | 3 | 15 | 3 | 495 | ❌ | | Verify | 141 | 0 | 12 | 0 | 153 | ✅ | | Manage | 300 | 0 | 9 | 22 | 309 | ❗ | | Secure | 63 | 0 | 6 | 0 | 69 | ✅ | | Plan | 171 | 0 | 0 | 0 | 171 | ✅ | | Configure | 0 | 0 | 9 | 0 | 9 | ➖ | | Package | 0 | 0 | 9 | 0 | 9 | ➖ | | Release | 12 | 0 | 0 | 0 | 12 | ✅ | | Analytics | 6 | 0 | 0 | 0 | 6 | ✅ | | Protect | 6 | 0 | 0 | 0 | 6 | ✅ | | Fulfillment | 6 | 0 | 33 | 0 | 39 | ✅ | | Version sanity check | 0 | 0 | 3 | 0 | 3 | ➖ | +----------------------+--------+--------+---------+-------+-------+--------+ | Total | 1182 | 3 | 96 | 25 | 1281 | ❌ | +----------------------+--------+--------+---------+-------+-------+--------+
e2e-package-and-test:
test report for 3f5376c4expand test summary
+---------------------------------------------------------------------------+ | suites summary | +----------------------+--------+--------+---------+-------+-------+--------+ | | passed | failed | skipped | flaky | total | result | +----------------------+--------+--------+---------+-------+-------+--------+ | Secure | 42 | 0 | 4 | 0 | 46 | ✅ | | Plan | 114 | 0 | 0 | 0 | 114 | ✅ | | Create | 320 | 0 | 10 | 4 | 330 | ❗ | | Verify | 86 | 0 | 16 | 4 | 102 | ❗ | | Manage | 198 | 0 | 8 | 4 | 206 | ❗ | | Package | 0 | 0 | 6 | 0 | 6 | ➖ | | Configure | 0 | 0 | 6 | 0 | 6 | ➖ | | Release | 8 | 0 | 0 | 0 | 8 | ✅ | | Version sanity check | 0 | 0 | 2 | 0 | 2 | ➖ | | Fulfillment | 4 | 0 | 22 | 0 | 26 | ✅ | | Protect | 4 | 0 | 0 | 0 | 4 | ✅ | | Analytics | 4 | 0 | 0 | 0 | 4 | ✅ | +----------------------+--------+--------+---------+-------+-------+--------+ | Total | 780 | 0 | 74 | 12 | 854 | ❗ | +----------------------+--------+--------+---------+-------+-------+--------+
e2e-review-qa-blocking:
test report for 3f5376c4expand test summary
+-----------------------------------------------------------------------------------------+ | suites summary | +------------------------------------+--------+--------+---------+-------+-------+--------+ | | passed | failed | skipped | flaky | total | result | +------------------------------------+--------+--------+---------+-------+-------+--------+ | Plan | 47 | 0 | 1 | 43 | 48 | ❗ | | Verify | 12 | 0 | 1 | 10 | 13 | ❗ | | Create | 28 | 0 | 1 | 24 | 29 | ❗ | | Manage | 57 | 0 | 3 | 46 | 60 | ❗ | | Feature flag handler sanity checks | 9 | 0 | 0 | 0 | 9 | ✅ | | Protect | 2 | 0 | 0 | 2 | 2 | ❗ | | Secure | 2 | 0 | 0 | 2 | 2 | ❗ | | Version sanity check | 0 | 0 | 1 | 0 | 1 | ➖ | | Package | 0 | 0 | 1 | 0 | 1 | ➖ | | Configure | 0 | 0 | 1 | 0 | 1 | ➖ | +------------------------------------+--------+--------+---------+-------+-------+--------+ | Total | 157 | 0 | 9 | 127 | 166 | ❗ | +------------------------------------+--------+--------+---------+-------+-------+--------+
- The
gitlab-qa-mirror
downstream pipeline for !95689 (081361e3) passed. - The
gitlab-qa-mirror
downstream pipeline for !95689 (081361e3) passed. - The
gitlab-qa-mirror
downstream pipeline for !95689 (b103cfac) passed. - The
gitlab-qa-mirror
downstream pipeline for !95689 (b103cfac) passed. - The
gitlab-qa-mirror
downstream pipeline for !95689 (ac082c2b) passed. - The
gitlab-qa-mirror
downstream pipeline for !95689 (ac082c2b) passed. - The
gitlab-qa-mirror
downstream pipeline for !95689 (aed93a1a) passed. - The
gitlab-qa-mirror
downstream pipeline for !95689 (aed93a1a) passed. - The
gitlab-qa-mirror
downstream pipeline for !95689 (57ecb95a) failed! - The
gitlab-qa-mirror
downstream pipeline for !95689 (57ecb95a) failed! - The
gitlab-qa-mirror
downstream pipeline for !95689 (d4c78350) failed! - The
gitlab-qa-mirror
downstream pipeline for !95689 (d4c78350) failed! - The
gitlab-qa-mirror
downstream pipeline for !95689 (4b20a696) failed! - The
gitlab-qa-mirror
downstream pipeline for !95689 (4b20a696) failed! - The
gitlab-qa-mirror
downstream pipeline for !95689 (f90f3d74) failed! - The
gitlab-qa-mirror
downstream pipeline for !95689 (f90f3d74) failed!
- The
added 67 commits
-
081361e3...b0f021c9 - 66 commits from branch
master
- b103cfac - Adds first endpoints for MLFlow Integration
-
081361e3...b0f021c9 - 66 commits from branch
added 1 commit
- cc214189 - Makes the responses more simillar to MLFlow server ones
added 1 commit
- aed93a1a - Makes the responses more simillar to MLFlow server ones
added 246 commits
-
aed93a1a...25e0d649 - 243 commits from branch
master
- 78bce203 - Adds first endpoints for MLFlow Integration
- 2144202a - Makes the responses more simillar to MLFlow server ones
- 57ecb95a - Improving compatibility
Toggle commit list-
aed93a1a...25e0d649 - 243 commits from branch
marked the checklist item I have evaluated the MR acceptance checklist for this MR. as completed
- Resolved by Bob Van Landuyt
Hi @drew, could you do the first backend review? @bauerdominic could you do the database one?
requested review from @drew and @bauerdominic
mentioned in issue gitlab-org/incubation-engineering/mlops/meta#61 (closed)
mentioned in epic &8560
- Resolved by Rémy Coutable
requested review from @krasio and removed review request for @bauerdominic
@bauerdominic
, thanks for approving this merge request.This is the first time the merge request is approved. To ensure full test coverage, a new pipeline has been started.
For more info, please refer to the following links:
added databaseapproved label and removed databasereview pending label
removed review request for @krasio
requested review from @carlad-gl and removed review request for @drew
@eduardobonet the breaking test in the pipeline will likely be fixed if you rebase master. There were changes merged a couple of days ago that added
p_ci_templates_implicit_security_dast_on_demand_api_scan
to thelib/gitlab/usage_data_counters/known_events/ci_templates.yml
fileadded 849 commits
-
f90f3d74...05342339 - 848 commits from branch
master
- ab9432e6 - Adds first endpoints for MLFlow Integration
-
f90f3d74...05342339 - 848 commits from branch
- Resolved by Rémy Coutable
- Resolved by Bob Van Landuyt
This all looks good @eduardobonet. Nice coverage with the specs
I've validated things locally and it's all working as expected. Just one non-blocking nitpick.FYI I don't have a ton of experience with GraphQL yet so I'd recommend getting some
from a relevant maintainer.Edited by Carla Drago
requested review from @rymai and removed review request for @carlad-gl
- Resolved by Bob Van Landuyt
- Resolved by Bob Van Landuyt
- Resolved by Bob Van Landuyt
- Resolved by Bob Van Landuyt
- Resolved by Bob Van Landuyt
- Resolved by Bob Van Landuyt
- Resolved by Bob Van Landuyt
- Resolved by Bob Van Landuyt
- Resolved by Bob Van Landuyt
- Resolved by Bob Van Landuyt
- Resolved by Bob Van Landuyt
- Resolved by Bob Van Landuyt
- Resolved by Bob Van Landuyt
- Resolved by Bob Van Landuyt
removed review request for @rymai
requested review from @reprazent
- Resolved by Bob Van Landuyt
removed review request for @reprazent
requested review from @reprazent
enabled an automatic merge when the pipeline for 8e479300 succeeds
Thanks @eduardobonet, nothing more from me!
added pipeline:run-as-if-foss label
added 499 commits
-
3f5376c4...b06ab5ee - 496 commits from branch
master
- bcca7cbb - Adds first endpoints for MLFlow Integration
- 7661e68e - Adds small comestic improvements
- 2d88c363 - Improves test cases
Toggle commit list-
3f5376c4...b06ab5ee - 496 commits from branch
enabled an automatic merge when the pipeline for 70dff25b succeeds
mentioned in commit c95110f0
added workflowstaging-canary label
added workflowcanary label and removed workflowstaging-canary label
added workflowstaging label and removed workflowcanary label
added workflowproduction label and removed workflowstaging label
mentioned in issue #370478 (closed)
added workflowpost-deploy-db-production label and removed workflowproduction label
added releasedcandidate label
mentioned in merge request kubitus-project/kubitus-installer!1453 (merged)
mentioned in merge request !98664 (merged)
added Model Experiments label
mentioned in issue gitlab-org/quality/triage-reports#15298 (closed)
mentioned in issue gitlab-org/quality/triage-reports#15722 (closed)
mentioned in issue gitlab-org/quality/triage-reports#16027 (closed)
mentioned in issue gitlab-org/quality/triage-reports#16490 (closed)
mentioned in issue gitlab-org/quality/triage-reports#17021 (closed)
mentioned in issue gitlab-org/quality/triage-reports#17480 (closed)
mentioned in issue gitlab-org/quality/triage-reports#17939 (closed)
mentioned in issue gitlab-org/quality/triage-reports#18472 (closed)
mentioned in issue gitlab-org/quality/triage-reports#18950 (closed)
mentioned in issue gitlab-org/quality/triage-reports#19403 (closed)
mentioned in issue gitlab-org/quality/triage-reports#20633 (closed)
mentioned in issue gitlab-org/quality/triage-reports#20995 (closed)