Make it work by retrieving content from the index

This commit is contained in:
Clément Renault 2025-05-13 16:35:46 +02:00
parent ac39a436d9
commit 3a71df7b5a
No known key found for this signature in database
GPG Key ID: F250A4C4E3AE5F5F

View File

@ -88,34 +88,36 @@ async fn chat(
let mut response; let mut response;
loop { loop {
let mut tools = chat_completion.tools.get_or_insert_default(); let tools = chat_completion.tools.get_or_insert_default();
tools.push(ChatCompletionToolArgs::default() tools.push(
.r#type(ChatCompletionToolType::Function) ChatCompletionToolArgs::default()
.function(FunctionObjectArgs::default() .r#type(ChatCompletionToolType::Function)
.name("searchInIndex") .function(
.description(DEFAULT_SEARCH_IN_INDEX_TOOL_DESCRIPTION) FunctionObjectArgs::default()
.parameters(json!({ .name("searchInIndex")
"type": "object", .description(&search_in_index_description)
"properties": { .parameters(json!({
"index_uid": { "type": "object",
"type": "string", "properties": {
"enum": ["main"], "index_uid": {
"description": DEFAULT_SEARCH_IN_INDEX_INDEX_PARAMETER_TOOL_DESCRIPTION, "type": "string",
}, "enum": ["main"],
"q": { "description": search_in_index_index_description,
"type": ["string", "null"], },
"description": DEFAULT_SEARCH_IN_INDEX_Q_PARAMETER_TOOL_DESCRIPTION, "q": {
} "type": ["string", "null"],
}, "description": search_in_index_q_param_description,
"required": ["index_uid", "q"], }
"additionalProperties": false, },
})) "required": ["index_uid", "q"],
.strict(true) "additionalProperties": false,
}))
.strict(true)
.build()
.unwrap(),
)
.build() .build()
.unwrap(), .unwrap(),
)
.build()
.unwrap()
); );
response = dbg!(client.chat().create(chat_completion.clone()).await.unwrap()); response = dbg!(client.chat().create(chat_completion.clone()).await.unwrap());
@ -137,7 +139,7 @@ async fn chat(
for call in meili_calls { for call in meili_calls {
let SearchInIndexParameters { index_uid, q } = let SearchInIndexParameters { index_uid, q } =
serde_json::from_str(dbg!(&call.function.arguments)).unwrap(); serde_json::from_str(&call.function.arguments).unwrap();
let mut query = SearchQuery { let mut query = SearchQuery {
q, q,
@ -145,6 +147,7 @@ async fn chat(
semantic_ratio: SemanticRatio::default(), semantic_ratio: SemanticRatio::default(),
embedder: EMBEDDER_NAME.to_string(), embedder: EMBEDDER_NAME.to_string(),
}), }),
limit: 20,
..Default::default() ..Default::default()
}; };
@ -241,10 +244,15 @@ fn format_documents(index: &Index, documents: impl Iterator<Item = Document>) ->
quantized: _, quantized: _,
} = config; } = config;
#[derive(Serialize)]
struct Doc<T: Serialize> {
doc: T,
}
let template = liquid::ParserBuilder::with_stdlib().build().unwrap().parse(&template).unwrap(); let template = liquid::ParserBuilder::with_stdlib().build().unwrap().parse(&template).unwrap();
documents documents
.map(|doc| { .map(|doc| {
let object = liquid::to_object(&doc).unwrap(); let object = liquid::to_object(&Doc { doc }).unwrap();
template.render(&object).unwrap() template.render(&object).unwrap()
}) })
.collect() .collect()