diff --git a/crates/index-scheduler/src/lib.rs b/crates/index-scheduler/src/lib.rs index 3a2bea40b..639facd44 100644 --- a/crates/index-scheduler/src/lib.rs +++ b/crates/index-scheduler/src/lib.rs @@ -56,7 +56,7 @@ use meilisearch_types::features::{ }; use meilisearch_types::heed::byteorder::BE; use meilisearch_types::heed::types::{DecodeIgnore, SerdeJson, Str, I128}; -use meilisearch_types::heed::{self, Database, Env, RoTxn, RwTxn, WithoutTls}; +use meilisearch_types::heed::{self, Database, Env, RoTxn, WithoutTls}; use meilisearch_types::milli::index::IndexEmbeddingConfig; use meilisearch_types::milli::update::IndexerConfig; use meilisearch_types::milli::vector::{Embedder, EmbedderOptions, EmbeddingConfigs}; @@ -311,11 +311,7 @@ impl IndexScheduler { Ok(this) } - pub fn write_txn(&self) -> Result { - self.env.write_txn().map_err(|e| e.into()) - } - - pub fn read_txn(&self) -> Result> { + fn read_txn(&self) -> Result> { self.env.read_txn().map_err(|e| e.into()) } @@ -901,8 +897,9 @@ impl IndexScheduler { res.map(EmbeddingConfigs::new) } - pub fn chat_settings(&self, rtxn: &RoTxn, uid: &str) -> Result> { - self.chat_settings.get(rtxn, uid).map_err(Into::into) + pub fn chat_settings(&self, uid: &str) -> Result> { + let rtxn = self.env.read_txn()?; + self.chat_settings.get(&rtxn, uid).map_err(Into::into) } /// Return true if chat workspace exists. @@ -911,17 +908,18 @@ impl IndexScheduler { Ok(self.chat_settings.remap_data_type::().get(&rtxn, name)?.is_some()) } - pub fn put_chat_settings( - &self, - wtxn: &mut RwTxn, - uid: &str, - settings: &ChatCompletionSettings, - ) -> Result<()> { - self.chat_settings.put(wtxn, uid, settings).map_err(Into::into) + pub fn put_chat_settings(&self, uid: &str, settings: &ChatCompletionSettings) -> Result<()> { + let mut wtxn = self.env.write_txn()?; + self.chat_settings.put(&mut wtxn, uid, settings)?; + wtxn.commit()?; + Ok(()) } - pub fn delete_chat_settings(&self, wtxn: &mut RwTxn, uid: &str) -> Result { - self.chat_settings.delete(wtxn, uid).map_err(Into::into) + pub fn delete_chat_settings(&self, uid: &str) -> Result { + let mut wtxn = self.env.write_txn()?; + let deleted = self.chat_settings.delete(&mut wtxn, uid)?; + wtxn.commit()?; + Ok(deleted) } } diff --git a/crates/meilisearch/src/routes/chats/chat_completions.rs b/crates/meilisearch/src/routes/chats/chat_completions.rs index f65c958ee..786398cf7 100644 --- a/crates/meilisearch/src/routes/chats/chat_completions.rs +++ b/crates/meilisearch/src/routes/chats/chat_completions.rs @@ -315,8 +315,7 @@ async fn non_streamed_chat( )); let filters = index_scheduler.filters(); - let rtxn = index_scheduler.read_txn()?; - let chat_settings = match index_scheduler.chat_settings(&rtxn, workspace_uid).unwrap() { + let chat_settings = match index_scheduler.chat_settings(workspace_uid).unwrap() { Some(settings) => settings, None => { return Err(ResponseError::from_msg( @@ -413,8 +412,7 @@ async fn streamed_chat( index_scheduler.features().check_chat_completions("using the /chats chat completions route")?; let filters = index_scheduler.filters(); - let rtxn = index_scheduler.read_txn()?; - let chat_settings = match index_scheduler.chat_settings(&rtxn, workspace_uid)? { + let chat_settings = match index_scheduler.chat_settings(workspace_uid)? { Some(settings) => settings, None => { return Err(ResponseError::from_msg( @@ -423,7 +421,6 @@ async fn streamed_chat( )) } }; - drop(rtxn); let config = Config::new(&chat_settings); let auth_token = extract_token_from_request(&req)?.unwrap().to_string(); diff --git a/crates/meilisearch/src/routes/chats/mod.rs b/crates/meilisearch/src/routes/chats/mod.rs index 7a868fd45..c381a20c1 100644 --- a/crates/meilisearch/src/routes/chats/mod.rs +++ b/crates/meilisearch/src/routes/chats/mod.rs @@ -72,10 +72,8 @@ pub async fn delete_chat( ) -> Result { index_scheduler.features().check_chat_completions("deleting a chat")?; - let mut wtxn = index_scheduler.write_txn()?; let workspace_uid = workspace_uid.into_inner(); - if index_scheduler.delete_chat_settings(&mut wtxn, &workspace_uid)? { - wtxn.commit()?; + if index_scheduler.delete_chat_settings(&workspace_uid)? { Ok(HttpResponse::NoContent().finish()) } else { Err(ResponseError::from_msg(format!("chat {workspace_uid} not found"), Code::ChatNotFound)) diff --git a/crates/meilisearch/src/routes/chats/settings.rs b/crates/meilisearch/src/routes/chats/settings.rs index ab696f68a..cd1ce5767 100644 --- a/crates/meilisearch/src/routes/chats/settings.rs +++ b/crates/meilisearch/src/routes/chats/settings.rs @@ -42,8 +42,7 @@ async fn get_settings( let ChatsParam { workspace_uid } = chats_param.into_inner(); // TODO do a spawn_blocking here ??? - let rtxn = index_scheduler.read_txn()?; - let mut settings = match index_scheduler.chat_settings(&rtxn, &workspace_uid)? { + let mut settings = match index_scheduler.chat_settings(&workspace_uid)? { Some(settings) => settings, None => { return Err(ResponseError::from_msg( @@ -68,8 +67,7 @@ async fn patch_settings( let ChatsParam { workspace_uid } = chats_param.into_inner(); // TODO do a spawn_blocking here - let mut wtxn = index_scheduler.write_txn()?; - let old_settings = index_scheduler.chat_settings(&wtxn, &workspace_uid)?.unwrap_or_default(); + let old_settings = index_scheduler.chat_settings(&workspace_uid)?.unwrap_or_default(); let prompts = match new.prompts { Setting::Set(new_prompts) => DbChatCompletionPrompts { @@ -147,8 +145,7 @@ async fn patch_settings( // ); settings.validate()?; - index_scheduler.put_chat_settings(&mut wtxn, &workspace_uid, &settings)?; - wtxn.commit()?; + index_scheduler.put_chat_settings(&workspace_uid, &settings)?; settings.hide_secrets(); @@ -165,11 +162,9 @@ async fn reset_settings( index_scheduler.features().check_chat_completions("using the /chats/settings route")?; let ChatsParam { workspace_uid } = chats_param.into_inner(); - let mut wtxn = index_scheduler.write_txn()?; - if index_scheduler.chat_settings(&wtxn, &workspace_uid)?.is_some() { + if index_scheduler.chat_settings(&workspace_uid)?.is_some() { let settings = Default::default(); - index_scheduler.put_chat_settings(&mut wtxn, &workspace_uid, &settings)?; - wtxn.commit()?; + index_scheduler.put_chat_settings(&workspace_uid, &settings)?; Ok(HttpResponse::Ok().json(settings)) } else { Err(ResponseError::from_msg(