Add settings route

This commit is contained in:
Louis Dureuil
2025-09-01 16:36:24 +02:00
parent 00d1006cd9
commit 4ccce18d7b
6 changed files with 73 additions and 1 deletions

View File

@ -520,6 +520,17 @@ make_setting_routes!(
camelcase_attr: "chat",
analytics: ChatAnalytics
},
{
route: "/vector-store",
update_verb: patch,
value_type: meilisearch_types::milli::vector::VectorStoreBackend,
err_type: meilisearch_types::deserr::DeserrJsonError<
meilisearch_types::error::deserr_codes::InvalidSettingsVectorStore,
>,
attr: vector_store,
camelcase_attr: "vectorStore",
analytics: VectorStoreAnalytics
},
);
#[utoipa::path(
@ -610,6 +621,7 @@ pub async fn update_all(
facet_search: FacetSearchAnalytics::new(new_settings.facet_search.as_ref().set()),
prefix_search: PrefixSearchAnalytics::new(new_settings.prefix_search.as_ref().set()),
chat: ChatAnalytics::new(new_settings.chat.as_ref().set()),
vector_store: VectorStoreAnalytics::new(new_settings.vector_store.as_ref().set()),
},
&req,
);
@ -665,10 +677,17 @@ pub async fn get_all(
let index = index_scheduler.index(&index_uid)?;
let rtxn = index.read_txn()?;
let mut new_settings = settings(&index, &rtxn, SecretPolicy::HideSecrets)?;
if index_scheduler.features().check_chat_completions("showing index `chat` settings").is_err() {
let features = index_scheduler.features();
if features.check_chat_completions("showing index `chat` settings").is_err() {
new_settings.chat = Setting::NotSet;
}
if features.check_vector_store_setting("showing index `vectorStore` settings").is_err() {
new_settings.vector_store = Setting::NotSet;
}
debug!(returns = ?new_settings, "Get all settings");
Ok(HttpResponse::Ok().json(new_settings))
}
@ -770,5 +789,9 @@ fn validate_settings(
features.check_chat_completions("setting `chat` in the index settings")?;
}
if let Setting::Set(_) = &settings.vector_store {
features.check_vector_store_setting("setting `vectorStore` in the index settings")?;
}
Ok(settings.validate()?)
}

View File

@ -8,6 +8,7 @@ use std::collections::{BTreeMap, BTreeSet, HashSet};
use meilisearch_types::facet_values_sort::FacetValuesSort;
use meilisearch_types::locales::{Locale, LocalizedAttributesRuleView};
use meilisearch_types::milli::update::Setting;
use meilisearch_types::milli::vector::VectorStoreBackend;
use meilisearch_types::milli::FilterableAttributesRule;
use meilisearch_types::settings::{
ChatSettings, FacetingSettings, PaginationSettings, PrefixSearchSettings,
@ -40,6 +41,7 @@ pub struct SettingsAnalytics {
pub facet_search: FacetSearchAnalytics,
pub prefix_search: PrefixSearchAnalytics,
pub chat: ChatAnalytics,
pub vector_store: VectorStoreAnalytics,
}
impl Aggregate for SettingsAnalytics {
@ -200,6 +202,10 @@ impl Aggregate for SettingsAnalytics {
value: new.prefix_search.value.or(self.prefix_search.value),
},
chat: ChatAnalytics { set: new.chat.set | self.chat.set },
vector_store: VectorStoreAnalytics {
set: new.vector_store.set | self.vector_store.set,
value: new.vector_store.value.or(self.vector_store.value),
},
})
}
@ -693,3 +699,19 @@ impl ChatAnalytics {
SettingsAnalytics { chat: self, ..Default::default() }
}
}
#[derive(Serialize, Default)]
pub struct VectorStoreAnalytics {
pub set: bool,
pub value: Option<VectorStoreBackend>,
}
impl VectorStoreAnalytics {
pub fn new(settings: Option<&VectorStoreBackend>) -> Self {
Self { set: settings.is_some(), value: settings.copied() }
}
pub fn into_settings(self) -> SettingsAnalytics {
SettingsAnalytics { vector_store: self, ..Default::default() }
}
}