@@ -820,6 +820,49 @@ impl Index {
820820 . await
821821 }
822822
823+ /// Get [embedders](https://www.meilisearch.com/docs/learn/experimental/vector_search) of the [Index].
824+ ///
825+ /// ```
826+ /// # use std::collections::HashMap;
827+ /// # use std::string::String;
828+ /// use meilisearch_sdk::{client::*, CustomEmbedderSettings, Embedder, ExperimentalFeatures, indexes::*, Settings};
829+ /// #
830+ /// # let MEILISEARCH_URL = option_env!("MEILISEARCH_URL").unwrap_or("http://localhost:7700");
831+ /// # let MEILISEARCH_API_KEY = option_env!("MEILISEARCH_API_KEY").unwrap_or("masterKey");
832+ /// #
833+ /// # futures::executor::block_on(async move {
834+ /// let client = Client::new(MEILISEARCH_URL, Some(MEILISEARCH_API_KEY));
835+ /// # client.create_index("get_embedders", None).await.unwrap().wait_for_completion(&client, None, None).await.unwrap();
836+ /// let index = client.index("get_embedders");
837+ ///
838+ /// # let mut features = ExperimentalFeatures::new(&client);
839+ /// # features.set_vector_store(true);
840+ /// # let res = features.update().await.unwrap();
841+ /// #
842+ /// # let t=index.set_settings(&Settings{
843+ /// # embedders:Some(HashMap::from([(String::from("default"),Embedder::UserProvided(CustomEmbedderSettings{dimensions:1}))])),
844+ /// # ..Settings::default()
845+ /// # }).await.unwrap();
846+ /// # t.wait_for_completion(&client, None, None).await.unwrap();
847+ /// let embedders = index.get_embedders().await.unwrap();
848+ /// # index.delete().await.unwrap().wait_for_completion(&client, None, None).await.unwrap();
849+ /// # });
850+ /// ```
851+ #[ cfg( feature = "experimental-vector-search" ) ]
852+ pub async fn get_embedders ( & self ) -> Result < HashMap < String , Embedder > , Error > {
853+ request :: < ( ) , ( ) , Option < HashMap < String , Embedder > > > (
854+ & format ! (
855+ "{}/indexes/{}/settings/embedders" ,
856+ self . client. host, self . uid
857+ ) ,
858+ self . client . get_api_key ( ) ,
859+ Method :: Get { query : ( ) } ,
860+ 200 ,
861+ )
862+ . await
863+ . map ( |r|r. unwrap_or_default ( ) )
864+ }
865+
823866 /// Update [settings](../settings/struct.Settings) of the [Index].
824867 ///
825868 /// Updates in the settings are partial. This means that any parameters corresponding to a `None` value will be left unchanged.
@@ -1847,6 +1890,39 @@ impl Index {
18471890 )
18481891 . await
18491892 }
1893+
1894+ /// Reset [embedders](https://www.meilisearch.com/docs/learn/experimental/vector_search) of the [Index].
1895+ ///
1896+ /// # Example
1897+ ///
1898+ /// ```
1899+ /// # use meilisearch_sdk::{client::*, indexes::*, settings::Settings};
1900+ /// #
1901+ /// # let MEILISEARCH_URL = option_env!("MEILISEARCH_URL").unwrap_or("http://localhost:7700");
1902+ /// # let MEILISEARCH_API_KEY = option_env!("MEILISEARCH_API_KEY").unwrap_or("masterKey");
1903+ /// #
1904+ /// # futures::executor::block_on(async move {
1905+ /// # let client = Client::new(MEILISEARCH_URL, Some(MEILISEARCH_API_KEY));
1906+ /// # client.create_index("reset_embedders", None).await.unwrap().wait_for_completion(&client, None, None).await.unwrap();
1907+ /// let mut index = client.index("reset_embedders");
1908+ ///
1909+ /// let task = index.reset_embedders().await.unwrap();
1910+ /// # index.delete().await.unwrap().wait_for_completion(&client, None, None).await.unwrap();
1911+ /// # });
1912+ /// ```
1913+ #[ cfg( feature = "experimental-vector-search" ) ]
1914+ pub async fn reset_embedders ( & self ) -> Result < TaskInfo , Error > {
1915+ request :: < ( ) , ( ) , TaskInfo > (
1916+ & format ! (
1917+ "{}/indexes/{}/settings/embedders" ,
1918+ self . client. host, self . uid
1919+ ) ,
1920+ self . client . get_api_key ( ) ,
1921+ Method :: Delete { query : ( ) } ,
1922+ 202 ,
1923+ )
1924+ . await
1925+ }
18501926}
18511927
18521928#[ cfg( test) ]
@@ -1908,6 +1984,24 @@ mod tests {
19081984 assert_eq ! ( faceting, res) ;
19091985 }
19101986
1987+
1988+ #[ cfg( feature = "experimental-vector-search" ) ]
1989+ #[ meilisearch_test]
1990+ async fn test_reset_embedders ( client : Client , index : Index ) {
1991+ let features = crate :: ExperimentalFeatures :: new ( & client)
1992+ . set_vector_store ( true )
1993+ . update ( )
1994+ . await
1995+ . expect ( "could not enable the vector store" ) ;
1996+ assert_eq ! ( features. vector_store, true ) ;
1997+ let task_info = index. reset_embedders ( ) . await . unwrap ( ) ;
1998+ client. wait_for_task ( task_info, None , None ) . await . unwrap ( ) ;
1999+
2000+ let res = index. get_embedders ( ) . await . unwrap ( ) ;
2001+
2002+ assert_eq ! ( HashMap :: new( ) , res) ;
2003+ }
2004+
19112005 #[ meilisearch_test]
19122006 async fn test_get_dictionary ( index : Index ) {
19132007 let dictionary: Vec < String > = vec ! [ ] ;
@@ -2084,6 +2178,28 @@ mod tests {
20842178 assert_eq ! ( expected, res) ;
20852179 }
20862180
2181+ #[ cfg( feature = "experimental-vector-search" ) ]
2182+ #[ meilisearch_test]
2183+ async fn test_set_embedding_settings ( client : Client , index : Index ) {
2184+ let features = crate :: ExperimentalFeatures :: new ( & client)
2185+ . set_vector_store ( true )
2186+ . update ( )
2187+ . await
2188+ . expect ( "could not enable the vector store" ) ;
2189+ assert_eq ! ( features. vector_store, true ) ;
2190+
2191+ let custom_embedder =Embedder :: UserProvided ( CustomEmbedderSettings { dimensions : 2 } ) ;
2192+ let embeddings = HashMap :: from ( [ ( "default" . into ( ) , custom_embedder) ] ) ;
2193+ let settings = Settings :: new ( ) . with_embedders ( embeddings. clone ( ) ) ;
2194+
2195+ let task_info = index. set_settings ( & settings) . await . unwrap ( ) ;
2196+ client. wait_for_task ( task_info, None , None ) . await . unwrap ( ) ;
2197+
2198+ let res = index. get_embedders ( ) . await . unwrap ( ) ;
2199+
2200+ assert_eq ! ( embeddings, res) ;
2201+ }
2202+
20872203 #[ meilisearch_test]
20882204 async fn test_reset_proximity_precision ( index : Index ) {
20892205 let expected = "byWord" . to_string ( ) ;
0 commit comments