2024-06-11 16:03:45 +02:00
use meili_snap ::{ json_string , snapshot } ;
use crate ::common ::{ GetAllDocumentsOptions , Server } ;
use crate ::json ;
use crate ::vector ::generate_default_user_provided_documents ;
2024-10-02 11:20:29 +02:00
#[ actix_rt::test ]
async fn field_unavailable_for_source ( ) {
let server = Server ::new ( ) . await ;
let index = server . index ( " doggo " ) ;
let ( value , code ) = server . set_features ( json! ( { " vectorStore " : true } ) ) . await ;
snapshot! ( code , @ " 200 OK " ) ;
snapshot! ( value , @ r ###"
{
" vectorStore " : true ,
" metrics " : false ,
" logsRoute " : false ,
" editDocumentsByFunction " : false ,
" containsFilter " : false
}
" ###);
let ( response , code ) = index
. update_settings ( json! ( {
" embedders " : { " manual " : { " source " : " userProvided " , " documentTemplate " : " {{doc.documentTemplate}} " } } ,
} ) )
. await ;
snapshot! ( code , @ " 400 Bad Request " ) ;
snapshot! ( response , @ r ###"
{
" message " : " `.embedders.manual`: Field `documentTemplate` unavailable for source `userProvided` (only available for sources: `huggingFace`, `openAi`, `ollama`, `rest`). Available fields: `source`, `dimensions`, `distribution`, `binaryQuantized` " ,
" code " : " invalid_settings_embedders " ,
" type " : " invalid_request " ,
" link " : " https://docs.meilisearch.com/errors#invalid_settings_embedders "
}
" ###);
let ( response , code ) = index
. update_settings ( json! ( {
" embedders " : { " default " : { " source " : " openAi " , " revision " : " 42 " } } ,
} ) )
. await ;
snapshot! ( code , @ " 400 Bad Request " ) ;
snapshot! ( response , @ r ###"
{
" message " : " `.embedders.default`: Field `revision` unavailable for source `openAi` (only available for sources: `huggingFace`). Available fields: `source`, `model`, `apiKey`, `documentTemplate`, `dimensions`, `distribution`, `url`, `binaryQuantized` " ,
" code " : " invalid_settings_embedders " ,
" type " : " invalid_request " ,
" link " : " https://docs.meilisearch.com/errors#invalid_settings_embedders "
}
" ###);
}
2024-06-11 16:03:45 +02:00
#[ actix_rt::test ]
async fn update_embedder ( ) {
let server = Server ::new ( ) . await ;
let index = server . index ( " doggo " ) ;
let ( value , code ) = server . set_features ( json! ( { " vectorStore " : true } ) ) . await ;
snapshot! ( code , @ " 200 OK " ) ;
snapshot! ( value , @ r ###"
{
" vectorStore " : true ,
" metrics " : false ,
2024-07-09 11:15:57 +02:00
" logsRoute " : false ,
2024-07-17 11:13:37 +02:00
" editDocumentsByFunction " : false ,
" containsFilter " : false
2024-06-11 16:03:45 +02:00
}
" ###);
let ( response , code ) = index
. update_settings ( json! ( {
" embedders " : { " manual " : { } } ,
} ) )
. await ;
snapshot! ( code , @ " 202 Accepted " ) ;
server . wait_task ( response . uid ( ) ) . await ;
let ( response , code ) = index
. update_settings ( json! ( {
" embedders " : {
" manual " : {
" source " : " userProvided " ,
" dimensions " : 2 ,
}
} ,
} ) )
. await ;
snapshot! ( code , @ " 202 Accepted " ) ;
let ret = server . wait_task ( response . uid ( ) ) . await ;
snapshot! ( ret , @ r ###"
{
2024-07-18 16:32:50 +02:00
" uid " : " [uid] " ,
2024-06-11 16:03:45 +02:00
" indexUid " : " doggo " ,
2024-06-12 14:49:38 +02:00
" status " : " succeeded " ,
2024-06-11 16:03:45 +02:00
" type " : " settingsUpdate " ,
" canceledBy " : null ,
" details " : {
" embedders " : {
" manual " : {
" source " : " userProvided " ,
" dimensions " : 2
}
}
} ,
2024-06-12 14:49:38 +02:00
" error " : null ,
2024-06-11 16:03:45 +02:00
" duration " : " [duration] " ,
" enqueuedAt " : " [date] " ,
" startedAt " : " [date] " ,
" finishedAt " : " [date] "
}
" ###);
}
#[ actix_rt::test ]
async fn reset_embedder_documents ( ) {
let server = Server ::new ( ) . await ;
let index = generate_default_user_provided_documents ( & server ) . await ;
let ( response , code ) = index . delete_settings ( ) . await ;
snapshot! ( code , @ " 202 Accepted " ) ;
server . wait_task ( response . uid ( ) ) . await ;
// Make sure the documents are still present
2024-06-13 17:16:41 +02:00
let ( documents , _code ) = index
. get_all_documents ( GetAllDocumentsOptions {
limit : None ,
offset : None ,
retrieve_vectors : false ,
fields : None ,
} )
. await ;
snapshot! ( json_string! ( documents ) , @ r ###"
{
" results " : [
{
" id " : 0 ,
" name " : " kefir "
} ,
{
" id " : 1 ,
" name " : " echo "
} ,
{
" id " : 2 ,
" name " : " billou "
} ,
{
" id " : 3 ,
" name " : " intel "
} ,
{
" id " : 4 ,
" name " : " max "
}
] ,
" offset " : 0 ,
" limit " : 20 ,
" total " : 5
}
" ###);
// Make sure we are still able to retrieve their vectors
let ( documents , _code ) = index
. get_all_documents ( GetAllDocumentsOptions { retrieve_vectors : true , .. Default ::default ( ) } )
. await ;
2024-06-11 16:03:45 +02:00
snapshot! ( json_string! ( documents ) , @ r ###"
{
" results " : [
{
" id " : 0 ,
2024-06-12 18:13:34 +02:00
" name " : " kefir " ,
" _vectors " : {
" manual " : {
" embeddings " : [
[
0.0 ,
0.0 ,
0.0
]
] ,
" regenerate " : false
}
}
2024-06-11 16:03:45 +02:00
} ,
{
" id " : 1 ,
2024-06-12 18:13:34 +02:00
" name " : " echo " ,
" _vectors " : {
" manual " : {
" embeddings " : [
[
1.0 ,
1.0 ,
1.0
]
] ,
" regenerate " : false
}
}
2024-06-11 16:03:45 +02:00
} ,
{
" id " : 2 ,
2024-06-12 18:13:34 +02:00
" name " : " billou " ,
" _vectors " : {
" manual " : {
" embeddings " : [
[
2.0 ,
2.0 ,
2.0
] ,
[
2.0 ,
2.0 ,
3.0
]
] ,
" regenerate " : false
}
}
2024-06-11 16:03:45 +02:00
} ,
{
" id " : 3 ,
2024-06-12 18:13:34 +02:00
" name " : " intel " ,
" _vectors " : {
" manual " : {
" embeddings " : [
[
3.0 ,
3.0 ,
3.0
]
] ,
" regenerate " : false
}
}
2024-06-11 16:03:45 +02:00
} ,
{
" id " : 4 ,
2024-06-12 18:13:34 +02:00
" name " : " max " ,
" _vectors " : {
" manual " : {
" embeddings " : [
[
4.0 ,
4.0 ,
4.0
] ,
[
4.0 ,
4.0 ,
5.0
]
] ,
" regenerate " : false
}
}
2024-06-11 16:03:45 +02:00
}
] ,
" offset " : 0 ,
" limit " : 20 ,
" total " : 5
}
" ###);
// Make sure the arroy DB has been cleared
2024-09-17 16:30:04 +02:00
let ( documents , _code ) =
index . search_post ( json! ( { " vector " : [ 1 , 1 , 1 ] , " hybrid " : { " embedder " : " default " } } ) ) . await ;
2024-06-11 16:03:45 +02:00
snapshot! ( json_string! ( documents ) , @ r ###"
{
" message " : " Cannot find embedder with name `default`. " ,
" code " : " invalid_embedder " ,
" type " : " invalid_request " ,
" link " : " https://docs.meilisearch.com/errors#invalid_embedder "
}
" ###);
}