add experimental feature

This commit is contained in:
Louis Dureuil
2025-09-01 16:16:24 +02:00
parent 8933d87031
commit 00d1006cd9
4 changed files with 31 additions and 0 deletions

View File

@ -158,6 +158,19 @@ impl RoFeatures {
.into())
}
}
pub fn check_vector_store_setting(&self, disabled_action: &'static str) -> Result<()> {
if self.runtime.vector_store_setting {
Ok(())
} else {
Err(FeatureNotEnabledError {
disabled_action,
feature: "vector_store_setting",
issue_link: "https://github.com/orgs/meilisearch/discussions/860",
}
.into())
}
}
}
impl FeatureData {

View File

@ -21,6 +21,7 @@ pub struct RuntimeTogglableFeatures {
pub composite_embedders: bool,
pub chat_completions: bool,
pub multimodal: bool,
pub vector_store_setting: bool,
}
#[derive(Default, Debug, Clone, Copy)]

View File

@ -205,6 +205,7 @@ struct Infos {
experimental_no_snapshot_compaction: bool,
experimental_no_edition_2024_for_dumps: bool,
experimental_no_edition_2024_for_settings: bool,
experimental_vector_store_setting: bool,
gpu_enabled: bool,
db_path: bool,
import_dump: bool,
@ -307,6 +308,7 @@ impl Infos {
composite_embedders,
chat_completions,
multimodal,
vector_store_setting,
} = features;
// We're going to override every sensible information.
@ -332,6 +334,7 @@ impl Infos {
experimental_embedding_cache_entries,
experimental_no_snapshot_compaction,
experimental_no_edition_2024_for_dumps,
experimental_vector_store_setting: vector_store_setting,
gpu_enabled: meilisearch_types::milli::vector::is_cuda_enabled(),
db_path: db_path != PathBuf::from("./data.ms"),
import_dump: import_dump.is_some(),

View File

@ -55,6 +55,7 @@ pub fn configure(cfg: &mut web::ServiceConfig) {
composite_embedders: Some(false),
chat_completions: Some(false),
multimodal: Some(false),
vector_store_setting: Some(false),
})),
(status = 401, description = "The authorization header is missing", body = ResponseError, content_type = "application/json", example = json!(
{
@ -103,6 +104,8 @@ pub struct RuntimeTogglableFeatures {
pub chat_completions: Option<bool>,
#[deserr(default)]
pub multimodal: Option<bool>,
#[deserr(default)]
pub vector_store_setting: Option<bool>,
}
impl From<meilisearch_types::features::RuntimeTogglableFeatures> for RuntimeTogglableFeatures {
@ -117,6 +120,7 @@ impl From<meilisearch_types::features::RuntimeTogglableFeatures> for RuntimeTogg
composite_embedders,
chat_completions,
multimodal,
vector_store_setting,
} = value;
Self {
@ -129,6 +133,7 @@ impl From<meilisearch_types::features::RuntimeTogglableFeatures> for RuntimeTogg
composite_embedders: Some(composite_embedders),
chat_completions: Some(chat_completions),
multimodal: Some(multimodal),
vector_store_setting: Some(vector_store_setting),
}
}
}
@ -144,6 +149,7 @@ pub struct PatchExperimentalFeatureAnalytics {
composite_embedders: bool,
chat_completions: bool,
multimodal: bool,
vector_store_setting: bool,
}
impl Aggregate for PatchExperimentalFeatureAnalytics {
@ -162,6 +168,7 @@ impl Aggregate for PatchExperimentalFeatureAnalytics {
composite_embedders: new.composite_embedders,
chat_completions: new.chat_completions,
multimodal: new.multimodal,
vector_store_setting: new.vector_store_setting,
})
}
@ -189,6 +196,7 @@ impl Aggregate for PatchExperimentalFeatureAnalytics {
composite_embedders: Some(false),
chat_completions: Some(false),
multimodal: Some(false),
vector_store_setting: Some(false),
})),
(status = 401, description = "The authorization header is missing", body = ResponseError, content_type = "application/json", example = json!(
{
@ -232,6 +240,10 @@ async fn patch_features(
.unwrap_or(old_features.composite_embedders),
chat_completions: new_features.0.chat_completions.unwrap_or(old_features.chat_completions),
multimodal: new_features.0.multimodal.unwrap_or(old_features.multimodal),
vector_store_setting: new_features
.0
.vector_store_setting
.unwrap_or(old_features.vector_store_setting),
};
// explicitly destructure for analytics rather than using the `Serialize` implementation, because
@ -247,6 +259,7 @@ async fn patch_features(
composite_embedders,
chat_completions,
multimodal,
vector_store_setting,
} = new_features;
analytics.publish(
@ -260,6 +273,7 @@ async fn patch_features(
composite_embedders,
chat_completions,
multimodal,
vector_store_setting,
},
&req,
);