diff --git a/platform/build-scripts/src/org/jetbrains/intellij/build/CommunityLibraryLicenses.kt b/platform/build-scripts/src/org/jetbrains/intellij/build/CommunityLibraryLicenses.kt
index 8d6217fd94d6..d0f45a43f537 100644
--- a/platform/build-scripts/src/org/jetbrains/intellij/build/CommunityLibraryLicenses.kt
+++ b/platform/build-scripts/src/org/jetbrains/intellij/build/CommunityLibraryLicenses.kt
@@ -1222,6 +1222,7 @@ object CommunityLibraryLicenses {
jetbrainsLibrary("completion-ranking-ruby-exp"),
jetbrainsLibrary("completion-ranking-rust-exp"),
jetbrainsLibrary("completion-ranking-scala-exp"),
+ jetbrainsLibrary("completion-ranking-sh-exp"),
jetbrainsLibrary("completion-ranking-swift-exp"),
jetbrainsLibrary("completion-ranking-typescript-exp"),
jetbrainsLibrary("debugger-agent"),
diff --git a/plugins/completion-ml-ranking-models/intellij.completionMlRankingModels.iml b/plugins/completion-ml-ranking-models/intellij.completionMlRankingModels.iml
index a7ebe8bcd4bd..adcd6ebdf1ff 100644
--- a/plugins/completion-ml-ranking-models/intellij.completionMlRankingModels.iml
+++ b/plugins/completion-ml-ranking-models/intellij.completionMlRankingModels.iml
@@ -299,5 +299,23 @@
+
+
+
+
+
+ 2ab8007555b8fdedb7efce607cc77c03da85fcf4ea2e8376b9a352bed5f04f4a
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/plugins/completion-ml-ranking-models/resources/META-INF/plugin.xml b/plugins/completion-ml-ranking-models/resources/META-INF/plugin.xml
index 4465ce7c14de..c0e7d3414989 100644
--- a/plugins/completion-ml-ranking-models/resources/META-INF/plugin.xml
+++ b/plugins/completion-ml-ranking-models/resources/META-INF/plugin.xml
@@ -30,5 +30,6 @@
+
\ No newline at end of file
diff --git a/plugins/completion-ml-ranking-models/resources/messages/CompletionRankingModelsBundle.properties b/plugins/completion-ml-ranking-models/resources/messages/CompletionRankingModelsBundle.properties
index ed082a0ba047..23509d2515e2 100644
--- a/plugins/completion-ml-ranking-models/resources/messages/CompletionRankingModelsBundle.properties
+++ b/plugins/completion-ml-ranking-models/resources/messages/CompletionRankingModelsBundle.properties
@@ -13,3 +13,4 @@ ml.completion.experiment.model.swift=Swift
ml.completion.experiment.model.cidr=C/C++
ml.completion.experiment.model.html=HTML
ml.completion.experiment.model.css=CSS
+ml.completion.experiment.model.sh=Shell Script
diff --git a/plugins/completion-ml-ranking-models/src/com/jetbrains/completion/ml/ranker/ExperimentalShMLRankingProvider.kt b/plugins/completion-ml-ranking-models/src/com/jetbrains/completion/ml/ranker/ExperimentalShMLRankingProvider.kt
new file mode 100644
index 000000000000..779f56006e1f
--- /dev/null
+++ b/plugins/completion-ml-ranking-models/src/com/jetbrains/completion/ml/ranker/ExperimentalShMLRankingProvider.kt
@@ -0,0 +1,14 @@
+// Copyright 2000-2024 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
+package com.jetbrains.completion.ml.ranker
+
+import com.intellij.completion.ml.ranker.ExperimentModelProvider
+import com.intellij.internal.ml.catboost.CatBoostJarCompletionModelProvider
+import com.intellij.lang.Language
+
+class ExperimentalShMLRankingProvider : CatBoostJarCompletionModelProvider(
+ CompletionRankingModelsBundle.message("ml.completion.experiment.model.sh"), "sh_features_exp", "sh_model_exp"), ExperimentModelProvider {
+
+ override fun isLanguageSupported(language: Language): Boolean = language.id.compareTo("shell script", ignoreCase = true) == 0
+
+ override fun experimentGroupNumber(): Int = 13
+}
diff --git a/plugins/completion-ml-ranking-models/test/com/jetbrains/completion/ml/ranker/MetadataConsistencyTest.kt b/plugins/completion-ml-ranking-models/test/com/jetbrains/completion/ml/ranker/MetadataConsistencyTest.kt
index 5d38e05ea13b..5115570d4f63 100644
--- a/plugins/completion-ml-ranking-models/test/com/jetbrains/completion/ml/ranker/MetadataConsistencyTest.kt
+++ b/plugins/completion-ml-ranking-models/test/com/jetbrains/completion/ml/ranker/MetadataConsistencyTest.kt
@@ -1,4 +1,4 @@
-// Copyright 2000-2022 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
+// Copyright 2000-2024 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
package com.jetbrains.completion.ml.ranker
import org.junit.Test
@@ -51,4 +51,7 @@ class MetadataConsistencyTest {
@Test
fun testCSSMetadata() = ExperimentalCSSMLRankingProvider().assertModelMetadataConsistent()
+
+ @Test
+ fun testShMetadata() = ExperimentalShMLRankingProvider().assertModelMetadataConsistent()
}
diff --git a/plugins/completion-ml-ranking/resources/experiment.json b/plugins/completion-ml-ranking/resources/experiment.json
index f668b6d62a51..b430977521e7 100644
--- a/plugins/completion-ml-ranking/resources/experiment.json
+++ b/plugins/completion-ml-ranking/resources/experiment.json
@@ -219,6 +219,12 @@
"experimentBucketsCount": 4,
"includeGroups": [ 7, 22, 28, 24 ],
"shouldLogElementFeatures": true
+ },
+ {
+ "id": "shell script",
+ "experimentBucketsCount": 4,
+ "includeGroups": [ 7, 12, 13 ],
+ "shouldLogElementFeatures": true
}
]
}
\ No newline at end of file